项目同步

This commit is contained in:
wcq 2023-08-11 15:05:21 +08:00
parent 0827182db1
commit 4c8a962edd
4 changed files with 175 additions and 97 deletions

View File

@ -7,11 +7,11 @@ const rateLevelConfig: RateLevelConfig = {
// AR: { badge: "3", ranking: "20%" }, // AR: { badge: "3", ranking: "20%" },
// BR: { ranking: "30%" }, // BR: { ranking: "30%" },
// CR: { ranking: "40%" }, // CR: { ranking: "40%" },
AAAʀ: { badge: "1", ranking: "5%" }, AAA: { badge: "1", ranking: "5%" },
AAʀ: { badge: "2", ranking: "10" }, AA: { badge: "2", ranking: "10" },
Aʀ: { badge: "3", ranking: "20%" }, A: { badge: "3", ranking: "20%" },
Bʀ: { ranking: "30%" }, B: { ranking: "30%" },
Cʀ: { ranking: "40%" } C: { ranking: "40%" }
// B: { ranking: "50%" }, // B: { ranking: "50%" },
// CCC: { ranking: "60%" }, // CCC: { ranking: "60%" },
// CC: { ranking: "80%" }, // CC: { ranking: "80%" },

View File

@ -41,12 +41,25 @@ interface Indicator {
得分: number; 得分: number;
档位: string; 档位: string;
} }
interface {
指标: string
数值: number
单位: string
权重: number
得分: number
}
interface RateResContent { interface RateResContent {
final_scope: number; :{
final_level: string; 级别:string,
level: string; 总分:number
total_score: number; }
indicator: Indicator[]; 指标数值与得分:指标数值与得分[]
// final_scope: number;
// final_level: string;
// level: string;
// total_score: number;
// indicator: Indicator[];
} }
const RateDataMock: RateData[] = [ const RateDataMock: RateData[] = [

View File

@ -258,17 +258,18 @@
:column-config="scope.row" :column-config="scope.row"
v-if="tableEditAble" v-if="tableEditAble"
class="max-w-[12rem]" class="max-w-[12rem]"
:model-value="manDataEditTemp[scope.row?.key]" :model-value="manDataEditTemp['经营问卷'][scope.row?.key]"
:size="'small'" :size="'small'"
@update:model-value="(newVal)=>manDataEditTemp[scope.row?.key] = newVal" @update:model-value="(newVal)=>manDataEditTemp['经营问卷'][scope.row?.key] = newVal"
></EditFormItem> ></EditFormItem>
<div v-else>{{ manDataEditTemp[scope.row?.key] }}</div> <div v-else>{{ manDataEditTemp['经营问卷'][scope.row?.key] }}</div>
</template> </template>
<!-- <template #default="scope">--> <!-- <template #default="scope">-->
<!-- {{ manDataEditTemp["问卷数据"][scope.row?.key] }}--> <!-- {{ manDataEditTemp["问卷数据"][scope.row?.key] }}-->
<!-- </template>--> <!-- </template>-->
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="flex pt-2 items-center"> <div class="flex pt-2 items-center">
<div class="ml-auto mr-2"> <div class="ml-auto mr-2">
<span class="mr-1">编辑 <span class="mr-1">编辑
@ -282,11 +283,11 @@
</div> </div>
<div v-if="detailEditTab == '企业填报数据-财报'"> <div v-if="detailEditTab == '企业填报数据-财报'">
<el-table <el-table
height="65vh" height="60vh"
max-height="65vh" max-height="60vh"
:span-method="arraySpanMethod" :span-method="arraySpanMethod"
style="overflow-x: hidden" style="overflow-x: hidden"
:data="bjDataConfig.企业填报数据.财报.columns" :data="bjDataConfig.企业填报数据.财报.columns.filter(item=>item.key!=='是否审计' && item.key!=='会计事务所')"
border border
> >
<el-table-column align="center" label="科目"> <el-table-column align="center" label="科目">
@ -297,26 +298,28 @@
> >
{{ scope.row?.name }} {{ scope.row?.name }}
</div> </div>
<div v-else> <div v-else>
{{ scope.row?.name }} {{ scope.row?.name }}
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
v-for="item in Object.keys(manDataEditTemp['财报数据'])" v-for="item in ['2020年','2021年','2022年']"
:label="item" :label="item"
align="center" align="center"
> >
<template #default="scope"> <template #default="scope">
<EditFormItem <div v-if="tableEditAble">
:size="'small'" <EditFormItem
v-if="tableEditAble" :size="'small'"
:column-config="scope.row" :column-config="scope.row"
class="max-w-[12rem]" class="max-w-[12rem]"
:model-value='manDataEditTemp["财报数据"][item][scope.row?.key]' :model-value='manDataEditTemp["财务问卷"][item][scope.row?.key]'
@update:model-value='(newVal)=>manDataEditTemp["财报数据"][ item ][scope.row?.key] = newVal' @update:model-value='(newVal)=>manDataEditTemp["财务问卷"][ item ][scope.row?.key] = newVal'
></EditFormItem> ></EditFormItem>
<div v-else>{{ manDataEditTemp["财报数据"][item][scope.row?.key] }}</div> </div>
<div v-else>{{ manDataEditTemp["财务问卷"][item][scope.row?.key] }}</div>
</template> </template>
<!-- <template #default="scope">--> <!-- <template #default="scope">-->
<!-- {{--> <!-- {{-->
@ -327,6 +330,22 @@
<!-- </template>--> <!-- </template>-->
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="mt-4">
<span class=" mx-2 " v-for="item in ['是否审计','会计事务所']">
<span class="mx-2 ">{{ item }}:</span>
<span v-if="tableEditAble">
<EditFormItem
:size="'small'"
:column-config="bjDataConfig.企业填报数据.财报.columns.find(col=>col.key==item)"
class="max-w-[12rem]"
:model-value='manDataEditTemp["财务问卷"][item]'
@update:model-value='(newVal)=>manDataEditTemp["财务问卷"][ item] = newVal'
></EditFormItem>
</span>
<span v-else>{{ manDataEditTemp["财务问卷"][item] }}</span>
</span>
</div>
<div class="flex pt-2 items-center"> <div class="flex pt-2 items-center">
<div class="ml-auto mr-2"> <div class="ml-auto mr-2">
<span class="mr-1">编辑 <span class="mr-1">编辑
@ -433,11 +452,12 @@ const detailEditTab = ref("企业填报数据-问卷");
const tableEditAble = ref(false) const tableEditAble = ref(false)
const rowTemp = ref<RateData | null>(null); const rowTemp = ref<RateData | null>(null);
const manDataEditTemp = ref({ const manDataEditTemp = ref({
"问卷数据": {}, "经营问卷": {},
"财报数据": { "财务问卷": {
"2023": {}, 资产负债表: {},
"2022": {}, 利润表: {},
"2021": {}, 是否审计: null,
会计事务所: null
} }
}); });
@ -522,15 +542,16 @@ function showDetailEdit(row: RateData) {
rowTemp.value = res.data rowTemp.value = res.data
if (!rowTemp.value?.man_data) { if (!rowTemp.value?.man_data) {
manDataEditTemp.value = { manDataEditTemp.value = {
"问卷数据": {}, "经营问卷": {},
"财报数据": { "财务问卷": {
"2023": {}, 资产负债表: {},
"2022": {}, 利润表: {},
"2021": {}, 是否审计: null,
会计事务所: null
} }
}; };
} else { } else {
// manDataEditTemp.value = JSON.parse(rowTemp.value.man_data); manDataEditTemp.value = JSON.parse(rowTemp.value.man_data);
} }
// if (!rowTemp.value?.file_data) { // if (!rowTemp.value?.file_data) {
@ -557,7 +578,7 @@ function showDetailEdit(row: RateData) {
const arraySpanMethod = ({row, column, rowIndex, columnIndex}) => { const arraySpanMethod = ({row, column, rowIndex, columnIndex}) => {
if (row.type == "label") { if (row.type == "label") {
return [1, Object.keys(manDataEditTemp.value['财报数据']).length + 1]; return [1, 3 + 1];
} }
}; };

View File

@ -128,13 +128,17 @@
prop="rate_time" prop="rate_time"
width="180" width="180"
></el-table-column> ></el-table-column>
<el-table-column align="center" label="操作" width="270"> <el-table-column align="center" label="操作" width="340">
<template #default="scope"> <template #default="scope">
<div class="flex flex-c"> <div class="flex flex-c">
<el-button type="success" @click="doRate(scope.row)" size="small" <el-button type="success" @click="doRate(scope.row)" size="small"
>评级 >评级
</el-button </el-button
> >
<el-button type="success" @click="downReport(scope.row)" size="small"
>报告下载
</el-button
>
<el-button <el-button
type="primary" type="primary"
@click="doPublish(scope.row)" @click="doPublish(scope.row)"
@ -190,8 +194,8 @@
<div class="flex"> <div class="flex">
<div style="font-size: 1.1rem" class="flex"> <div style="font-size: 1.1rem" class="flex">
<div>{{ rowTemp.company_name }}</div> <div>{{ rowTemp.company_name }}</div>
<div class="ml-8">等级:{{ detailData.final_level }}</div> <div class="ml-8">等级:{{ detailData.评级结果.级别 }}</div>
<div class="ml-8">得分:{{ detailData.final_scope }}</div> <div class="ml-8">得分:{{ detailData.评级结果.总分 }}</div>
</div> </div>
<div class="ml-auto flex flex-c" style="font-size: 0.9rem"> <div class="ml-auto flex flex-c" style="font-size: 0.9rem">
@ -205,63 +209,55 @@
<div class="flex-1"> <div class="flex-1">
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane label="模型指标" name="模型指标"> <el-tab-pane label="模型指标" name="模型指标">
<el-table :data="detailData.indicator" height="68vh" border> <el-table :data="detailData.指标数值与得分" height="68vh" border>
<el-table-column prop="一级指标" label="一级指标"> <el-table-column prop="指标" label="指标" width="320">
<template #default="scope"> <!-- <template #default="scope">-->
{{ ellipsis(scope.row["一级指标"]) }} <!-- {{ scope.row["指标"] }}-->
</template> <!-- </template>-->
</el-table-column> </el-table-column>
<el-table-column prop="二级指标" label="二级指标"> <el-table-column prop="数值" label="数值">
<template #default="scope">
{{ ellipsis(scope.row["二级指标"]) }}
</template>
</el-table-column> </el-table-column>
<el-table-column prop="三级指标" label="三级指标"> <el-table-column prop="单位" label="单位">
<template #default="scope">
{{ ellipsis(scope.row["三级指标"]) }}
</template>
</el-table-column> </el-table-column>
<el-table-column prop="四级指标" label="四级指标"> <el-table-column prop="权重" label="权重">
<template #default="scope">
{{ ellipsis(scope.row["四级指标"]) }}
</template>
</el-table-column> </el-table-column>
<el-table-column prop="数值" label="实际值"> <el-table-column prop="得分" label="得分">
<template #default="scope">
{{ ellipsis(scope.row["数值"]) }}
</template>
</el-table-column>
<el-table-column prop="单位" label="单位"></el-table-column>
<el-table-column
prop="得分"
label="得分"
></el-table-column>
</el-table
>
</el-tab-pane>
<el-tab-pane label="调整项" name="调整项">
<el-table
:data="
Object.keys(detailData['调整项']).map(item => {
return {
key: item,
value: detailData['调整项'][item].value,
scope: detailData['调整项'][item].scope
};
})
"
height="68vh"
border
>
<el-table-column prop="key" label="调整项名称">
</el-table-column>
<el-table-column prop="value" label="调整项值">
</el-table-column>
<el-table-column prop="scope" label="调整项值">
</el-table-column> </el-table-column>
<!-- <el-table-column prop="单位" label="单位"></el-table-column>-->
<!-- <el-table-column-->
<!-- prop="得分"-->
<!-- label="得分"-->
<!-- ></el-table-column>-->
</el-table </el-table
> >
</el-tab-pane> </el-tab-pane>
<!-- <el-tab-pane label="调整项" name="调整项">-->
<!-- <el-table-->
<!-- :data="-->
<!-- Object.keys(detailData['调整项']).map(item => {-->
<!-- return {-->
<!-- key: item,-->
<!-- value: detailData['调整项'][item].value,-->
<!-- scope: detailData['调整项'][item].scope-->
<!-- };-->
<!-- })-->
<!-- "-->
<!-- height="68vh"-->
<!-- border-->
<!-- >-->
<!-- <el-table-column prop="key" label="调整项名称">-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="value" label="调整项值">-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="scope" label="调整项值">-->
<!-- </el-table-column>-->
<!-- </el-table-->
<!-- >-->
<!-- </el-tab-pane>-->
</el-tabs> </el-tabs>
</div> </div>
</div> </div>
@ -333,6 +329,55 @@ function doRate(row: RateData) {
}); });
} }
// Blob
function blobToText(blob) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
resolve(reader.result);
};
reader.onerror = () => {
reject(new Error("Failed to read blob."));
};
reader.readAsText(blob);
});
}
function downReport(row: RateData) {
// ElMessage.success("")
api.post("/wd-smebiz/smebiz_rate/company_rate/get_report_admin", {id: row.id}, {responseType: "blob"})
.then(response => {
console.log(response)
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
const contentDisposition = response.headers['content-disposition'];
let decodedFilename = "报告.docx"
if (contentDisposition) {
const filenameMatch = contentDisposition.match(/filename\*?=utf-8''([^;]+)/);
if (filenameMatch && filenameMatch.length > 1) {
const encodedFilename = filenameMatch[1];
decodedFilename = decodeURIComponent(encodedFilename);
}
}
link.setAttribute('download', decodedFilename); //
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
ElMessage.success("开始下载")
}).catch(async (error) => {
console.error(error);
// ElMessage.warning(e.response?.data?.detail || "");
if (error.response && error.response.data instanceof Blob) {
const errorText = await blobToText(error.response.data);
const data = JSON.parse(errorText)
ElMessage.warning(data.detail)
} else {
ElMessage.warning("错误")
}
});
}
function doPublish(row: RateData) { function doPublish(row: RateData) {
api api
.post("/wd-smebiz/smebiz_rate/company_rate/update", { .post("/wd-smebiz/smebiz_rate/company_rate/update", {
@ -379,15 +424,14 @@ function showDetail(row: RateData) {
if (rowTemp.value?.rate_data) { if (rowTemp.value?.rate_data) {
const data = JSON.parse(rowTemp.value.rate_data); const data = JSON.parse(rowTemp.value.rate_data);
console.log("data", data); console.log("data", data);
detailData.value = data.content; detailData.value = data.data;
} else { } else {
detailData.value = { detailData.value = {
final_scope: null, 评级结果: {
final_level: null, 总分: 0,
total_score: null, 级别: ""
level: null, },
调整项: {}, 指标数值与得分: []
indicator: []
}; };
} }