样式修改基本完成

v1.2.0
‘wangjiuyun 2025-01-08 18:36:18 +08:00
parent 8d02e76518
commit 74de4ef76c
8 changed files with 580 additions and 202 deletions

View File

@ -157,6 +157,11 @@ export const taskApi = {
method: 'get', method: 'get',
params: data, params: data,
}), }),
getTaskListSelfNormal: (data) => request({
url: '/task/listSelf',
method: 'get',
params: data,
}),
getTaskList: (data) => request({ getTaskList: (data) => request({
url: '/task/get', url: '/task/get',

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="project-list flex-row jcsb"> <div class="project-list flex-row jcsb">
<div class="left"> <div class="left">
<div style="margin-bottom: 20px">人员绩效表</div> <div style="margin-bottom: 20px; font-weight: bold">组织架构</div>
<el-tree <el-tree
:data="deptOptions" :data="deptOptions"
:expand-on-click-node="false" :expand-on-click-node="false"
@ -10,6 +10,7 @@
default-expand-all default-expand-all
highlight-current highlight-current
@node-click="handleNodeClick" @node-click="handleNodeClick"
style="margin-left: 50px"
/> />
</div> </div>
<div class="right f1"> <div class="right f1">
@ -91,13 +92,18 @@ export default {
prop: "examineStatus", prop: "examineStatus",
label: "状态", label: "状态",
type: "status", type: "status",
callback: (value) => { callback: (value, row) => {
if (value == 0) var color = "#333"; if (row.examineStatusSelf != 0 && row.examineStatus != 0)
else var color = "#1686d68"; var color = "#333";
else var color = "#FF7D00";
return `<span style="color: ${color}">${ if (row.examineStatusSelf == 0 && row.examineStatus == 0) {
value == 0 ? "待评分" : "已完成" return `<span style="color: ${color}">待个人自评/组长评分</span>`;
}</span>`; } else if (row.examineStatusSelf == 0) {
return `<span style="color: ${color}">待个人自评</span>`;
} else {
return `<span style="color: ${color}">待组长评分评</span>`;
}
}, },
}, },
{ {
@ -194,7 +200,7 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.project-list { .project-list {
padding: 20px; padding: 0 20px;
background-color: white; background-color: white;
height: 88vh; height: 88vh;
box-sizing: border-box; box-sizing: border-box;
@ -205,7 +211,9 @@ export default {
padding-top: 20px; padding-top: 20px;
width: 300px; width: 300px;
height: 100%; height: 100%;
box-shadow: 5px 0 5px rgba(0, 0, 0, 0.5); /* 阴影效果 */ // box-shadow: 5px 0 5px rgba(0, 0, 0, 0.5); /* */
border-right: 1px solid #eeeeee;
margin-right: 10px;
} }
.right { .right {
padding-top: 20px; padding-top: 20px;
@ -305,4 +313,18 @@ export default {
width: 90px !important; width: 90px !important;
height: 36px; height: 36px;
} }
::v-deep .el-table {
border: 1px solid #eee;
border-bottom: none;
}
::v-deep .el-tree-node__content {
font-weight: bold;
}
::v-deep .is-current>.el-tree-node__content:first-child .el-tree-node__label {
color: #4096ff !important;
}
::v-deep .el-tree-node__content {
height: 36px;
}
</style> </style>

View File

@ -1,13 +1,20 @@
<template> <template>
<div class="conetentBox"> <div class="conetentBox">
<div class="titleBox flex-row aic jcsb">
<div class="flex-row aic">
<div class="block"></div>
评分详情
</div>
</div>
<div class="flex-row jcsb aic userBox"> <div class="flex-row jcsb aic userBox">
<div> <div>
<el-form :inline="true" class="demo-form-inline" size="small"> <el-form :inline="true" class="demo-form-inline" size="small">
<el-form-item label="考核人员" class="form-item"> <el-form-item label="人员姓名" class="form-item">
<el-select <el-select
v-model="examineId" v-model="examineId"
placeholder="请选择" placeholder="请选择"
@change="userChange" @change="userChange"
style="width: 300px"
> >
<el-option <el-option
v-for="item in userList" v-for="item in userList"
@ -18,11 +25,12 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="考核任务" class="form-item"> <el-form-item label="任务名称" class="form-item">
<el-select <el-select
v-model="examineTaskId" v-model="examineTaskId"
placeholder="请选择" placeholder="请选择"
@change="getUserList" @change="getUserList"
style="width: 300px"
> >
<el-option <el-option
v-for="item in taskList" v-for="item in taskList"
@ -35,130 +43,265 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div>考核评分{{ score }}</div> </div>
<div class="flex-row jcsb aic userBox headerBox">
<div class="flex-row aic">
<i
class="el-icon-user-solid"
style="color: #4096ff; font-size: 24px; margin-right: 5px"
></i
>{{ userList.find((ele) => ele.id == examineId).userName }}
</div>
<div class="totalBox aic" v-if="!isNormal">
<div>考核评分</div>
<div class="scoreTotal">{{ score }}</div>
</div>
</div> </div>
<el-tabs v-model="activeName" type="card"> <el-tabs v-model="activeName" type="card">
<el-tab-pane label="组长评估" name="first"> <el-tab-pane label="组长评估" name="first">
<div <div class="tableBox">
v-for="(table, index) in tableData1" <div
:key="index" class="tableRow"
style="margin-bottom: 20px" v-for="(table, index) in tableData1"
> :key="index"
<div class="userBox">{{ table[0].reviewCategory }}</div> style="margin-bottom: 20px"
<el-table :data="table" style="width: 100%"> >
<el-table-column <div class="userBox">{{ table[0].reviewCategory }}</div>
v-for="(header, hIndex) in headers" <el-table :data="table" style="width: 100%">
:key="hIndex" <el-table-column
:label="header.label" v-for="(header, hIndex) in headers"
:prop="header.prop" :key="hIndex"
:width="header.width" :label="header.label"
> :prop="header.prop"
</el-table-column> :width="header.width"
<el-table-column label="评分" prop="score" width="300"> :minWidth="header.minWidth"
<template slot-scope="scope">
<div style="width: 80%; position: relative">
<div>
<el-slider
v-model="scope.row.score"
:min="0"
:max="10"
disabled
></el-slider>
</div>
<div class="statusText" v-show="scope.row.score == 0">
未打分
</div>
<div class="flex-row jcsb" style="margin-left: 10px">
<div>0</div>
<div class="scoreText">{{ scope.row.score }}</div>
<div>10</div>
</div>
</div>
</template>
</el-table-column>
</el-table>
</div>
<div>
<div>
<div class="userBox">总体评价</div>
<div>
<el-input
type="textarea"
:autosize="{ minRows: 4 }"
placeholder="0/300"
v-model="judgeContent"
readonly
> >
</el-input> </el-table-column>
<el-table-column
label="评分"
prop="score"
:minWidth="420"
class-name="sorceTableCell"
>
<template slot-scope="scope">
<div style="width: 88%; position: relative">
<div>
<div
class="flex-row jcsb"
style="
margin-left: 10px;
width: 90%;
color: #999;
font-weight: 500;
font-size: 14px;
"
>
<div>0</div>
<div v-show="scope.row.score != 10">10</div>
</div>
<div
class="scoreText aic"
v-show="scope.row.score != 0"
:style="{
left: scope.row.score * 9 - 5 + '%',
}"
>
<img
src="@/assets/task/score.png"
:style="{
height: '28px',
width: '34px',
zIndex: 0,
position: 'absolute',
top: '0',
}"
alt=""
/>
<div
:style="{
zIndex: 10,
paddingLeft: scope.row.score != 10 ? '13px' : '9px',
}"
>
{{ scope.row.score }}
</div>
</div>
<div
v-for="item in scope.row.score == 0
? 0
: scope.row.score - 1"
:key="item"
class="stepBox"
:style="{
left: item * 9 + 1.5 + '%',
}"
></div>
<el-slider
v-model="scope.row.score"
:min="0"
:max="10"
:disabled="!isEdit"
style="width: 90%"
show-stops
show-tooltip
></el-slider>
</div>
<div class="statusText" v-show="scope.row.score == 0">
暂未打分
</div>
</div>
</template>
</el-table-column>
</el-table>
</div>
<div>
<div>
<div class="userBox">总体评价</div>
<div>
<el-input
type="textarea"
:autosize="{ minRows: 4 }"
placeholder="0/300"
v-model="judgeContent"
:readonly="!isEdit"
maxlength="300"
show-word-limit
>
</el-input>
</div>
</div> </div>
</div></div </div></div
></el-tab-pane> ></el-tab-pane>
<el-tab-pane label="个人自评" name="second"> <el-tab-pane label="个人自评" name="second">
<div <div class="tableBox">
v-for="(table, index) in tableData2" <div
:key="index" class="tableRow"
style="margin-bottom: 20px" v-for="(table, index) in tableData2"
> :key="index"
<div class="userBox">表格 {{ table[0].reviewCategory }}</div> style="margin-bottom: 20px"
<el-table :data="table" style="width: 100%"> >
<el-table-column <div class="userBox">{{ table[0].reviewCategory }}</div>
v-for="(header, hIndex) in headers" <el-table :data="table" style="width: 100%">
:key="hIndex" <el-table-column
:label="header.label" v-for="(header, hIndex) in headers"
:prop="header.prop" :key="hIndex"
:width="header.width" :label="header.label"
> :prop="header.prop"
</el-table-column> :width="header.width"
<el-table-column label="评分" prop="score" width="300"> :minWidth="header.minWidth"
<template slot-scope="scope"> >
<div style="width: 80%; position: relative"> </el-table-column>
<div> <el-table-column
<el-slider label="评分"
v-model="scope.row.score" prop="score"
:min="0" :minWidth="320"
:max="10" class-name="sorceTableCell"
disabled >
></el-slider> <template slot-scope="scope">
</div> <div style="width: 88%; position: relative">
<div class="statusText" v-show="scope.row.score == 0"> <div>
未打分 <div
</div> class="flex-row jcsb"
style="
margin-left: 10px;
width: 90%;
color: #999;
font-weight: 500;
font-size: 14px;
"
>
<div>0</div>
<div v-show="scope.row.score != 10">10</div>
</div>
<div
class="scoreText aic"
v-show="scope.row.score != 0"
:style="{
left: scope.row.score * 9 - 5 + '%',
}"
>
<img
src="@/assets/task/score.png"
:style="{
height: '28px',
width: '34px',
zIndex: 0,
position: 'absolute',
top: '0',
}"
alt=""
/>
<div
:style="{
zIndex: 10,
paddingLeft: scope.row.score != 10 ? '13px' : '9px',
}"
>
{{ scope.row.score }}
</div>
</div>
<div class="flex-row jcsb" style="margin-left: 10px"> <div
<div>0</div> v-for="item in scope.row.score == 0
<div class="scoreText">{{ scope.row.score }}</div> ? 0
<div>10</div> : scope.row.score - 1"
:key="item"
class="stepBox"
:style="{
left: item * 9 + 1.5 + '%',
}"
></div>
<el-slider
v-model="scope.row.score"
:min="0"
:max="10"
@change="updateScore(scope.row)"
:disabled="!isEdit"
style="width: 90%"
show-stops
show-tooltip
></el-slider>
</div>
<div class="statusText" v-show="scope.row.score == 0">
暂未打分
</div>
</div> </div>
</div> </template>
</template> </el-table-column>
</el-table-column> <el-table-column label="自评总结" prop="score">
<el-table-column label="自评总结" prop="score" width="300"> <template slot-scope="scope">
<template slot-scope="scope"> <div>
<div> <el-button
<el-button v-if="isEdit"
v-if="scope.row.remark" @click="handleEdit(scope.row)"
@click="handleEdit(scope.row)" type="text"
type="text" size="mini"
size="mini" :class="{ hasEdit: !scope.row.remark }"
icon="el-icon-view" style="font-weight: 600"
:class="{ hasEdit: !scope.row.remark }" >{{ scope.row.remark ? "查看" : "暂未评价" }}
>查看</el-button <i
> style="color: #4096ff; font-size: 14px"
<el-button class="el-icon-edit el-icon--right"
v-if="!scope.row.remark" ></i
type="text" ></el-button>
size="mini" <el-button
:class="{ hasEdit: !scope.row.remark }" v-if="!isEdit"
>未填写</el-button @click="handleEdit(scope.row)"
> type="text"
</div> size="mini"
</template> :class="{ hasEdit: !scope.row.remark }"
</el-table-column> style="font-weight: 600"
</el-table> >{{ scope.row.remark ? "查看" : "暂未评价" }}</el-button
>
</div>
</template>
</el-table-column>
</el-table>
</div>
<div></div>
</div> </div>
<div></div </el-tab-pane>
></el-tab-pane>
</el-tabs> </el-tabs>
<el-dialog title="自评总结" :visible.sync="dialogVisible" width="30%"> <el-dialog title="自评总结" :visible.sync="dialogVisible" width="30%">
<div> <div>
@ -190,8 +333,12 @@ export default {
dialogVisible: false, dialogVisible: false,
remark: "", remark: "",
headers: [ headers: [
{ label: "考核项", prop: "reviewItem", width: 300 }, { label: "考核项", prop: "reviewItem", minWidth: 200 },
{ label: "评分标准", prop: "remarks" }, {
label: "评分标准",
prop: "remarks",
minWidth: 300,
},
], ],
// //
tableData1: [], tableData1: [],
@ -259,7 +406,7 @@ export default {
if (type == 0) this.tableData1 = Object.values(objData); if (type == 0) this.tableData1 = Object.values(objData);
else this.tableData2 = Object.values(objData); else this.tableData2 = Object.values(objData);
this.judgeContent = res.data.examineUser.judgeContent; this.judgeContent = res.data.examineUser.judgeContent;
this.score = res.data.examineUser.score; this.score = res.data.examineUser.score||res.data.examineUser.manageScore;
}); });
}, },
}, },
@ -271,7 +418,7 @@ export default {
<style scoped> <style scoped>
.conetentBox { .conetentBox {
padding: 30px; padding: 40px 30px 30px;
background-color: #fff; background-color: #fff;
height: 90vh; /* 设置整体高度 */ height: 90vh; /* 设置整体高度 */
overflow: auto; overflow: auto;
@ -279,58 +426,128 @@ export default {
.el-table { .el-table {
margin-top: 20px; margin-top: 20px;
} }
.userBox { .userBox {
margin: 0 0 20px; margin: 0 0 20px;
font-size: 16px; font-size: 16px;
font-weight: bold; font-weight: bold;
} }
::v-deep .el-slider__runway { ::v-deep .el-slider__runway {
height: 20px; height: 14px;
border-radius: 20px; border-radius: 10px;
margin: 10px !important; margin: 10px !important;
/* width: 95%; */ /* width: 95%; */
} }
::v-deep .el-slider__bar {
height: 20px;
border-radius: 20px;
background-color: #ff5722;
}
::v-deep .el-slider__runway.disabled .el-slider__bar { ::v-deep .el-slider__runway.disabled .el-slider__bar {
height: 14px;
border-radius: 10px;
background-color: #ff5722; background-color: #ff5722;
} }
::v-deep .el-slider__stop {
height: 14px;
border-radius: 0;
z-index: 1000;
}
::v-deep .el-slider__bar { ::v-deep .el-slider__bar {
height: 20px; height: 14px;
border-radius: 20px; border-radius: 10px;
background-color: #ff5722; background: linear-gradient(to right, #ffb144, #ff7d00);
} }
::v-deep .el-slider__button { ::v-deep .el-slider__button {
display: none; display: none;
} }
.scoreText { .scoreText {
color: #1686d8; color: #fff;
position: absolute;
top: 2px;
font-weight: 500;
display: flex;
flex-direction: row;
} }
::v-deep .el-table th { ::v-deep .el-table th {
text-align: center; text-align: left;
font-size: 14px;
font-weight: bold;
} }
::v-deep .el-table .cell { ::v-deep .el-table .cell {
text-align: center; text-align: left;
font-size: 14px;
font-weight: bold;
} }
.statusText { .statusText {
color: #ff5722; color: #ff7d00;
position: absolute; position: absolute;
right: -58px; right: -50px;
top: 10px; top: 26px;
font-size: 14px;
font-weight: 600;
} }
.hasEdit { .hasEdit {
color: #ff5722; color: #999999;
} }
::v-deep .el-dialog { ::v-deep .el-dialog {
margin-top: 15% !important; margin-top: 15% !important;
} }
.tableBox {
::v-deep .el-tab-pane { height: 75%;
height: 600px;
overflow: auto; overflow: auto;
padding: 20px;
background-color: #fff;
}
.tableBox ::v-deep .el-table {
border-left: 1px solid #eeeeee;
border-right: 1px solid #eeeeee;
}
.tableRow {
padding: 20px;
box-shadow: 0 0 20px #0000000f;
}
.titleBox {
font-size: 20px;
font-weight: bold;
margin-bottom: 40px;
}
.headerBox {
padding: 20px;
background-color: #f9f9f9;
border-radius: 2px;
font-size: 14px;
}
.block {
width: 4px;
height: 24px;
background-color: #4096ff;
margin-right: 10px;
}
.stepBox {
position: absolute;
top: 33px;
height: 14px;
width: 3px;
background-color: #fff;
z-index: 100;
}
.totalBox {
width: 150px;
display: flex;
flex-direction: row;
font-size: 14px;
color: #333333;
}
.scoreTotal {
font-size: 28px;
font-weight: 700;
color: #ff7d00;
}
::v-deep .sorceTableCell .cell {
margin-bottom: 20px;
}
::v-deep .el-table__body .el-table__cell {
padding: 20px 40px;
}
::v-deep .el-table__header .el-table__cell {
padding: 14px 30px;
} }
</style> </style>

View File

@ -48,7 +48,7 @@
<el-table-column <el-table-column
label="评分" label="评分"
prop="score" prop="score"
minWidth="320" :minWidth="isNormal ? 320 : 420"
class-name="sorceTableCell" class-name="sorceTableCell"
> >
<template slot-scope="scope"> <template slot-scope="scope">
@ -185,9 +185,13 @@
</el-input> </el-input>
</div> </div>
<span slot="footer" class="dialog-footer" > <span slot="footer" class="dialog-footer">
<el-button @click="cancelEdit">{{isEdit?' ':''}}</el-button> <el-button @click="cancelEdit">{{
<el-button type="primary" @click="saveEdit" v-if="isEdit"> </el-button> isEdit ? "取 消" : "关闭"
}}</el-button>
<el-button type="primary" @click="saveEdit" v-if="isEdit"
> </el-button
>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
@ -207,11 +211,11 @@ export default {
remark: "", remark: "",
isEdit: "", isEdit: "",
headers: [ headers: [
{ label: "考核项", prop: "reviewItem", minWidth: 100 }, { label: "考核项", prop: "reviewItem", minWidth: 200 },
{ {
label: "评分标准", label: "评分标准",
prop: "remarks", prop: "remarks",
minWidth: 320, minWidth: 300,
}, },
], ],
// //
@ -272,9 +276,11 @@ export default {
this.examineId = res.data.examineUser.id; this.examineId = res.data.examineUser.id;
this.examineTask = res.data.examineTask; this.examineTask = res.data.examineTask;
this.examineUser = res.data.examineUser; this.examineUser = res.data.examineUser;
if(res.data.examineUser.examineStatusSelf==1) if (
this.isEdit =false res.data.examineUser.examineStatusSelf == 1 &&
res.data.examineUser.examineStatus == 1
)
this.isEdit = false;
}); });
}, },
handleEdit(row) { handleEdit(row) {
@ -519,6 +525,9 @@ export default {
margin-bottom: 20px; margin-bottom: 20px;
} }
::v-deep .el-table__body .el-table__cell { ::v-deep .el-table__body .el-table__cell {
padding: 20px 0; padding: 20px 40px;
}
::v-deep .el-table__header .el-table__cell {
padding: 14px 30px;
} }
</style> </style>

View File

@ -25,7 +25,8 @@
</div> </div>
<div <div
class="action-buttons aic" class="action-buttons aic"
@click="viewDetails(item.id, 1)" @click="viewDetails(item, 1)"
:class="{ waitBtn: !item.taskEditFlag }"
> >
考核评分 考核评分
<img <img
@ -62,9 +63,10 @@
</div> </div>
<div <div
class="action-buttons aic" class="action-buttons aic"
@click="viewDetails(item.id, 0)" @click="viewDetails(item, 0)"
:class="{ waitBtn: !item.taskEditFlag }"
> >
考核评分 查看详情
<img <img
src="@/assets/task/right.png" src="@/assets/task/right.png"
alt="" alt=""
@ -96,11 +98,18 @@ export default {
this.taskList = res.data; this.taskList = res.data;
}); });
}, },
viewDetails(id, isEdit) { viewDetails(row, isEdit) {
if (!row.taskEditFlag) {
this.$message({
message: "分数正在计算中,请等待计算完成",
type: "warning",
});
return;
}
// //
this.$router.push({ this.$router.push({
path: "/workAppraisal/managerUser", path: "/workAppraisal/managerUser",
query: { taskId: id, isEdit }, query: { taskId: row.id, isEdit },
}); });
}, },
}, },
@ -208,4 +217,7 @@ export default {
::v-deep .el-tag--warning { ::v-deep .el-tag--warning {
color: #ea741e; color: #ea741e;
} }
.waitBtn{
color: #999;
}
</style> </style>

View File

@ -13,7 +13,7 @@
placeholder="考核人员" placeholder="考核人员"
readonly readonly
@click.native="openUserSelectDialog" @click.native="openUserSelectDialog"
style="width: 300px;" style="width: 300px"
><el-button slot="append" icon="el-icon-s-custom"></el-button ><el-button slot="append" icon="el-icon-s-custom"></el-button
></el-input> ></el-input>
</el-form-item> </el-form-item>
@ -22,8 +22,7 @@
v-model="searchForm.examineStatus" v-model="searchForm.examineStatus"
placeholder="状态" placeholder="状态"
clearable clearable
style="width: 300px;" style="width: 300px"
> >
<el-option <el-option
v-for="item in statusList" v-for="item in statusList"
@ -233,7 +232,7 @@ export default {
.demo-form-inline .el-form-item { .demo-form-inline .el-form-item {
// margin-right: 50px; /* 30px */ // margin-right: 50px; /* 30px */
margin-bottom: 0; // margin-bottom: 0;
} }
.demo-form-inline .el-form-item:last-child { .demo-form-inline .el-form-item:last-child {
@ -257,7 +256,6 @@ export default {
white-space: nowrap; white-space: nowrap;
} }
::v-deep .operation-column { ::v-deep .operation-column {
background-color: #ffffff; background-color: #ffffff;
box-shadow: -2px 0 5px rgba(241, 112, 6, 0.1); box-shadow: -2px 0 5px rgba(241, 112, 6, 0.1);
@ -311,8 +309,11 @@ export default {
font-weight: 600; font-weight: 600;
font-size: 14px; font-size: 14px;
} }
.search-buttons ::v-deep .el-button { .search-buttons ::v-deep .el-button {
width: 90px !important; width: 90px !important;
height: 36px; height: 36px;
} }
.waitBtn {
color: #999;
}
</style> </style>

View File

@ -25,9 +25,10 @@
</div> </div>
<div <div
class="action-buttons aic" class="action-buttons aic"
@click="viewDetails(item.id, 1)" @click="viewDetails(item, 1)"
:class="{ waitBtn: !item.taskEditFlag }"
> >
考核评分 {{ item.examineStatusSelf == 1 ? "查看详情" : "考核评分" }}
<img <img
src="@/assets/task/right.png" src="@/assets/task/right.png"
alt="" alt=""
@ -58,11 +59,12 @@
</div> </div>
<div class="status-actions aic"> <div class="status-actions aic">
<div class="peopleNumber"> <div class="peopleNumber">
考核人数{{ item.peopleNumber }} <!-- 考核人数{{ item.peopleNumber }} -->
</div> </div>
<div <div
class="action-buttons aic" class="action-buttons aic"
@click="viewDetails(item.id, 0)" @click="viewDetails(item, 0)"
:class="{ waitBtn: item.taskEditFlag }"
> >
查看详情 查看详情
<img <img
@ -92,25 +94,33 @@ export default {
}, },
methods: { methods: {
getTaks() { getTaks() {
taskApi.getTaskListSelf().then((res) => { taskApi.getTaskListSelfNormal().then((res) => {
this.taskList = res.data; this.taskList = res.data;
}); });
}, },
viewDetails(id, edit) { viewDetails(item, edit) {
if (!item.taskEditFlag) {
this.$message({
message: "分数正在计算中,请等待计算完成",
type: "warning",
});
return;
}
// //
this.$router.push({ this.$router.push({
path: "/workAppraisal/detail", path: "/workAppraisal/detail",
query: { query: {
id: id,
edit, edit,
isNormal: true, isNormal: true,
examineTaskId: id, examineTaskId: item.id,
reviewType: 1, reviewType: 1,
}, },
}); });
}, },
}, },
created() { created() {
console.log(123);
this.getTaks(); this.getTaks();
}, },
}; };
@ -214,4 +224,7 @@ export default {
::v-deep .el-tag--warning { ::v-deep .el-tag--warning {
color: #ea741e; color: #ea741e;
} }
.waitBtn {
color: #999;
}
</style> </style>

View File

@ -11,6 +11,7 @@
<el-input <el-input
v-model="searchForm.taskName" v-model="searchForm.taskName"
placeholder="任务名称" placeholder="任务名称"
style="width: 300px;"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="任务状态" class="form-item"> <el-form-item label="任务状态" class="form-item">
@ -18,6 +19,8 @@
v-model="searchForm.taskStatus" v-model="searchForm.taskStatus"
placeholder="状态" placeholder="状态"
clearable clearable
style="width: 300px;"
> >
<el-option <el-option
v-for="item in statusList" v-for="item in statusList"
@ -31,9 +34,10 @@
<el-date-picker <el-date-picker
v-model="searchForm.year" v-model="searchForm.year"
type="year" type="year"
style="width: 90%" style="width: 300px"
placeholder="选择年份" placeholder="选择年份"
value-format="yyyy" value-format="yyyy"
> >
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
@ -162,7 +166,7 @@
<el-dialog title="配置指标和权重" :visible.sync="dialogVisible2"> <el-dialog title="配置指标和权重" :visible.sync="dialogVisible2">
<div class="modal"> <div class="modal">
<div class="left"> <div class="left">
<div class="setText">累计权重</div> <div class="setText" style="font-weight: 600">累计权重</div>
<el-collapse <el-collapse
v-model="letfValue" v-model="letfValue"
:accordion="true" :accordion="true"
@ -199,7 +203,7 @@
class="flex-row jcsb" class="flex-row jcsb"
style="margin-top: 20px; padding-right: 15px" style="margin-top: 20px; padding-right: 15px"
> >
<div class="setTitle">总计</div> <div class="setTitle" style="font-weight: 600">总计</div>
<div class="statusText"> <div class="statusText">
{{ {{
scoreList.reduce((total, ele) => total + (ele.weight || 0), 0) scoreList.reduce((total, ele) => total + (ele.weight || 0), 0)
@ -209,8 +213,8 @@
</div> </div>
<div class="right"> <div class="right">
<div class="flex-row jcsb" style="margin-bottom: 10px"> <div class="flex-row jcsb" style="margin-bottom: 10px">
<div style="width: 50%">指标</div> <div style="width: 50%;font-weight: 600">指标</div>
<div class="center" style="width: 50%">权重占比</div> <div class="center" style="width: 50%;font-weight: 600">权重占比</div>
</div> </div>
<div> <div>
<div <div
@ -224,18 +228,70 @@
style="margin-bottom: 10px" style="margin-bottom: 10px"
class="flex-row jcsb aic" class="flex-row jcsb aic"
> >
<div style="width: 50%">{{ item.reviewItem }}</div> <div style="width: 50%; font-weight: 600">
{{ item.reviewItem }}
</div>
<div class="center" style="width: 50%"> <div class="center" style="width: 50%">
<div
class="flex-row jcsb"
style="
margin-left: 10px;
width: 100%;
color: #999;
font-weight: 500;
font-size: 14px;
font-weight: 600;
"
>
<div>0</div>
<div v-show="item.weight != 20">20</div>
</div>
<div
class="scoreText aic"
v-show="item.weight != 0"
:style="{
left: item.weight * 4.5 - 2.5 + '%',
}"
>
<img
src="@/assets/task/score.png"
:style="{
height: '28px',
width: '34px',
zIndex: 0,
position: 'absolute',
top: '-2px',
}"
alt=""
/>
<div
:style="{
zIndex: 10,
textIndent: item.weight < 10 ? '13px' : '10px',
fontSize: '12px',
}"
>
{{ item.weight }}
</div>
</div>
<!-- <div class="flex-row jcsb scoreBox" style="margin-left: 15px">
<div>0%</div>
<div class="scoreText">{{ item.weight }}%</div>
<div>20%</div>
</div> -->
<div
v-for="item in item.weight == 0 ? 0 : item.weight - 1"
:key="item"
class="stepBox"
:style="{
left: item * 5 + 4 + '%',
}"
></div>
<el-slider <el-slider
v-model="item.weight" v-model="item.weight"
:max="20" :max="20"
@change="changeTotal" @change="changeTotal"
></el-slider> ></el-slider>
<div class="flex-row jcsb scoreBox" style="margin-left: 15px">
<div>0%</div>
<div class="scoreText">{{ item.weight }}%</div>
<div>20%</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -276,7 +332,7 @@ export default {
type: "status", type: "status",
callback: (value) => { callback: (value) => {
if (value == 2) var color = "#999"; if (value == 2) var color = "#999";
else var color = "#EA741D"; else var color = "#4096FF";
return `<span style="color: ${color}">${ return `<span style="color: ${color}">${
value ? "已过期" : "进行中" value ? "已过期" : "进行中"
@ -549,13 +605,15 @@ export default {
.forEach((ele) => { .forEach((ele) => {
examineConfigList.push({ id: ele.id, weight: ele.weight }); examineConfigList.push({ id: ele.id, weight: ele.weight });
}); });
taskApi.setTaskSet({examineConfigList,taskId:this.id}).then((res) => { taskApi
this.$message({ .setTaskSet({ examineConfigList, taskId: this.id })
type: "success", .then((res) => {
message: "操作成功", this.$message({
type: "success",
message: "操作成功",
});
this.dialogVisible2 = false;
}); });
this.dialogVisible2 = false;
});
} }
}, },
delTask(row) { delTask(row) {
@ -655,7 +713,7 @@ export default {
.demo-form-inline .el-form-item { .demo-form-inline .el-form-item {
// margin-right: 50px; /* 30px */ // margin-right: 50px; /* 30px */
margin-bottom: 0; // margin-bottom: 0;
} }
.demo-form-inline .el-form-item:last-child { .demo-form-inline .el-form-item:last-child {
@ -762,16 +820,27 @@ export default {
right: -20px; right: -20px;
} }
::v-deep .el-slider__runway { ::v-deep .el-slider__runway {
height: 20px; height: 14px;
border-radius: 20px; border-radius: 10px;
margin: 15px !important; margin: 10px !important;
/* width: 95%; */ /* width: 95%; */
} }
::v-deep .el-slider__bar { ::v-deep .el-slider__runway.disabled .el-slider__bar {
height: 20px; height: 14px;
border-radius: 20px; border-radius: 10px;
background-color: #ff5722; background-color: #ff5722;
} }
::v-deep .el-slider__stop {
height: 14px;
border-radius: 0;
z-index: 1000;
}
::v-deep .el-slider__bar {
height: 14px;
border-radius: 10px;
background: linear-gradient(to right, #ffb144, #ff7d00);
}
::v-deep .el-slider__button { ::v-deep .el-slider__button {
display: none; display: none;
} }
@ -818,4 +887,34 @@ export default {
background-color: #4096ff; background-color: #4096ff;
color: #fff; color: #fff;
} }
.scoreText {
color: #fff;
position: absolute;
top: 2px;
font-weight: 500;
display: flex;
flex-direction: row;
width: 40px;
}
.block {
width: 4px;
height: 24px;
background-color: #4096ff;
margin-right: 10px;
}
.stepBox {
position: absolute;
top: 29px;
height: 14px;
width: 2px;
background-color: #fff;
z-index: 100;
}
.totalBox {
width: 150px;
display: flex;
flex-direction: row;
font-size: 14px;
color: #333333;
}
</style> </style>