|
|
@@ -0,0 +1,1526 @@
|
|
|
+<template>
|
|
|
+ <div class="contract">
|
|
|
+ <el-row>
|
|
|
+ <el-form
|
|
|
+ :inline="true"
|
|
|
+ :model="formInline"
|
|
|
+ class="demo-form-inline"
|
|
|
+ label-width="130px"
|
|
|
+ >
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="合同信息">
|
|
|
+ <el-input
|
|
|
+ v-model="formInline.user"
|
|
|
+ placeholder="请输入合同信息"
|
|
|
+ size="small"
|
|
|
+ style="width: 220px"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="供应商名称">
|
|
|
+ <el-cascader
|
|
|
+ :options="esmInsCompanyList"
|
|
|
+ :props="{
|
|
|
+ checkStrictly: true,
|
|
|
+ value: 'id',
|
|
|
+ label: 'name',
|
|
|
+ children: 'children',
|
|
|
+ }"
|
|
|
+ clearable
|
|
|
+ ></el-cascader>
|
|
|
+ <!-- <el-select
|
|
|
+ v-model="formInline.user"
|
|
|
+ placeholder="供应商名称"
|
|
|
+ size="small"
|
|
|
+ filterable
|
|
|
+ >
|
|
|
+ <el-option>全部</el-option>
|
|
|
+ </el-select> -->
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="甲方">
|
|
|
+ <el-select
|
|
|
+ size="small"
|
|
|
+ v-model="formInline.externalCompaniesId"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ style="width: 220px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in accountList"
|
|
|
+ :key="item.accountId"
|
|
|
+ :value="item.accountId"
|
|
|
+ :label="item.accountName"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="乙方">
|
|
|
+ <el-select
|
|
|
+ size="small"
|
|
|
+ v-model="formInline.internalCompanyId"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ style="width: 220px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in accountList"
|
|
|
+ :key="item.accountId"
|
|
|
+ :value="item.accountId"
|
|
|
+ :label="item.accountName"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="合同类型">
|
|
|
+ <el-select
|
|
|
+ size="small"
|
|
|
+ v-model="formInline.contractType"
|
|
|
+ style="width: 220px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in contractTypeList"
|
|
|
+ :key="item.id"
|
|
|
+ :value="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="状态">
|
|
|
+ <el-select
|
|
|
+ v-model="formInline.contractStatus"
|
|
|
+ placeholder="状态"
|
|
|
+ size="small"
|
|
|
+ filterable
|
|
|
+ style="width: 220px"
|
|
|
+ >
|
|
|
+ <el-option value="all" label="全部">全部</el-option>
|
|
|
+ <el-option value="1" label="失效">失效</el-option>
|
|
|
+ <el-option value="0" label="有效">有效</el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label=" ">
|
|
|
+ <kt-button
|
|
|
+ type="primary"
|
|
|
+ size="small"
|
|
|
+ @click="getList"
|
|
|
+ label="查询"
|
|
|
+ ></kt-button>
|
|
|
+ <kt-button
|
|
|
+ type="primary"
|
|
|
+ size="small"
|
|
|
+ @click="addContract"
|
|
|
+ perms="fnc:contract:save"
|
|
|
+ label="新增"
|
|
|
+ ></kt-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-form>
|
|
|
+ </el-row>
|
|
|
+ <el-table
|
|
|
+ size="small"
|
|
|
+ :data="tableData"
|
|
|
+ style="width: 100%"
|
|
|
+ border
|
|
|
+ :header-cell-style="{
|
|
|
+ background: '#F2F7FC',
|
|
|
+ fontWeight: '700',
|
|
|
+ color: '#606266',
|
|
|
+ }"
|
|
|
+ highlight-current-row
|
|
|
+ >
|
|
|
+ <el-table-column prop="contractCode" label="合同编码" width="180">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="contractName" label="合同名称" width="180">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="contractType" label="合同类型">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div>
|
|
|
+ {{
|
|
|
+ contractTypeList
|
|
|
+ .map((v, i) => {
|
|
|
+ // return scope.row.contractType == v.id ? v.label : "";
|
|
|
+ if (scope.row.contractType == v.value) {
|
|
|
+ return v.label;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .join("")
|
|
|
+ }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="externalCompaniesName" label="甲方">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="internalCompanyName" label="乙方">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="supplierName" label="供应商名称">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div v-for="(item, index) in scope.row.namesimpleList" :key="index">
|
|
|
+ {{ index < 3 ? item : "" }}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-tooltip
|
|
|
+ class="item"
|
|
|
+ effect="dark"
|
|
|
+ :content="
|
|
|
+ scope.row.namesimpleList
|
|
|
+ .map((v, i) => {
|
|
|
+ return v;
|
|
|
+ })
|
|
|
+ .join(',')
|
|
|
+ "
|
|
|
+ placement="top"
|
|
|
+ >
|
|
|
+ <span v-show="scope.row.namesimpleList.length > 3">...</span>
|
|
|
+ </el-tooltip>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="effectiveDate" label="生效日期"> </el-table-column>
|
|
|
+ <el-table-column prop="expiringDate" label="失效日期"> </el-table-column>
|
|
|
+ <el-table-column prop="shouldPostponed" label="是否顺延">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-tag
|
|
|
+ :type="scope.row.shouldPostponed == '0' ? 'success' : 'danger'"
|
|
|
+ effect="dark"
|
|
|
+ >
|
|
|
+ {{ scope.row.shouldPostponed == "0" ? "是" : "否" }}
|
|
|
+ </el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="shouldPostponedEffectiveDate"
|
|
|
+ label="顺延后失效日期"
|
|
|
+ width="180"
|
|
|
+ >
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="operation" label="操作" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <kt-button
|
|
|
+ size="small"
|
|
|
+ type="primary"
|
|
|
+ @click="edit(scope.row)"
|
|
|
+ perms="fnc:contract:update"
|
|
|
+ label="编辑"
|
|
|
+ ></kt-button>
|
|
|
+ <el-dropdown>
|
|
|
+ <el-button type="primary" size="small">
|
|
|
+ 更多<i class="el-icon-arrow-down el-icon--right"></i>
|
|
|
+ </el-button>
|
|
|
+ <el-dropdown-menu slot="dropdown">
|
|
|
+ <el-dropdown-item command="supplement">
|
|
|
+ <kt-button
|
|
|
+ size="small"
|
|
|
+ type="primary"
|
|
|
+ @click.native="handleCommand('supplement', scope.row)"
|
|
|
+ perms="fnc:contract:copyContract"
|
|
|
+ label="补充协议"
|
|
|
+ ></kt-button>
|
|
|
+ </el-dropdown-item>
|
|
|
+ <el-dropdown-item command="watch">
|
|
|
+ <kt-button
|
|
|
+ size="small"
|
|
|
+ type="primary"
|
|
|
+ @click.native="handleCommand('watch', scope.row)"
|
|
|
+ perms="fnc:contract:seeFile"
|
|
|
+ label="查看附件"
|
|
|
+ ></kt-button>
|
|
|
+ </el-dropdown-item>
|
|
|
+ <el-dropdown-item command="message">
|
|
|
+ <kt-button
|
|
|
+ size="small"
|
|
|
+ type="primary"
|
|
|
+ @click.native="handleCommand('message', scope.row)"
|
|
|
+ perms="fnc:contract:view"
|
|
|
+ label="查看详情"
|
|
|
+ ></kt-button>
|
|
|
+ </el-dropdown-item>
|
|
|
+ <el-dropdown-item command="error">
|
|
|
+ <kt-button
|
|
|
+ size="small"
|
|
|
+ type="primary"
|
|
|
+ @click.native="handleCommand('error', scope.row)"
|
|
|
+ perms="fnc:contract:updateFileStatus"
|
|
|
+ label="设置为失效"
|
|
|
+ ></kt-button>
|
|
|
+ </el-dropdown-item>
|
|
|
+ <!-- <el-dropdown-item>双皮奶</el-dropdown-item>
|
|
|
+ <el-dropdown-item>蚵仔煎</el-dropdown-item> -->
|
|
|
+ </el-dropdown-menu>
|
|
|
+ </el-dropdown>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <el-pagination
|
|
|
+ @size-change="handleSizeChange"
|
|
|
+ @current-change="handleCurrentChange"
|
|
|
+ :current-page="pageInfo.pageNum"
|
|
|
+ :page-sizes="[10, 20, 30, 50]"
|
|
|
+ :page-size="pageInfo.pageSize"
|
|
|
+ layout=" sizes, prev, pager, next, jumper"
|
|
|
+ :total="0"
|
|
|
+ >
|
|
|
+ </el-pagination>
|
|
|
+ <el-dialog
|
|
|
+ :title="title"
|
|
|
+ :visible.sync="dialogVisible"
|
|
|
+ width="50%"
|
|
|
+ :before-close="handleClose"
|
|
|
+ >
|
|
|
+ <el-row>
|
|
|
+ <el-form :model="form" :inline="true" :rules="rules" ref="ruleForm">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="合同编号" label-width="130px">
|
|
|
+ <el-input
|
|
|
+ size="small"
|
|
|
+ v-model="form.contractCode"
|
|
|
+ autocomplete="off"
|
|
|
+ :disabled="true"
|
|
|
+ style="width: 220px"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="合同名称"
|
|
|
+ label-width="130px"
|
|
|
+ prop="contractName"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ v-model="form.contractName"
|
|
|
+ placeholder="请输入合同名称"
|
|
|
+ size="small"
|
|
|
+ style="width: 220px"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="合同类型"
|
|
|
+ label-width="130px"
|
|
|
+ prop="contractType"
|
|
|
+ >
|
|
|
+ <!-- <treeSelect :options="data" /> -->
|
|
|
+ <el-select
|
|
|
+ size="small"
|
|
|
+ v-model="form.contractType"
|
|
|
+ style="width: 220px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in contractTypeList"
|
|
|
+ :key="item.id"
|
|
|
+ :value="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="甲方"
|
|
|
+ label-width="130px"
|
|
|
+ prop="externalCompaniesId"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ size="small"
|
|
|
+ v-model="form.externalCompaniesId"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ @change="companyChange(form.externalCompaniesId, '1')"
|
|
|
+ style="width: 220px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in accountList"
|
|
|
+ :key="item.accountId"
|
|
|
+ :value="item.accountId"
|
|
|
+ :label="item.accountName"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="甲方账户类型" label-width="130px">
|
|
|
+ <el-input
|
|
|
+ size="small"
|
|
|
+ v-model="form.externType"
|
|
|
+ autocomplete="off"
|
|
|
+ :disabled="true"
|
|
|
+ style="width: 220px"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="乙方"
|
|
|
+ label-width="130px"
|
|
|
+ prop="internalCompanyId"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ size="small"
|
|
|
+ v-model="form.internalCompanyId"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ @change="companyChange(form.internalCompanyId, '2')"
|
|
|
+ style="width: 220px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in accountList"
|
|
|
+ :key="item.accountId"
|
|
|
+ :value="item.accountId"
|
|
|
+ :label="item.accountName"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="乙方账户类型" label-width="130px">
|
|
|
+ <el-input
|
|
|
+ size="small"
|
|
|
+ v-model="form.internalType"
|
|
|
+ autocomplete="off"
|
|
|
+ :disabled="true"
|
|
|
+ style="width: 220px"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item
|
|
|
+ label="供应商"
|
|
|
+ label-width="130px"
|
|
|
+ class="supplier"
|
|
|
+ prop="supplierIdList"
|
|
|
+ >
|
|
|
+ <!-- <treeSelect :options="esmInsCompanyList" @getValue="getValue" /> -->
|
|
|
+ <treeselect
|
|
|
+ v-model="form.supplierIdList"
|
|
|
+ placeholder="请选择"
|
|
|
+ :options="esmInsCompanyList"
|
|
|
+ :normalizer="normalizer"
|
|
|
+ :multiple="true"
|
|
|
+ @select="handleSelect"
|
|
|
+ :children-as-objects="true"
|
|
|
+ ></treeselect>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="是否为开口合同"
|
|
|
+ label-width="130px"
|
|
|
+ prop="isOpenContract"
|
|
|
+ >
|
|
|
+ <!-- <treeSelect :options="data" /> -->
|
|
|
+ <!-- <el-switch
|
|
|
+ v-model="form.isOpenContract"
|
|
|
+ active-text="是"
|
|
|
+ inactive-text="否"
|
|
|
+ >
|
|
|
+ </el-switch> -->
|
|
|
+ <el-radio v-model="form.isOpenContract" label="0">是</el-radio>
|
|
|
+ <el-radio v-model="form.isOpenContract" label="1">否</el-radio>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="生效日期"
|
|
|
+ label-width="130px"
|
|
|
+ prop="effectiveDate"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ size="small"
|
|
|
+ v-model="form.effectiveDate"
|
|
|
+ type="datetime"
|
|
|
+ placeholder="选择日期时间"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="失效日期"
|
|
|
+ label-width="130px"
|
|
|
+ :rules="isRequired('expiringDate')"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ size="small"
|
|
|
+ v-model="form.expiringDate"
|
|
|
+ type="datetime"
|
|
|
+ :default-time="'23:59:59'"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ placeholder="选择失效日期时间"
|
|
|
+ :picker-options="pickerOptionsEnd"
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="是否顺延" label-width="130px">
|
|
|
+ <el-radio v-model="form.shouldPostponed" label="0">是</el-radio>
|
|
|
+ <el-radio v-model="form.shouldPostponed" label="1">否</el-radio>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item
|
|
|
+ label="顺延时间"
|
|
|
+ label-width="180px"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <div style="width: 100%; display: flex; align-items: center">
|
|
|
+ <el-radio
|
|
|
+ :disabled="form.shouldPostponed != 0"
|
|
|
+ v-model="date"
|
|
|
+ label="year"
|
|
|
+ >年</el-radio
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ :disabled="date != 'year'"
|
|
|
+ size="small"
|
|
|
+ style="width: 180px"
|
|
|
+ v-model="year"
|
|
|
+ @input="(value) => (year = value.replace(/[^\d]/g, ''))"
|
|
|
+ placeholder="请输入年"
|
|
|
+ @change="timeChange('year')"
|
|
|
+ ></el-input>
|
|
|
+ </div>
|
|
|
+ <div style="width: 100%; display: flex; align-items: center">
|
|
|
+ <el-radio
|
|
|
+ :disabled="form.shouldPostponed != 0"
|
|
|
+ v-model="date"
|
|
|
+ label="month"
|
|
|
+ >月</el-radio
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ :disabled="date != 'month'"
|
|
|
+ size="small"
|
|
|
+ style="width: 180px"
|
|
|
+ v-model="month"
|
|
|
+ @input="(value) => (month = value.replace(/[^\d]/g, ''))"
|
|
|
+ placeholder="请输入月"
|
|
|
+ @change="timeChange('month')"
|
|
|
+ ></el-input>
|
|
|
+ </div>
|
|
|
+ <div style="width: 100%; display: flex; align-items: center">
|
|
|
+ <el-radio
|
|
|
+ :disabled="form.shouldPostponed != 0"
|
|
|
+ v-model="date"
|
|
|
+ label="day"
|
|
|
+ >天</el-radio
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ :disabled="date != 'day'"
|
|
|
+ size="small"
|
|
|
+ style="width: 180px"
|
|
|
+ v-model="days"
|
|
|
+ @input="(value) => (days = value.replace(/[^\d]/g, ''))"
|
|
|
+ placeholder="请输入天"
|
|
|
+ @change="timeChange('days')"
|
|
|
+ ></el-input>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="顺延后失效日期" label-width="160px">
|
|
|
+ <el-date-picker
|
|
|
+ size="small"
|
|
|
+ v-model="form.shouldPostponedEffectiveDate"
|
|
|
+ type="datetime"
|
|
|
+ disabled
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="合同附件" label-width="130px">
|
|
|
+ <el-upload
|
|
|
+ class="upload-demo"
|
|
|
+ action=""
|
|
|
+ multiple
|
|
|
+ :limit="10"
|
|
|
+ :file-list="form.filePathIdList"
|
|
|
+ :http-request="httpRequest"
|
|
|
+ :on-remove="handleRemove"
|
|
|
+ accept=".pdf,.doc,.docx"
|
|
|
+ >
|
|
|
+ <el-button size="small" type="primary">点击上传</el-button>
|
|
|
+ <!-- <div slot="tip" class="el-upload__tip">
|
|
|
+ 只能上传jpg/png文件,且不超过500kb
|
|
|
+ </div> -->
|
|
|
+ </el-upload>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-form>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="dialogVisible = false">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="submit">确 定</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+ <el-dialog title="附件" :visible.sync="fileDialog" width="50%">
|
|
|
+ <div class="block">
|
|
|
+ <el-carousel trigger="click" height="600px" :autoplay="false">
|
|
|
+ <el-carousel-item
|
|
|
+ v-for="item in showFileList"
|
|
|
+ :key="item.url"
|
|
|
+ style="height: 1400px; overflow-y: auto"
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ style="
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <kt-button
|
|
|
+ type="primary"
|
|
|
+ icon="el-icon-download"
|
|
|
+ size="small"
|
|
|
+ label="下载"
|
|
|
+ perms="fnc:contract:download"
|
|
|
+ ></kt-button>
|
|
|
+ </div>
|
|
|
+ <vue-office-docx
|
|
|
+ v-show="item.url != null ? item.url.includes('.docx') : false"
|
|
|
+ :src="base + item.url"
|
|
|
+ />
|
|
|
+ <vue-office-pdf
|
|
|
+ v-show="item.url != null ? item.url.includes('.pdf') : false"
|
|
|
+ :src="base + item.url"
|
|
|
+ />
|
|
|
+ </el-carousel-item>
|
|
|
+ </el-carousel>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <el-dialog title="合同列表" :visible.sync="tableDialog" width="50%">
|
|
|
+ <el-table
|
|
|
+ ref="multipleTable"
|
|
|
+ :data="statusTable"
|
|
|
+ tooltip-effect="dark"
|
|
|
+ style="width: 100%"
|
|
|
+ @selection-change="handleSelectionChange"
|
|
|
+ >
|
|
|
+ <el-table-column type="selection" width="55"> </el-table-column>
|
|
|
+ <el-table-column prop="contractCode" label="合同编码">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="contractName" label="合同名称">
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column prop="isOpenContract" label="是否顺延">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-tag
|
|
|
+ :type="scope.row.isOpenContract == '0' ? 'success' : 'danger'"
|
|
|
+ effect="dark"
|
|
|
+ >
|
|
|
+ {{ scope.row.isOpenContract == "0" ? "是" : "否" }}
|
|
|
+ </el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="effectiveDate" label="生效日期">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="expiringDate" label="失效日期">
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="tableDialog = false">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="setContract"
|
|
|
+ >将选中的合同置为无效</el-button
|
|
|
+ >
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <el-dialog title="详情" :visible.sync="messageDialog" width="50%">
|
|
|
+ <el-tabs type="border-card">
|
|
|
+ <el-tab-pane v-for="item in statusTable" :key="item.id">
|
|
|
+ <div
|
|
|
+ slot="label"
|
|
|
+ style="display: flex; align-items: center; flex-direction: column"
|
|
|
+ >
|
|
|
+ <div>{{ item.contractName }}</div>
|
|
|
+ <div>{{ item.contractCode }}</div>
|
|
|
+ </div>
|
|
|
+ <el-row>
|
|
|
+ <el-form
|
|
|
+ :model="form"
|
|
|
+ :inline="true"
|
|
|
+ :disabled="true"
|
|
|
+ ref="ruleForm"
|
|
|
+ >
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="合同编号" label-width="130px">
|
|
|
+ <el-input
|
|
|
+ size="small"
|
|
|
+ v-model="item.contractCode"
|
|
|
+ autocomplete="off"
|
|
|
+ :disabled="true"
|
|
|
+ style="width: 220px"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="合同名称"
|
|
|
+ label-width="130px"
|
|
|
+ prop="contractName"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ v-model="item.contractName"
|
|
|
+ placeholder="请输入合同名称"
|
|
|
+ size="small"
|
|
|
+ style="width: 220px"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="合同类型"
|
|
|
+ label-width="130px"
|
|
|
+ prop="contractType"
|
|
|
+ >
|
|
|
+ <!-- <treeSelect :options="data" /> -->
|
|
|
+ <el-select
|
|
|
+ size="small"
|
|
|
+ v-model="item.contractType"
|
|
|
+ style="width: 220px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in contractTypeList"
|
|
|
+ :key="item.id"
|
|
|
+ :value="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="甲方"
|
|
|
+ label-width="130px"
|
|
|
+ prop="externalCompaniesId"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ size="small"
|
|
|
+ v-model="item.externalCompaniesId"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ @change="companyChange(item.externalCompaniesId, '1')"
|
|
|
+ style="width: 220px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in accountList"
|
|
|
+ :key="item.accountId"
|
|
|
+ :value="item.accountId"
|
|
|
+ :label="item.accountName"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="甲方账户类型" label-width="130px">
|
|
|
+ <el-input
|
|
|
+ size="small"
|
|
|
+ v-model="item.externType"
|
|
|
+ autocomplete="off"
|
|
|
+ :disabled="true"
|
|
|
+ style="width: 220px"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="乙方"
|
|
|
+ label-width="130px"
|
|
|
+ prop="internalCompanyId"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ size="small"
|
|
|
+ v-model="item.internalCompanyId"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ @change="companyChange(item.internalCompanyId, '2')"
|
|
|
+ style="width: 220px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in accountList"
|
|
|
+ :key="item.accountId"
|
|
|
+ :value="item.accountId"
|
|
|
+ :label="item.accountName"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="乙方账户类型" label-width="130px">
|
|
|
+ <el-input
|
|
|
+ size="small"
|
|
|
+ v-model="item.internalType"
|
|
|
+ autocomplete="off"
|
|
|
+ :disabled="true"
|
|
|
+ style="width: 220px"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item
|
|
|
+ label="供应商"
|
|
|
+ label-width="130px"
|
|
|
+ class="supplier"
|
|
|
+ prop="supplierIdList"
|
|
|
+ >
|
|
|
+ <!-- <treeSelect :options="esmInsCompanyList" @getValue="getValue" /> -->
|
|
|
+ <treeselect
|
|
|
+ v-model="item.supplierIdList"
|
|
|
+ placeholder="请选择"
|
|
|
+ :options="esmInsCompanyList"
|
|
|
+ :normalizer="normalizer"
|
|
|
+ :multiple="true"
|
|
|
+ @select="handleSelect"
|
|
|
+ :children-as-objects="true"
|
|
|
+ :disabled="true"
|
|
|
+ ></treeselect>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="是否为开口合同"
|
|
|
+ label-width="130px"
|
|
|
+ prop="isOpenContract"
|
|
|
+ >
|
|
|
+ <!-- <treeSelect :options="data" /> -->
|
|
|
+ <!-- <el-switch
|
|
|
+ v-model="item.isOpenContract"
|
|
|
+ active-text="是"
|
|
|
+ inactive-text="否"
|
|
|
+ >
|
|
|
+ </el-switch> -->
|
|
|
+ <el-radio v-model="item.isOpenContract" label="0"
|
|
|
+ >是</el-radio
|
|
|
+ >
|
|
|
+ <el-radio v-model="item.isOpenContract" label="1"
|
|
|
+ >否</el-radio
|
|
|
+ >
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="生效日期"
|
|
|
+ label-width="130px"
|
|
|
+ prop="effectiveDate"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ size="small"
|
|
|
+ v-model="item.effectiveDate"
|
|
|
+ type="datetime"
|
|
|
+ placeholder="选择日期时间"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="失效日期"
|
|
|
+ label-width="130px"
|
|
|
+ :rules="isRequired('expiringDate')"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ size="small"
|
|
|
+ v-model="item.expiringDate"
|
|
|
+ type="datetime"
|
|
|
+ :default-time="'23:59:59'"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ placeholder="选择失效日期时间"
|
|
|
+ :picker-options="pickerOptionsEnd"
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="是否顺延" label-width="130px">
|
|
|
+ <el-radio v-model="item.shouldPostponed" label="0"
|
|
|
+ >是</el-radio
|
|
|
+ >
|
|
|
+ <el-radio v-model="item.shouldPostponed" label="1"
|
|
|
+ >否</el-radio
|
|
|
+ >
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item
|
|
|
+ label="顺延时间"
|
|
|
+ label-width="180px"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <div style="width: 100%; display: flex; align-items: center">
|
|
|
+ <el-radio
|
|
|
+ :disabled="item.shouldPostponed != 0"
|
|
|
+ v-model="date"
|
|
|
+ label="year"
|
|
|
+ >年</el-radio
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ :disabled="date != 'year'"
|
|
|
+ size="small"
|
|
|
+ style="width: 180px"
|
|
|
+ v-model="year"
|
|
|
+ @input="(value) => (year = value.replace(/[^\d]/g, ''))"
|
|
|
+ placeholder="请输入年"
|
|
|
+ @change="timeChange('year')"
|
|
|
+ ></el-input>
|
|
|
+ </div>
|
|
|
+ <div style="width: 100%; display: flex; align-items: center">
|
|
|
+ <el-radio
|
|
|
+ :disabled="item.shouldPostponed != 0"
|
|
|
+ v-model="date"
|
|
|
+ label="month"
|
|
|
+ >月</el-radio
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ :disabled="date != 'month'"
|
|
|
+ size="small"
|
|
|
+ style="width: 180px"
|
|
|
+ v-model="month"
|
|
|
+ @input="(value) => (month = value.replace(/[^\d]/g, ''))"
|
|
|
+ placeholder="请输入月"
|
|
|
+ @change="timeChange('month')"
|
|
|
+ ></el-input>
|
|
|
+ </div>
|
|
|
+ <div style="width: 100%; display: flex; align-items: center">
|
|
|
+ <el-radio
|
|
|
+ :disabled="item.shouldPostponed != 0"
|
|
|
+ v-model="date"
|
|
|
+ label="day"
|
|
|
+ >天</el-radio
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ :disabled="date != 'day'"
|
|
|
+ size="small"
|
|
|
+ style="width: 180px"
|
|
|
+ v-model="days"
|
|
|
+ @input="(value) => (days = value.replace(/[^\d]/g, ''))"
|
|
|
+ placeholder="请输入天"
|
|
|
+ @change="timeChange('days')"
|
|
|
+ ></el-input>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="顺延后失效日期" label-width="160px">
|
|
|
+ <el-date-picker
|
|
|
+ size="small"
|
|
|
+ v-model="item.shouldPostponedEffectiveDate"
|
|
|
+ type="datetime"
|
|
|
+ disabled
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="合同附件" label-width="130px">
|
|
|
+ <el-upload
|
|
|
+ class="upload-demo"
|
|
|
+ action=""
|
|
|
+ multiple
|
|
|
+ :limit="10"
|
|
|
+ :file-list="item.contractFileEntityList"
|
|
|
+ :http-request="httpRequest"
|
|
|
+ :on-remove="handleRemove"
|
|
|
+ accept=".pdf,.doc,.docx"
|
|
|
+ >
|
|
|
+ <el-button size="small" type="primary">点击上传</el-button>
|
|
|
+ <!-- <div slot="tip" class="el-upload__tip">
|
|
|
+ 只能上传jpg/png文件,且不超过500kb
|
|
|
+ </div> -->
|
|
|
+ </el-upload>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-form>
|
|
|
+ </el-row>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="messageDialog = false">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="messageDialog = false"
|
|
|
+ >确认</el-button
|
|
|
+ >
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import treeSelect from "../../../components/TreeSelect/treeSelectCheck.vue";
|
|
|
+import moment from "moment"; //引入js日期处理类库
|
|
|
+import VueOfficeDocx from "@vue-office/docx";
|
|
|
+import VueOfficePdf from "@vue-office/pdf";
|
|
|
+import "@vue-office/docx/lib/index.css";
|
|
|
+import KtButton from "@/views/Core/KtButton";
|
|
|
+
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ treeSelect,
|
|
|
+ VueOfficeDocx,
|
|
|
+ VueOfficePdf,
|
|
|
+ KtButton,
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ fileDialog: false,
|
|
|
+ showFileList: [],
|
|
|
+ formInline: {
|
|
|
+ contractCode: "",
|
|
|
+ contractName: "",
|
|
|
+ contractStatus: "",
|
|
|
+ contractType: "",
|
|
|
+ externalCompaniesId: "",
|
|
|
+ internalCompanyId: "",
|
|
|
+ },
|
|
|
+ messageDialog: false,
|
|
|
+ tableDialog: false,
|
|
|
+ multipleSelection: [],
|
|
|
+
|
|
|
+ base: process.env.BASE_URL,
|
|
|
+ form: {
|
|
|
+ contractCode: "",
|
|
|
+ contractType: "",
|
|
|
+ contractName: "",
|
|
|
+ externalCompaniesId: "",
|
|
|
+ internalCompanyId: "",
|
|
|
+ supplierIdList: [],
|
|
|
+ isOpenContract: "1",
|
|
|
+ effectiveDate: "",
|
|
|
+ expiringDate: "",
|
|
|
+ shouldPostponed: "1",
|
|
|
+ shouldPostponedEffectiveDate: "",
|
|
|
+ filePathIdList: [],
|
|
|
+ },
|
|
|
+ rules: {
|
|
|
+ contractName: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: "请填写合同名称",
|
|
|
+ trigger: "blur",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ contractType: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: "请选择合同类型",
|
|
|
+ trigger: "change",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ externalCompaniesId: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: "请选择甲方",
|
|
|
+ trigger: "change",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ internalCompanyId: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: "请选择乙方",
|
|
|
+ trigger: "change",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ supplierIdList: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: "请选择供应商",
|
|
|
+ trigger: "change",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ isOpenContract: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: "请选择是否为开口合同",
|
|
|
+ trigger: "change",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ pickerOptionsEnd: {
|
|
|
+ disabledDate: (time) => {
|
|
|
+ let beginDateVal = this.form.effectiveDate;
|
|
|
+ if (beginDateVal) {
|
|
|
+ return time.getTime() < new Date(beginDateVal).getTime();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+
|
|
|
+ title: "",
|
|
|
+ dialogVisible: false,
|
|
|
+ tableData: [],
|
|
|
+ statusTable: [],
|
|
|
+ data: [],
|
|
|
+ date: "",
|
|
|
+ time: "",
|
|
|
+
|
|
|
+ month: "",
|
|
|
+ year: "",
|
|
|
+ days: "",
|
|
|
+ accountList: [],
|
|
|
+ accountObj: {},
|
|
|
+ esmInsCompanyList: [],
|
|
|
+ contractTypeList: [],
|
|
|
+ supplierIdChildList: [],
|
|
|
+ pageInfo: {
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ total: 0,
|
|
|
+ },
|
|
|
+ resetForm: {},
|
|
|
+ operation: "",
|
|
|
+ fileIdList: [],
|
|
|
+ contractStatus: "",
|
|
|
+ };
|
|
|
+ },
|
|
|
+ computed: {},
|
|
|
+ created() {},
|
|
|
+ mounted() {
|
|
|
+ this.getInvAccountList();
|
|
|
+ this.getEsmInsCompany();
|
|
|
+ this.getContractType();
|
|
|
+ this.getList();
|
|
|
+ this.resetForm = { ...this.form };
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ handleSizeChange(val) {
|
|
|
+ // console.log(`每页 ${val} 条`);
|
|
|
+
|
|
|
+ this.pageInfo.pageSize = val;
|
|
|
+ this.getList();
|
|
|
+ },
|
|
|
+ handleCurrentChange(val) {
|
|
|
+ // console.log(`当前页: ${val}`);
|
|
|
+ this.pageInfo.pageNum = val;
|
|
|
+ this.getList();
|
|
|
+ },
|
|
|
+ //表格选中
|
|
|
+ handleSelectionChange(val) {
|
|
|
+ this.multipleSelection = val.map((v, i) => {
|
|
|
+ return v.id;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //批量无效合同
|
|
|
+ setContract() {
|
|
|
+ this.$api.contract
|
|
|
+ .updateFileStatus({
|
|
|
+ idList: this.multipleSelection,
|
|
|
+ contractStatus: this.contractStatus,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.tableDialog = false;
|
|
|
+ this.$message.success(res.msg);
|
|
|
+ } else {
|
|
|
+ this.$message.error(res.msg);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //更多操作
|
|
|
+ handleCommand(commad, row) {
|
|
|
+ this.contractStatus = row.contractStatus;
|
|
|
+ this.operation = commad;
|
|
|
+ if (commad != "error") {
|
|
|
+ this.$api.contract
|
|
|
+ .editorShow({
|
|
|
+ id: row.id,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.showFileList = [...res.data.contractFileEntityList];
|
|
|
+ this.form = {
|
|
|
+ contractCode: res.data.contractCode,
|
|
|
+ contractType: res.data.contractType,
|
|
|
+ // contractName: res.data.contractName,
|
|
|
+ externalCompaniesId: res.data.externalCompaniesId,
|
|
|
+ internalCompanyId: res.data.internalCompanyId,
|
|
|
+ supplierIdList: res.data.supplierIdList,
|
|
|
+ // isOpenContract: res.data.isOpenContract,
|
|
|
+ // effectiveDate: res.data.effectiveDate,
|
|
|
+ // expiringDate: res.data.expiringDate,
|
|
|
+ shouldPostponed: res.data.shouldPostponed,
|
|
|
+ shouldPostponedEffectiveDate:
|
|
|
+ res.data.shouldPostponedEffectiveDate,
|
|
|
+ externType: res.data.externType,
|
|
|
+ internalType: res.data.internalType,
|
|
|
+ id: res.data.id,
|
|
|
+
|
|
|
+ filePathIdList:
|
|
|
+ res.data.contractFileEntityList != null
|
|
|
+ ? res.data.contractFileEntityList.map((v, i) => {
|
|
|
+ return { name: v.fileName, url: v.url };
|
|
|
+ })
|
|
|
+ : [],
|
|
|
+ };
|
|
|
+ this.fileIdList =
|
|
|
+ res.data.contractFileEntityList != null
|
|
|
+ ? res.data.contractFileEntityList.map((v, i) => {
|
|
|
+ return v.fileId;
|
|
|
+ })
|
|
|
+ : [];
|
|
|
+ if (commad == "supplement") {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.ruleForm.clearValidate();
|
|
|
+ });
|
|
|
+ this.dialogVisible = true;
|
|
|
+ this.title = "补充协议";
|
|
|
+ }
|
|
|
+ if (commad == "watch") {
|
|
|
+ this.fileDialog = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else if (commad != "message") {
|
|
|
+ this.$api.contract
|
|
|
+ .checkCopyContract({
|
|
|
+ id: row.id,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ // console.log(res);
|
|
|
+ if (res.code === 200) {
|
|
|
+ if (res.data.failStatus == "0") {
|
|
|
+ this.$confirm("确认将该合同置为失效状态吗?", "提示", {
|
|
|
+ type: "warning",
|
|
|
+ }).then(() => {
|
|
|
+ this.$api.contract
|
|
|
+ .constractSave({ id: row.id, contractStatus: 1 })
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.$message.success(res.msg);
|
|
|
+ this.getList();
|
|
|
+ } else {
|
|
|
+ this.$message.error(res.msg);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ this.statusTable = [];
|
|
|
+ this.multipleSelection = [];
|
|
|
+ this.tableDialog = true;
|
|
|
+ this.$api.contract
|
|
|
+ .copyContractList({
|
|
|
+ id: row.id,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.statusTable = [...res.data];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (commad == "message") {
|
|
|
+ this.messageDialog = true;
|
|
|
+
|
|
|
+ this.$api.contract
|
|
|
+ .copyContractList({
|
|
|
+ id: row.id,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ let arr = [];
|
|
|
+ res.data.forEach((v, i) => {
|
|
|
+ arr.push(v);
|
|
|
+ v.contractFileEntityList.forEach((item, index) => {
|
|
|
+ arr[i].contractFileEntityList[index] = {
|
|
|
+ name: item.fileName,
|
|
|
+ url: item.url,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ });
|
|
|
+ // console.log(arr);
|
|
|
+ this.statusTable = [...arr];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //获取合同列表
|
|
|
+ getList() {
|
|
|
+ this.$api.contract
|
|
|
+ .constractQueryPage({
|
|
|
+ ...this.pageInfo,
|
|
|
+ ...this.formInline,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ // console.log(res);
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.tableData = [...res.data.records];
|
|
|
+ this.pageInfo.total = res.data.total;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //格式化tree数据
|
|
|
+ normalizer(node) {
|
|
|
+ if (node.children && !node.children.length) {
|
|
|
+ // 去掉children=[]的children属性
|
|
|
+ delete node.children;
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ id: node.id, // ID字段名
|
|
|
+ label: node.name, // 显示名称
|
|
|
+ children: node.children, // 子级字段名
|
|
|
+ };
|
|
|
+ },
|
|
|
+ //treeSelect 选择时触发
|
|
|
+ handleSelect(node) {
|
|
|
+ if (node.children instanceof Array && node.children.length) {
|
|
|
+ this.chooseChild(node.children);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //递归
|
|
|
+ chooseChild(list) {
|
|
|
+ list.forEach((v, i) => {
|
|
|
+ this.supplierIdChildList.push(v.id);
|
|
|
+ if (v.children instanceof Array && v.children.length) {
|
|
|
+ this.chooseChild(v.children);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //新增
|
|
|
+ submit() {
|
|
|
+ // console.log(this.form.supplierIdList);
|
|
|
+ // console.log(this.fileIdList);
|
|
|
+
|
|
|
+ this.$refs["ruleForm"].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ if (this.operation != "supplement") {
|
|
|
+ this.$api.contract
|
|
|
+ .constractSave({
|
|
|
+ ...this.form,
|
|
|
+ supplierIdList: [
|
|
|
+ ...this.form.supplierIdList,
|
|
|
+ ...this.supplierIdChildList,
|
|
|
+ ],
|
|
|
+ filePathIdList: this.fileIdList,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.$message.success(res.msg);
|
|
|
+ this.dialogVisible = false;
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.ruleForm.clearValidate();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ this.$api.contract
|
|
|
+ .supplementContract({
|
|
|
+ ...this.form,
|
|
|
+ supplierIdList: [
|
|
|
+ ...this.form.supplierIdList,
|
|
|
+ ...this.supplierIdChildList,
|
|
|
+ ],
|
|
|
+ filePathIdList: this.fileIdList,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.$message.success(res.msg);
|
|
|
+ this.dialogVisible = false;
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.ruleForm.clearValidate();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //供应商id
|
|
|
+ getValue(val) {
|
|
|
+ this.form.supplierIdList = [...val];
|
|
|
+ },
|
|
|
+ //获取合同类型
|
|
|
+ getContractType() {
|
|
|
+ this.$api.contract.getContractType("contract_type").then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.contractTypeList = [...res.data];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //获取供应商树形
|
|
|
+ getEsmInsCompany() {
|
|
|
+ this.$api.contract.getEsmInsCompany({}).then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.esmInsCompanyList = [...res.data];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //甲方/乙方选择
|
|
|
+ companyChange(id, type) {
|
|
|
+ if (type == "1") {
|
|
|
+ this.form.externType = this.accountObj[id] == "0" ? "内部" : "外部";
|
|
|
+ } else {
|
|
|
+ this.form.internalType = this.accountObj[id] == "0" ? "内部" : "外部";
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ //上传附件
|
|
|
+ httpRequest(options) {
|
|
|
+ let file = options.file;
|
|
|
+ let filename = options.filename;
|
|
|
+ let reader = new FileReader();
|
|
|
+ if (file) {
|
|
|
+ reader.readAsDataURL(file);
|
|
|
+ }
|
|
|
+ reader.onload = () => {
|
|
|
+ let base64Str = reader.result;
|
|
|
+ this.dataForm[options.filename] = base64Str;
|
|
|
+ };
|
|
|
+ const params = new FormData(); // 声明formData数据类型
|
|
|
+ params.append("multipartFile", file);
|
|
|
+ params.append("type", "personnel");
|
|
|
+ this.$api.letter.uploadFile(params).then((res) => {
|
|
|
+ if (res.code == "200") {
|
|
|
+ this.form.filePathIdList.push(res.data.id);
|
|
|
+ this.fileIdList.push(res.data.id);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //删除附件
|
|
|
+ handleRemove(file, fileList) {
|
|
|
+ // console.log(this.form.filePathIdList);
|
|
|
+ // console.log(this.fileIdList);
|
|
|
+ this.fileIdList = [];
|
|
|
+ this.form.filePathIdList = this.form.filePathIdList.filter(
|
|
|
+ (item) => item.uid !== file.uid
|
|
|
+ );
|
|
|
+
|
|
|
+ this.fileIdList = this.form.filePathIdList.map((v, i) => {
|
|
|
+ return v.id;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //获取甲乙方列表
|
|
|
+ getInvAccountList() {
|
|
|
+ this.$api.contract.getInvAccountList({}).then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.accountList = [...res.data];
|
|
|
+ const obj = {};
|
|
|
+ res.data.forEach((v, i) => {
|
|
|
+ obj[v.accountId] = v.outerFlag;
|
|
|
+ });
|
|
|
+ this.accountObj = { ...obj };
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //必填项
|
|
|
+ isRequired() {
|
|
|
+ if (this.form.isOpenContract == "0") {
|
|
|
+ return {
|
|
|
+ type: "date",
|
|
|
+ required: true,
|
|
|
+ message: "请选择失效日期",
|
|
|
+ trigger: "change",
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ return {};
|
|
|
+ }
|
|
|
+
|
|
|
+ // return true;
|
|
|
+ },
|
|
|
+ timeChange(type) {
|
|
|
+ if (type == "year") {
|
|
|
+ this.form.shouldPostponedEffectiveDate = moment(this.form.expiringDate)
|
|
|
+ .add(this[type], "year")
|
|
|
+ .format("YYYY-MM-DD HH:mm:ss");
|
|
|
+ } else if (type == "month") {
|
|
|
+ this.form.shouldPostponedEffectiveDate = moment(this.form.expiringDate)
|
|
|
+ .add(this[type], "month")
|
|
|
+ .format("YYYY-MM-DD HH:mm:ss");
|
|
|
+ } else {
|
|
|
+ this.form.shouldPostponedEffectiveDate = moment(this.form.expiringDate)
|
|
|
+ .add(this[type], "days")
|
|
|
+ .format("YYYY-MM-DD HH:mm:ss");
|
|
|
+ }
|
|
|
+ console.log();
|
|
|
+ },
|
|
|
+ handleClose(done) {
|
|
|
+ done();
|
|
|
+ },
|
|
|
+ addContract() {
|
|
|
+ this.dialogVisible = true;
|
|
|
+ this.title = "新增";
|
|
|
+ this.operation = "add";
|
|
|
+ this.form = { ...this.resetForm };
|
|
|
+
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.ruleForm.clearValidate();
|
|
|
+ });
|
|
|
+ },
|
|
|
+ edit(row) {
|
|
|
+ this.title = "编辑";
|
|
|
+ this.operation = "edit";
|
|
|
+ this.$api.contract
|
|
|
+ .editorShow({
|
|
|
+ id: row.id,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.dialogVisible = true;
|
|
|
+ // this.form
|
|
|
+ this.form = {
|
|
|
+ contractCode: res.data.contractCode,
|
|
|
+ contractType: res.data.contractType,
|
|
|
+ contractName: res.data.contractName,
|
|
|
+ externalCompaniesId: res.data.externalCompaniesId,
|
|
|
+ internalCompanyId: res.data.internalCompanyId,
|
|
|
+ supplierIdList: res.data.supplierIdList,
|
|
|
+ isOpenContract: res.data.isOpenContract,
|
|
|
+ effectiveDate: res.data.effectiveDate,
|
|
|
+ expiringDate: res.data.expiringDate,
|
|
|
+ shouldPostponed: res.data.shouldPostponed,
|
|
|
+ shouldPostponedEffectiveDate:
|
|
|
+ res.data.shouldPostponedEffectiveDate,
|
|
|
+ externType: res.data.externType,
|
|
|
+ internalType: res.data.internalType,
|
|
|
+ id: res.data.id,
|
|
|
+
|
|
|
+ filePathIdList: res.data.contractFileEntityList
|
|
|
+ ? res.data.contractFileEntityList.map((v, i) => {
|
|
|
+ return { name: v.fileName, url: v.url, id: v.fileId };
|
|
|
+ })
|
|
|
+ : [],
|
|
|
+ };
|
|
|
+ this.fileIdList =
|
|
|
+ res.data.contractFileEntityList != null
|
|
|
+ ? res.data.contractFileEntityList.map((v, i) => {
|
|
|
+ return v.fileId;
|
|
|
+ })
|
|
|
+ : [];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+<style lang='less' scoped>
|
|
|
+.contract {
|
|
|
+ // display: ;
|
|
|
+ padding: 14px;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+.supplier {
|
|
|
+ display: flex;
|
|
|
+ /deep/ .el-form-item__content {
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+/deep/.el-tabs__header .is-top {
|
|
|
+ height: 100px;
|
|
|
+ .el-tabs__nav-scroll {
|
|
|
+ height: 100px;
|
|
|
+ .el-tabs__nav .is-top > div {
|
|
|
+ height: 100px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|