<template>
	<div class="eibs-tab">
		<c-col :span="24">
			<c-col :span="6">
				<el-form-item label-width="0px" style="margin-left:9px">
					<c-button @click="excelUpload" size="small" type="primary">Excel导入</c-button>
					<c-button @click="addRow" size="small" type="primary" style="margin-left:15px">
						人工新增
					</c-button>
					<c-button @click="deleteRows" size="small" type="primary" style="margin-left:15px">
						删除
					</c-button>
				</el-form-item>
			</c-col>

			<c-col :span="18">
				<el-form-item prop="imgInvmod.checkTrue" label-width="0px" style="text-align:right">
					<c-button @click="checkList" type="primary">
						发票真伪核验
					</c-button>
					<c-button @click="checkRepeat" type="primary" style="margin-left:15px">
						人行重复性核验
					</c-button>
					<c-button @click="updateStatus" size="small" type="primary" style="margin-left:15px">
						更新状态
					</c-button>
					<c-button @click="addReg()" :disabled="model.imgInvmod.invlst.length == 0" type="primary" size="small" style="margin-left:15px">
						<span style="position: relative">发票登记</span>
					</c-button>
				<c-button @click="exportExcel()"  type="primary" size="small" style="margin-left:15px">导出Excel</c-button>
				</el-form-item>
			</c-col>
			<!-- <c-col :span="2">
				<el-form-item label-width="0px" style="margin-left:10px">
					
				</el-form-item>
			</c-col> -->
		</c-col>
			<c-col :span="24">
				<el-form ref="invTable" :model="model" label-width="120px" label-position="right" size="small" :validate-on-rule-change="false">
					<el-table max-height="300px" style="text-align: center;" @selection-change="changeSelection1" stripe :data="model.imgInvmod.pageTable.tableData" :row-class-name="tableRowClassName" @row-click="handleRowClick" :paginationShow="false" :border="true">
						<el-table-column type="selection" align="left" min-width="50">
						</el-table-column>
						<el-table-column label="序号"  width="80px">
							<template slot-scope="scope">
								<span>{{scope.$index + 1 + ((model.imgInvmod.pageTable.currentPage - 1) * model.imgInvmod.pageTable.pageSize)}}</span>
							</template>
						</el-table-column>
						<el-table-column label="发票类型" sortable min-width="110px" prop="invtyp">
							<template slot-scope="scope">
								<!-- <el-form-item :prop="'imgInvmod.invlst.' + (scope.$index + ((model.imgInvmod.pageTable.currentPage - 1) * model.imgInvmod.pageTable.pageSize)) + '.invtyp'" label-width="0" :rules="[{validator:(rule,value,callback) => validaInvtyp(rule,value,callback,scope.row),trigger:['blur','change']}]">
									<c-select v-model="scope.row.invtyp"  dbCode="typinv" :disabled="scope.row.state == '0'"></c-select>
								</el-form-item> -->
								<c-select v-model="scope.row.invtyp"  dbCode="typinv" :disabled="scope.row.state == '0'"></c-select>
							</template>
						</el-table-column>
						
						<el-table-column label="发票代码" sortable min-width="110px" prop="invcod">
							<template slot-scope="scope">
								<el-form-item :prop="'imgInvmod.invlst.' + (scope.$index + ((model.imgInvmod.pageTable.currentPage - 1) * model.imgInvmod.pageTable.pageSize)) + '.invcod'" label-width="0" :rules="[{validator:(rule,value,callback) => validaInvcod(rule,value,callback,scope.row),trigger:['blur','change']}]">
									<c-input v-model="scope.row.invcod" :disabled="scope.row.state == '0'">
									</c-input>
								</el-form-item>
							</template>
						</el-table-column>
						<el-table-column label="发票号码" sortable min-width="110px" prop="invnum">
							<template slot-scope="scope">
								<el-form-item :prop="'imgInvmod.invlst.' + (scope.$index + ((model.imgInvmod.pageTable.currentPage - 1) * model.imgInvmod.pageTable.pageSize)) + '.invnum'" label-width="0" :rules="[{validator:(rule,value,callback) => validaInvnum(rule,value,callback,scope.row),trigger:['blur','change']}]">
									<c-input v-model="scope.row.invnum" @input="inputInvnum((scope.$index + ((model.imgInvmod.pageTable.currentPage - 1) * model.imgInvmod.pageTable.pageSize)))" :disabled="scope.row.state == '0'">
									</c-input>
								</el-form-item>
							</template>
						</el-table-column>
						<el-table-column label="开票日期" sortable min-width="110px" prop="invdat">
							<template slot-scope="scope">
								<c-date-picker v-model="scope.row.invdat" @change="changeInvdat((scope.$index + ((model.imgInvmod.pageTable.currentPage - 1) * model.imgInvmod.pageTable.pageSize)))" :disabled="scope.row.state == '0'">
								</c-date-picker>
							</template>
						</el-table-column>
						<el-table-column label="校验码后六位" sortable min-width="130px" prop="checkcode">
							<template slot-scope="scope">
								<c-input v-model="scope.row.checkcode" :disabled="scope.row.state == '0'">
								</c-input>
							</template>
						</el-table-column>
						<el-table-column label="未税金额" sortable min-width="110px" prop="untamt">
							<template slot-scope="scope">
								<c-input-currency :precision="2" v-model="scope.row.untamt" @input="inputUntamt((scope.$index + ((model.imgInvmod.pageTable.currentPage - 1) * model.imgInvmod.pageTable.pageSize)))" :disabled="scope.row.state == '0'">
									</c-input-currency>
							</template>
						</el-table-column>
						<el-table-column label="价税合计" sortable min-width="110px" prop="amounttax">
							<template slot-scope="scope">
								<c-input-currency :precision="2" v-model="scope.row.amounttax"  @input="inputAmounttax((scope.$index + ((model.imgInvmod.pageTable.currentPage - 1) * model.imgInvmod.pageTable.pageSize)))" :disabled="scope.row.state == '0'">
								</c-input-currency>
							</template>
						</el-table-column>
						<!-- <el-table-column label="发票占用金额" sortable min-width="130px" prop="amountin">
							<template slot-scope="scope">
								<el-form-item :prop="'imgInvmod.invlst.' + (scope.$index + ((currentPage - 1) * 10)) + '.amountin'" label-width="0" :rules="[{validator:(rule,value,callback) => validaAmountin(rule,value,callback,scope.row),trigger:['blur','change']}]">
									<c-input-currency :precision="2" v-model="scope.row.amountin"  @input="inputAmountin((scope.$index + ((currentPage - 1) * 10)))">
								</c-input-currency>
								</el-form-item>
								
							</template>
						</el-table-column> -->

						<el-table-column label="发票状态" sortable min-width="110px" prop="state">
							<template slot-scope="scope">
								{{getLabel(dbCodes.state,scope.row.state)}}
							</template>
						</el-table-column>
						<el-table-column label="失败原因" sortable min-width="120px" prop="reason"></el-table-column>
						
						<el-table-column label="有无发票信息" sortable min-width="160px" prop="isfnc">
							<template slot-scope="scope">
								{{getLabel(dbCodes.isfnc,scope.row.isfnc)}}
							</template>
						</el-table-column>
						<el-table-column label="批注方编号" sortable min-width="120px" prop="annotacode"></el-table-column>
						<el-table-column label="批注方名称" sortable min-width="120px" prop="annotaname"></el-table-column>
						<el-table-column label="批注日期" sortable min-width="110px" prop="annotadate"></el-table-column>
						<el-table-column label="批注描述" sortable min-width="110px" prop="annotadesc"></el-table-column>
						<el-table-column label="发票批次号" sortable min-width="120px" prop="seqnum"></el-table-column>
						<el-table-column label="影像ID" sortable min-width="100px" prop="imagid"></el-table-column>
						<el-table-column label="有效标识" sortable min-width="110px" prop="valflg">
							<template slot-scope="scope">
								<c-select v-model="scope.row.valflg" dbCode="vldflg" :disabled="scope.row.state == '0'"></c-select>
							</template>
						</el-table-column>
						<el-table-column label="销售方单位名称" sortable min-width="150px" prop="salesname"></el-table-column>
					<el-table-column label="购买方名称" sortable min-width="120px" prop="purchasername"></el-table-column>
					<el-table-column label="我行登记状态" sortable min-width="130px" prop="regsta">
						<template slot-scope="scope">
							{{getLabel(regsta,scope.row.regsta)}}
						</template>
					</el-table-column>
					<el-table-column label="发票剩余金额" sortable min-width="150px" prop="balance"></el-table-column>
					<el-table-column label="检核次数" sortable min-width="150px" prop="checktotal"></el-table-column>
					<el-table-column label="本机构检核次数" sortable min-width="150px" prop="checkown"></el-table-column>
					<el-table-column label="其他机构检核次数" sortable min-width="170px" prop="checkother"></el-table-column>
					</el-table>
					<el-pagination
						:current-page="model.imgInvmod.pageTable.currentPage"
						:page-sizes="[10, 20, 50, 100]"
						:page-size="model.imgInvmod.pageTable.pageSize"
						@size-change="handleSizeChange"
						@current-change="handleCurrentChange"
						layout="total, sizes, prev, pager, next, jumper"
						:total="model.imgInvmod.pageTable.total">
					</el-pagination>
				</el-form>

			</c-col>
			<c-col :span="24">
			<el-form ref="refDj" :model="model" label-width="120px" label-position="right" size="small" :validate-on-rule-change="false">
				<c-col :span="12" class="col-left">
					<c-col :span="24" v-if="model.imgInvmod.addRegFlg">
						<el-form-item label="业务类型" prop="imgInvmod.invp.bustyp" :rules="[{required: true, message: '必输项',trigger: ['blur', 'change']}]">
							<c-select v-model="model.imgInvmod.invp.bustyp" dbCode='typbus' placeholder="请选择业务类型" />
						</el-form-item>
					</c-col>
					<c-col :span="24" v-if="model.imgInvmod.addRegFlg">
						<el-form-item label="批注编号" prop="imgInvmod.invp.antnum" :rules="[{required: true, message: '必输项',trigger: ['blur', 'change']},{ max: 40, message: '长度不能超过40',trigger: ['blur', 'change']}]">
							<c-input v-model="model.imgInvmod.invp.antnum" placeholder="请输入批注编号"></c-input>
						</el-form-item>
					</c-col>
					<c-col :span="24" v-if="model.imgInvmod.addRegFlg">
						<el-form-item label="批注日期" prop="imgInvmod.invp.antdat" :rules="[{required: true, message: '必输项',trigger: ['blur', 'change']}]">
							<c-date-picker type="date" v-model="model.imgInvmod.invp.antdat" style="width: 100%" placeholder="请选择批注日期" value-format="yyyy-MM-dd"></c-date-picker>
						</el-form-item>
					</c-col>
				</c-col>

				<c-col :span="12" class="col-right">
					<c-col :span="24" v-if="model.imgInvmod.addRegFlg">
						<el-form-item label="系统外其他业务描述" prop="imgInvmod.invp.busdcr" :rules="[{ max: 50, message: '长度不能超过50',trigger: ['blur', 'change']}]">
							<c-input v-model="model.imgInvmod.invp.busdcr" placeholder="请选择系统外其他业务描述"></c-input>
						</el-form-item>
					</c-col>
					<c-col :span="24" v-if="model.imgInvmod.addRegFlg">
						<el-form-item label="批注方名称" prop="imgInvmod.invp.antnam" :rules="[{required: true, message: '必输项',trigger: ['blur', 'change']},{ max: 100, message: '长度不能超过100',trigger: ['blur', 'change']}]">
							<c-input v-model="model.imgInvmod.invp.antnam" placeholder="请输入批注方名称"></c-input>
						</el-form-item>
					</c-col>
					<c-col :span="24" v-if="model.imgInvmod.addRegFlg">
						<el-form-item label="批注描述" prop="imgInvmod.invp.antdtl" :rules="[{required: true, message: '必输项',trigger: ['blur', 'change']},{ max: 50, message: '长度不能超过50',trigger: ['blur', 'change']}]">
							<c-input v-model="model.imgInvmod.invp.antdtl" placeholder="请输入批注描述"></c-input>
						</el-form-item>
					</c-col>

				</c-col>
				<c-col :span="24" v-if="model.imgInvmod.addRegFlg">
					<el-form-item style="text-align:center">
						<c-button @click="sendMsg()" type="primary" size="small">发送登记报文</c-button>
					</el-form-item>
				</c-col>
			</el-form>
		</c-col>
			<el-dialog v-dialogDrag width="30%" title="Excel导入" :before-close="closeDialog" :visible.sync="detailsDialog" v-if="detailsDialog">
				<c-col :span="4">
					<el-form-item label-width="0px">
						<!-- <el-upload action="#" :before-upload="beforeUpload" :show-file-list="false" accept=".xlsx, .xls, .csv">
							<c-button slot="trigger" size="small" type="primary">选择文件</c-button>
						</el-upload> -->
						<el-upload action="/webapi/manager/invchk/upload" :limit="1" accept=".xlsx, .xls, .csv" :on-exceed="handleExceed" 
						:auto-upload="true" :on-success="uploadSucess" ref="uploadff">
							<!--上传按钮-->
							<el-button slot="trigger" size="mini" type="primary">选取文件</el-button>
						</el-upload>
					</el-form-item>
				</c-col>
				<c-col :span="4">
					<el-form-item label-width="0px" style="margin-left:10px">
						<c-button @click="downFiles()" type="primary" size="small">下载模板</c-button>
					</el-form-item>
				</c-col>
			</el-dialog>

	</div>
</template>
<script>
import event from "../event";
import moment from "moment";

export default {
  props: ["model", "codes"],
  mixins: [event],
  data() {
    return {
      currentZcinvlstIndex: -1,
      detailsDialog: false,
      filesList: [],
      errorMessage: "",
      isError: false,
      searchNum: "",
      fileName: "",
      requirea: false,
	  details: {},
	  tableData:[],
	  currentPage:1,
	  pageSize:10,
	  total:0,
      dbCodes: {
        state: [],
        isfnc: [],
        invtyp: [],
        bustyp: []
      },
      isCheckRe: true,
			selection1: [],
			addRegFlg: false,
			regsta:[
				{ 'label': '登记成功', 'value': 'DJCG' },
        { 'label': '作废成功', 'value': 'YDEL' },
        { 'label': '处理中', 'value': 'YREG' },
        { 'label': '处理失败', 'value': 'YRFL' }
			],
    };
  },
  computed: {
		isDengJi() {
      let flg = this.model.imgInvmod.invlst.some(item => {
        return item.isfnc == "Y" || item.isfnc == "N";
      });
      let flg1 = this.model.imgInvmod.invlst.some(i => {
        return i.invtyp == "ECOM" || i.invtyp == "ESPE";
      });
      if (flg && flg1) {
        return true;
      } else {
        return false;
      }
    }
  },
  methods: {
	  	// 文件个数超出
    	handleExceed() {
      		this.$notify.error(`只允许上传1个文件`);
		},
	  
		handleSizeChange(val){
			this.model.imgInvmod.pageTable.pageSize=val;
			this.model.imgInvmod.pageTable.tableData =this.paginate(this.model.imgInvmod.pageTable.currentPage,this.model.imgInvmod.pageTable.pageSize);
			this.$refs['invTable'].validate()
		},
		handleCurrentChange(val) {
			this.model.imgInvmod.pageTable.currentPage=val;
			this.model.imgInvmod.pageTable.tableData =this.paginate(this.model.imgInvmod.pageTable.currentPage,this.model.imgInvmod.pageTable.pageSize);
			this.$refs['invTable'].validate()
		},
		refresh(){
			this.model.imgInvmod.pageTable.total=this.model.imgInvmod.invlst.length
			this.model.imgInvmod.pageTable.tableData =this.paginate(this.model.imgInvmod.pageTable.currentPage,this.model.imgInvmod.pageTable.pageSize);
			this.$refs['invTable'].validate()
		},
		uploadSucess(response) {
			if (response.respCode == "AAAAAA") {
				this.$notify.success("解析成功!");
				this.model.imgInvmod.invlst=this.model.imgInvmod.invlst.concat(response.data);
				this.model.imgInvmod.pageTable.total=this.model.imgInvmod.invlst.length
				this.model.imgInvmod.pageTable.tableData = this.paginate(this.model.imgInvmod.pageTable.currentPage,this.model.imgInvmod.pageTable.pageSize);
			} else {
				this.$notify.error("上传失败!" + response.respMsg);
			}
			this.cancel();
		},
		/** 关闭上传弹框 */
		cancel() {
			this.detailsDialog = false;
		},
		changeDate(val){
			let result = val.replace(/\//g,"-")
			return result
		},
    beforeUpload(file) {
      console.log(file, "--文件");
      this.file2XLSX(file).then(res => {
        let newData = res[0].sheet.map(item => ({
          imagid: "00000000-0000-0000-0000-000000000000",
          invcod: item.hasOwnProperty("发票代码")
            ? typeof item["发票代码"] === "number"
              ? item["发票代码"].toString().trim()
              : item["发票代码"].trim()
            : "",
          invnum:
            typeof item["发票号码"] === "number"
              ? item["发票号码"].toString().trim()
              : item["发票号码"].trim(),
          invdat:
            this.changeDate(typeof item["开票日期(YYYY-MM-DD)"] === "number"
              ? moment("1900-01-01")
                  .add(item["开票日期(YYYY-MM-DD)"] - 2, "days")
                  .format("YYYY-MM-DD")
              : item["开票日期(YYYY-MM-DD)"]),
          amountin: 0.00,
					untamt: item.hasOwnProperty("未税金额(小数点后两位)")
            ? item["未税金额(小数点后两位)"].toString().trim()
            : "",
          checkcode:
            item.hasOwnProperty("校验码后六位") ? (typeof item["校验码后六位"] === "number"
              ? item["校验码后六位"].toString().trim()
              : item["校验码后六位"].trim()) : "",
          amounttax: item.hasOwnProperty("价税合计金额(小数点后两位)")
            ? item["价税合计金额(小数点后两位)"].toString().trim()
            : "",
          valflg: "VLID",
          reason: ""
        }));

        this.model.imgInvmod.invlst = this.model.imgInvmod.invlst.concat(
          newData
				);
				this.detailsDialog = false
      });
      return false;
    },
    changeSelection1(val) {
      this.selection1 = val;
    },
    validaInvcod(rule, value, callback, row) {		
      if (this.isCheckRe) {
        if (row.invnum.length == 20) {
          if (value) {
            return callback(new Error("全电发票不能录入发票代码"));
          }
        } else {
          if (
            !value ||
            !row.invnum ||
						!row.invdat ||
						Number(row.untamt) == 0 ||
						Number(row.amounttax) == 0
          ) {
            return callback(
              new Error("发票代码、发票号码、开票日期、未税金额、价税合计须同时有值")
            );
          }
        }
      } else {
        if (row.invnum.length == 20 && value) {
          return callback(new Error("全电发票不能输入发票代码"));
        }
      }
      callback();
    },
    validaInvnum(rule, value, callback, row) {
      if (this.isCheckRe) {
        if (
          value.length == 20 &&
          (!value ||
						!row.invdat ||
						Number(row.untamt) == 0 ||
            Number(row.amounttax) == 0)
        ) {
          return callback(
            new Error("发票号码、开票日期、未税金额和价税合计栏位须同时有值")
          );
        }
        if (value && value.length != 8 && value.length != 20) {
          return callback(new Error("发票号码不能为空,长度为8位或20位"));
        }
      }
      callback();
		},
		// validaAmountin(rule,value,callback,row){
		// 	if(this.isCheckRe){
		// 		if(Number(value) > Number(row.amounttax)){
		// 				return callback(new Error('占用金额不能大于价税合计'))
		// 			}
		// 		callback()
		// 	}
		// 	callback()
		// },
    validaCheckCode(rule, value, callback, row) {
      if (this.isCheckRe) {
        if(row.invnum.length == 8){
					if (
          (row.invtyp == "COMM" || row.invtyp == "ECOM") &&
          !value &&
          row.state != "0"
        ) {
          return callback(new Error("校验码后六位必输"));
        }
        if (value && value.length != 6) {
          return callback(new Error("校验码后六位长度固定六位"));
        }
				}else{
					callback()
				}
      }
      callback();
    },
    validaInvtyp(rule, value, callback, row) {
      if (!this.isCheckRe) {
        if (row.invnum.length == 20) {
          if (!value || !row.invnum || !row.invdat) {
            return callback(new Error("发票类型,发票号码,开票日期全必输"));
          }
        } else {
          if (!value || !row.invnum || !row.invcod || !row.invdat) {
            return callback(
              new Error("发票类型,发票号码,发票代码,开票日期全必输")
            );
          }
        }
      }
      callback();
    },

    // validaAmounttax(rule,value,callback,row){
    // 	if(!row.invtyp && 'SPEC_MVSC_UCSC'.includes(row.invtyp)){
    // 		return callback(new Error('价税合计必输'))
    // 	}
    // 	callback()
    // }
  },
  mounted() {
    this.getdbCode("invsta", "state");
    this.getdbCode("isyn", "isfnc");
    this.getdbCode("typinv", "invtyp");
    this.getdbCode("typbus", "bustyp");
  },
  created() {}
};
</script>
<style scoped lang="less">

.eibs-tab{
	/deep/ .el-dialog{
		height: 200px!important;
		margin-top: calc(50vh - 100px)!important;
	}
	/deep/ .el-dialog__body{
		height: calc(100% - 65px);
	}
}

</style>