fix: BUG修改

This commit is contained in:
kun 2023-08-21 19:15:49 +08:00
parent 888a04bb53
commit b719d50402
4 changed files with 448 additions and 194 deletions

View File

@ -293,6 +293,11 @@ export const rankCompanyCount = (params: any) => {
return http.post(BASEURL + `/gov/enterpriseScore/rankEnterpriseStat`, params);
};
// 根据企业类型获取分项列表
export const scoreSubItemList = (params: any) => {
return http.post(BASEURL + `/gov/enterpriseScoreStandard/subItemList`, params);
};
// 企业端
// 获取项目信息
export const getEntProjectInfo = (params: any) => {

View File

@ -3,29 +3,70 @@
<div class="table-head-one">审图单位服务考核评分表</div>
<div class="table-head-two">
<div><span>服务单位名称</span></div>
<div><span>服务单位名称</span></div>
<div><span>服务单位名称</span></div>
<div><span>服务单位名称</span></div>
<div><span>服务单位名称</span></div>
<div><span>服务单位名称</span></div>
<div class="form-element">
<!-- <el-select placeholder="请选择" class="form-element-select">
<el-option v-for="item in selectOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select> -->
<span>{{ formData.enterpriseName }}</span>
</div>
<div><span>类别对象</span></div>
<div class="form-element">
<span>{{ formData.enterpriseTypeName }}</span>
</div>
<div><span>填表时间</span></div>
<div class="form-element-date">
<el-date-picker
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
v-model="formData.scoreTime"
placeholder="请选择"
/>
</div>
</div>
<div class="table-head-three">
<div><span>服务单位名称</span></div>
<div><span>服务单位名称</span></div>
<div><span>服务单位名称</span></div>
<div><span>服务单位名称</span></div>
<div><span>服务项目名称</span></div>
<div>{{ formData.engineeringName }}</div>
<div><span>合同编号</span></div>
<div class="form-element">
<el-input placeholder="请输入" v-model="formData.concatNumber" class="form-element-input" />
</div>
</div>
<div class="table-head-four">
<div><span>服务单位名称</span></div>
<div><span>服务单位名称</span></div>
<div><span>服务考核区间</span></div>
<div class="form-element">
<el-date-picker
v-model="formData.timeRange"
type="monthrange"
range-separator="至"
format="YYYY-MM"
value-format="YYYY-MM"
start-placeholder="开始日期"
end-placeholder="结束日期"
/>
</div>
</div>
<div class="table-head-five">
<div><span>服务单位名称</span></div>
<div><span>服务单位名称</span></div>
<div><span>考核标准项</span></div>
<div><span>评分</span></div>
</div>
<div class="table-head-six">
<div><span>优秀10良好8-9一般6-70-5</span></div>
</div>
<div class="table-head-six-add">
<div>
<el-button
class="btnStyle"
size="small"
type="primary"
v-for="(item, index) in categoryList"
:key="index"
@click="getDetails(item)"
>
{{ item }}
</el-button>
</div>
</div>
<div class="table-head-seven">
<div><span>考核项目</span></div>
<div><span>考核得分</span></div>
@ -38,100 +79,200 @@
<div><span>得分</span></div>
<div><span>扣分说明</span></div>
</div>
<div class="table-head-nine">
<div class="table-head-nine" v-for="(value, key, index) in recordData" :key="index">
<div class="table-head-nine-part1">
<div><span>类别</span></div>
<div>
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
<span>10</span>
<div class="category-title">
<span>{{ key }}</span>
</div>
<div class="category-content">
<div v-for="(item, index2) in value.children" :key="index2">
<div>
<span>考核内容</span>
<span>考核内容</span>
<span>考核内容</span>
<span>考核内容</span>
<span>考核内容</span>
<span>考核内容</span>
<span>考核内容</span>
<span>考核内容</span>
<span>考核内容</span>
<span>考核内容</span>
<span>{{ index2 + 1 }}</span>
</div>
<div>{{ item.scoreCriteria }}</div>
<div><span>10</span></div>
<div>
<span>总分值</span>
<span>总分值</span>
<span>总分值</span>
<span>总分值</span>
<span>总分值</span>
<span>总分值</span>
<span>总分值</span>
<span>总分值</span>
<span>总分值</span>
<span>总分值</span>
<el-select placeholder="请选择" class="form-element-select" v-model="item.score">
<el-option v-for="item in scoreOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
<div>
<span>得分</span>
<span>得分</span>
<span>得分</span>
<span>得分</span>
<span>得分</span>
<span>得分</span>
<span>得分</span>
<span>得分</span>
<span>得分</span>
<span>得分</span>
<div><el-input placeholder="请输入" v-model="item.punish" class="form-element-input" /></div>
</div>
<div>
<span>扣分说明</span>
<span>扣分说明</span>
<span>扣分说明</span>
<span>扣分说明</span>
<span>扣分说明</span>
<span>扣分说明</span>
<span>扣分说明</span>
<span>扣分说明</span>
<span>扣分说明</span>
<span>扣分说明</span>
</div>
</div>
<div class="table-head-nine-part2">
<div><span>小计</span></div>
<div><span>100</span></div>
<div><span>100</span></div>
<div><span>早退</span></div>
<div>
<span>{{ sumAllScore(value.children) }}</span>
</div>
<div>
<!-- <div class="form-element">
<el-input placeholder="请输入" class="form-element-input" />
</div> -->
</div>
</div>
</div>
<div class="table-head-ten">
<div><span>考核总评分</span></div>
<div><span>100</span></div>
<div>
<span>{{ sumAllScoreCount() }}</span>
</div>
<div><span></span></div>
</div>
</div>
<div class="operate-btn">
<el-button class="hzCancelStyle" @click="cancelScore">取消</el-button>
<el-button class="btnStyle" type="primary" @click="saveScore"> 保存 </el-button>
</div>
</template>
<script lang="ts" setup>
import { onMounted, ref, watch, reactive } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import type { FormInstance, UploadProps } from "element-plus";
import { scoreDetail, noScoreDetail, addScoreDetail } from "@/api/modules/huizhou";
import { table } from "console";
import { scoreSubItemList, scoreDetail, noScoreDetail, addScoreDetail } from "@/api/modules/huizhou";
const formData = ref({});
const emits = defineEmits(["confirm"]);
const props = defineProps(["relativeInfo"]);
const recordData = ref({});
const categoryList = ref([]);
const selectOptions = ref([{ label: "测试", value: 1 }]);
const scoreOptions = ref([
{ label: "0", value: 0 },
{ label: "1", value: 1 },
{ label: "2", value: 2 },
{ label: "3", value: 3 },
{ label: "4", value: 4 },
{ label: "5", value: 5 },
{ label: "6", value: 6 },
{ label: "7", value: 7 },
{ label: "8", value: 8 },
{ label: "9", value: 9 },
{ label: "10", value: 10 }
]);
//
const saveScore = async () => {
console.log(formData.value);
let arr = [];
for (let i in recordData.value) {
recordData.value[i].children.map(item => {
item.scoreId = props.relativeInfo.id;
// delete item.id;
arr.push(item);
});
}
let requestData = {
enterpriseScoreDetails: arr
};
console.log(recordData.value);
console.log(arr);
const res = await addScoreDetail(arr);
ElMessage.success("操作成功");
visible1.value = false;
emits("confirm");
};
//
const cancelScore = () => {
emits("confirm", false);
};
const sumAllScoreCount = () => {
let score = 0;
for (let i in recordData.value) {
recordData.value[i].children.map(item => {
score += item.score;
});
}
return score;
};
//
const sumAllScore = (arr: any) => {
let score = 0;
arr.map(item => {
score += item.score;
});
return score;
};
const getDetails = async (obj?: any) => {
let categoryName = "";
let score = 0;
let recordDataCreate = {};
recordData.value = {};
if (props.relativeInfo.score) {
let requestData = {
scoreId: props.relativeInfo.id,
category: obj ? obj : ""
};
const res = await scoreDetail(requestData);
console.log(res);
if (res && res.result) {
categoryName = res.result[0].category;
recordDataCreate[categoryName] = { children: [] };
res.result.map(item => {
item.score = 0;
score += item.standardScore;
if (item.category == categoryName) {
recordDataCreate[item.category].children.push(item);
} else {
categoryName = item.category;
recordDataCreate[categoryName] = { children: [] };
}
});
console.log(recordDataCreate);
recordData.value = recordDataCreate;
}
} else {
let requestData = {
enterpriseType: +props.relativeInfo.enterpriseType,
category: obj ? obj : ""
};
const res = await noScoreDetail(requestData);
console.log(res);
if (res && res.result) {
categoryName = res.result[0].category;
recordDataCreate[categoryName] = { children: [] };
res.result.map(item => {
item.score = 0;
score += item.standardScore;
if (item.category == categoryName) {
recordDataCreate[item.category].children.push(item);
} else {
categoryName = item.category;
recordDataCreate[categoryName] = { children: [] };
}
});
console.log(recordDataCreate);
recordData.value = recordDataCreate;
}
}
};
const getScoreSubItemData = async () => {
let requestData = {
enterpriseType: props.relativeInfo.enterpriseType
};
const res = await scoreSubItemList(requestData);
if (res && res.result) {
categoryList.value = res.result;
}
console.log(res);
};
onMounted(async () => {
await getScoreSubItemData();
await getDetails();
formData.value = { ...props.relativeInfo };
console.log(formData.value);
});
</script>
<style lang="scss" scoped>
.origin-table {
height: calc(100% - 72px);
height: calc(100% - 144px);
display: flex;
flex-direction: column;
margin: 20px 10px 20px 20px;
border: 2px solid #086d93;
overflow-y: scroll;
overflow-x: hidden;
> div {
line-height: 32px;
> div {
@ -140,158 +281,227 @@ import { table } from "console";
}
.table-head-one {
width: 100%;
background-color: #d9e1f2;
// background-color: #d9e1f2;
text-align: center;
color: #2a334c;
color: var(--el-menu-text-color);
font-size: 22px;
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
}
.table-head-two {
display: flex;
align-items: center;
background-color: white;
text-align: center;
color: #2a334c;
color: var(--el-menu-text-color);
font-size: 20px;
> div {
width: 17%;
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
white-space: nowrap;
}
div:not(:last-child) {
border-right: 2px solid #141414;
border-right: 2px solid #086d93;
}
.form-element {
display: flex;
align-items: center;
justify-content: center;
&-select {
width: 95%;
:deep() {
.el-input,
.select-trigger {
width: 100%;
height: 100%;
}
}
}
&-input {
width: 95%;
}
}
.form-element-date {
:deep() {
.el-input {
width: 95%;
}
}
}
}
.table-head-three {
display: flex;
align-items: center;
background-color: white;
text-align: center;
color: #2a334c;
// color: #2a334c;
color: var(--el-menu-text-color);
font-size: 20px;
> div {
width: 17%;
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
white-space: nowrap;
}
> div:nth-child(2) {
width: calc(51% + 4px) !important;
}
div:not(:last-child) {
border-right: 2px solid #141414;
border-right: 2px solid #086d93;
}
.form-element {
display: flex;
align-items: center;
justify-content: center;
&-input {
width: 95%;
}
}
}
.table-head-four {
display: flex;
align-items: center;
background-color: white;
text-align: center;
color: #2a334c;
color: var(--el-menu-text-color);
font-size: 20px;
> div {
width: 17%;
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
white-space: nowrap;
}
> div:nth-child(2) {
width: calc(85% + 8px);
}
div:not(:last-child) {
border-right: 2px solid #141414;
border-right: 2px solid #086d93;
}
.form-element {
display: flex;
align-items: center;
justify-content: center;
:deep() {
.el-date-editor {
width: 85%;
margin-top: 2px;
// box-shadow: none;
}
.el-range-separator {
color: var(--el-menu-text-color);
}
.el-range-input {
color: var(--el-menu-text-color);
}
.el-input__wrapper {
flex: none;
}
.el-range-input {
font-size: 20px;
}
}
}
}
.table-head-five {
display: flex;
align-items: center;
background-color: #d9e1f2;
text-align: center;
color: #2a334c;
background-color: #09314e;
color: var(--el-menu-text-color);
font-size: 20px;
> div {
width: 50%;
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
white-space: nowrap;
}
div:not(:last-child) {
border-right: 2px solid #141414;
border-right: 2px solid #086d93;
}
}
.table-head-six {
display: flex;
align-items: center;
background-color: #fff;
text-align: center;
color: #2a334c;
color: var(--el-menu-text-color);
font-size: 20px;
> div {
width: 100%;
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
white-space: nowrap;
}
div:not(:last-child) {
border-right: 2px solid #141414;
border-right: 2px solid #086d93;
}
}
.table-head-six-add {
display: flex;
font-size: 20px;
> div {
width: 100%;
border-bottom: 2px solid #086d93;
white-space: nowrap;
:deep() {
.el-button {
margin-left: 15px;
}
}
}
div:not(:last-child) {
border-right: 2px solid #086d93;
}
}
.table-head-seven {
display: flex;
align-items: center;
background-color: #fff;
text-align: center;
color: #2a334c;
color: var(--el-menu-text-color);
font-size: 20px;
> div:nth-child(1) {
width: 68%;
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
white-space: nowrap;
}
> div:nth-child(2) {
width: 34%;
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
white-space: nowrap;
}
div:not(:last-child) {
border-right: 2px solid #141414;
border-right: 2px solid #086d93;
}
}
.table-head-eight {
display: flex;
align-items: center;
background-color: #fff;
text-align: center;
color: #2a334c;
color: var(--el-menu-text-color);
font-size: 20px;
> div:nth-child(1) {
width: 17%;
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
white-space: nowrap;
}
> div:nth-child(2) {
width: 5%;
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
white-space: nowrap;
}
> div:nth-child(3) {
width: calc(46% - 4px);
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
white-space: nowrap;
}
> div:nth-child(4) {
width: 11%;
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
white-space: nowrap;
}
> div:nth-child(5) {
width: 11%;
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
white-space: nowrap;
}
> div:nth-child(6) {
width: calc(12% - 4px);
border-bottom: 2px solid #8e8e8e;
border-bottom: 2px solid #086d93;
white-space: nowrap;
}
div:not(:last-child) {
border-right: 2px solid #141414;
border-right: 2px solid #086d93;
}
}
.table-head-nine {
@ -300,84 +510,95 @@ import { table } from "console";
.table-head-nine-part1 {
display: flex;
align-items: center;
background-color: #fff;
// background-color: #fff;
text-align: center;
color: #2a334c;
color: var(--el-menu-text-color);
font-size: 20px;
border-bottom: 1px solid #8e8e8e;
> div:nth-child(1) {
width: 17%;
border-bottom: 1px solid #086d93;
.category-title {
width: calc(17% - 2px);
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
white-space: nowrap;
border-right: 2px solid #086d93;
}
.category-content {
width: calc(85% - 8px);
> div {
width: 100%;
display: flex;
> div:nth-child(1) {
width: 6%;
display: flex;
align-items: center;
justify-content: center;
white-space: nowrap;
}
> div:nth-child(2) {
width: 5%;
white-space: nowrap;
display: flex;
flex-direction: column;
> span:not(:first-child) {
border-top: 1px solid #8e8e8e;
}
width: 54%;
overflow-wrap: anywhere;
}
> div:nth-child(3) {
width: calc(46% - 4px);
width: 13%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #8e8e8e;
}
}
> div:nth-child(4) {
width: 11%;
width: 13%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #8e8e8e;
}
}
> div:nth-child(5) {
width: 11%;
width: calc(14% - 2px);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #8e8e8e;
}
}
> div:nth-child(6) {
width: calc(12% - 4px);
display: flex;
flex-direction: column;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #8e8e8e;
}
}
div:not(:last-child) {
border-right: 2px solid #141414;
border-right: 2px solid #086d93;
}
}
> div:not(:last-child) {
> div:nth-child(1) {
border-bottom: 1px solid #086d93;
}
> div:nth-child(2) {
border-bottom: 1px solid #086d93;
}
> div:nth-child(3) {
border-bottom: 1px solid #086d93;
}
> div:nth-child(4) {
border-bottom: 1px solid #086d93;
}
> div:nth-child(5) {
border-bottom: 1px solid #086d93;
}
}
}
}
.table-head-nine-part2 {
display: flex;
align-items: center;
background-color: #fff;
text-align: center;
color: #2a334c;
color: var(--el-menu-text-color);
font-size: 20px;
border-bottom: 1px solid #8e8e8e;
border-bottom: 1px solid #086d93;
> div:nth-child(1) {
width: 68%;
display: flex;
flex-direction: column;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #8e8e8e;
border-top: 1px solid #086d93;
}
}
> div:nth-child(2) {
@ -386,7 +607,7 @@ import { table } from "console";
flex-direction: column;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #8e8e8e;
border-top: 1px solid #086d93;
}
}
> div:nth-child(3) {
@ -395,7 +616,7 @@ import { table } from "console";
flex-direction: column;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #8e8e8e;
border-top: 1px solid #086d93;
}
}
> div:nth-child(4) {
@ -403,31 +624,45 @@ import { table } from "console";
display: flex;
flex-direction: column;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #8e8e8e;
}
// .form-element {
// display: flex;
// align-items: center;
// justify-content: center;
// &-input {
// width: 90%;
// :deep() {
// .el-input,
// .select-trigger {
// width: 100%;
// height: 100%;
// }
// }
// }
// }
// .form-element:not(:first-child) {
// border-top: 1px solid #086d93;
// }
}
div:not(:last-child) {
border-right: 2px solid #141414;
border-right: 2px solid #086d93;
}
}
}
.table-head-ten {
display: flex;
align-items: center;
background-color: #fff;
text-align: center;
color: #2a334c;
color: var(--el-menu-text-color);
font-weight: 700;
font-size: 20px;
border-bottom: 1px solid #8e8e8e;
// border-bottom: 1px solid #086d93;
> div:nth-child(1) {
width: 68%;
display: flex;
flex-direction: column;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #8e8e8e;
border-top: 1px solid #086d93;
}
}
> div:nth-child(2) {
@ -436,7 +671,7 @@ import { table } from "console";
flex-direction: column;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #8e8e8e;
border-top: 1px solid #086d93;
}
}
> div:nth-child(3) {
@ -445,12 +680,19 @@ import { table } from "console";
flex-direction: column;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #8e8e8e;
border-top: 1px solid #086d93;
}
}
div:not(:last-child) {
border-right: 2px solid #141414;
border-right: 2px solid #086d93;
}
}
}
.operate-btn {
display: flex;
align-items: center;
justify-content: center;
margin-top: 20px;
}
</style>

View File

@ -14,13 +14,6 @@
</template>
</leftMenu2>
</div>
<div class="content-area">
<div class="back-btn">
<el-button type="primary">
<span>返回</span>
</el-button>
</div>
</div>
</div>
</template>

View File

@ -14,7 +14,7 @@
</template>
</leftMenu2>
</div>
<div class="table-box">
<div class="table-box" v-if="!openScore">
<div class="table">
<ProTable
ref="proTable"
@ -43,6 +43,15 @@
</ProTable>
</div>
</div>
<div class="content-area" v-else>
<div class="back-btn">
<el-button type="primary" @click="openScore = false">
<span>返回</span>
</el-button>
</div>
<!-- 评分表 -->
<scoreTableNew :relativeInfo="relativeInfo" @confirm="confirmScore"></scoreTableNew>
</div>
<!-- 新增单位 -->
<el-dialog class="imgDialog" title="新增" width="50%" v-model="addVisible" show-close>
<el-form class="diaForm" :model="addFormData" ref="formRef" :rules="rules" label-width="180px">
@ -99,8 +108,8 @@
<el-button class="hzStyle" type="primary" @click="confirmAddType(formRef, addFormData)"> 保存 </el-button>
</template>
</el-dialog>
<scoreTable v-model:detailsDialog="openScore" :relativeInfo="relativeInfo" @confirm="allScoreConfirm"></scoreTable>
<addCompany v-model:detailsDialog="openAddCompany" :relativeInfo="companyType" @confirm="allConfirm"></addCompany>
<!-- <scoreTable v-model:detailsDialog="openScore" :relativeInfo="relativeInfo" @confirm="allScoreConfirm"></scoreTable>
<addCompany v-model:detailsDialog="openAddCompany" :relativeInfo="companyType" @confirm="allConfirm"></addCompany> -->
</div>
</template>
@ -115,9 +124,9 @@ import { ElMessage } from "element-plus";
import DialogForm from "@/components/DialogForm/index.vue";
import scoreTable from "./components/scoreTable.vue";
import addCompany from "./components/addCompany.vue";
import scoreTableNew from "./components/scoreTableNew.vue";
import { getDicList } from "@/api/modules/jxjview";
import { scorePage, enterpriseList, engineerList, scoreAdd } from "@/api/modules/huizhou";
import { ro } from "date-fns/locale";
const relativeInfo = ref({});
const dicMainData = ref([]);
const openScore = ref(false);
@ -214,6 +223,10 @@ const companyType = ref({});
const proTable = ref();
const enterpriseDataList = ref<any>([]);
const engineerDataList = ref<any>([]);
const confirmScore = (val: any) => {
console.log(val);
openScore.value = val;
};
const openScoreTable = (row: any) => {
relativeInfo.value = row;
relativeInfo.value.enterpriseType = companyType.value.dictLabel;
@ -340,6 +353,7 @@ const getTableList = (params: any) => {
// div
const onSearch = async (params: any) => {
console.log(params);
openScore.value = false;
companyType.value = params;
proTable.value.getTableList();
};