travel/admin/src/views/proManagement/contract.vue

270 lines
7.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="contract">
<div class="lay">
<div class="flex">
<el-button type="text">境内合同:</el-button>
<el-button type="primary" icon="el-icon-upload " @click="openDialog(1)">
上传境内合同
</el-button>
<el-button
type="success"
v-if="contractObj.domestic"
@click="downloadWord(1)"
>
下载境内合同
</el-button>
</div>
<div class="flex">
<el-button type="text">境外合同:</el-button>
<el-button
type="danger"
icon="el-icon-s-promotion"
@click="openDialog(2)"
>
上传境外合同
</el-button>
<el-button
type="success"
v-if="contractObj.abroad"
@click="downloadWord(2)"
>
下载境外合同
</el-button>
</div>
</div>
<el-dialog
:visible.sync="dialogVisible"
@open="onOpen"
@close="onClose"
:title="dialogTitle"
>
<el-form ref="elForm" :model="formData" size="medium" label-width="120px">
<el-form-item label="上传" prop="trip_info" required>
<el-upload
ref="field105"
action=""
:before-upload="wordBeforeUpload"
:http-request="handlesAvatarSuccess"
:on-success="handleWordSuccess"
:on-error="handleUploadError"
:on-remove="handleRemove"
:before-remove="beforeRemove"
:limit="1"
:file-list="fieldFileList"
accept=".pdf,.docx,.xlsx"
>
<el-button size="small" type="primary" icon="el-icon-upload"
>点击上传</el-button
>
</el-upload>
</el-form-item>
</el-form>
<div slot="footer">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="handelConfirm">确定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
getContractListsApi,
postSubmitContractApi,
postDownloadContractApi,
} from "@/api/admin";
import { getToken } from "@/utils/auth";
export default {
data() {
return {
contractObj: {},
dialogVisible: false,
dialogTitle: "",
fieldFileList: [],
formData: {
domestic: "",
abroad: "",
},
uploadPercent: 0,
};
},
created() {
this.getList();
},
methods: {
async getList() {
const res = await getContractListsApi();
this.contractObj = res.data;
},
async downloadWord(type) {
const res = await postDownloadContractApi();
if (res.error === 0) {
let fileUrl = type === 1 ? res.data.domestic : res.data.abroad;
if (fileUrl) {
fetch(fileUrl)
.then((response) => response.blob())
.then((blob) => {
const link = document.createElement("a");
const objectUrl = URL.createObjectURL(blob);
link.href = objectUrl;
link.download = fileUrl.split("/").pop(); // Extract filename from URL
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(objectUrl);
})
.catch((error) => {
this.$message({
showClose: true,
message: "下载失败",
type: "error",
});
console.error("Download error:", error);
});
} else {
this.$message({
showClose: true,
message: "暂无下载链接",
type: "warning",
});
}
}
console.log(res, "下载合同");
},
onOpen() {},
onClose() {
this.$refs["elForm"].resetFields();
this.$refs.field105.uploadFiles = []; // 删除该条数据
this.fieldFileList = [];
this.formData = {
domestic: "",
abroad: "",
};
},
close() {
console.log("1111", this.$refs.field105.uploadFiles);
this.dialogVisible = false;
this.$refs.field105.uploadFiles = []; // 删除该条数据
},
openDialog(num) {
this.dialogTitle = num === 1 ? "境内合同" : "境外合同";
this.dialogVisible = true;
},
async handelConfirm() {
const isDomestic = this.dialogTitle === "境内合同";
const fileField = isDomestic ? "domestic" : "abroad";
const errorMessage = `请上传${isDomestic ? "境内" : "境外"}合同`;
if (!this.formData[fileField]) {
return this.$message.error(errorMessage);
}
const res = await postSubmitContractApi(this.formData);
if (res.error === 0) {
this.$message.success("上传成功");
this.getList();
}
this.close();
console.log(res, "wwww");
},
async handlesAvatarSuccess(file) {
try {
var formdata = new FormData();
formdata.append("file", file.file);
const res = await this.$axios.post("/admin/upload/index", formdata, {
headers: {
"Content-type": "multipart/form-data",
"X-Token": getToken(),
},
});
console.log(res, "收拾收拾");
if (res.error === 0) {
file.onSuccess(res);
}
} catch (error) {
console.log(file, "error--handlesAvatarSuccess");
let uid = file.file.uid;
let idx = this.$refs.field105.uploadFiles.findIndex(
(item) => item.uid === uid
);
this.$refs.field105.uploadFiles.splice(idx, 1);
this.$message.error(`上传失败`);
}
},
handleWordSuccess(res, file, fileList, index) {
console.log(res, file, fileList, "成功了");
if (res) {
const isDomestic = this.dialogTitle === "境内合同";
const fileUrl = `${window.location.protocol}//${window.location.host}${res.data}`;
isDomestic
? (this.formData.domestic = fileUrl)
: (this.formData.abroad = fileUrl);
this.fieldFileList = [
{
name: file.name,
uid: file.uid,
url: fileUrl,
},
];
this.$message.success("上传成功");
}
},
beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${file.name}`);
},
handleRemove(file, fileList) {
console.log(file, fileList, "handleRemove");
this.formData.abroad = "";
this.formData.domestic = "";
this.fieldFileList.map((item, index) => {
if (item.uid === file.uid) {
this.fieldFileList.splice(index, 1);
}
});
},
handleUploadError(err, file) {
this.$message.error(`上传失败: ${file.name}`);
console.log(this.fieldFileList, "失败了");
this.fieldFileList.map((item, index) => {
if (item.uid === file.uid) {
this.fieldFileList.splice(index, 1);
}
});
},
wordBeforeUpload(file) {
const isRightType = [
"application/pdf",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
].includes(file.type);
const isRightSize = file.size / 1024 / 1024 < 500;
if (!isRightType) {
this.$message.error("只允许上传 PDF、DOCX、XLSX 格式的文件");
}
if (!isRightSize) {
this.$message.error("文件大小超过 500MB");
}
return isRightType && isRightSize;
},
},
};
</script>
<style scoped lang="scss">
.contract {
padding-top: 20px;
.lay {
width: 100%;
.flex {
display: flex;
align-items: center;
padding-left: 20px;
margin-bottom: 20px;
}
.word {
margin: 0 50px;
}
}
}
</style>