|
|
@@ -0,0 +1,1066 @@
|
|
|
+<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=" ">
|
|
|
+ <el-button type="primary" size="small" @click="getList"
|
|
|
+ >查询</el-button
|
|
|
+ >
|
|
|
+ <el-button type="primary" size="small" @click="addContract"
|
|
|
+ >新增</el-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">
|
|
|
+ <el-button size="small" type="primary" @click="edit(scope.row)"
|
|
|
+ >编辑</el-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"
|
|
|
+ @click.native="handleCommand('supplement', scope.row)"
|
|
|
+ >补充协议</el-dropdown-item
|
|
|
+ >
|
|
|
+ <el-dropdown-item
|
|
|
+ command="watch"
|
|
|
+ @click.native="handleCommand('watch', scope.row)"
|
|
|
+ >查看附件</el-dropdown-item
|
|
|
+ >
|
|
|
+ <el-dropdown-item
|
|
|
+ command="download"
|
|
|
+ @click.native="handleCommand('download', scope.row)"
|
|
|
+ >下载附件</el-dropdown-item
|
|
|
+ >
|
|
|
+ <el-dropdown-item
|
|
|
+ command="error"
|
|
|
+ @click.native="handleCommand('error', scope.row)"
|
|
|
+ >设置为失效</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"
|
|
|
+ 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;
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <el-button type="primary" icon="el-icon-download" size="small"
|
|
|
+ >下载</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ <vue-office-docx
|
|
|
+ v-show="item.url.includes('.docx')"
|
|
|
+ :src="base + item.url"
|
|
|
+ @rendered="renderedHandler"
|
|
|
+ @error="errorHandler"
|
|
|
+ />
|
|
|
+ <vue-office-pdf
|
|
|
+ v-show="item.url.includes('.pdf')"
|
|
|
+ :src="base + item.url"
|
|
|
+ @rendered="renderedHandler"
|
|
|
+ @error="errorHandler"
|
|
|
+ />
|
|
|
+ </el-carousel-item>
|
|
|
+ </el-carousel>
|
|
|
+ </div>
|
|
|
+ </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";
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ treeSelect,
|
|
|
+ VueOfficeDocx,
|
|
|
+ VueOfficePdf,
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ fileDialog: false,
|
|
|
+ showFileList: [],
|
|
|
+ formInline: {
|
|
|
+ contractCode: "",
|
|
|
+ contractName: "",
|
|
|
+ contractStatus: "",
|
|
|
+ contractType: "",
|
|
|
+ externalCompaniesId: "",
|
|
|
+ internalCompanyId: "",
|
|
|
+ },
|
|
|
+ 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: [],
|
|
|
+ data: [
|
|
|
+ {
|
|
|
+ title: "一级 1",
|
|
|
+ children: [
|
|
|
+ {
|
|
|
+ title: "二级 1-1",
|
|
|
+ children: [
|
|
|
+ {
|
|
|
+ title: "三级 1-1-1",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "一级 2",
|
|
|
+ children: [
|
|
|
+ {
|
|
|
+ title: "二级 2-1",
|
|
|
+ children: [
|
|
|
+ {
|
|
|
+ title: "三级 2-1-1",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "二级 2-2",
|
|
|
+ children: [
|
|
|
+ {
|
|
|
+ title: "三级 2-2-1",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "一级 3",
|
|
|
+ children: [
|
|
|
+ {
|
|
|
+ title: "二级 3-1",
|
|
|
+ children: [
|
|
|
+ {
|
|
|
+ title: "三级 3-1-1",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "二级 3-2",
|
|
|
+ children: [
|
|
|
+ {
|
|
|
+ title: "三级 3-2-1",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ date: "",
|
|
|
+ time: "",
|
|
|
+
|
|
|
+ month: "",
|
|
|
+ year: "",
|
|
|
+ days: "",
|
|
|
+ accountList: [],
|
|
|
+ accountObj: {},
|
|
|
+ esmInsCompanyList: [],
|
|
|
+ contractTypeList: [],
|
|
|
+ supplierIdChildList: [],
|
|
|
+ pageInfo: {
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ total: 0,
|
|
|
+ },
|
|
|
+ resetForm: {},
|
|
|
+ operation: "",
|
|
|
+ fileIdList: [],
|
|
|
+ };
|
|
|
+ },
|
|
|
+ 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();
|
|
|
+ },
|
|
|
+ //更多操作
|
|
|
+ handleCommand(commad, row) {
|
|
|
+ this.operation = commad;
|
|
|
+ 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.id;
|
|
|
+ })
|
|
|
+ : [];
|
|
|
+ if (commad == "supplement") {
|
|
|
+ this.dialogVisible = true;
|
|
|
+ }
|
|
|
+ if (commad == "watch") {
|
|
|
+ this.fileDialog = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //获取合同列表
|
|
|
+ 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);
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } 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);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //供应商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" ? "内部" : "外部";
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 上传的方法Start
|
|
|
+ beforeAvatarUpload(file) {
|
|
|
+ console.log(file);
|
|
|
+ },
|
|
|
+ //上传影像
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //获取甲乙方列表
|
|
|
+ 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 };
|
|
|
+ },
|
|
|
+ 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 };
|
|
|
+ })
|
|
|
+ : [],
|
|
|
+ };
|
|
|
+ this.fileIdList =
|
|
|
+ res.data.contractFileEntityList != null
|
|
|
+ ? res.data.contractFileEntityList.map((v, i) => {
|
|
|
+ return v.id;
|
|
|
+ })
|
|
|
+ : [];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+<style lang='less' scoped>
|
|
|
+.contract {
|
|
|
+ // display: ;
|
|
|
+ padding: 14px;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+.supplier {
|
|
|
+ display: flex;
|
|
|
+ /deep/ .el-form-item__content {
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|