<script>
import {
  downLoadObjectFile, getProvisionalDataList, provisionalDataAlterHandle,
  queryFileId,
  removeExternalPart,
  saveExternalPart, savePartInfoByExcel,
  selectExternalPartList, selectExternalPartPage,
  selectUnitList,
  updateExternalPart
} from '../../../api/part/external'
import Chooselist from '@/views/modules/common/Chooselist_eam'
import dayjs from 'dayjs'
import PictureModule from './picture/picture.vue'
import LinkedCustomer from './customer/linkedCustomer.vue'
import {getExternalPartCustomerList} from '../../../api/part/externalPartCustomer'
import {getExternalPartPictureList} from '../../../api/part/externalPartPicture'
import LinkedManufacturer from './manufacturer/linkedManufacturer.vue'
import {getExternalPartManufacturerList} from '../../../api/part/externalPartManufacturer'
import {getTableDefaultListLanguage, getTableUserListLanguage} from '../../../api/table'
import {Decimal} from 'decimal.js'
import {getCategoryList} from '../../../api/category/category'
import {countryList} from '../../../api/dict/country'
import {getSiteDetail} from '../../../api/factory/site'
import LabelTemplate from './template/labelTemplate.vue'

let part = {
  site: '',
  partNo: '',
  partDesc: '',
  umId: '',
  freeInfo: '',
  freeInfo2: '',
  rev: '',
  active: '',
  tradingMark: 'N',
  packingWeight: undefined,
  weightUmId: undefined,
  moldCode: '',
  category: '',
  qtyPerCarton: 0,
  qtyPerRoll: 0,
  rollsPerCarton: 0,
  printStr1: '',
  printStr2: '',
  printStr3: '',
  rollLabelFlag: 'Y',
}
export default {
  name: 'ExternalPart',
  components: {LabelTemplate, LinkedManufacturer, LinkedCustomer, PictureModule,Chooselist},
  props: {
    height: {
      type: Number,
      default: 310
    },
    ofComponents: {
      type: Boolean,
      default: false
    }
  },
  data(){
    return{
      // 导出
      exportData: [],
      exportName: 'Part Info' + this.dayjs().format('YYYYMMDDHHmmss'),
      exportHeader: [],
      exportFooter: [],
      resultList: [],
      // 导入
      visible: false,
      fileList: [],
      provisionalDataVisible: false,
      provisionalDataList: [],
      isLoading: false,
      isLoading2: false,
      isLoading3: false,
      no: 1,
      size: 50,
      total: 0,
      part: {
        ...part
      },
      savePart: {
        ...part,
        active: 'Y',
      },
      tempData:{
        orderRef1: 'partInfo',
        orderRef2: 'partInfoFormat',
        site: this.$store.state.user.site,
      },
      partCategoryList: [],
      category: {},
      partRules: {
        partNo: [{required: true, message: 'Please input Part No', trigger: ['blur', 'change']}],
        partDesc: [{required: true, message: 'Please input Part Description', trigger: ['blur', 'change']}],
        umId: [{required: true, message: 'Please select UM', trigger: ['blur', 'change']}],
        rev: [{required: true, message: 'Please select Rev No', trigger: ['blur', 'change']}],
        moldCode: [{required: true, message: 'Please select Mold Code', trigger: ['blur', 'change']}],
        qtyPerCarton: [{required: true, message: 'Please input Qty Per Carton', trigger: ['blur', 'change']}],
        qtyPerRoll: [{required: true, message: 'Please input Qty Per Roll', trigger: ['blur', 'change']}],
        rollsPerCarton: [{required: true, message: 'Please input Rolls Per Carton', trigger: ['blur', 'change']}],
        freeInfo2: [{required: true, message: 'Please select OOC', trigger: ['blur', 'change']}],
      },
      savePartVisible: false,
      partTableLoading: false,
      partList: [],
      unitList: [],
      columnList: [
        {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TablePartNo',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'partNo',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Part No',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TablePartDesc',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'partDesc',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Part Description',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 140
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableRev',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'rev',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'REV No',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableCategory',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'category',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Part Category',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 140
        },
        {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableUmName',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'moldCode',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Mold Code',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableUmName',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'manufacturer',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Manufacturer',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 120
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableUmName',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'umName',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'UM',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 60
        },
        {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableQtyPerRoll',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'qtyPerRoll',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Qty Per Roll',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 120
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableRollsPerCarton',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'rollsPerCarton',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Rolls Per Carton',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 120
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableQtyPerCarton',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'qtyPerCarton',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Qty Per Carton',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 120
        },
        {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableFreeInfo',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'freeInfo',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Free Info',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 120
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableFreeInfo2',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'freeInfo2',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Free Info2',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 120
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableTradingMark',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'tradingMark',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Trading Mark',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 120
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TablePackingWeight',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'packingWeight',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Packing Weight',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 120
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableWeightUM',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'weightUmName',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Weight UM',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 120
        },
        {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableActive',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'active',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Active',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableCreateBy',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'createBy',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Created By',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableCreateTime',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'createTime',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Created Time',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 140
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableUpdateBy',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'updateBy',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Updated By',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002TableUpdateTime',
          tableId: '10002Table',
          tableName: 'Part Table',
          columnProp: 'updateTime',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Updated Time',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 140
        },
      ],
      pictureColumnList: [
        {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table22PictureNo',
          tableId: '10002Table2',
          tableName: '外部料号图片信息表',
          columnProp: 'certificationNo',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Certification Code',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table22PictureDesc',
          tableId: '10002Table2',
          tableName: '外部料号图片信息表',
          columnProp: 'pictureDesc',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Certification Desc',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 180
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table22CreateBy',
          tableId: '10002Table2',
          tableName: '外部料号图片信息表',
          columnProp: 'createBy',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Created By',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table22CreateTime',
          tableId: '10002Table2',
          tableName: '外部料号图片信息表',
          columnProp: 'createTime',
          headerAlign: 'center',
          align: 'center',
          columnLabel: 'Created Time',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 180
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table22UpdateBy',
          tableId: '10002Table2',
          tableName: '外部料号图片信息表',
          columnProp: 'updateBy',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Updated By',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table22UpdateTime',
          tableId: '10002Table2',
          tableName: '外部料号图片信息表',
          columnProp: 'updateTime',
          headerAlign: 'center',
          align: 'center',
          columnLabel: 'Updated Time',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 180
        },
      ],
      customerColumnList: [
        {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table3CustomerNo',
          tableId: '10002Table3',
          tableName: '外部料号客户信息表',
          columnProp: 'customerNo',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Customer No',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table3CustomerName',
          tableId: '10002Table3',
          tableName: '外部料号客户信息表',
          columnProp: 'customerName',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Customer Name',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 120
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table3CreateTime',
          tableId: '10002Table3',
          tableName: '外部料号客户信息表',
          columnProp: 'createTime',
          headerAlign: 'center',
          align: 'center',
          columnLabel: 'Created Time',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 140
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table3CreateBy',
          tableId: '10002Table3',
          tableName: '外部料号客户信息表',
          columnProp: 'createBy',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Created By',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table3UpdateTime',
          tableId: '10002Table3',
          tableName: '外部料号客户信息表',
          columnProp: 'updateTime',
          headerAlign: 'center',
          align: 'center',
          columnLabel: 'Updated Time',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 140
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table3UpdateBy',
          tableId: '10002Table3',
          tableName: '外部料号客户信息表',
          columnProp: 'updateBy',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Updated By',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        },
      ],
      manufacturerColumnList: [
        {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table4ManufacturerNo',
          tableId: '10002Table4',
          tableName: '外部料号供应商信息表',
          columnProp: 'manufacturerNo',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Manufacturer No',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table4ManufacturerName',
          tableId: '10002Table4',
          tableName: '外部料号供应商信息表',
          columnProp: 'manufacturerName',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Manufacturer Name',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 120
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table4CreateTime',
          tableId: '10002Table4',
          tableName: '外部料号供应商信息表',
          columnProp: 'createTime',
          headerAlign: 'center',
          align: 'center',
          columnLabel: 'Created Time',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 140
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table4CreateBy',
          tableId: '10002Table4',
          tableName: '外部料号供应商信息表',
          columnProp: 'createBy',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Created By',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table4UpdateTime',
          tableId: '10002Table4',
          tableName: '外部料号供应商信息表',
          columnProp: 'updateTime',
          headerAlign: 'center',
          align: 'center',
          columnLabel: 'Updated Time',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 140
        }, {
          userId: this.$store.state.user.name,
          functionId: 10002,
          serialNumber: '10002Table4UpdateBy',
          tableId: '10002Table4',
          tableName: '外部料号供应商信息表',
          columnProp: 'updateBy',
          headerAlign: 'center',
          align: 'left',
          columnLabel: 'Updated By',
          columnHidden: false,
          columnImage: false,
          columnSortable: false,
          sortLv: 10,
          status: true,
          fixed: '',
          columnWidth: 80
        },
      ],
      rules: {
        site: [
          {
            required: true,
            message: ' ',
            trigger: ['blur', 'change']
          }
        ],
      },
      activeName: 'partPicture',
      currentPart: {},
      externalPartCustomerList: [],
      pictureList: [],
      externalPartManufacturerList: [],
      base64List: [],
      countryList: [],
    }
  },
  watch: {
    currentPart (newVal, oldVal) {
      if (!this.ofComponents) {
        // 调用 子组件信息查询
        this.getExternalPartCustomerList()
        this.getExternalPartPictureList()
        this.getExternalPartManufacturerList()
      }
    },
    'savePart.partNo' (newVal, oldVal) {
      this.savePart.partNo = newVal.toUpperCase()
    },
    'savePart.category' (newVal, oldVal) {
      const category = this.partCategoryList.find((item) => item.categoryValue === newVal)
      if (category) {
        // this.savePart.manufacturerRequired = category.manufacturerRequired;
        // this.savePart.moldCodeRequired = category.moldCodeRequired;
        // this.savePart.serialNumberRequired = category.serialNumberRequired;
        // this.savePart.rollLabelRequired = category.rollLabelRequired;
        // if (this.savePart.serialNumberRequired === 'Y'){
        //   this.savePart.qtyPerRoll = 1;
        //   this.savePart.rollsPerCarton = 1;
        // }
        // if (category.showCartonQtyPerRoll === 'N'){
        //   this.savePart.qtyPerRoll = 1;
        // }
        // if (category.showCartonRollsPerCarton === 'N'){
        //   this.savePart.rollsPerCarton = 1;
        // }
        // this.partRules.rollsPerCarton[0].message = `Please input ${category.qtyPerRollPart}`
        // this.savePart.qtyPerCarton = this.qtyPerCarton();
        this.category = JSON.parse(JSON.stringify(category))
      }
    },
    'part.partNo' (newVal, oldVal) {
      this.part.partNo = newVal.toUpperCase()
    },
    'savePart.qtyPerRoll' (newVal, oldVal) {
      this.savePart.qtyPerCarton = this.qtyPerCarton()
    },
    'savePart.rollsPerCarton' (newVal, oldVal) {
      this.savePart.qtyPerCarton = this.qtyPerCarton()
    },
  },
  methods: {

    // 获取基础数据列表S
    getBaseList (val,type) {
      this.tagNo = val
      this.$nextTick(() => {
        let strVal = ''
        let conSql = ''
        if (val === 93 ) {
          strVal = this.tempData.site ? this.tempData.site : ''
        }
        this.$refs.baseList.init(val, strVal,conSql)
      })
    },

    /* 列表方法的回调 */
    getBaseData (val) {
      if (this.tagNo === 93) {
        this.tempData.site = val.SiteID
      }
    },

    getExternalPartPictureList (val) {
      let params = {
        partNo: this.currentPart.partNo,
        site: this.currentPart.site,
        pictureClassify: 'BoxPicture',
      }
      getExternalPartPictureList(params).then(({data}) => {
        if (data && data.code === 0) {
          this.pictureList = data.rows
          if (val === true) {
            this.$nextTick(() => {
              this.$refs.picture.handleBasePictureList()
            })
          }
        } else {
          this.$message.warning(data.msg)
        }
      }).catch((error) => {
        this.$message.error(error)
      })
    },
    rowPartStyle ({row}) {
      if (row.partNo === this.currentPart.partNo) {
        return {
          background: 'rgb(232,246,246)',
        }
      }
    },
    selectUnitList () {
      selectUnitList().then(({data}) => {
        if (data && data.code === 0) {
          this.unitList = data.rows
          if (this.unitList.length > 0) {
            this.savePart.umId = this.unitList[0].umId
          }
        } else {
          this.$message.warning(data.msg)
        }
      }).catch((error) => {
        this.$message.error(error)
      })
    },
    selectExternalPartList () {
      let params = {
        ...this.part,
        site: this.$store.state.user.site,
        provisionalData: 'N',
      }
      selectExternalPartList(params).then(({data}) => {
        if (data && data.code === 0) {
          this.partList = data.rows
          if (this.partList.length > 0 && !this.ofComponents) {
            this.currentPart = {...this.partList[0]}
          }
        } else {
          this.$message.warning(data.msg)
        }
      }).catch((error) => {
        this.$message.error(error)
      })
    },
    handleSave () {
      if (this.savePartVisible) {
        if ((this.savePart.packingWeight || this.savePart.packingWeight == 0) && !this.savePart.weightUmId) {
          this.$message.warning('Please select Weight UM')
          return
        }
        this.$refs.savePartForm.validate((valid, obj) => {
          if (valid) {
            if (this.savePart.qtyPerCarton === 0) {
              this.$message.warning('Qty Per Carton can not be 0')
              return
            }
            let params = {
              ...this.savePart,
              site: this.$store.state.user.site,
              createBy: this.$store.state.user.name,
              createTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
            }
            saveExternalPart(params).then(({data}) => {
              if (data && data.code === 0) {
                this.handleSelectExternalPartPage()
                this.savePartVisible = false
                this.$message.success(data.msg)
              } else {
                this.$message.warning(data.msg)
              }
            }).catch((error) => {
              this.$message.error(error)
            })
          } else {
            for (let i = 0; i < Object.keys(obj).length; i++) {
              this.$message.warning(obj[Object.keys(obj)[i]][0].message)
              break
            }
          }
        })
      } else {
        this.savePart = {
          ...part,
          active: 'Y',
          umId: this.unitList.length > 0 ? this.unitList[0].umId : '',
          category: '',
          manufacturerRequired: 'N',
          moldCodeRequired: 'N',
          serialNumberRequired: 'N',
        }
        this.getCountryList()
        this.savePart.freeInfo2 = this.defaultCountry
        this.savePart.category = this.partCategoryList.length > 0 ? this.partCategoryList[0].categoryValue : ''
        this.savePartVisible = true
      }
    },
    closeSavePart () {
      this.savePart = {
        ...part,
        active: 'Y',
      }
      if (this.unitList.length > 0) {
        this.savePart.umId = this.unitList[0].umId
      }
      this.$refs.savePartForm.resetFields()
    },
    removeExternalPart (row) {
      removeExternalPart(row).then(({data}) => {
        if (data && data.code === 0) {
          this.selectExternalPartList()
          this.$message.success(data.msg)
        } else {
          this.$message.warning(data.msg)
        }
      }).catch((error) => {
        this.$message.error(error)
      })
    },
    handleRowClick (row, column, event, type) {
      this.currentPart = {...row}
      if (type === 0) {
        this.getCountryList()
        this.savePart = {...row}
        this.savePartVisible = true
      }
    },
    handleDblRowClick (row, column, event, type) {
      if (this.ofComponents) {
        this.$emit('rowClick', row)
      } else {
        this.currentPart = {...row}
        if (type === 0) {
          this.savePart = {...row}
          this.savePartVisible = true
        }
      }
    },
    handleUpdate () {
      if ((this.savePart.packingWeight || this.savePart.packingWeight == 0) && !this.savePart.weightUmId) {
        this.$message.warning('Please select Weight UM')
        return
      }
      this.$refs.savePartForm.validate((valid, obj) => {
        if (valid) {
          if (this.savePart.qtyPerCarton === 0) {
            this.$message.warning('Qty Per Carton can not be 0')
            return
          }
          let params = {
            ...this.savePart,
            site: this.$store.state.user.site,
            createBy: undefined,
            createTime: undefined,
            updateBy: this.$store.state.user.name,
            updateTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
          }
          updateExternalPart(params).then(({data}) => {
            if (data && data.code === 0) {
              this.handleSelectExternalPartPage()
              this.savePartVisible = false
              this.$message.success(data.msg)
            } else {
              this.$message.warning(data.msg)
            }
          }).catch((error) => {
            this.$message.error(error)
          })
        } else {
          for (let i = 0; i < Object.keys(obj).length; i++) {
            this.$message.warning(obj[Object.keys(obj)[i]][0].message)
            break
          }
        }
      })
    },
    getExternalPartCustomerList () {
      let params = {
        partNo: this.currentPart.partNo,
        site: this.currentPart.site,
      }
      getExternalPartCustomerList(params).then(({data}) => {
        if (data && data.code === 0) {
          this.externalPartCustomerList = data.rows
        } else {
          this.$message.warning(data.msg)
        }
      }).catch((error) => {
        this.$message.error(error)
      })
    },
    getExternalPartManufacturerList () {
      let params = {
        partNo: this.currentPart.partNo,
        site: this.currentPart.site,
      }
      getExternalPartManufacturerList(params).then(({data}) => {
        if (data && data.code === 0) {
          this.externalPartManufacturerList = data.rows
        } else {
          this.$message.warning(data.msg)
        }
      }).catch((error) => {
        this.$message.error(error)
      })
    },
    async convertToBase64 (fileUrls) {
      this.base64List = []
      for (const fileUrl of fileUrls) {
        const base64Url = await this.getFileAsBase64(fileUrl)
        this.base64List.push(base64Url)
      }
    },
    getFileAsBase64 (fileUrl) {
      return new Promise((resolve, reject) => {
        const img = new Image()
        img.crossOrigin = 'Anonymous'
        img.src = fileUrl
        img.onload = () => {
          const canvas = document.createElement('canvas')
          const ctx = canvas.getContext('2d')
          canvas.width = img.width
          canvas.height = img.height
          ctx.drawImage(img, 0, 0)
          const base64data = canvas.toDataURL('image/jpeg')
          resolve(base64data)
        }
        img.onerror = (error) => {
          reject(error)
        }
      })
    },
    async getTableUserColumn (tableId, columnId) {
      let queryTableUser = {
        userId: this.$store.state.user.name,
        functionId: this.$route.meta.menuId,
        tableId: tableId,
        status: true,
        languageCode: this.$i18n.locale
      }
      await getTableUserListLanguage(queryTableUser).then(({data}) => {
        if (data.rows.length > 0) {
          this.caseTable(data.rows, columnId)
        } else {
          this.getColumnList(tableId, columnId)
        }
      })
    },

// 获取 tableDefault 列
    async getColumnList (tableId, columnId) {
      let queryTable = {
        functionId: this.$route.meta.menuId,
        tableId: tableId,
        languageCode: this.$i18n.locale
      }
      await getTableDefaultListLanguage(queryTable).then(({data}) => {
        if (!data.rows.length === 0) {
          this.caseTable(data.rows, columnId)
        } else {

        }
      })
    },
    caseTable (list, columnId) {
      if (list.length > 0) {
        switch (columnId) {
          case 1:
            this.columnList = list
            break
          case 2:
            this.pictureColumnList = list
            break
          case 3:
            this.customerColumnList = list
            break
          case 4:
            this.manufacturerColumnList = list
            break
        }
      }
    },
    qtyPerCarton () {
      return new Decimal(this.savePart.qtyPerRoll).mul(this.savePart.rollsPerCarton).toNumber()
    },
    getCategoryList () {
      let params = {}
      getCategoryList(params).then(({data}) => {
        if (data && data.code === 0) {
          this.partCategoryList = data.rows
        } else {
          this.$message.warning(data.msg)
        }
      }).catch((error) => {
        this.$message.error(error)
      })
    },
    changeQtyRollCarton () {
      this.savePart.qtyPerRoll = this.savePart.qtyPerCarton
    },
    getCountryList () {
      let params = {}
      countryList(params).then(({data}) => {
        if (data && data.code === 0) {
          this.countryList = data.rows
        } else {
          this.$message.warning(data.msg)
        }
      }).catch((error) => {
        this.$message.error(error)
      })
    },
    getUserSiteDefaultCountry () {
      let params = this.$store.state.user.site
      getSiteDetail(params).then(({data}) => {
        if (data && data.code === 0) {
          if (data.row && data.row.defaultCountry) {
            this.defaultCountry = data.row.defaultCountry
          }
        } else {
          this.$message.warning(data.msg)
        }
      }).catch((error) => {
        this.$message.error(error)
      })
    },
    handleSelectExternalPartPage () {
      let params = {
        ...this.part,
        site: this.$store.state.user.site,
        no: this.no,
        size: this.size,
        provisionalData: 'N',
      }
      selectExternalPartPage(params).then(({data}) => {
        if (data && data.code === 0) {
          this.partList = data.rows
          if (this.partList.length > 0 && !this.ofComponents) {
            this.currentPart = {...this.partList[0]}
          }
          this.total = data.total
        } else {
          this.$message.warning(data.msg)
        }
      }).catch((error) => {
        this.$message.error(error)
      })
    },
    handleSizeChange (val) {
      this.size = val
      this.handleSelectExternalPartPage()
    },
    handleCurrentChange (val) {
      this.no = val
      this.handleSelectExternalPartPage()
    },
    changeCategory (val) {
      const category = this.partCategoryList.find((item) => item.categoryValue === val)
      if (category) {
        this.savePart.manufacturerRequired = category.manufacturerRequired
        this.savePart.moldCodeRequired = category.moldCodeRequired
        this.savePart.serialNumberRequired = category.serialNumberRequired
        this.savePart.rollLabelRequired = category.rollLabelRequired
        if (this.savePart.serialNumberRequired === 'Y') {
          this.savePart.qtyPerRoll = 1
          this.savePart.rollsPerCarton = 1
        }
        if (category.showCartonQtyPerRoll === 'N') {
          this.savePart.qtyPerRoll = 1
        }
        if (category.showCartonRollsPerCarton === 'N') {
          this.savePart.rollsPerCarton = 1
        }
        this.partRules.rollsPerCarton[0].message = `Please input ${category.qtyPerRollPart}`
        this.savePart.qtyPerCarton = this.qtyPerCarton()
        this.category = JSON.parse(JSON.stringify(category))
      }
    },
    // ======== 导出相关方法 ========
    /**
     * 导出excel
     */
    async createExportData () {
      let params = {
        ...this.part,
        site: this.$store.state.user.site,
        no:1,
        size:-1,
      }
      await selectExternalPartPage(params).then(({data}) => {
        this.resultList = data.rows
      })
      return this.resultList
    },

    startDownload () {},

    finishDownload () {},

    fields () {
      let json = '{'
      this.columnList.forEach((item, index) => {
        if (index == this.columnList.length - 1) {
          json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"'
        } else {
          json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"' + ','
        }
      })
      json += '}'
      let s = eval('(' + json + ')')
      return s
    },

    partUpload () {
      this.visible = true
    },

    // 关闭modal
    closeUploadDialog () {
      this.fileList = []
      // 清空文件上传记录
      this.$refs.uploadFile.clearFiles()
      // 关闭当前的页面
      this.visible = false
    },

    // 保修当前的数据
    saveUploadFile () {
      // 判断文件是否上传
      if (null == this.fileList || 0 === this.fileList.length) {
        this.$message.error("Please upload the file first!")
        return false
      }
        // 提示将删除之前的数据
        this.$confirm('Do you confirm the upload? If the Part Info already exists, we will delete it!', 'Warning', {
          confirmButtonText: 'OK',
          cancelButtonText: 'Cancel',
          type: 'warning'
        }).then(() => {
          // 判断文件是否上传
          if (null == this.fileList || 0 === this.fileList.length) {
            this.$message.error("请先上传文件!")
            return false
          }
          const formData = new FormData()
          formData.append("file", this.fileList[0].raw)
          formData.append("createBy", this.$store.state.user.name)
          formData.append("site", this.tempData.site.toString())
          this.isLoading = true
          savePartInfoByExcel(formData).then(({data}) => {
            if (data.code === 0) {
              // 关闭窗口并刷新页面
              this.provisionalDataDialogHandle()
            } else {
              this.isLoading = false
              this.$message.warning(data.msg)
            }
          })
        }).catch(() => {
          this.$message({
            type: 'info',
            message: 'Cancel upload'
          })
        });
    },

    provisionalDataDialogHandle () {
      getProvisionalDataList().then(({data}) => {
        if (data.code === 0) {
          this.provisionalDataList = data.rows
          this.isLoading = false
          this.provisionalDataVisible = true
        } else {
          this.isLoading = false
          this.$message.warning(data.msg)
        }
      })
    },

    // 上传之前
    beforeUploadHandle (file) {
      let extName = file[0].name.substring(file[0].name.lastIndexOf('.')).toLowerCase()
      if (!(extName === '.xlsx' || extName === '.xls')) {
        this.$message.error('数据导入失败，请选择正确的xlsx模板文件')
        return false
      }
    },

    // 选择上传文件时
    onRemove(file, fileList){
      this.fileList = fileList
    },
    onChange(file, fileList){
      this.fileList = fileList
    },

    // 下载
    async downloadFile () {
      let file = {
        id: 0,
        fileName: ''
      }
      let tempData = this.tempData
      await queryFileId(tempData).then(({data}) => {
        if (data && data.code === 0) {
          file.id = data.data.id
          file.fileName = data.data.fileName
        } else {
          this.$alert(data.msg, '错误', {
            confirmButtonText: '确定'
          })
        }
      })
      await downLoadObjectFile(file).then(({data}) => {
        // 不限制文件下载类型
        const blob = new Blob([data], {type: "application/octet-stream"})
        // 下载文件名称
        const fileName = file.fileName
        // a标签下载
        const linkNode = document.createElement('a')
        // a标签的download属性规定下载文件的名称
        linkNode.download = fileName
        linkNode.style.display = 'none'
        // 生成一个Blob URL
        linkNode.href = URL.createObjectURL(blob)
        document.body.appendChild(linkNode)
        // 模拟在按钮上的一次鼠标单击
        linkNode.click()
        // 释放URL 对象
        URL.revokeObjectURL(linkNode.href)
        document.body.removeChild(linkNode)
      })
    },

    provisionalDataAlterHandle (type) {
      if (type === 1){
        this.isLoading2 = true
      } else if (type === 2){
        this.isLoading3 = true
      }
      let inData={
        provisionalDataList: this.provisionalDataList,
        type: type
      }
      provisionalDataAlterHandle(inData).then(({data}) => {
        if (data.code === 0) {
          if (type === 1) {
            this.$message.success(data.msg)
            this.provisionalDataVisible = false
            this.visible = false
            this.handleSelectExternalPartPage()
            this.isLoading2 = false
          } else if (type === 2) {
            this.$message.warning('Import cancelled!')
            this.provisionalDataVisible = false
            this.isLoading3 = false
          }
        } else {
          this.$message.warning(data.msg)
          if (type === 1) {
            this.isLoading2 = false
          } else if (type === 2) {
            this.isLoading3 = false
          }
        }
      })
    },
  },
  computed: {},
  activated () {
    if (this.$route.query.site && this.$route.query.partNo) {
      this.part.site = this.$route.query.site
      this.part.partNo = this.$route.query.partNo
      this.handleSelectExternalPartPage()
    }
  },
  created () {
    this.provisionalDataAlterHandle(3)
    this.selectUnitList()
    this.getCategoryList()
    // this.getCountryList();
    // this.selectExternalPartList();
    this.handleSelectExternalPartPage()
    this.getUserSiteDefaultCountry()
    this.getTableUserColumn('10002Table', 1)
    this.getTableUserColumn('10002Table2', 2)
    this.getTableUserColumn('10002Table3', 3)
    this.getTableUserColumn('10002Table4', 4)
  }
}
</script>

<template>
  <div>
    <el-form :inline="true" label-position="top" :model="part" label-width="100px">
      <el-form-item label="Part No">
        <el-input v-model="part.partNo"></el-input>
      </el-form-item>
      <el-form-item label="Part Description">
        <el-input v-model="part.partDesc"></el-input>
      </el-form-item>
      <el-form-item label="Part Category">
        <el-select v-model="part.category" placeholder="">
          <el-option label="All" value=""></el-option>
          <el-option :label="item.categoryName" :value="item.categoryValue" :key="item.id"
                     v-for="item in partCategoryList"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="Active">
        <el-select v-model="part.active" placeholder="">
          <el-option label="All" value=""></el-option>
          <el-option label="Active" value="Y"></el-option>
          <el-option label="Not Active" value="N"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label=" ">
        <el-button type="primary" @click="handleSave" v-if="!ofComponents">New</el-button>
        <!--     <el-button type="primary" @click="selectExternalPartList">Query</el-button>-->
        <el-button type="primary" @click="handleSelectExternalPartPage">Query</el-button>
        <el-button type="primary" icon="el-icon-upload" v-if="this.$store.state.user.userType !== 'Common Users'" @click="partUpload()">Import Part Info</el-button>
        <download-excel
          :fields="fields()"
          :data="exportData"
          type="xls"
          :name="exportName"
          :header="exportHeader"
          :footer="exportFooter"
          :fetch="createExportData"
          :before-generate="startDownload"
          :before-finish="finishDownload"
          worksheet="Export Information"
          class="el-button el-button--primary el-button--medium">
          {{ "Export" }}
        </download-excel>
      </el-form-item>
    </el-form>

    <el-table :data="partList" :height="height" :row-style="rowPartStyle" @row-click="handleRowClick"
              @row-dblclick="handleDblRowClick" :loading="partTableLoading" border style="width: 100%;margin-top: 5px">
      <el-table-column v-if="!ofComponents"
                       header-align="center"
                       align="center"
                       width="100"
                       fixed="left"
                       label="Actions">
        <template slot-scope="scope">
          <el-link style="cursor:pointer;" @click="handleRowClick(scope.row,null,null,0)">Edit</el-link>
          <el-link style="cursor:pointer;" @click="removeExternalPart(scope.row)">Delete</el-link>
        </template>
      </el-table-column>
      <el-table-column
        v-for="(item,index) in columnList" :key="index"
        :sortable="item.columnSortable"
        :prop="item.columnProp"
        :header-align="item.headerAlign"
        :show-overflow-tooltip="item.showOverflowTooltip"
        :align="item.align"
        :fixed="item.fixed==''?false:item.fixed"
        :min-width="item.columnWidth"
        :label="item.columnLabel">
        <template slot-scope="scope">
          <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
          <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
                                             style="width: 100px; height: 80px"/></span>
        </template>
      </el-table-column>
    </el-table>
    <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page.sync="no"
      :page-sizes="[50,100, 200, 300, 400]"
      :page-size="size"
      layout="sizes, prev, pager, next,total"
      :total="total">
    </el-pagination>
    <el-tabs v-model="activeName" v-if="!ofComponents">
      <el-tab-pane label="Part Certification" name="partPicture">
        <picture-module ref="picture" :column-list="pictureColumnList" :part="currentPart" :data-list="pictureList"
                        @refresh="getExternalPartPictureList"></picture-module>
      </el-tab-pane>
      <el-tab-pane label="Linked Customer" name="linkedCustomer">
        <linked-customer :column-list="customerColumnList" :part="currentPart" :data-list="externalPartCustomerList"
                         @refresh="getExternalPartCustomerList" :visible="true"></linked-customer>
      </el-tab-pane>
      <el-tab-pane label="Linked Manufacturer" name="linkedManufacturer">
        <linked-manufacturer :column-list="manufacturerColumnList" :part="currentPart"
                             :data-list="externalPartManufacturerList" @refresh="getExternalPartManufacturerList"
                             :visible="true"></linked-manufacturer>
      </el-tab-pane>
      <el-tab-pane label="Product Label" name="productLabel" v-if="this.$store.state.user.autoSerialNumber === 'Y'">
        <label-template :part="currentPart"></label-template>
      </el-tab-pane>
    </el-tabs>

    <el-dialog v-drag :title="`Part`" :close-on-click-modal="false" @close="closeSavePart" width="550px"
               :visible.sync="savePartVisible">
      <el-form :model="savePart" label-position="top" ref="savePartForm" :rules="partRules">
        <el-row :gutter="10">
          <el-col :span="8">
            <el-form-item label="Part No" prop="partNo" :show-message="false">
              <el-input :readonly="savePart.site !== ''" :disabled="savePart.site !== ''"
                        v-model="savePart.partNo"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="15">
            <el-form-item label="Part Description" prop="partDesc" :show-message="false">
              <el-input v-model="savePart.partDesc"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="8" v-if="$store.state.user.autoSerialNumber === 'Y'">
            <el-form-item label="Print Str1" :show-message="false">
              <el-input v-model="savePart.printStr1"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="7" v-if="$store.state.user.autoSerialNumber === 'Y'">
            <el-form-item label="Print Str2" :show-message="false">
              <el-input v-model="savePart.printStr2"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="8" v-if="$store.state.user.autoSerialNumber === 'Y'">
            <el-form-item label="Print Str3" :show-message="false">
              <el-input v-model="savePart.printStr3"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="Part Category" prop="category" :show-message="false">
              <el-select v-model="savePart.category" placeholder="" @change="changeCategory" style="width: 100%">
                <el-option :label="item.categoryName" :value="item.categoryValue" :key="item.id"
                           v-for="item in partCategoryList"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="7">
            <el-form-item label="UM" prop="umId" :show-message="false">
              <el-select v-model="savePart.umId" placeholder="" :show-message="false" style="width: 100%">
                <el-option v-for="item in unitList" :key="item.umId" :label="item.umName"
                           :value="item.umId"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item v-if="savePart.moldCodeRequired === 'Y'" key="moldCode" label="Mold Code" prop="moldCode"
                          :show-message="false">
              <el-input v-model="savePart.moldCode"></el-input>
            </el-form-item>
            <el-form-item v-else label="Mold Code">
              <el-input v-model="savePart.moldCode" disabled></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="10">
          <el-col :span="8" v-if="category.rollLabelRequired === 'Y'">
            <el-form-item label="Qty Per Roll" prop="qtyPerRoll" :show-message="false">
              <el-input-number :step="0" :min="0" :controls="false"
                               :disabled="this.savePart.serialNumberRequired === 'Y'"
                               v-model="savePart.qtyPerRoll"></el-input-number>
            </el-form-item>
          </el-col>
          <el-col :span="7" v-if="category.rollLabelRequired === 'Y'">
            <el-form-item label="Rolls Per Carton" prop="rollsPerCarton" :show-message="false">
              <el-input-number :step="0" :min="0" :controls="false"
                               :disabled="this.savePart.serialNumberRequired === 'Y'"
                               v-model="savePart.rollsPerCarton"></el-input-number>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item :label="category.qtyPerRollPart" prop="qtyPerCarton" :show-message="false">
              <el-input-number :step="0" :min="0" :controls="false" @change="changeQtyRollCarton"
                               :disabled="category.editQtyPerCarton === 'N'"
                               v-model="savePart.qtyPerCarton"></el-input-number>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="10">
          <el-col :span="8">
            <el-form-item label="OOC" :show-message="false" prop="freeInfo2">
              <el-select v-model="savePart.freeInfo2" placeholder="" style="width: 100%">
                <el-option v-for="item in countryList" :label="item.countryNo" :value="item.countryNo"
                           :key="item.countryNo"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="7">
            <el-form-item label="Rev No" prop="rev" :show-message="false">
              <el-input v-model="savePart.rev"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="Free Info" :show-message="false">
              <el-input v-model="savePart.freeInfo"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="10">
          <el-col :span="3">
            <el-form-item label=" " :show-message="false">
              <el-checkbox v-model="savePart.active" true-label="Y" false-label="N">Active</el-checkbox>
            </el-form-item>
          </el-col>
          <el-col :span="5">
            <el-form-item label=" " :show-message="false">
              <el-checkbox v-model="savePart.tradingMark" true-label="Y" false-label="N">Trading Mark</el-checkbox>
            </el-form-item>
          </el-col>
          <el-col :span="7">
            <el-form-item label="Packing Weight" prop="packingWeight">
              <el-input-number :min="0" :controls="false" v-model="savePart.packingWeight"
                               :precision="6"></el-input-number>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="Weight UM" prop="weightUmId" :show-message="false">
              <el-select v-model="savePart.weightUmId" placeholder="" :show-message="false" clearable
                         style="width: 100%">
                <el-option v-for="item in unitList" :key="item.weightUmId" :label="item.umName"
                           :value="item.umId"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="3">
            <el-form-item label=" " :show-message="false">
              <el-checkbox v-model="savePart.rollLabelFlag" true-label="Y" false-label="N">45*20 Label</el-checkbox>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" v-if="savePart.site !== ''" @click="handleUpdate">Save</el-button>
        <el-button type="primary" v-else @click="handleSave">Save</el-button>
        <el-button @click="savePartVisible = false">Cancel</el-button>
      </div>
    </el-dialog>

    <el-dialog title="File Import" :z-index="1999" @close="closeUploadDialog" :close-on-click-modal="false" :visible.sync="visible" width="390px" style="height: 520px;">
      <el-form :inline="true" label-position="top" label-width="80px">
        <el-form-item prop="site" :rules="rules.site">
          <span slot="label" style="" class="big-label">
            <a herf="#" @click="getBaseList(93)">Site</a>
          </span>
          <el-input v-model="tempData.site" style="width: 130px"></el-input>
        </el-form-item>
        <el-form-item label=" ">
          <el-button type="primary" @click="downloadFile()">Download file template</el-button>
        </el-form-item>
        <el-row>
          <el-col :span="24">
            <el-upload class="customer-upload" drag action="javascript:void(0);" ref="uploadFile" :limit="1" accept=".xlsx,.xls"
                       :before-upload="beforeUploadHandle" :on-remove="onRemove" :on-change="onChange" :auto-upload="false" style="text-align: left;">
              <i class="el-icon-upload"></i>
              <div class="el-upload__text">Drag the file here，or<em> click to upload</em></div>
            </el-upload>
          </el-col>
        </el-row>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" :disabled="isLoading" @click="saveUploadFile">{{ isLoading ? 'Saving...' : 'Save' }} </el-button>
        <el-button type="primary" @click="closeUploadDialog">Cancel</el-button>
      </span>
    </el-dialog>

    <el-dialog title="Import Info View" @close="provisionalDataAlterHandle(3)" :close-on-click-modal="false" :visible.sync="provisionalDataVisible" width="1100px">
      <el-table :data="provisionalDataList" :height="height + 200" border style="width: 100%;margin-top: 5px">
        <el-table-column
          v-for="(item,index) in columnList" :key="index"
          :sortable="item.columnSortable"
          :prop="item.columnProp"
          :header-align="item.headerAlign"
          :show-overflow-tooltip="item.showOverflowTooltip"
          :align="item.align"
          :fixed="item.fixed==''?false:item.fixed"
          :min-width="item.columnWidth"
          :label="item.columnLabel">
          <template slot-scope="scope">
            <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
            <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
                                               style="width: 100px; height: 80px"/></span>
          </template>
        </el-table-column>
      </el-table>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="provisionalDataAlterHandle(1)">{{ isLoading2 ? 'Saving...' : 'Confirm Import'}}</el-button>
        <el-button type="primary" @click="provisionalDataAlterHandle(2)">{{ isLoading3 ? 'Canceling...' : 'Cancel'}}</el-button>
      </span>
    </el-dialog>

    <Chooselist ref="baseList"  @getBaseData="getBaseData"></Chooselist>

    <div v-show="false">
      <img :src="item" v-for="(item,index) in base64List" :key="index" style="display: none">
    </div>
</div>
</template>

<style scoped>
.big-label {
  font-size: medium; /* 调整字号 */
}
</style>
