<template>
  <div class="app-container">
    <div slot="header" class="card-title">{{ $t('付款单') }}</div>
    <!-- 搜索工作栏 -->
    <el-card v-show="showSearch" class="card">
      <el-form
        :model="queryParams"
        ref="queryForm"
        size="small"
        label-width="100px"
        class="card"
      >
        <el-row :gutter="10">
          <el-col :span="4"> <el-form-item :label="$t('付款单号')">
            <el-input
              clearable
              style="max-width: 188px"
              v-model="queryParams.paymentNo"
              :placeholder="$t('请输入付款单号')"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-form-item></el-col>
          <el-col :span="4"><el-form-item :label="$t('供应商')">
            <el-select
              clearable
              v-model="queryParams.supplierId"
              :placeholder="$t('请选择供应商')"
            >
              <el-option
                v-for="supplier in allSupplier"
                :key="supplier.id"
                :label="supplier.companyZh"
                :value="supplier.id"
              ></el-option>
            </el-select>
          </el-form-item></el-col>
          <el-col :span="4"><el-form-item :label="$t('业务员')">
            <!--            <el-select v-model="form.salesmanId" :placeholder="$t('请选择业务员')">
                          <el-option
                            v-for="item in creatorData"
                            :key="item.id"
                            :label="item.nickname"
                            :value="item.id"
                          />
                        </el-select> -->
            <el-select v-model="queryParams.salesmanName" filterable :placeholder="$t('请选择业务员')"
                       clearable
                    >
              <el-option
                v-for="item in creatorData"
                :key="item.id"
                :label="item.nickname"
                :value="item.nickname"
              />
            </el-select>
          </el-form-item> </el-col>
          <el-col :span="6"><el-form-item :label="$t('创建时间')">
            <el-date-picker
              v-model="queryParams.beginCreateTime"
              type="datetimerange"
              value-format="yyyy-MM-dd"
              range-separator="到"
              :start-placeholder="$t('请选择日期')"
              :end-placeholder="$t('请选择日期')">
            </el-date-picker>
          </el-form-item></el-col>
        </el-row>
        <el-row :gutter="10">
          <el-col :span="4">
            <el-form-item :label="$t('状态')">
              <dict-selector   clearable :type="DICT_TYPE.ECW_PAYMENT_STATE" v-model="queryParams.state"/>
            </el-form-item>
          </el-col>
          <el-col :span="4"><el-form-item :label="$t('发票状态')">
            <el-select
              clearable
              v-model="queryParams.invoiceStatus"
              :placeholder="$t('请选择是否开票')"
            >
              <el-option :label="$t('未开票')" value="0"/>
              <el-option :label="$t('已开票')" value="1"/>
            </el-select>
          </el-form-item></el-col>
          <el-col :span="6"><el-form-item>
            <el-button type="primary" @click="handleQuery">{{ $t('查找') }}</el-button>
            <el-button
              style="margin-left: 10px"
              type="success"
              v-hasPermi="['ecw:paymentVoucher:create']"
              @click="handleAdd(0)"
            >{{ $t('新增请款单') }}</el-button
            >
          </el-form-item></el-col>
        </el-row>
      </el-form>
    </el-card>
    <el-table v-loading="loadings" :data="list" border class="card">
      <el-table-column :label="$t('序号')" align="center" prop="id" type="index">
        <template slot-scope="scope">
          <span>{{ scope.$index + 1 }}</span>
        </template>
      </el-table-column>
      <el-table-column :label="$t('付款单号')" align="center" prop="paymentNo">
        <template slot-scope="scope">
          <span style="color: #1890ff;" @click="paymentDetail(scope.row)">{{ scope.row.paymentNo }}</span>
        </template>
      </el-table-column>
      <el-table-column :label="$t('供应商')" align="center" prop="supplierName"/>
      <el-table-column :label="$t('创建时间')" align="center" prop="createTime">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
        </template>
      </el-table-column>
      <el-table-column :label="$t('最后付款时间')" align="center" prop="latestPayAt">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.latestPayAt, '{y}-{m}-{d}') }}</span>
        </template>
      </el-table-column>
      <el-table-column :label="$t('发票')" align="center" prop="invoiceStatus">
        <template slot-scope="scope">
          <span>{{ scope.row.invoiceStatus === 0 ? $t('未开票') : $t('已开票') }}</span>
        </template>
      </el-table-column>
      <el-table-column :label="$t('状态')" align="center">
        <template slot-scope="scope">
          <dict-tag
            :type="DICT_TYPE.ECW_PAYMENT_STATE"
            :value="scope.row.state"
          />
          <span v-if="[2,4,6].includes(scope.row.state) && scope.row.comment" :title="scope.row.comment"><i class="el-icon-question"></i></span>
        </template>
      </el-table-column>
      <el-table-column
        :label="$t('操作')"
        align="center"
        class-name="small-padding fixed-width"
      >
        <template v-slot="{row}">
          <el-button v-if="[0,2].includes(row.state)" size="mini" @click="handleAdd(row.id)"
                     v-hasPermi="['ecw:paymentVoucher:edit']" type="text">{{ $t('编辑') }}
          </el-button>
          <!--          <el-button v-if="[1,3].includes(row.state)" size="mini" v-hasPermi="['ecw:paymentVoucher:process']" type="text" @click="examineClick(scope.row.id)">{{ $t('审核') }}</el-button>-->
          <el-button size="mini"  type="text" v-show="[1].includes(row.state)" v-hasPermi="['ecw:paymentVoucher:Unapprove']"  @click="bridgeFn(1, $t('取消审核'),row)">
            {{ $t('取消审核') }}
          </el-button>
          <el-button size="mini" type="text" v-show="[7,3,1,5].includes(row.state)"  v-hasPermi="['ecw:paymentVoucher:details']" @click="$router.push({path:'/bpm/process-instance/detail',query:{id:row.bmpId}})" >{{ $t('审核详情') }}</el-button>
          <el-button size="mini" type="text"  v-if="[3].includes(row.state)" v-hasPermi="['ecw:paymentVoucher:Cancel-De-approval']" @click="bridgeFn(2, $t('取消付款单反审核'),row)" >{{ $t('取消反审核') }}</el-button>
          <el-button size="mini"  type="text" v-if="[5].includes(row.state)" v-hasPermi="['ecw:paymentVoucher:Cancel-Write-off']" @click="bridgeFn(3, $t('取消付款单核销'),row)"  >{{ $t('取消核销') }}</el-button>

          <el-button v-if="[4].includes(row.state)" size="mini" type="text" v-hasPermi="['ecw:paymentVoucher:De-approval']"
                     @click="bridgeFn(4, $t('反审核'),row)">{{ $t('反审核') }}
          </el-button>
          <el-button v-if="[4].includes(row.state)" size="mini" type="text" v-hasPermi="['ecw:paymentVoucher:writeOff']"
                     @click="bridgeFn(5, $t('核销'),row)">{{ $t('核销') }}
          </el-button>

          <el-button v-if="[6].includes(row.state)" size="mini" type="text"
                     v-hasPermi="['ecw:paymentVoucher:cancelWriteOff']" @click="bridgeFn(6, $t('反核销'),row)">
            {{ $t('反核销') }}
          </el-button>
          <el-button  v-if="[7].includes(row.state)" v-hasPermi="['ecw:paymentVoucher:Cancel-Cancelling-Write-off']" size="mini" type="text" @click="bridgeFn(7, $t('取消付款单反核销'),row)" > {{ $t('取消反核销') }}</el-button>
          <!-- <el-button v-if="scope.row.state == 3" size="mini" type="text">{{ $t('开票') }}</el-button> -->

          <el-button v-if="[6,4].includes(row.state)" size="mini" type="text" @click="toprint(row.id)"
                     v-hasPermi="['ecw:paymentVoucher:print']">{{ $t('打印') }}
          </el-button>
          <el-button v-if="[0,2].includes(row.state)" size="mini" type="text" v-hasPermi="['ecw:paymentVoucher:delete']"
                     @click="deleteClick(row)">{{ $t('删除') }}
          </el-button>
          <!-- <el-button size="mini" type="text" @click="open = true">{{ $t('导出订单') }}</el-button> -->
        </template>
      </el-table-column>
    </el-table>
    <!-- 分页组件 -->
    <pagination
      v-show="total > 0"
      :total="total"
      :page.sync="queryParams.page"
      :limit.sync="queryParams.rows"
      @pagination="getList"
    />
    <!-- 对话框(添加 / 修改) -->
    <el-dialog
      :title="$t('导出账单')"
      :visible.sync="open"
      width="500px"
      style="margin-top: 20vh !important"
      append-to-body
    >
      <div
        slot="header"
        class="card-title"
        style="border-bottom: 2px solid #f8f8f8"
      >
        <span>{{ $t('导出账单') }}</span>
        <i class="el-icon-close" @click="cancel"></i>
      </div>
      <div class="dialog-footer">
        <el-button type="primary" style="width: 130px" @click="submitForm"
        >{{ $t('国内账单') }}
        </el-button
        >
        <el-button
          plain
          type="primary"
          style="width: 130px; margin: 0"
          @click="submitForm"
        >Debite note
        </el-button
        >
      </div>
    </el-dialog>
    <!--对话框 审核 -->
    <el-dialog width="30%" @close="cancelReason = ''" :title="examineTitle" :visible.sync="examineShow">
      <div class="cancel_content">
        <span>{{ $t('申请理由') }}</span>
        <el-input type="textarea" :rows="6" v-model="cancelReason" :placeholder="$t('请输入取消理由')"></el-input>
      </div>
      <span slot="footer" class="dialog-footers">
        <el-button type="primary" @click="cancelWriteOffClick()">{{ $t('提交') }}</el-button>
        <el-button @click="examineShow = false;">{{ $t('取消') }}</el-button>
      </span>
    </el-dialog>

  </div>
</template>

<script>
import {userList, listSimpleUsers} from "@/api/system/user";
import {DICT_TYPE} from "@/utils/dict";
import CustomerSelector from "@/components/CustomerSelector";
import {getSupplierPage} from "@/api/ecw/supplier";
import {
  getPaymentList,
  deletePayment,
  paymentVerification,
  paymentVerificationCancel,
  paymentVerifyCancel,
  cancelFinancePaymentApproval,
  cancelFinancePaymentApprovalNo,
  cancelFinancePaymentWriteOff,
  cancelFinancePaymentWriteOffNo, paymentCancelFinancePaymentWriteOffNo
} from "@/api/ecw/financial"

export default {
  name: "EcwFinancialPaymentvoucher",
  components: {
    CustomerSelector,
  },
  data() {
    return {
      examineShow: false,
      examineTitle: '',
      examineIndex: 0,
      examineData: {},
      cancelReason: '',
      open: false,
      showSearch: true,
      loadings: false,
      form: {},
      creatorData: [],
      allSupplier: [],
      list: [],
      total: 0,
      dateType: [],
      loading: "",
      // params: {
      //   page: 1,
      //   rows: 20,
      // },
      // 查询参数
      queryParams: {
        page: 1,
        rows: 20,
        dateType: null,
        date: null,
        originId: null,
        destinationId: null,
        transportId: null,
        isCargoControl: null,
        orderExceptionStatus: null,
        orderExceptionType: null,
        orderNo: null,
        consignorId: null,
        marks: null,
        prodId: null,
        productRecord: null,
        followUpSalesmanId: null,
      },
    };
  },
  activated() {
    this.handleQuery()
  },
  created() {
    let that = this;
    listSimpleUsers().then((res) => (that.creatorData = res.data));
    // userList("salesman").then((res) => (that.creatorData = res.data));
    getSupplierPage({pageNo: "1", pageSize: "10000"}).then((res) => {
      const {data} = res;
      this.allSupplier = data.list;
    });
    this.getList()
  },
  methods: {
    /** 查询列表 */
    getList() {
      this.loading = true;
      // 处理查询参数
      let params = {...this.queryParams};
      this.addBeginAndEndTime(params, this.queryParams.beginCreateTime, "createTime");
      // 执行查询
      getPaymentList(params).then((response) => {
        this.list = response.data.list;
        this.total = response.data.total;
        this.loading = false;
      });
    },
    paymentDetail(row) {
      const id = row.id;
      return this.$router.push("paymentDetail?id=" + id);
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.page = 1;
      this.getList();
    },
    stateMap(state) {
      switch (state) {
        case 1:
          return this.$t('待审核')
        case 2:
          return this.$t('已审核待核销')
        case 3:
          return this.$t('审批驳回')
        case 4:
          return this.$t('已核销')
      }
    },
    /** 新增按钮操作 */
    handleAdd(id) {
      return this.$router.push("creatPayment?id=" + id);
    },
    examineClick(id) {
      return this.$router.push("paymentExamine?id=" + id);
    },
    deleteClick(row) {
      const id = row.id;
      this.$modal.confirm(this.$t('是否确认删除该付款单') + '?').then(function () {
        return deletePayment(id);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess(this.$t('删除成功'));
      }).catch(() => {
      });
    },
    verificationClick(row) {
      const id = row.id;
      this.$modal.confirm(this.$t('您确认要核销吗') + '?').then(function () {
        return paymentVerification(id);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess(this.$t('核销成功'));
      }).catch(() => {
      });
    },
    verificationCancelClick(row) {
      const id = row.id;
      this.$modal.confirm(this.$t('您确认要反核销吗') + '?').then(function () {
        return paymentVerificationCancel(id);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess(this.$t('反核销成功'));
      }).catch(() => {
      });
    },
    verifyCancelClick(row) {
      const id = row.id;
      this.$modal.confirm(this.$t('您确认要反审核吗') + '?').then(function () {
        return paymentVerifyCancel(id);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess(this.$t('反审核成功'));
      }).catch(() => {
      });
    },
    toprint(id) {
      return this.$router.push("printPaymentVoucher?id=" + id);
    },
    submitForm() {
      this.open = false;
    },
    /** 取消按钮 */
    cancel() {
      this.open = false;
    },
    bridgeFn(index, title, row) {
      this.examineIndex = index;
      this.examineTitle = title;
      this.examineData = row;
      this.examineShow = true;
    },
    cancelWriteOffClick() {
      if(!this.cancelReason){
        return this.$message.warning(this.$t('请输入申请理由!'))
      }
      let resolve = (val = this.$t('操作成功吗!')) => {
        this.getList();
        this.$message.success(val);
        this.examineShow = false;
      }
      let reject = () => {
        this.examineShow = false;
      }
      let {id: paymentId,paymentNo} = this.examineData
      let p = {paymentId, remark: this.cancelReason, paymentNo, reason:this.cancelReason }
      switch (this.examineIndex) {
        case 1:
          // 取消审核
          cancelFinancePaymentApproval(p).then(()=>resolve(this.$t('取消付款单审核成功!')),reject)
          break
        // 取消付款单反审核
        case 2:
          cancelFinancePaymentApprovalNo(p).then(()=>resolve(this.$t('取消付款单反审核成功!')),reject)
          break;
        case 3:
          //取消付款单核销
          cancelFinancePaymentWriteOffNo(p).then(()=>resolve(this.$t('取消付款单核销成功!')),reject)
          break
        case 4:
      // 反审核
          paymentVerifyCancel(p).then(()=>resolve(this.$t('提交付款单反审核成功,请耐心等待审核结果!')),reject)
          break;
        case 5:
      // 核销
          paymentVerification(p).then(()=>resolve(this.$t('提交付款单核销成功,请耐心等待审核结果!')),reject);
          break;
        case 6:
            // 反核销
            paymentVerificationCancel(p).then(()=>resolve(this.$t('提交付款单反核销成功,请耐心等待审核结果!')),reject)
          break;
        case 7:
          //  取消反核销
          paymentCancelFinancePaymentWriteOffNo(p).then(()=>resolve(this.$t('取消付款单反核销成功!')),reject)
          break;


      }
    }
  },
};
</script>

<style scoped>
.card {
  margin-top: 20px;
}

.dialog-footer {
  padding: 30px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  height: 160px;
}

.card-title {
  font-size: 18px;
  font-weight: bold;
}
</style>