Browse Source

研判分析报告--step1

master
buaixuexideshitongxue 2 weeks ago
parent
commit
e8985c6e8c
  1. 42
      src/api/request.ts
  2. 9
      src/api/work/negative.ts
  3. 79
      src/views/work/Query.vue

42
src/api/request.ts

@ -35,6 +35,11 @@ function del(options: Options) {
return ajax(options.url, options) return ajax(options.url, options)
} }
function postWord(options: Options) {
options.method = 'POST';
return ajaxWord(options.url, options);
}
let isRelogin = false; let isRelogin = false;
function ajax(url: string, options: Options) { function ajax(url: string, options: Options) {
const headers: Record<string, string> = { const headers: Record<string, string> = {
@ -103,11 +108,46 @@ function ajax(url: string, options: Options) {
}) })
} }
function ajaxWord(url: string, options: Options) {
const headers: Record<string, string> = {
"Authorization": getToken()
};
let body: string | FormData;
if (options?.body) {
headers["Content-Type"] = "application/json";
body = JSON.stringify(options.body);
}
return fetch(`${BASE_PATH}${url}`, {
method: options.method,
headers: { ...headers, ...options.headers },
body: body
}).then(async response => {
if (!response.ok) {
throw new Error("下载失败");
}
const blob = await response.blob(); // ⭐ 关键:读取二进制
const disposition = response.headers.get("content-disposition");
return {
blob,
disposition
};
});
}
const request = { const request = {
get, get,
post, post,
put, put,
del del,
postWord
} }
export default request; export default request;

9
src/api/work/negative.ts

@ -102,3 +102,12 @@ export function getIdByOriginId(originId) {
url: `/negative/getIdByOriginId/${originId}` url: `/negative/getIdByOriginId/${originId}`
}); });
} }
// 生成报告
export function generateReport(data) {
return request.postWord({
url: "/negative/generateReport",
body: data
})
}

79
src/views/work/Query.vue

@ -186,6 +186,21 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="报告时间" style="width: 360px; margin-bottom: 0;">
<el-date-picker
v-model="query.reportDateRange"
type="daterange"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
style="width: 100%;"
/>
</el-form-item>
</el-col>
</el-row> </el-row>
<div class="form-row flex"> <div class="form-row flex">
<label class="text-center">问题信息</label> <label class="text-center">问题信息</label>
@ -456,6 +471,9 @@
<el-button type="primary" @click="handleExport" <el-button type="primary" @click="handleExport"
>数据导出</el-button >数据导出</el-button
> >
<el-button type="primary" @click="reportGenerationFun"
>报告生成</el-button
>
<div> <div>
<el-switch <el-switch
v-model="remainingTimeFlag" v-model="remainingTimeFlag"
@ -1057,11 +1075,11 @@
import moment from "moment"; import moment from "moment";
import { ElLoading } from "element-plus"; import { ElLoading } from "element-plus";
import { import {
listNegative, listNegative,
negativeExport, negativeExport,
delNegative, delNegative,
updateNegative, updateNegative,
transferTodo, transferTodo, generateReport,
} from "@/api/work/negative"; } from "@/api/work/negative";
import { getDictLable, formatTimeText, getInvolveProblem ,getYearTime} from "@/utils/util"; import { getDictLable, formatTimeText, getInvolveProblem ,getYearTime} from "@/utils/util";
import feedback from "@/utils/feedback"; import feedback from "@/utils/feedback";
@ -1202,6 +1220,57 @@ async function handleExport() {
router.push("/negative/export"); router.push("/negative/export");
} }
const reportGenerationFun = async ()=>{
// await feedback.confirm("");
debugger
const reportDateRange = query.value.reportDateRange;
if (!reportDateRange){
feedback.msgError("请选择对应报告时间")
return
}
const loading = ElLoading.service({
lock: true,
text: "报告生成中...",
background: "rgba(0, 0, 0, 0.5)",
});
try {
//
const body = {
beginTime: query.value.reportDateRange[0],
endTime: query.value.reportDateRange[1],
}
const res = await generateReport(body);
const blob = res.blob;
let fileName = "研判分析报告.docx";
if (res.disposition) {
const match = res.disposition.match(/filename\*?=.*''(.+)/);
if (match) {
fileName = decodeURIComponent(match[1]);
}
}
const url = window.URL.createObjectURL(blob);
const link = document.createElement("a");
link.href = url;
link.download = fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
loading.close();
} catch (error) {
console.log(error)
loading.close();
}
}
async function handleDel(row) { async function handleDel(row) {
await feedback.confirm(`确定删除该数据?`); await feedback.confirm(`确定删除该数据?`);
await delNegative(row.id); await delNegative(row.id);

Loading…
Cancel
Save