|
@@ -12,35 +12,25 @@
|
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="6">
|
|
<el-col :span="6">
|
|
|
<el-form-item label="合同编号">
|
|
<el-form-item label="合同编号">
|
|
|
- <el-input v-model="queryParams.contractNo" placeholder="请输入合同编号" clearable style="width: 100%;" />
|
|
|
|
|
|
|
+ <el-input v-model="queryParams.contractNo" placeholder="请输入合同编号" clearable style="width: 100%" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
<el-col :span="6">
|
|
|
<el-form-item label="合同名称">
|
|
<el-form-item label="合同名称">
|
|
|
- <el-input v-model="queryParams.contractName" placeholder="请输入合同名称" clearable style="width: 100%;" />
|
|
|
|
|
|
|
+ <el-input v-model="queryParams.contractName" placeholder="请输入合同名称" clearable style="width: 100%" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
<el-col :span="6">
|
|
|
<el-form-item label="合同类型">
|
|
<el-form-item label="合同类型">
|
|
|
- <el-select v-model="queryParams.contractType" placeholder="请选择" clearable style="width: 100%;">
|
|
|
|
|
- <el-option
|
|
|
|
|
- v-for="item in contractTypeDict"
|
|
|
|
|
- :key="item.dictValue"
|
|
|
|
|
- :label="item.dictLabel"
|
|
|
|
|
- :value="item.dictValue"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <el-select v-model="queryParams.contractType" placeholder="请选择" clearable style="width: 100%">
|
|
|
|
|
+ <el-option v-for="item in contractTypeDict" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
<el-col :span="6">
|
|
|
<el-form-item label="合同状态">
|
|
<el-form-item label="合同状态">
|
|
|
- <el-select v-model="queryParams.contractStatus" placeholder="请选择" clearable style="width: 100%;">
|
|
|
|
|
- <el-option
|
|
|
|
|
- v-for="item in contractStatusDict"
|
|
|
|
|
- :key="item.dictValue"
|
|
|
|
|
- :label="item.dictLabel"
|
|
|
|
|
- :value="item.dictValue"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <el-select v-model="queryParams.contractStatus" placeholder="请选择" clearable style="width: 100%">
|
|
|
|
|
+ <el-option v-for="item in contractStatusDict" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
@@ -48,12 +38,12 @@
|
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="6">
|
|
<el-col :span="6">
|
|
|
<el-form-item label="开始时间">
|
|
<el-form-item label="开始时间">
|
|
|
- <el-date-picker v-model="queryParams.contractStartTime" type="date" placeholder="请选择" style="width: 100%;" />
|
|
|
|
|
|
|
+ <el-date-picker v-model="queryParams.contractStartTime" type="date" placeholder="请选择" style="width: 100%" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
<el-col :span="6">
|
|
|
<el-form-item label="结束时间">
|
|
<el-form-item label="结束时间">
|
|
|
- <el-date-picker v-model="queryParams.contractEndTime" type="date" placeholder="请选择" style="width: 100%;" />
|
|
|
|
|
|
|
+ <el-date-picker v-model="queryParams.contractEndTime" type="date" placeholder="请选择" style="width: 100%" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
@@ -70,7 +60,7 @@
|
|
|
<!-- 合同信息列表 -->
|
|
<!-- 合同信息列表 -->
|
|
|
<el-card shadow="never" class="table-card">
|
|
<el-card shadow="never" class="table-card">
|
|
|
<div class="section-title">合同信息列表</div>
|
|
<div class="section-title">合同信息列表</div>
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
<el-table v-loading="loading" :data="contractList" border style="width: 100%">
|
|
<el-table v-loading="loading" :data="contractList" border style="width: 100%">
|
|
|
<el-table-column prop="contractNo" label="合同编号" align="center" />
|
|
<el-table-column prop="contractNo" label="合同编号" align="center" />
|
|
|
<el-table-column prop="contractName" label="合同名称" align="center" />
|
|
<el-table-column prop="contractName" label="合同名称" align="center" />
|
|
@@ -117,38 +107,27 @@
|
|
|
<el-button link type="primary" @click="handleEdit(scope.row)">修改</el-button>
|
|
<el-button link type="primary" @click="handleEdit(scope.row)">修改</el-button>
|
|
|
<el-button link type="success" @click="handleView(scope.row)">查看</el-button>
|
|
<el-button link type="success" @click="handleView(scope.row)">查看</el-button>
|
|
|
<el-button link type="warning" @click="handleAudit(scope.row)">审核</el-button>
|
|
<el-button link type="warning" @click="handleAudit(scope.row)">审核</el-button>
|
|
|
|
|
+ <el-button link @click="handleCancel(scope.row)">作废</el-button>
|
|
|
</template>
|
|
</template>
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
<!-- 已生效状态:只能查看 -->
|
|
<!-- 已生效状态:只能查看 -->
|
|
|
<template v-if="scope.row.contractStatus === 1 || scope.row.contractStatus === '1'">
|
|
<template v-if="scope.row.contractStatus === 1 || scope.row.contractStatus === '1'">
|
|
|
<el-button link type="primary" @click="handleView(scope.row)">查看</el-button>
|
|
<el-button link type="primary" @click="handleView(scope.row)">查看</el-button>
|
|
|
|
|
+ <el-button link @click="handleCancel(scope.row)">作废</el-button>
|
|
|
</template>
|
|
</template>
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
<!-- 已过期状态:无操作按钮 -->
|
|
<!-- 已过期状态:无操作按钮 -->
|
|
|
<template v-if="scope.row.contractStatus === 3 || scope.row.contractStatus === '3'">
|
|
<template v-if="scope.row.contractStatus === 3 || scope.row.contractStatus === '3'">
|
|
|
- <span style="color: #999;">-</span>
|
|
|
|
|
|
|
+ <span style="color: #999">-</span>
|
|
|
</template>
|
|
</template>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
</el-table>
|
|
</el-table>
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
</el-card>
|
|
</el-card>
|
|
|
|
|
|
|
|
<!-- 合同管理对话框 -->
|
|
<!-- 合同管理对话框 -->
|
|
|
- <el-dialog
|
|
|
|
|
- v-model="contractDialogVisible"
|
|
|
|
|
- :title="contractDialogTitle"
|
|
|
|
|
- width="900px"
|
|
|
|
|
- :close-on-click-modal="false"
|
|
|
|
|
- >
|
|
|
|
|
- <el-form
|
|
|
|
|
- ref="contractFormRef"
|
|
|
|
|
- :model="contractForm"
|
|
|
|
|
- :rules="contractFormRules"
|
|
|
|
|
- label-width="140px"
|
|
|
|
|
- :disabled="contractDialogReadonly"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ <el-dialog v-model="contractDialogVisible" :title="contractDialogTitle" width="900px" :close-on-click-modal="false">
|
|
|
|
|
+ <el-form ref="contractFormRef" :model="contractForm" :rules="contractFormRules" label-width="140px" :disabled="contractDialogReadonly">
|
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="24">
|
|
<el-col :span="24">
|
|
|
<el-form-item label="合同名称:" prop="contractName">
|
|
<el-form-item label="合同名称:" prop="contractName">
|
|
@@ -160,48 +139,28 @@
|
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item label="合同类型:" prop="contractType">
|
|
<el-form-item label="合同类型:" prop="contractType">
|
|
|
- <el-select v-model="contractForm.contractType" placeholder="请选择" style="width: 100%;">
|
|
|
|
|
- <el-option
|
|
|
|
|
- v-for="item in contractTypeDict"
|
|
|
|
|
- :key="item.dictValue"
|
|
|
|
|
- :label="item.dictLabel"
|
|
|
|
|
- :value="item.dictValue"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <el-select v-model="contractForm.contractType" placeholder="请选择" style="width: 100%">
|
|
|
|
|
+ <el-option v-for="item in contractTypeDict" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="12">
|
|
|
|
|
|
|
+ <!-- <el-col :span="12">
|
|
|
<el-form-item label="提醒时间:" prop="demandReminderTime">
|
|
<el-form-item label="提醒时间:" prop="demandReminderTime">
|
|
|
- <el-input-number
|
|
|
|
|
- v-model="contractForm.demandReminderTime"
|
|
|
|
|
- :min="1"
|
|
|
|
|
- :max="365"
|
|
|
|
|
- style="width: 150px;"
|
|
|
|
|
- />
|
|
|
|
|
- <span style="margin-left: 10px;">天</span>
|
|
|
|
|
|
|
+ <el-input-number v-model="contractForm.demandReminderTime" :min="1" :max="365" style="width: 150px" />
|
|
|
|
|
+ <span style="margin-left: 10px">天</span>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
- </el-col>
|
|
|
|
|
|
|
+ </el-col> -->
|
|
|
</el-row>
|
|
</el-row>
|
|
|
|
|
|
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item label="开始时间:" prop="contractStartTime">
|
|
<el-form-item label="开始时间:" prop="contractStartTime">
|
|
|
- <el-date-picker
|
|
|
|
|
- v-model="contractForm.contractStartTime"
|
|
|
|
|
- type="date"
|
|
|
|
|
- placeholder="请选择"
|
|
|
|
|
- style="width: 100%;"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <el-date-picker v-model="contractForm.contractStartTime" type="date" placeholder="请选择" style="width: 100%" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item label="截止时间:" prop="contractEndTime">
|
|
<el-form-item label="截止时间:" prop="contractEndTime">
|
|
|
- <el-date-picker
|
|
|
|
|
- v-model="contractForm.contractEndTime"
|
|
|
|
|
- type="date"
|
|
|
|
|
- placeholder="请选择"
|
|
|
|
|
- style="width: 100%;"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <el-date-picker v-model="contractForm.contractEndTime" type="date" placeholder="请选择" style="width: 100%" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
</el-row>
|
|
</el-row>
|
|
@@ -209,13 +168,8 @@
|
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item label="开票类型:" prop="invoiceType">
|
|
<el-form-item label="开票类型:" prop="invoiceType">
|
|
|
- <el-select v-model="contractForm.invoiceType" placeholder="请选择" style="width: 100%;">
|
|
|
|
|
- <el-option
|
|
|
|
|
- v-for="item in invoiceTypeList"
|
|
|
|
|
- :key="item.id"
|
|
|
|
|
- :label="item.invoiceTypeName"
|
|
|
|
|
- :value="item.id"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <el-select v-model="contractForm.invoiceType" placeholder="请选择" style="width: 100%">
|
|
|
|
|
+ <el-option v-for="item in invoiceTypeList" :key="item.id" :label="item.invoiceTypeName" :value="item.id" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
@@ -231,25 +185,15 @@
|
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item label="税率:" prop="taxRate">
|
|
<el-form-item label="税率:" prop="taxRate">
|
|
|
- <el-select v-model="contractForm.taxRate" placeholder="请选择" style="width: 100%;">
|
|
|
|
|
- <el-option
|
|
|
|
|
- v-for="item in taxRateList"
|
|
|
|
|
- :key="item.id"
|
|
|
|
|
- :label="item.taxrateName"
|
|
|
|
|
- :value="item.id"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <el-select v-model="contractForm.taxRate" placeholder="请选择" style="width: 100%">
|
|
|
|
|
+ <el-option v-for="item in taxRateList" :key="item.id" :label="item.taxrateName" :value="item.id" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item label="结算方式:" prop="settlementMethod">
|
|
<el-form-item label="结算方式:" prop="settlementMethod">
|
|
|
- <el-select v-model="contractForm.settlementMethod" placeholder="请选择" style="width: 100%;">
|
|
|
|
|
- <el-option
|
|
|
|
|
- v-for="item in settlementMethodList"
|
|
|
|
|
- :key="item.id"
|
|
|
|
|
- :label="item.settlementName"
|
|
|
|
|
- :value="item.id"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <el-select v-model="contractForm.settlementMethod" placeholder="请选择" style="width: 100%">
|
|
|
|
|
+ <el-option v-for="item in settlementMethodList" :key="item.id" :label="item.settlementName" :value="item.id" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
@@ -272,12 +216,7 @@
|
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="24">
|
|
<el-col :span="24">
|
|
|
<el-form-item label="合同说明:" prop="contractDescription">
|
|
<el-form-item label="合同说明:" prop="contractDescription">
|
|
|
- <el-input
|
|
|
|
|
- v-model="contractForm.contractDescription"
|
|
|
|
|
- type="textarea"
|
|
|
|
|
- :rows="4"
|
|
|
|
|
- placeholder="请输入合同说明"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <el-input v-model="contractForm.contractDescription" type="textarea" :rows="4" placeholder="请输入合同说明" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
</el-row>
|
|
</el-row>
|
|
@@ -287,11 +226,7 @@
|
|
|
<div class="dialog-footer">
|
|
<div class="dialog-footer">
|
|
|
<template v-if="contractDialogAudit">
|
|
<template v-if="contractDialogAudit">
|
|
|
<el-button @click="contractDialogVisible = false">取消</el-button>
|
|
<el-button @click="contractDialogVisible = false">取消</el-button>
|
|
|
- <el-button
|
|
|
|
|
- type="primary"
|
|
|
|
|
- @click="handleApprove"
|
|
|
|
|
- :loading="approveLoading"
|
|
|
|
|
- >审核通过</el-button>
|
|
|
|
|
|
|
+ <el-button type="primary" @click="handleApprove" :loading="approveLoading">审核通过</el-button>
|
|
|
</template>
|
|
</template>
|
|
|
<template v-else-if="contractDialogReadonly">
|
|
<template v-else-if="contractDialogReadonly">
|
|
|
<el-button @click="contractDialogVisible = false">关闭</el-button>
|
|
<el-button @click="contractDialogVisible = false">关闭</el-button>
|
|
@@ -307,7 +242,7 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
-import { ref, onMounted, nextTick } from 'vue';
|
|
|
|
|
|
|
+import { ref, onMounted, onActivated, nextTick } from 'vue';
|
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
|
import { ArrowLeft } from '@element-plus/icons-vue';
|
|
import { ArrowLeft } from '@element-plus/icons-vue';
|
|
|
import { getContractListById, getDictData, getTaxRateList, getSettlementMethodList, getInvoiceTypeList } from '@/api/customer/info';
|
|
import { getContractListById, getDictData, getTaxRateList, getSettlementMethodList, getInvoiceTypeList } from '@/api/customer/info';
|
|
@@ -390,18 +325,10 @@ const contractForm = ref({
|
|
|
|
|
|
|
|
// 表单验证规则
|
|
// 表单验证规则
|
|
|
const contractFormRules = {
|
|
const contractFormRules = {
|
|
|
- contractName: [
|
|
|
|
|
- { required: true, message: '请输入合同名称', trigger: 'blur' }
|
|
|
|
|
- ],
|
|
|
|
|
- contractType: [
|
|
|
|
|
- { required: true, message: '请选择合同类型', trigger: 'change' }
|
|
|
|
|
- ],
|
|
|
|
|
- contractStartTime: [
|
|
|
|
|
- { required: true, message: '请选择开始时间', trigger: 'change' }
|
|
|
|
|
- ],
|
|
|
|
|
- contractEndTime: [
|
|
|
|
|
- { required: true, message: '请选择截止时间', trigger: 'change' }
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ contractName: [{ required: true, message: '请输入合同名称', trigger: 'blur' }],
|
|
|
|
|
+ contractType: [{ required: true, message: '请选择合同类型', trigger: 'change' }],
|
|
|
|
|
+ contractStartTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
|
|
|
|
|
+ contractEndTime: [{ required: true, message: '请选择截止时间', trigger: 'change' }]
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// 数据字典
|
|
// 数据字典
|
|
@@ -484,7 +411,7 @@ const getInvoiceTypeData = async () => {
|
|
|
/** 根据字典值获取标签 */
|
|
/** 根据字典值获取标签 */
|
|
|
const getDictLabel = (dictList: any[], dictValue: string | number) => {
|
|
const getDictLabel = (dictList: any[], dictValue: string | number) => {
|
|
|
if (!dictValue && dictValue !== 0) return '-';
|
|
if (!dictValue && dictValue !== 0) return '-';
|
|
|
- const dict = dictList.find(item => String(item.dictValue) === String(dictValue));
|
|
|
|
|
|
|
+ const dict = dictList.find((item) => String(item.dictValue) === String(dictValue));
|
|
|
return dict ? dict.dictLabel : dictValue;
|
|
return dict ? dict.dictLabel : dictValue;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -492,17 +419,17 @@ const getDictLabel = (dictList: any[], dictValue: string | number) => {
|
|
|
const getContractList = async () => {
|
|
const getContractList = async () => {
|
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
|
const supplierId = urlParams.get('supplierId');
|
|
const supplierId = urlParams.get('supplierId');
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
if (!supplierId) {
|
|
if (!supplierId) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
loading.value = true;
|
|
loading.value = true;
|
|
|
try {
|
|
try {
|
|
|
const res = await getContractListById(supplierId, {
|
|
const res = await getContractListById(supplierId, {
|
|
|
...queryParams.value
|
|
...queryParams.value
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
if (Array.isArray(res.data)) {
|
|
if (Array.isArray(res.data)) {
|
|
|
contractList.value = res.data;
|
|
contractList.value = res.data;
|
|
|
pagination.value.total = res.data.length;
|
|
pagination.value.total = res.data.length;
|
|
@@ -540,12 +467,10 @@ const handleReset = () => {
|
|
|
const handleAdd = () => {
|
|
const handleAdd = () => {
|
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
|
const supplierId = urlParams.get('supplierId');
|
|
const supplierId = urlParams.get('supplierId');
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
router.push({
|
|
router.push({
|
|
|
path: '/supplier/contract/add',
|
|
path: '/supplier/contract/add',
|
|
|
- query: {
|
|
|
|
|
- supplierId: supplierId
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ query: supplierId ? { supplierId } : {}
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -639,6 +564,34 @@ const handleApprove = async () => {
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+/** 作废合同 */
|
|
|
|
|
+const handleCancel = async (row: any) => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ await ElMessageBox.confirm('确认作废该合同吗?', '提示', {
|
|
|
|
|
+ confirmButtonText: '确定',
|
|
|
|
|
+ cancelButtonText: '取消',
|
|
|
|
|
+ type: 'warning'
|
|
|
|
|
+ });
|
|
|
|
|
+ } catch {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ approveLoading.value = true;
|
|
|
|
|
+ try {
|
|
|
|
|
+ await updateContract({
|
|
|
|
|
+ id: row.id,
|
|
|
|
|
+ contractStatus: 5
|
|
|
|
|
+ });
|
|
|
|
|
+ ElMessage.success('操作成功');
|
|
|
|
|
+ contractDialogVisible.value = false;
|
|
|
|
|
+ getContractList();
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ ElMessage.error('操作失败');
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ approveLoading.value = false;
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
/** 查看附件 */
|
|
/** 查看附件 */
|
|
|
const handleViewAttachment = async (row: any) => {
|
|
const handleViewAttachment = async (row: any) => {
|
|
|
if (!row.contractAttachment) {
|
|
if (!row.contractAttachment) {
|
|
@@ -651,25 +604,25 @@ const handleViewAttachment = async (row: any) => {
|
|
|
const res = await listByIds(row.contractAttachment);
|
|
const res = await listByIds(row.contractAttachment);
|
|
|
if (res.data && res.data.length > 0) {
|
|
if (res.data && res.data.length > 0) {
|
|
|
const file = res.data[0];
|
|
const file = res.data[0];
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 使用fetch获取文件并强制下载
|
|
// 使用fetch获取文件并强制下载
|
|
|
const response = await fetch(file.url);
|
|
const response = await fetch(file.url);
|
|
|
const blob = await response.blob();
|
|
const blob = await response.blob();
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 创建下载链接
|
|
// 创建下载链接
|
|
|
const url = window.URL.createObjectURL(blob);
|
|
const url = window.URL.createObjectURL(blob);
|
|
|
const link = document.createElement('a');
|
|
const link = document.createElement('a');
|
|
|
link.href = url;
|
|
link.href = url;
|
|
|
link.download = file.originalName || (row.contractName ? `${row.contractName}_合同附件` : '合同附件');
|
|
link.download = file.originalName || (row.contractName ? `${row.contractName}_合同附件` : '合同附件');
|
|
|
link.style.display = 'none';
|
|
link.style.display = 'none';
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
document.body.appendChild(link);
|
|
document.body.appendChild(link);
|
|
|
link.click();
|
|
link.click();
|
|
|
document.body.removeChild(link);
|
|
document.body.removeChild(link);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 清理URL对象
|
|
// 清理URL对象
|
|
|
window.URL.revokeObjectURL(url);
|
|
window.URL.revokeObjectURL(url);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
ElMessage({ message: '开始下载', type: 'info' });
|
|
ElMessage({ message: '开始下载', type: 'info' });
|
|
|
} else {
|
|
} else {
|
|
|
ElMessage.warning('未找到附件文件');
|
|
ElMessage.warning('未找到附件文件');
|
|
@@ -713,6 +666,10 @@ onMounted(async () => {
|
|
|
getInvoiceTypeData();
|
|
getInvoiceTypeData();
|
|
|
getContractList();
|
|
getContractList();
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+onActivated(() => {
|
|
|
|
|
+ getContractList();
|
|
|
|
|
+});
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<style scoped>
|
|
<style scoped>
|