Files
fe-manage/src/views/examine/ProjectReviewed.vue
2022-12-22 09:32:17 +08:00

725 lines
18 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.
<!--
* @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-16 21:00:40
* @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2022-12-07 08:53:15
* @FilePath: /fe-manage/src/views/examine/ProjectReviewed.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<!-- 已审核项目页面 projectviewed-->
<template>
<div class="projectviewed">
<div class="tmpl">
<div class="tmpl_header">
<div class="tmplh_inp">
<div class="inpbox">
<div class="inpbox1">
<a-input
v-model:value="valueproj"
style="
width: 270px;
height: 40px;
border-radius: 8px;
margin-right: 14px;
"
placeholder="请输入项目名称/所属项目"
/>
</div>
<div class="inpbox1">
<a-input
v-model:value="valuename"
style="
width: 270px;
height: 40px;
border-radius: 8px;
margin-right: 14px;
"
placeholder="请输入项目经理"
/>
</div>
<div class="inpbox1">
<a-input
v-model:value="valuecreater"
style="
width: 270px;
height: 40px;
border-radius: 8px;
margin-right: 14px;
"
placeholder="请输入创建人"
/>
</div>
<div class="inpbox1">
<div class="select addTimeBox">
<div class="addTime">审核时间</div>
<a-range-picker
v-model:value="valueDate"
style="width: 360px"
format="YYYY-MM-DD"
separator="至"
:placeholder="[' 开始时间', ' 结束时间']"
/>
</div>
</div>
</div>
</div>
<div class="tmplh_btn">
<div class="btn btn1" @click="getProjList">
<div class="search"></div>
<div class="btnText btnText1">搜索</div>
</div>
<div class="btn btn2" @click="reset">
<div class="search"></div>
<div class="btnText btnText2">重置</div>
</div>
</div>
</div>
<div class="tmpl_body">
<div class="tmpl_tabbox">
<a-table
:columns="columns1"
:data-source="tableData1"
:loading="loading"
expandRowByClick="true"
@expand="expandTable"
:scroll="{ x: 1300 }"
:pagination="false"
/>
</div>
<div class="tableBox">
<div class="pa">
<a-pagination
v-if="total > 10"
:showSizeChanger="false"
show-quick-jumper
:pageSize="pageSize"
v-model:current="currentPage"
:total="total"
class="pagination"
@change="changePagination"
/>
</div>
</div>
</div>
</div>
<!-- 审核日志弹窗 -->
<a-modal
v-model:visible="projAuditModal"
:footer="null"
:closable="closeBack"
wrapClassName="projAuditModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>审核记录</span>
<div class="close_exit" @click="closeProjAuditModal"></div>
</div>
<div class="body">
<a-table
style="width: 100%"
:columns="columnsAudit"
:data-source="tableDataAudit"
:loading="tableDataTotalAudit === -1 ? true : false"
expandRowByClick="true"
:scroll="{ y: 250 }"
@expand="expandTable"
:pagination="false"
/>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeProjAuditModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="closeProjAuditModal">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
</div>
</template>
<script>
import { onMounted, reactive, toRefs } from "vue";
import { auditedlist } from "../../api/indexAudit";
import * as moment from "moment";
import dayjs from "dayjs";
export default {
name: "ProjectViewed",
setup() {
const state = reactive({
loading:false,
optionsproj: [
{
value: "jack",
label: "Jack",
},
{
value: "rose",
label: "rose",
},
],
valueproj: "",
valuecreater: "",
valuename: "",
valueDate: undefined,
valuestate: null,
currentPage: 1,
total: null,
pageSize: 10,
projAuditModal: false,
closeBack: false,
columns1: [
// {
// title: "序号",
// dataIndex: "number",
// key: "number",
// align: "center",
// },
{
title: "项目名称",
dataIndex: "name",
key: "name",
align: "center",
ellipsis: true,
width:"20%",
},
{
title: "所属项目",
dataIndex: "topName",
key: "topName",
align: "center",
ellipsis: true,
width:"20%",
customRender: ({ record: { gaName, faName, name } }) => (
<div>
{faName
? gaName !== null
? gaName + "/" + faName
: faName
: name}
</div>
),
},
{
title: "项目经理",
dataIndex: "manager",
key: "manager",
align: "center",
ellipsis: true,
width:"10%",
},
{
title: "审核状态",
dataIndex: "status",
key: "status",
align: "center",
ellipsis: true,
width:"10%",
customRender: ({ record: { status } }) => (
<div>{{ '2': "审核通过", "-5": "未通过" }[status + ""] || '审核通过'}</div>
),
},
{
title: "创建人",
dataIndex: "createName",
key: "createName",
align: "center",
ellipsis: true,
width:"10%",
},
{
title: "审核时间",
dataIndex: "updateTime",
key: "updateTime",
align: "center",
ellipsis: true,
width:"10%",
},
{
title: "审核说明",
dataIndex: "description",
key: "description",
align: "center",
ellipsis: true,
width:"20%",
customRender: ({ record: { auditList, description } }) => (
<div>
{auditList.length !== 0
? auditList[auditList.length - 1].description
? auditList[auditList.length - 1].description
: "-"
: description
? description
: "-"}
</div>
),
},
{
title: "操作",
dataIndex: "opt",
key: "opt",
align: "center",
width:"10%",
customRender: (value) => {
return (
<div>
<span
onClick={() => {
showProjAuditModal(value.record.auditList.length!==0?value.record.auditList:[]);
}}
style="cursor:pointer;color:#387DF7"
>
审核日志
</span>
</div>
);
},
},
],
//审核记录的表
columnsAudit: [
{
title: "审核人",
dataIndex: "createName",
key: "createName",
align: "center",
},
{
title: "审核状态",
dataIndex: "status",
key: "status",
align: "center",
customRender: ({ record: { status } }) => (
<div>{{ '2': "审核通过", "-5": "审核拒绝" }[status + ""] || '审核通过'}</div>
),
},
{
title: "审核时间",
dataIndex: "createTime",
key: "createTime",
align: "center",
width: 220,
},
{
title: "备注",
dataIndex: "description",
key: "description",
align: "center",
},
],
//审核记录的数据
tableDataAudit: [],
tableData1: [],
});
const getProjList = () => {
state.loading=true
let objn = {
beginTime: state.valueDate ? dayjs(state.valueDate[0]).format("YYYY-MM-DD") : "",
endTime: state.valueDate ? dayjs(state.valueDate[1]).format("YYYY-MM-DD") : "",
createName: state.valuecreater,
manager: state.valuename,
name: state.valueproj,
pageNo: state.currentPage,
pageSize: state.pageSize,
status: 1,
};
auditedlist(objn).then((res) => {
console.log("获取已审核项目列表数据", res);
let result = res.data.data;
state.total = res.data.data.total;
let numdata = [];
result.rows.map((value, index) => {
let obj = value;
obj.number = index + 1 + (state.currentPage - 1) * 10;
numdata.push(obj);
});
state.tableData1 = numdata;
state.loading=false
});
};
const changePagination = (pagina) => {
state.currentPage = pagina;
getProjList();
};
const reset = () => {
state.valueproj = null;
state.valuecreater = null;
state.valuename = null;
state.valueDate = null;
state.valuestate = null;
getProjList();
};
const closeProjAuditModal = () => {
state.projAuditModal = false;
};
const showProjAuditModal = (data) => {
state.tableDataAudit = data;
state.projAuditModal = true;
};
const setAudit = (table) => {
let data = table;
let array = [];
data.map((item) => {
let obj = {
name: item.create_name,
belong:
item.status == 1
? "提交待审核"
: item.status == 2
? "通过"
: item.status == 3
? "拒绝"
: "-",
time: item.createTime,
description: item.description,
};
array.push(obj);
});
state.tableDataAudit = array;
};
onMounted(() => {
getProjList();
});
return {
...toRefs(state),
getProjList,
changePagination,
moment,
reset,
closeProjAuditModal,
showProjAuditModal,
setAudit,
};
},
};
</script>
<style lang="scss">
.projAuditModal {
.ant-modal {
width: 816px !important;
min-height: 420px !important;
.ant-modal-content {
width: 816px !important;
min-height: 420px !important;
.ant-modal-body {
width: 816px !important;
min-height: 420px !important;
padding: 0 !important;
.delete {
z-index: 999;
width: 816px;
min-height: 510px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
border-radius: 4px;
// position: absolute;
// left: 50%;
// top: 10%;
// transform: translate(-50%, -50%);
.del_header {
position: absolute;
width: calc(100%);
height: 68px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.del_main {
width: 100%;
position: relative;
.header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.icon {
width: 16px;
height: 16px;
margin-right: 10px;
background-image: url(@/assets/images/taskpage/gan.png);
background-size: 100% 100%;
}
.close_exit {
position: absolute;
right: 42px;
cursor: pointer;
width: 20px;
height: 20px;
background-image: url(@/assets/images/coursewareManage/close.png);
background-size: 100% 100%;
}
}
.body {
width: 100%;
margin: 34px auto 41px auto;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
// background-color: red;
position: relative;
.ant-table-empty {
width: 100% !important;
}
.back {
position: absolute;
top: 30px;
font-size: 12px;
font-weight: 400;
color: #666666;
}
}
.del_btnbox {
display: flex;
margin: 30px auto;
justify-content: center;
.del_btn {
width: 100px;
height: 40px;
background: rgba(64, 158, 255, 0);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
cursor: pointer;
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 40px;
}
}
.btn1 {
border: 1px solid rgba(64, 158, 255, 1);
color: #4ea6ff;
margin-right: 14px;
}
.btn2 {
background-color: #4ea6ff;
color: #ffffff;
}
}
}
}
}
}
}
}
.projectviewed {
width: 100%;
.addTimeBox {
position: relative;
display: flex;
align-items: center;
.addTime {
position: absolute;
z-index: 10;
margin-left: 10px;
color: rgba(0, 0, 0, 0.4);
}
.ant-picker {
padding-left: 85px;
}
.ant-picker-range .ant-picker-active-bar {
margin-left: 85px;
}
}
.tmpl {
width: 100%;
.tmpl_header {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin-bottom: 32px;
margin-left: 32px;
margin-right: 32px;
.tmplh_inp {
.inpbox {
display: flex;
flex-wrap: wrap;
margin-top: 42px;
.inpbox1 {
display: flex;
justify-content: center;
align-items: center;
margin-right: 24px;
margin-top: 10px;
.ant-select-selector {
border-radius: 8px;
width: 270px;
height: 40px;
padding-top: 5px;
}
span {
white-space: nowrap;
}
}
}
}
.tmplh_btn {
display: flex;
// margin-left: 38px;
margin-top: 32px;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
cursor: pointer;
flex-shrink: 0;
.search {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 36px;
margin-left: 5px;
}
.btnText1 {
color: rgb(255, 255, 255);
}
.btnText2 {
color: rgba(64, 158, 255, 1);
}
}
.btn1 {
background: #4ea6ff;
.search {
width: 15px;
height: 17px;
background-image: url("../../assets/images/courseManage/search0.png");
}
}
.btn2 {
background: #ffffff;
border: 1px solid #4ea6ff;
.search {
width: 16px;
height: 18px;
background-image: url("../../assets/images/courseManage/reset1.png");
}
}
.btn1:hover {
background: rgb(255, 255, 255);
border: 1px solid #4ea6ff;
.search {
background-image: url("../../assets/images/courseManage/search1.png");
}
.btnText {
color: rgba(64, 158, 255, 1);
}
}
.btn2:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("../../assets/images/courseManage/reset0.png");
}
.btnText {
color: #ffffff;
}
}
}
}
.tmpl_body {
padding: 0px 30px;
.tmpl_tabbox {
.operation {
display: flex;
justify-content: center;
align-items: center;
color: #4ea6ff;
.nselect {
justify-content: center;
align-items: center;
display: flex;
.jc {
margin-left: 20px;
white-space: nowrap;
cursor: pointer;
}
}
}
}
.pa {
width: 100%;
margin-top: 20px;
display: flex;
justify-content: center;
}
}
}
}
</style>