<!--
  @description: 采购人/代理机构-委托代理合同-列表
  @author: 肖文龙
  @routerPath:/consignContract/consignContractList
  @date： 2019-11-27 14:17:05
-->
<template>
  <div>
    <!--标题-->
    <div class="title title_border p0-16">
      <i class="el-icon-s-home" />委托合同列表
    </div>
    <section class="p0-16">
      <!--查询条件-->
      <div class="crud_menu_title clearfix">
        <span class="icon-line fl">查询条件</span>
        <span class="fr pointer" @click="handleToggleSearch">
          <el-link
            :underline="false"
            :class="toggleSearchStatus?'arrow-is-active':''"
            type="primary"
            class="toggleSearchStatus icon el-icon-arrow-down"
          />
          {{ toggleSearchStatus?'收起高级查询' :'展开高级查询' }}
        </span>
      </div>
      <section :class="{'SearchContent_show':toggleSearchStatus}" class="clearfix SearchContent">
        <div class="SearchContent_leftInput fl">
          <el-form
            ref="searchForm"
            :model="searchForm"
            inline
          >
            <!--委托合同编码-->
            <el-form-item ref="contractNo" label="委托合同编码" prop="contractNo">
              <el-input
                v-model.trim="searchForm.contractNo"
                placeholder="委托合同编码"
                width="228px"
                @keyup.enter.native="onSearch"
              />
            </el-form-item>
            <!--委托合同名称-->
            <el-form-item
              ref="contractName"
              label="委托合同名称"
              prop="contractName"
            >
              <el-input
                v-model.trim="searchForm.contractName"
                placeholder="委托合同名称"
                width="228px"
                @keyup.enter.native="onSearch"
              />
            </el-form-item>
            <!--委托人-->
            <el-form-item
              ref="consignorName"
              label="委托人"
              prop="consignorName"
            >
              <el-input
                v-model.trim="searchForm.consignorName"
                placeholder="委托人"
                width="228px"
                @keyup.enter.native="onSearch"
              />
            </el-form-item>
            <!--委托合同状态-->
            <el-form-item
              ref="status"
              label="委托合同状态"
              prop="status"
            >
              <el-select v-model="searchForm.status" placeholder="请选择" @change="onSearch">
                <el-option
                  v-for="item in consignContractStatusList"
                  :key="item.typecode"
                  :label="item.typename"
                  :value="item.typecode"
                />
              </el-select>
            </el-form-item>
            <!--合同签约日期-->
            <el-form-item label="合同签约日期">
              <el-date-picker
                v-model="date"
                type="daterange"
                start-placeholder="开始日期"
                end-placeholder="结束日期"
                style="width:230px"
                @change="handleCreateTime"
              />
            </el-form-item>
            <!--创建人-->
            <el-form-item
              ref="createUserName"
              label="创建人"
              prop="createUserName"
            >
              <el-input
                v-model.trim="searchForm.createUserName"
                placeholder="创建人"
                width="228px"
                @keyup.enter.native="onSearch"
              />
            </el-form-item>
          </el-form>
        </div>
        <div class="fr">
          <el-button
            type="primary"
            @click="onSearch"
          >
            搜 索
          </el-button>
          <el-button
            type="info"
            plain
            @click="resetForm('searchForm')"
          >
            重 置
          </el-button>
        </div>
      </section>
      <!--查询结果-->
      <div class="crud_menu_title">
        <span class="icon-line">查询结果</span>
      </div>
      <div class="mb10">
        <el-button type="primary" @click="consignContractAdd()">
          新 增
        </el-button>
      </div>
      <section>
        <el-table
          ref="smallTable"
          :data="tableData"
        >
          <el-table-column type="index" label="序号" align="center" width="60" fixed="left" />
          <el-table-column
            prop="contractNo"
            header-align="center"
            align="center"
            width="120"
            fixed="left"
            label="委托合同编码"
          />
          <el-table-column
            prop="contractName"
            header-align="center"
            min-width="230"
            label="委托合同名称"
          />
          <el-table-column
            prop="consignorName"
            label="委托人"
            header-align="center"
            min-width="230"
          />
          <el-table-column
            prop="signDate"
            label="合同签约日期"
            width="125"
            header-align="center"
            align="center"
          >
            <template slot-scope="scope">
              <span>{{ scope.row.signDate && $Moment(scope.row.signDate).format(momentDate) }}</span>
            </template>
          </el-table-column>
          <el-table-column
            label="委托合同状态"
            header-align="center"
            align="center"
            width="120"
          >
            <template slot-scope="scope">
              <span v-if="scope.row.useStatus==='00'">已保存</span>
              <span v-if="scope.row.auditStatus==='00'">待审批</span>
              <span v-if="scope.row.auditStatus==='01' && scope.row.useStatus!=='02'">已生效</span>
              <span v-if="scope.row.auditStatus==='02'">审核驳回</span>
              <span v-if="scope.row.contractStatus==='01'">已失效</span>
            </template>
          </el-table-column>
          <el-table-column
            prop="createUserName"
            label="创建人"
            width="120px"
            header-align="center"
            align="center"
          />
          <el-table-column
            label="创建时间"
            header-align="center"
            align="center"
            width="140"
            prop="createDate"
          >
            <template slot-scope="scope">
              {{ scope.row.createDate && $Moment(scope.row.createDate).format(momentDateTime) }}
            </template>
          </el-table-column>
          <el-table-column
            label="操作"
            header-align="center"
            align="left"
            width="400"
            fixed="right"
          >
            <template slot-scope="scope">
              <!--useStatus 00临时,01正式,02作废
              auditStatus 审核状态 00:待审核 01:审核通过 02:审核不通过
              contractStatus 合同状态 00 已生效 01 失效-->
              <el-link type="primary" @click.stop="intoContract(scope.row.id)">
                [查看]
              </el-link>
              <el-link
                v-if="scope.row.useStatus==='01' && consignorConfigType"
                type="primary"
                @click.stop="handleDetail(scope.row.id)"
              >
                [流程追踪]
              </el-link>
              <!--状态为已保存、审批驳回的委托合同，显示【修改】按钮-->
              <el-link
                v-if="scope.row.useStatus==='00' || scope.row.auditStatus==='02'"
                type="primary"
                @click.stop="modificationContract(scope.row.id)"
              >
                [修改]
              </el-link>
              <!--状态为已保存、审批驳回的委托合同，显示【删除】按钮-->
              <el-link
                v-if="scope.row.useStatus==='00' || scope.row.auditStatus==='02'"
                type="primary"
                @click.stop="deleteContract(scope.row.id)"
              >
                [删除]
              </el-link>
              <template v-if="systemSource==='01'">
                <!--状态为已生效的委托合同，显示【补录】按钮-->
                <el-link
                  v-if="scope.row.contractStatus==='00' && scope.row.auditStatus==='01'"
                  type="primary"
                  @click.stop="cearingContract(scope.row.id)"
                >
                  [补录]
                </el-link>
                <!--状态为已生效的委托合同，显示【变更】按钮-->
                <el-link
                  v-if="scope.row.contractStatus==='00' && scope.row.auditStatus==='01'"
                  type="primary"
                  @click.stop="changeContract(scope.row.id)"
                >
                  [变更]
                </el-link>
                <!--状态为已生效的委托合同，显示【失效】按钮-->
                <el-link
                  v-if="scope.row.contractStatus==='00' && scope.row.auditStatus==='01'"
                  type="primary"
                  @click.stop="disabledContract(scope.row.id)"
                >
                  [失效]
                </el-link>
                <!--状态为已生效的委托合同，显示【废弃】按钮-->
                <el-link
                  v-if="scope.row.contractStatus==='00' && scope.row.auditStatus==='01'"
                  type="primary"
                  @click.stop="discardContract(scope.row.id)"
                >
                  [废弃]
                </el-link>
                <!--对已生效的委托合同，显示【招标项目】按钮-->
                <el-link
                  v-if="scope.row.contractStatus==='00' && scope.row.auditStatus==='01'"
                  type="primary"
                  @click.stop="intoProject(scope.row.id)"
                >
                  [招标项目]
                </el-link>
              </template>
            </template>
          </el-table-column>
        </el-table>
        <!--分页组件-->
        <pagination :pagination-data="paginationData" @change="loadData" />
      </section>
    </section>
    <!--流程追踪查看弹框-->
    <flow-detail-dialog ref="tracingFlow" />
  </div>
</template>

<script>
/* api接口*/
import {
  getContractByPage,
  deleteConstractById,
  discardOrInvalidContract,
  getRelevanceTenderProjectStatusVo
} from '@/api/purchasePlan/taskplan'
/* 混合开发方法-参数字段*/
import { ListMixin } from '@/mixins/ListMixin'// 分页
import { consignContractMixin } from '../../mixins/consignContractMixin'// 字典信息
import { filterObj } from '@/assets/js/utils'
/* 分页组件*/
import pagination from '@comp/common/pagination/pagination'
import flowDetailDialog from '@views/work/process/flowDetail-dialog'
export default {
  name: 'ConsignContractList',
  components: {
    pagination,
    flowDetailDialog
  },
  mixins: [ListMixin, consignContractMixin],
  data() {
    return {
      date: '',
      searchForm: {
        contractNo: '', // 委托合同编码
        contractName: '', // 委托合同名称
        consignorName: '', // 委托人姓名
        status: '', // 审核状态:无审批: 00暂存，01待审批,01审核中,03驳回,02通过
        submitAuditStartDate: '', // 创建开始时间
        submitAuditEndDate: '', // 创建结束时间
        createUserName: '' // 创建人
      },
      tableData: [],
      systemSource: '' // 系统来源 00:新产品 01:hn
    }
  },
  created() {
    this.loadData()
    this.getSystemDecryptMethod()
  },
  methods: {
    // 获取数据
    loadData() {
      const params = this.getQueryParams() // 查询条件
      getContractByPage(params).then(response => {
        this.tableData = response.data.records
        this.paginationData.total = response.data.total
      }).catch(() => {})
    },
    // 查询条件
    getQueryParams() {
      const param = Object.assign({}, this.searchForm)
      param.pageNo = this.paginationData.pageNo
      param.pageSize = this.paginationData.pageSize
      return filterObj(param)
    },
    handleCreateTime(val) {
      this.searchForm.signStartDate = this.$Moment(val[0]).format(this.momentDate) // 合同签约开始时间
      this.searchForm.signEndDate = this.$Moment(val[1]).format(this.momentDate) // 合同签约结束时间
    },
    // 搜索
    onSearch() {
      this.paginationData.pageNo = 1
      this.paginationData.pageSize = 10
      this.loadData()
    },
    // 重置
    resetForm() {
      Object.keys(this.searchForm).forEach(val => {
        this.searchForm[val] = ''
      })
      this.date = ''
      this.searchForm.pageNo = 1
      this.searchForm.pageSize = 10
      this.loadData()
    },
    // 新增委托合同
    consignContractAdd() {
      this.$router.push({ path: '/consignContract/consignContractAdd' })
    },
    // 修改
    /* 1）状态为已保存、审批驳回的委托合同，显示【修改】按钮。
（2）点此进入委托合同信息回填可编辑页面。
*/
    modificationContract(id) {
      this.$router.push({
        name: 'ConsignContractAdd',
        params: { id }
      })
    },
    // 删除
    /*
（1）状态为已保存、审批驳回的委托合同，显示【删除】按钮。
（2）点击【删除】按钮，弹框进行提示。
（3）弹框文案：“是否确定删除，删除后信息将无法恢复！”；弹框按钮：确定、取消。
（4）弹框按钮：点击【确定】删除本条委托合同记录；点击【取消】按钮，关闭弹框。
*/
    deleteContract(id) {
      this.$confirm('是否确定删除，删除后信息将无法恢复！', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        confirmButtonClass: 'confirmBtn',
        cancelButtonClass: 'cancelBtn',
        type: 'warning'
      }).then(() => {
        deleteConstractById(id).then(() => {
          this.$message({
            type: 'success',
            message: '删除成功'
          })
          this.loadData()
        })
      }).catch(() => {})
    },
    // 补录
    /*
（1）状态为已生效的委托合同，显示【补录】按钮。
（2）点击【补录】按钮，进入委托合同信息回填页面。
*/

    cearingContract(id) {
      this.$router.push({
        path: '/consignContract/consignContractAdd',
        name: 'ConsignContractAdd',
        params: { id }
      })
    },
    // 变更
    /*
  （1）状态为已生效的委托合同，显示【变更】按钮；
  （2）点击【变更】按钮进入信回填可编辑页面。
*/
    changeContract(id) {
      this.$router.push({
        path: '/consignContract/consignContractAdd',
        name: 'ConsignContractAdd',
        params: { id }
      })
    },
    // 失效
    /*
  （1）状态为已生效的委托合同，显示【失效】按钮。
  （2）点击【失效】按钮，系统判断是否关联招标项。
  （3）若已关联招标项目，弹框提示“合同已被招标项目关联！无法失效！”。
  （4）若未关联招标项目，弹框提示“是否确定失效”，同时弹框按钮为【确定】【取消】。
*/
    disabledContract(id) {
      // 根据委托合同id获取是否关联招标项目
      const params = {
        contractId: id
      }
      getRelevanceTenderProjectStatusVo(params).then(res => {
        const { isRelevanceTenderProject } = res.data // 是否关联招标项目 00:未关联 01:已关联
        if (isRelevanceTenderProject === '00') {
          this.$confirm('是否确定失效', '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            confirmButtonClass: 'confirmBtn',
            cancelButtonClass: 'cancelBtn',
            type: 'warning'
          }).then(() => {
            // 失效合同
            this.handleDiscardOrInvalidContract(id, '01')
          }).catch(() => {})
        } else {
          /* 合同已关联标包*/
          this.$message({
            message: '合同已被招标项目关联！无法失效！',
            type: 'warning'
          })
        }
      })
    },
    // 废弃
    /* （1）状态为已生效的委托合同，显示【废弃】按钮。
（2）点击【废弃】按钮，系统判断是否关联招标项。
（3）若已关联招标项目，弹框提示“合同已被招标项目关联！无法废弃！”。
（4）若未关联招标项目，弹框提示“是否确定废弃”，同时弹框按钮为【确定】【取消】。*/
    discardContract(id) {
      // 根据委托合同id获取是否关联招标项目
      const params = {
        contractId: id
      }
      getRelevanceTenderProjectStatusVo(params).then(res => {
        const { isRelevanceTenderProject } = res.data // 是否关联招标项目 00:未关联 01:已关联
        if (isRelevanceTenderProject === '00') {
          this.$confirm('是否确定废弃', '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            confirmButtonClass: 'confirmBtn',
            cancelButtonClass: 'cancelBtn',
            type: 'warning'
          }).then(() => {
            // 失效合同
            this.handleDiscardOrInvalidContract(id, '00')
          }).catch(() => {})
        } else {
          this.$message({
            message: '合同已被招标项目关联！无法废弃！',
            type: 'warning'
          })
        }
      })
    },
    // 失效或废弃合同
    handleDiscardOrInvalidContract(id, operationType) {
      const params = {
        contractId: id, // 委托合同id
        operationType: operationType // 00:废弃 01:失效
      }
      discardOrInvalidContract(params).then(() => {
        this.$message({
          message: '操作成功',
          type: 'success'
        })
        this.loadData()
      })
    },
    // 查看
    intoContract(row) {
      this.$router.push({
        path: '/consignContract/consignContractDetail',
        name: 'ConsignContractDetail',
        params: {
          detailType: '00', // 委托合同标题展示 00 查看委托合同 01 台账查看委托合同 02 审批委托合同
          id: row
        }
      })
    },
    // 招标项目
    intoProject(id) {
      // 查看关联招标项目
      this.$router.push({
        path: '/consignContract/consignContractCorrelationList',
        name: 'ConsignContractCorrelationList',
        params: { id }
      })
    },
    /* 系统来源 00:新产品 01:hn*/
    getSystemDecryptMethod() {
      this.$store.dispatch('getSystemSourceConfig').then(() => {
        this.systemSource = this.$store.getters.systemConfigSourceVo.systemSource
      }).catch(() => {
      })
    },
    // 流程追踪详情
    handleDetail(id) {
      this.$refs.tracingFlow.openDialogInitData(id)
    }
  }
}
</script>

<style lang="less" scoped>
</style>
