Browse Source

新增绩效结果考核申报详情页面,服务联调(详情头部服务,详情服务,保存服务,导入服务);前端增加导出功能,前端分页功能;(申报页面欠缺查询部门领导服务,详情页面欠缺查询人员服务)绩效结果考核申报页面及其详情页面增加查询部门服务并联调,以及根据部门查询人员服务并联调;考评对标分析页面修改样式

SunZehao 1 year ago
parent
commit
bae1862400

+ 67 - 0
src/api/api.js

@@ -217,6 +217,16 @@ export function apiGetevaluatiodeptplanList(params) {
         params: params
     })
 }
+
+//部门绩效结果考核申报 ---列表
+export function apiGetevaluatiodeptadList(params) {
+    return httpRequest({
+        url: 'evaluation-dept-ad/list',
+        method: 'get',
+        params: params
+    })
+}
+
 //----"单位考评目标启动-保存or修改"
 export function apiGetdeptresponsibilitySave(params) {
     return httpRequest.post('dept-responsibility/save', params)
@@ -225,6 +235,12 @@ export function apiGetdeptresponsibilitySave(params) {
 export function apiGetevaluationdeptplanSave(params) {
     return httpRequest.post('evaluation-dept-plan/save', params)
 }
+//----"部门绩效结果考核申报-新增"
+export function apiPostevaluationdeptadSave(params) {
+    return httpRequest.post('evaluation-dept-ad/save', params)
+}
+
+
 //----"部门考评目标启动-修改简述使用的服务"
 export function apiGetevaluationdeptplanModify(params) {
     return httpRequest.post('evaluation-dept-plan/modify', params)
@@ -360,6 +376,35 @@ export function apiPostevaluationdeptplanDelete(params) {
         method: 'post'
     })
 }
+//----删除绩效结果考核申报信息
+export function apiPostevaluationdeptadDelete(params) {
+    return httpRequest({
+        url: `evaluation-dept-ad/removeAll/${params}`,
+        method: 'post'
+    })
+}
+
+//----绩效结果考核申报信息详情-头部信息
+export function apiPostevaluationdeptadDetailsHead(params) {
+    return httpRequest({
+        url: `evaluation-dept-ad/detailsHead/${params}`,
+        method: 'get'
+    })
+}
+//----绩效结果考核申报信息详情
+export function apiPostevaluationdeptadDetails(params) {
+    return httpRequest({
+        url: `evaluation-dept-ad/details/${params}`,
+        method: 'get'
+    })
+}
+//------绩效结果考核申报-详情-修改
+export function apiGetevaluationdeptadUpdate(params) {
+    return httpRequest.post('evaluation-dept-ad/update', params)
+}
+
+
+
 
 //----单位/部门考评配置所有数据
 export function apiGetOrganizationListAll(params) {
@@ -547,6 +592,18 @@ export function apiPostevaluationdeptratingDelete(params) {
 }
 
 
+//--------指标考核打分列表
+export function apiGetorganizationevaluationlist(params) {
+    return httpRequest({
+        url: 'organization-evaluation/getEvalScoreInfo',
+        method: 'get',
+        params: params
+    })
+}
+
+
+
+
 //----------------------------------------考评体系配置------------------------------------------------
 //----考评指标管理
 //----"指标-查询"
@@ -764,6 +821,16 @@ export function apiGetorganizationstructureFromTree(params) {
         params: params
     })
 }
+//----根据组织树部门查询人员
+export function apiGetuserPageList(params) {
+    return httpRequest({
+        url: 'user/pageList',
+        method: 'get',
+        params: params
+    })
+}
+
+
 
 //----考评人员配置-list
 export function apiGetpersonnelList(params) {

BIN
src/assets/btnIcon/report.png


+ 484 - 0
src/components/assessment/assessmentApplicationFrom.vue

@@ -0,0 +1,484 @@
+<template>
+    <div class="deptstartFrom">
+        <el-dialog title="绩效结果考核申报详情" v-model="dialogVisible" :fullscreen="true" :close-on-click-modal="false">
+            <div class="startDetail">
+                <p class="starttitleSty">单据信息:</p>
+                <el-row class="danjuMsg">
+                    <el-col :span="6">
+                        <div class="danjuMsg_data">
+                            <span class="data_tit">申报编号:</span>
+                            <span>{{receiptMsg.code}}</span>
+                        </div>
+                        <div class="danjuMsg_data">
+                            <span class="data_tit">申报部门:</span>
+                            <span>{{receiptMsg.deptName}}</span>
+                        </div>
+                    </el-col>
+                    <el-col :span="6">
+                        <div class="danjuMsg_data">
+                            <span class="data_tit">申报简述:</span>
+                            <span>{{receiptMsg.des}}</span>
+                        </div>
+                        <div class="danjuMsg_data">
+                            <span class="data_tit">申报领导:</span>
+                            <span>{{receiptMsg.deptLeaderName}}</span>
+                        </div>
+                    </el-col>
+                    <el-col :span="6">
+                        <div class="danjuMsg_data">
+                            <span class="data_tit">流程状态:</span>
+                            <span>{{receiptMsg.stage}}</span>
+                        </div>
+                        <div class="danjuMsg_data">
+                            <span class="data_tit">申报年度:</span>
+                            <span>{{receiptMsg.year}}</span>
+                        </div>
+                    </el-col>
+                    <el-col :span="6">
+                        <div class="danjuMsg_data">
+                            <span class="data_tit">创建日期:</span>
+                            <span>{{receiptMsg.createDate}}</span>
+                        </div>
+                        <div class="danjuMsg_data">
+                            <span class="data_tit">申报级别:</span>
+                            <span>{{receiptMsg.declarationLevel}}级</span>
+                        </div>
+                    </el-col>
+                </el-row>
+                <div class="btnASeach">
+                    <div class="detaTableBtns">
+                        <div class="tableBtn add" @click="addTableDetail">
+                            <img :src="addIcon" alt="">
+                            <span>新增</span>
+                        </div>
+                        <div class="tableBtn save" @click="saveDetail">
+                            <img :src="saveIcon" alt="">
+                            <span>保存</span>
+                        </div>
+                        <div class="tableBtn import" @click="handleImport">
+                            <img :src="importIcon" alt="">
+                            <span>导入</span>
+                        </div>
+                        <div class="tableBtn export" @click="handleExport">
+                            <img :src="exportIcon" alt="">
+                            <span>导出</span>
+                        </div>
+                    </div>
+                </div>
+                <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
+                    <el-tab-pane label="考评指标项内容" name="first">
+                        <el-table :data="quantifiedList.slice((pageLeft.currentPage-1)*pageLeft.pagesize, pageLeft.currentPage*pageLeft.pagesize)"
+                         style="width: 100%">
+                            <el-table-column label="序号" type="index" width="80" />
+                            <el-table-column label="人员" prop="deptName">
+                                <template #default="scope">
+                                    <el-select v-model="scope.row.deptName" placeholder="请选择人员">
+                                        <el-option
+                                        v-for="item in deptLeaderOptionDet"
+                                        :key="item.id"
+                                        :label="item.name"
+                                        :value="item.id">
+                                        </el-option>
+                                    </el-select>
+                                </template>
+                            </el-table-column>
+                            <el-table-column label="排序" >
+                                <template #default="scope">
+                                     <el-input-number v-model="scope.row.serialNumber" :min="1" />
+                                </template>
+                            </el-table-column>
+                            <el-table-column label="建议值">
+                                <template #default="scope">
+                                    <el-input-number v-model="scope.row.suggestedValue" :precision="2" :step="0.1" :min="0" />
+                                </template>
+                            </el-table-column>
+                        </el-table>
+                        <el-pagination
+                            @current-change="handleCurrentChangeLeft"
+                            :current-page="pageLeft.currentPage"
+                            :page-size="pageLeft.pagesize"
+                            layout="total, prev, pager, next, jumper"
+                            :total="pageLeft.total">
+                        </el-pagination>
+                    </el-tab-pane>
+                </el-tabs>
+                
+            </div>
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button type="primary" @click="dialogVisible = false">取 消</el-button>
+                </span>
+            </template>
+        </el-dialog>
+        <import-dailog ref="importPage" @successImport="successImport" @importLoading="importLoading"></import-dailog>
+    </div>
+</template>
+
+<script>
+import importDailog from '../importPage/importDailog.vue'
+import {apiPostevaluationdeptadDetails,apiGetevaluationdeptadUpdate, apiPostevaluationdeptadDetailsHead} from '../../api/api'
+import ExcelJS from 'exceljs'
+import fileSave from 'file-saver'
+import addIcon from '../../assets/btnIcon/add.png'
+import saveIcon from '../../assets/btnIcon/save.png'
+import editIcon from '../../assets/btnIcon/edit.png'
+import deleteIcon from '../../assets/btnIcon/delete.png'
+import exportIcon from '../../assets/btnIcon/export.png'
+import importIcon from '../../assets/btnIcon/import.png'
+export default {
+    components: {
+        importDailog
+    },
+    data() {
+        return {
+            dialogVisible: false,
+            activeName: 'first',
+            quantifiedList: [],
+            changeDateSelect: [],
+            receiptMsg: {
+                code: '',
+                des: '',
+                stage: '',
+                createName: '',
+                createDate: '',
+                type: '',
+                year: '',
+                recStage: ''
+            },
+            addIcon: addIcon,
+            saveIcon: saveIcon,
+            editIcon: editIcon,
+            deleteIcon: deleteIcon,
+            exportIcon: exportIcon,
+            importIcon: importIcon,
+            rowMsg: {},
+            orgruleData: [],
+            indicItemoptions: [],
+            sectionNameArr: [],
+            deptNameArr: [],
+            pageLeft:{
+                pagesize: 15,
+                currentPage: 1,
+                total: 0
+            },
+            pageRight:{
+                pagesize: 15,
+                currentPage: 1,
+                total: 0
+            },
+            deptLeaderOptionDet: []
+        }
+    },
+    created() {
+    },
+    methods: {
+        init(row, deptLeaderOption) {
+            this.dialogVisible = true
+            this.activeName = 'first'
+            this.getDetails(row.id)
+            this.deptLeaderOptionDet = deptLeaderOption
+            this.receiptMsg = {
+                code: row.orderNumber,
+                des: row.declarationReason,
+                stage: row.stage,
+                deptLeaderName: row.deptLeaderName,
+                deptName: row.deptName,
+                createDate: row.createTime,
+                year: row.annual,
+                declarationLevel: row.declarationLevel
+            }
+            this.rowMsg = row
+        },
+        handleClick() {
+            this.changeDateSelect = []
+        },
+        handleCurrentChangeLeft(val) {
+            this.pageLeft.currentPage = val
+        },
+        //获取详情头数据
+        getDetailsHeader(id) {
+            let that = this
+            apiPostevaluationdeptadDetailsHead(id).then(datas =>{
+                if (datas && datas.data) {
+                    let row = datas.data
+                    that.receiptMsg = {
+                        code: row.responsibilityCode,
+                        des: row.des,
+                        stage: row.stage,
+                        createName: row.createName,
+                        createDate: row.createTime,
+                        type: row.checkCycle === 'YDKP'?'月度考评':row.checkCycle === 'JDKP'?'季度考评':'年度考评',
+                        year: row.appraisalYear,
+                        recStage: '有效'
+                    }
+                }
+            })
+        },
+        //获取详情
+        getDetails(id) {
+            let that = this
+            that.quantifiedList = []
+            apiPostevaluationdeptadDetails(id).then(datas =>{
+                if (datas && datas.data) {
+                    that.quantifiedList = datas.data
+                    that.pageLeft.total = datas.data.length
+                }
+            })
+        },
+        addTableDetail() {
+            let obj = {
+                showInput: true,
+                businessPlanId: this.rowMsg.id,
+                deptName: '',
+                baseScore: 0,
+                serialNumber: 0
+            }
+            this.quantifiedList.unshift(obj)
+        },
+        saveDetail() {
+            let that = this
+            let params = []
+            that.quantifiedList.forEach(item =>{
+                let emName = ''
+                that.deptLeaderOptionDet.forEach(it =>{
+                    if (item.deptName === it.id) {
+                        emName = it.name
+                    }
+                })
+                let obj = {
+                    assessmentDeclarationId: that.rowMsg.id,
+                    employeeId: item.deptName,
+                    employeeName: emName,
+                    suggestedValue: item.suggestedValue.toString(),
+                    serialNumber: item.serialNumber.toString()
+                }
+                if (!item.showInput) {
+                    obj.id = item.id
+                }
+                params.push(obj)
+            })
+            apiGetevaluationdeptadUpdate(params).then(datas =>{
+                if (datas) {
+                    if (datas.success) {
+                        that.$message({
+                            message: '保存成功',
+                            type: 'success'
+                        });
+                        that.getDetails(that.rowMsg.id)
+                    } else {
+                        that.$message({
+                            message: datas.data,
+                            type: 'error'
+                        })
+                    }
+                }
+            })
+        },
+        handleImport() {
+            this.$refs.importPage.upload.title = "绩效结果考核申报导入"
+            this.$refs.importPage.upload.open = true
+            this.$refs.importPage.upload.url = '/evaluation-dept-ad/import'
+        },
+        successImport(val) {
+            this.getDetails(this.rowMsg.id)
+        },
+        handleExport() {
+            let data = this.quantifiedList  //接口返回数据
+            const workbook = new ExcelJS.Workbook()
+            const worksheet = workbook.addWorksheet('Sheet1')
+            //根据数据自己调整
+            let colums = []
+            colums = [
+                { header: 'ID', key: 'id', width: 26 },
+                { header: '申报ID', key: 'assessmentDeclarationId', width: 26 },
+                { header: '员工ID', key: 'employeeId', width: 26 },
+                { header: '员工名称', key: 'employeeName', width: 26 },
+                { header: '序号', key: 'serialNumber', width: 26 },
+                { header: '建议值', key: 'suggestedValue', width: 26 },
+            ]
+            worksheet.columns = colums
+            worksheet.getRow(1).font = {
+                size: 12,
+                bold: true
+            }
+            worksheet.addRows(data)
+
+            workbook.xlsx.writeBuffer().then(buffer => {
+                //这里为type
+                const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8' })
+                fileSave(blob, `绩效结果考核申报数据导出.xlsx`)
+            })
+        },
+    }
+}
+</script>
+
+<style lang="less">
+.deptstartFrom{
+    .el-overlay{
+        .el-dialog{
+            // margin-top: 7vh;
+            .el-dialog__body{
+                padding: 0 20px !important;
+                .startDetail{
+                    .starttitleSty{
+                        font-size: 18px;
+                        font-family: Microsoft YaHei;
+                        font-weight: bold;
+                        color: #3B7AD1;
+                        // line-height: 12px;
+                        margin: 20px 0 20px 10px;
+                    }
+                    .danjuMsg{
+                        border: 1px solid #D6DBEA;
+                        padding: 10px 20px;
+                        border-radius: 10px;
+                        margin-bottom: 20px;
+                        .danjuMsg_data{
+                            padding: 5px 0 10px 0;
+                            .data_tit{
+                                margin-right: 10px;
+                                font-weight: bold;
+                                font-size: 14px;
+                                font-family: Microsoft YaHei;
+                                color: #8991B0;
+                            }
+                            .data_tit_wd{
+                                display: inline-block;
+                                width: 90px;
+                            }
+                            .el-form-item--small{
+                                .el-input{
+                                    height: 25px;
+                                    width: 160px;
+                                }
+                                margin-bottom: 0;
+                                .el-input-number{
+                                    height: 25px;
+                                    .el-input-number__decrease, .el-input-number__increase{
+                                        right: -39px;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    .el-select, .el-input{
+                        width: 100%;
+                    }
+                    .btnASeach{
+                        display: flex;
+                        z-index: 11111;
+                        justify-content: end;
+                        position: relative;
+                        top: 32px;
+                        left: 50vw;
+                        width: 50%;
+                        .detaTableBtns{
+                            display: flex;
+                            width: 300px;
+                            margin-top: 5px;
+                            .tableBtn {
+                                display: flex;
+                                height: 20px;
+                                margin: 0 10px;
+                                img{
+                                    margin-right: 5px;
+                                    margin-top: 1px;
+                                }
+                                span{
+                                    font-size: 14px;
+                                    font-family: Microsoft YaHei;
+                                    font-weight: 400;
+                                }
+                            }
+                            .add{
+                                cursor: pointer;
+                                span{
+                                    color: #3B7AD1;
+                                }
+                            }
+                            .save{
+                                cursor: pointer;
+                                span{
+                                    color: #50C14E;
+                                }
+                            }
+                            .edit{
+                                span{
+                                    color: #F5A623;
+                                }
+                            }
+                            .delete{
+                                cursor: no-drop;
+                                span{
+                                    color: #F65177;
+                                }
+                            }
+                            .import{
+                                cursor: pointer;
+                                span{
+                                    color: #ce1e78;
+                                }
+                            }
+                            .export{
+                                cursor: pointer;
+                                span{
+                                    color: #2baa8a;
+                                }
+                            }
+                        }
+                    }
+                    .el-tabs{
+                        .el-tabs__header{
+                            .el-tabs__nav{
+                                .el-tabs__item{
+                                    font-size: 18px;
+                                    font-family: Microsoft YaHei;
+                                    font-weight: bold;
+                                    margin: 0 10px;                                    
+                                    color: #8991B0;
+                                }
+                                .is-active{
+                                    font-size: 18px;
+                                    font-family: Microsoft YaHei;
+                                    font-weight: bold;
+                                    color: #3B7AD1;
+                                    margin: 0 10px;
+                                }
+                            }
+                        }
+                        
+                        .el-table{
+                            margin-bottom: 10px;
+                            .el-table__body-wrapper{
+                                height: 50vh;
+                            }
+                            .el-table__row{
+                                .cell{
+                                    .el-input{
+                                        height: 24px;
+                                        .el-input__inner{
+                                            height: 24px;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            .el-dialog__footer{
+                .dialog-footer{
+                    display: flex;
+                    justify-content: center;
+                    .el-button{
+                        width: 180px !important;
+                        height: 40px !important;
+                    }
+                }
+            }
+        }
+    }
+    
+}
+</style>

+ 627 - 0
src/components/assessment/assessmentApplicationPage.vue

@@ -0,0 +1,627 @@
+<template>
+    <div class="assessmentApplication">
+        <div class="assessmentApplicationBtn">
+            <div class="collectSeach">
+                <div class="exceed">
+                    <span class="exceedSpan">申报单号:</span>
+                    <el-input v-model="orderNumber" placeholder="请输入申报单号"></el-input>
+                </div>
+                <seachs @handleSeach="getSeachData" @handleRest="resetSeach"></seachs>
+            </div>
+            <div class="PeriodBtn">
+                <btns
+                :showImport="false"
+                :showExport="false"
+                :showSave="false"
+                :showAdd="true"
+                :showDelete="true"
+                :disDelete="changeDateSelect.length === 0"
+                :disImport="true"
+                :disExport="true"
+                @handleAdd="handleAdd"
+                @handleDelete="handleDelete"
+                ></btns>
+            </div>
+            <div class="assessmentApplicationTableData">
+                <el-table :data="assessmentApplicationData" style="width: 100%" @select="rowClick"
+                 @select-all="rowClick" @row-dblclick="getDetail" @cell-click="clickDes">
+                    <el-table-column type="selection" label="操作" align="center"></el-table-column>
+                    <el-table-column label="申报单号" prop="orderNumber" width="200"/>
+                    <el-table-column label="部门名称" width="300">
+                        <template #default="scope">
+                            <el-tooltip
+                                class="box-item"
+                                effect="customized"
+                                :content="scope.row.deptName"
+                                placement="top"
+                            >
+                                <span class="tooltipCC">{{scope.row.deptName}}</span>
+                            </el-tooltip>
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="部门领导" prop="deptLeaderName" />
+                    <el-table-column label="申报等级" prop="declarationLevel" />
+                    <el-table-column label="申报年度" prop="annual" />
+                    <el-table-column label="申报月份" prop="declarationMonth" />
+                    <el-table-column label="申报理由" width="300">
+                        <template #default="scope">
+                            <el-tooltip
+                                class="box-item"
+                                effect="customized"
+                                :content="scope.row.declarationReason"
+                                placement="top"
+                            >
+                                <span class="tooltipCC">{{scope.row.declarationReason}}</span>
+                            </el-tooltip>
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="流程状态" prop="stage" width="200">
+                        <template #default="scope">
+                            <p class="indicitem" @click="seeStates(scope.row)">{{scope.row.stage}}</p>
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="操作" width="160">
+                        <template #default="scope">
+                            <div style="display:flex">
+                                <p class="indicitem" v-if="scope.row.stage === '流程未启动'" @click="agetdeptresponsibility(scope.row)">启动</p>
+                                <p style="font-size: 12px;margin-right: 20px;" v-else-if="scope.row.stage === '流程已结束'" >已结束</p>
+                                <p style="font-size: 12px;margin-right: 20px;" v-else >已启动</p>
+                                <p class="indicitem" v-if="scope.row.stage === '流程已结束'" @click="getGenerateReport(scope.row)">生成报表</p>
+                            </div>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-pagination
+                    @size-change="handleSizeChange"
+                    @current-change="handleCurrentChange"
+                    :current-page="page.currentPage"
+                    :page-size="page.pagesize"
+                    layout="total, prev, pager, next, jumper"
+                    :total="page.total">
+                </el-pagination>
+            </div>
+            <el-dialog :title="title" custom-class="startToDia" v-model="dialogVisible" width="600px" :close-on-click-modal="false">
+                <div class="periodFrom">
+                    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm" :validate-on-rule-change="false">
+                        <el-form-item label="部门名称" prop="deptName">
+                            <el-select v-model="ruleForm.deptName" placeholder="请选择部门名称" @change="changeDeptLead">
+                                <el-option
+                                v-for="item in departData"
+                                :key="item.id"
+                                :label="item.name"
+                                :value="item.id">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                         <!-- prop="deptLeaderName" -->
+                        <el-form-item label="部门领导">
+                            <el-select v-model="ruleForm.deptLeaderName" placeholder="请选择部门领导">
+                                <el-option
+                                v-for="item in deptLeaderOption"
+                                :key="item.id"
+                                :label="item.name"
+                                :value="item.id">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="申报等级" prop="declarationLevel">
+                            <el-select v-model="ruleForm.declarationLevel" placeholder="请选择申报等级">
+                                <el-option
+                                v-for="item in declarationLevelOption"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="申报年份" prop="annual">
+                            <el-date-picker
+                                v-model="ruleForm.annual"
+                                type="year"
+                                value-format="YYYY"
+                                placeholder="请选择申报年份"
+                                />
+                        </el-form-item>
+                        <el-form-item label="申报月份">
+                            <el-input-number v-model="ruleForm.declarationMonth" :min="1" :max="12" />
+                        </el-form-item>
+                        <el-form-item label="申报理由" prop="declarationReason">
+                            <el-input v-model="ruleForm.declarationReason" :rows="5" type="textarea" placeholder="请输入申报理由"></el-input>
+                        </el-form-item>
+                    </el-form>
+                </div>
+                <template #footer>
+                    <span class="dialog-footer">
+                        <el-button @click="dialogVisible = false">取 消</el-button>
+                        <el-button type="primary" @click="saveevaluaStart('ruleForm')">确 定</el-button>
+                    </span>
+                </template>
+            </el-dialog>
+            <el-dialog title="流程详情" v-model="statesVisible" :fullscreen="true" :close-on-click-modal="false">
+                <div class="flowSty">
+                    <el-table :data="stageArr" style="width: 100%">
+                        <el-table-column type="index" label="序号" align="center" />
+                        <el-table-column label="任务名称" prop="taskName" />
+                        <el-table-column label="任务创建时间" prop="createTime" />
+                        <el-table-column label="任务处理时间" prop="approveTime" />
+                        <el-table-column label="候选人" prop="assignInfo" width="500" />
+                        <el-table-column label="执行人" prop="approverName" />
+                        <el-table-column label="处理状态" prop="status" />
+                        <el-table-column label="备注/意见" prop="opinion" />
+                    </el-table>
+                </div>
+            </el-dialog>
+        </div>
+        <!-- @approveMsg="approveMsg" -->
+        <start-from-list ref="assessmentApplicationDetail" ></start-from-list>
+    </div>
+</template>
+
+<script>
+import startFromList from './assessmentApplicationFrom.vue'
+import btns from '../elbuttonS.vue'
+import seachs from '../seachGroup.vue'
+import {apiGetevaluatiodeptadList, apiPostevaluationdeptadSave,apiGetdoAction,apiGetuserPageList,
+apiGetworkflowgetOpinion,apiGetevaluationdeptplanReport,apiGetevaluationdownloadReport,
+apideptModifyState, apiGetorganizationstructureFromTree, apiPostevaluationdeptadDelete} from '../../api/api'
+export default {
+    components: {
+        startFromList,
+        btns,
+        seachs
+    },
+    data() {
+        return {
+            dialogVisible: false,
+            statesVisible: false,
+            title: '',
+            windframradio: {},
+            deleteSelect: [],
+            changeDateSelect: [],
+            assessmentApplicationData:[],
+            page:{
+                pagesize: 12,
+                currentPage: 1,
+                total: 0
+            },
+            ruleForm: {
+                deptName: '',
+                deptLeaderName: '',
+                declarationLevel: '',
+                annual: '',
+                declarationMonth: 1,
+                declarationReason: ''
+            },
+            rules: {
+                deptName: [
+                    { required: true, message: '请选择部门名称', trigger: 'change' }
+                ],
+                deptLeaderName: [
+                    { required: true, message: '请选择部门领导', trigger: 'change' }
+                ],
+                declarationLevel: [
+                    { required: true, message: '请选择申报等级', trigger: 'change' }
+                ],
+                annual: [
+                    { required: true, message: '请选择申报年份', trigger: 'change' }
+                ],
+                declarationReason: [
+                    { required: true, message: '请输入申报理由', trigger: 'blur' }
+                ]
+            },
+            deptLeaderOption: [],
+            declarationLevelOption: [],
+            ruleDataAll: [],
+            orderNumber: '',
+            stageArr: [],
+            departData: []
+        }
+    },
+    created() {
+        this.declarationLevelOption = [
+            {
+                label: 'A',
+                value: 'A'
+            },
+            {
+                label: 'B',
+                value: 'B'
+            },
+            {
+                label: 'C',
+                value: 'C'
+            },
+            {
+                label: 'D',
+                value: 'D'
+            }
+        ]
+        this.getassessmentApplicationList()
+        this.getDepartmentFromTreeData()
+    },
+    methods:{
+        // 查询列表页面
+        getassessmentApplicationList() {
+            let that = this
+            let params = {
+                pageNum: that.page.currentPage,
+                pageSize: that.page.pagesize,
+                orderNumber: that.orderNumber
+            }
+            apiGetevaluatiodeptadList(params).then(datas =>{
+                if (datas && datas.data) {
+                    that.assessmentApplicationData = datas.data.records
+                    that.page.total = datas.data.total
+                }
+            })
+        },
+        // 查询部门
+        getDepartmentFromTreeData() {
+            let that = this
+            let params = {
+                id: '23031001',
+                num: 1
+            }
+            apiGetorganizationstructureFromTree(params).then(datas =>{
+                if (datas && datas.data) {
+                    that.departData = datas.data[0].children
+                }
+            })
+        },
+        // 根据部门查询人员
+        changeDeptLead(val) {
+            let that = this
+            let params = {
+                current: 1,
+                size: 500,
+                orgId: val
+            }
+            apiGetuserPageList(params).then(datas =>{
+                if (datas && datas.data) {
+                    that.deptLeaderOption = datas.data.records
+                }
+            })
+        },
+        saveevaluaStart(formName) {
+            let that = this
+            that.$refs[formName].validate((valid) => {
+                if (valid) {
+                    that.saveAndEditIndicatorData()
+                }
+            });
+        },
+        //新增/修改
+        saveAndEditIndicatorData() {
+            let that = this
+            let userMes = JSON.parse(window.sessionStorage.getItem('user'))
+            let deptName = ''
+            let deptLeaderName = ''
+            that.departData.forEach(itv =>{
+                if (itv.id === that.ruleForm.deptName) {
+                    deptName = itv.keyName
+                }
+            })
+            that.deptLeaderOption.forEach(it =>{
+                if (it.id === that.ruleForm.deptLeaderName) {
+                    deptLeaderName = it.name
+                }
+            })
+            let params = {
+                deptId: that.ruleForm.deptName,
+                deptName: deptName,
+                deptLeaderId: that.ruleForm.deptLeaderName,
+                deptLeaderName: deptLeaderName,
+                declarationLevel: that.ruleForm.declarationLevel,
+                annual: that.ruleForm.annual,
+                declarationMonth: that.ruleForm.declarationMonth,
+                declarationReason: that.ruleForm.declarationReason,
+                applicantId: userMes.id,
+                applicantName: userMes.name
+            }
+            if (that.isSave) {
+                params.id = that.evalradio.id
+            }
+            apiPostevaluationdeptadSave(params).then(datas =>{
+                if (!datas.success) {
+                    that.$message({
+                        message: datas.message,
+                        type: 'error'
+                    });
+                } else {
+                    if (!that.isSave) {
+                        that.$message({
+                            message: '绩效结果考核申报信息新增成功',
+                            type: 'success'
+                        });
+                    } else {
+                        that.$message({
+                            message: '绩效结果考核申报信息修改成功',
+                            type: 'success'
+                        });
+                    }
+                    that.dialogVisible = false
+                    that.changeDateSelect = []
+                    that.getassessmentApplicationList()
+                }
+            })
+        },
+        agetdeptresponsibility(row) {
+            let that = this
+            let par = {
+                defKey: "jxjgkhsb",
+                businessKey: row.id,
+                action: "start",
+                opinion: "绩效结果考核申报",
+                iamCode: window.localStorage.getItem('code')
+            }
+            apiGetdoAction(par).then(datas =>{
+                if (datas && datas.data) {
+                    if (!datas.data.isOk) {
+                        that.$message({
+                            message: datas.data.msg,
+                            type: 'error'
+                        });
+                    } else {
+                        let params = {
+                            id: row.id,
+                            stage: '流程已开始'
+                        }
+                        apideptModifyState(params).then(values =>{
+                            if (values.success) {
+                                that.getassessmentApplicationList()
+                            } else {
+                                that.$message({
+                                    message: values.message,
+                                    type: 'error'
+                                });
+                            }
+                        })
+                    }
+                }
+            })
+        },
+        clickDes(row, column, cell, event) {
+            let userMes = JSON.parse(window.sessionStorage.getItem('user'))
+            if (userMes.id === row.createBy && row.stage === '流程未启动') {
+                if (column.label === '业务简述') {
+                    row.chngeDes = true
+                } else {
+                    row.chngeDes = false
+                }
+            }
+        },
+        //明细
+        getDetail(row) {
+            this.$refs.assessmentApplicationDetail.init(row, this.deptLeaderOption)
+        },
+        seeStates(row) {
+            if (!row.instId) {
+                this.$message({
+                    type: 'error',
+                    message: '无法查看流程'
+                });
+            } else {
+                this.statesVisible = true
+                this.getstageData(row.instId)
+            }
+        },
+        // 根据流程id获取业务id
+        getstageData(id) {
+            let that = this
+            let params = {
+                instId: id,
+                iamCode: window.localStorage.getItem('code')
+            }
+            apiGetworkflowgetOpinion(params).then(datas =>{
+                if (datas && datas.data) {
+                    that.stageArr = datas.data.data                    
+                }
+            })
+        },
+        getSeachData() {
+            this.page.currentPage = 1
+            this.getassessmentApplicationList()
+        },
+        resetSeach() {
+            this.page.currentPage = 1
+            this.orderNumber = ''
+            this.getassessmentApplicationList()
+        },
+        handleSizeChange(val){
+            this.page.pagesize = val
+            this.getassessmentApplicationList()
+        },
+        handleCurrentChange(val){
+            this.page.currentPage =val
+            this.getassessmentApplicationList()
+        },
+        rowClick(selection, row) {
+            this.changeDateSelect = selection
+        },
+        approveMsg(val) {
+            if (val) {
+                this.getassessmentApplicationList()
+            }
+        },
+        handleAdd() {
+            this.dialogVisible = true
+            this.title = '新建表单填报'
+            this.$nextTick(() =>{
+                this.$refs['ruleForm'].resetFields()
+                this.ruleForm = {
+                    deptName: '',
+                    deptLeaderName: '',
+                    declarationLevel: '',
+                    annual: '',
+                    declarationMonth: 1,
+                    declarationReason: ''
+                }
+            })
+        },
+        //删除
+        handleDelete() {
+            this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                let that = this
+                let paramsArr = []
+                that.changeDateSelect.forEach(it =>{
+                    paramsArr.push(it.id)
+                })
+                apiPostevaluationdeptadDelete(paramsArr.join(',')).then(datas =>{
+                    that.$message({
+                        type: 'success',
+                        message: '删除成功!'
+                    });
+                    that.getassessmentApplicationList()
+                    that.changeDateSelect = []
+                })
+            })
+        },
+        getGenerateReport(row) {
+            let that = this
+            apiGetevaluationdeptplanReport(row.id).then(datas =>{
+                if (datas.success) {
+                    apiGetevaluationdownloadReport(datas.data).then(datass =>{
+                        let blob = new Blob([datass],{ type: 'application/msword;charset=UTF-8' })
+                        saveAs(blob, `${datas.data}`)
+                    })
+                } else {
+                    that.$message({
+                        message: datas.message,
+                        type: 'error'
+                    });
+                }
+            })
+        }
+    }
+}
+</script>
+
+<style lang="less">
+.assessmentApplication{
+    .assessmentApplicationBtn{
+        .collectSeach{
+            display: flex;
+            padding: 24px 20px;
+            border-bottom: 1px solid#D6DBEA;
+            .exceed{
+                display: flex;
+                .exceedSpan{
+                    width: 100px;
+                    height: 12px;
+                    font-size: 14px;
+                    font-family: Microsoft YaHei;
+                    font-weight: 400;
+                    color: #8991B0;
+                    line-height: 12px;
+                    margin-top: 14px;
+                }
+                .el-input{
+                    margin-right:10px;
+                    height: 40px;
+                    .el-input__inner{
+                        height:40px;
+                    }
+                    .el-input__suffix{
+                        .el-select__caret{
+                            line-height:30px;
+                        }
+                    }
+                }
+            }
+            .el-select{
+                margin-right:10px;
+                .el-input__inner{
+                    height:30px;
+                }
+                .el-input__suffix{
+                    .el-select__caret{
+                        line-height:30px;
+                    }
+                }
+            }
+        }
+        span{
+            font-size:14px;
+        }
+        .PeriodBtn{
+            display: flex;
+            justify-content: end;
+            padding: 20px 0;
+        }
+        .el-button{
+            height: 30px;
+            // width:100px;
+            padding: 0 20px ;
+            // padding-top: 8px;
+            span{
+                margin:0;
+            }
+        }
+        .assessmentApplicationTableData{
+            .el-table{
+                .el-table__body-wrapper{
+                    height: 60vh !important;
+                }
+                .el-input__inner{
+                    height: 30px !important;
+                }
+                .el-radio__label{
+                    display: none;
+                }
+                .tooltipCC{
+                    width: 300px;
+                    display: inline-block;
+                    overflow: hidden;
+                    text-overflow: ellipsis;
+                    white-space: nowrap;
+                }
+                .tooltipCCDes{
+                    width: 200px;
+                    display: inline-block;
+                    overflow: hidden;
+                    text-overflow: ellipsis;
+                    white-space: nowrap;
+                }
+                .indicitem{
+                    color: #409EFF;
+                    font-size: 12px;
+                    margin-right: 20px;
+                    cursor:pointer;
+                    &:hover{
+                        text-decoration: underline;
+                    }
+                }
+            }
+            .el-pagination{
+                margin-top: 20px;
+                text-align: end;
+                position: relative;
+            }
+        }
+        .el-overlay{
+            .startToDia{
+                .el-dialog__body{
+                    padding: 30px 60px 30px 20px !important;
+                    .periodFrom{
+                        .el-select, .el-input{
+                            width: 100%;
+                        }
+                        .el-input{
+                            height: 30px;
+                        }
+                    }
+                    .flowSty{
+                        width: 100%;
+                        height: 70vh;
+                    }
+                }
+            }
+        }
+    }
+    
+}
+</style>

+ 44 - 30
src/components/assessment/evaluationBenchmarkingIndicPage.vue

@@ -60,9 +60,9 @@
             </div> -->
             <div class="benchmarkingIndicatorTableData">
                 <div class="tableMain">
-                    <el-table :data="benchmarkingIndicatorData" style="width: 100%" ref="benchmark">
+                    <el-table :data="benchmarkingIndicatorData" style="width: 100%" ref="benchmark" :border="true" >
                         <el-table-column type="index" label="排名" align="center"></el-table-column>
-                        <el-table-column label="考评单位" prop="organization_name" width="300">
+                        <el-table-column label="考评单位" prop="organization_name">
                             <template #default="scope">
                                 <el-tooltip class="box-item" effect="customized" :content="scope.row.organization_name"
                                     placement="right">
@@ -70,20 +70,17 @@
                                 </el-tooltip>
                             </template>
                         </el-table-column>
-                        <!-- <el-table-column label="排名" prop="level" /> -->
                         <el-table-column label="综合得分" prop="score_total" />
                         <el-table-column  v-for="(it, index) in benchmarkingIndicatorHeader" :key="index" :label="it.name" align="center">
-                            <el-table-column v-for="(iv, index) in it.children" :key="index" :label="iv.key">
+                            <el-table-column v-for="(iv, index) in it.children" :key="index" :label="iv.key" align="center">
                                 <template #default="scope">
-                                    <span :style="scope.row[iv.code+'_flag'] === '1'?'color:#3B7AD1': scope.row[iv.code+'_flag'] === '-1'?'color:#F65177':'color:#666666'">{{scope.row[iv.code]}}</span>
+                                    <span
+                                    style="font-weight: bold"
+                                     :style="scope.row[iv.code+'_flag'] === '1'?'color:#3B7AD1': scope.row[iv.code+'_flag'] === '-1'?'color:#F65177':'color:#666666'">{{scope.row[iv.code]}}</span>
                                 </template>
                             </el-table-column>
                         </el-table-column>
                     </el-table>
-                    <!-- <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-                        :current-page="page.currentPage" :page-size="page.pagesize"
-                        layout="total, prev, pager, next, jumper" :total="page.total">
-                    </el-pagination> -->
                 </div>
                 <div class="tableSeach">
                     <div class="seachType" v-for="item in titleMsgArr" :key="item.isName"
@@ -238,8 +235,7 @@ export default {
             }
             apiGetscoreCountevaluationList(params).then(datas => {
                 if (datas && datas.data) {
-                    // that.benchmarkingIndicatorHeader = datas.data.title
-                    // that.benchmarkingIndicatorData = datas.data.value
+                    that.benchmarkingIndicatorData = []
                     if (datas.data.title) {
                         let header = []
                         for(let i in datas.data.title) {
@@ -428,38 +424,56 @@ export default {
             width: 100%;
             margin-top: 20px;
             .tableMain{
-                width: calc(100% - 95px);
+                width: calc(100% - 100px);
                 .el-table {
+                    .el-table__header-wrapper{
+                        .el-table__header{
+                            .el-table__cell {
+                                border-bottom: none !important;
+                            }
+
+                        }
+                    }
                     .el-table__body-wrapper {
                         height: 68vh !important;
+                        .el-scrollbar{
+                            .is-horizontal{
+                                .el-scrollbar__thumb{
+                                    width: 100% !important;
+                                }
+                            }
+                            .el-table__body{
+                                tr{
+                                    td{
+                                        padding: 0;
+                                        .cell{
+                                            background: #F6F7FA;
+                                            line-height: 47px;
+                                            height: 47px;
+                                        }
+                                    }
+                                    td:hover {
+                                        line-height: 45px;
+                                        height: 45px;
+                                    }
+                                }
+                            }
+                        }
                     }
-    
-                    .el-input__inner {
-                        height: 30px !important;
+                    .el-table--border .el-table__cell{
+                        border: none;
                     }
-    
-                    .el-radio__label {
-                        display: none;
+                    .el-table thead.is-group th.el-table__cell{
+                        background: transparent;
                     }
     
                     .tooltipCC {
-                        width: 300px;
+                        width: 180px;
                         display: inline-block;
                         overflow: hidden;
                         text-overflow: ellipsis;
                         white-space: nowrap;
                     }
-    
-                    .indicitem {
-                        color: #409EFF;
-                        font-size: 12px;
-                        margin-right: 20px;
-                        cursor: pointer;
-    
-                        &:hover {
-                            text-decoration: underline;
-                        }
-                    }
                 }
                 .el-pagination {
                     margin-top: 20px;

+ 1 - 1
src/components/assessment/evaluationDeptStartFrom.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="deptstartFrom">
-        <el-dialog title="考评启动详情" v-model="dialogVisible" :fullscreen="true" :close-on-click-modal="false">
+        <el-dialog title="部门业绩指标计划" v-model="dialogVisible" :fullscreen="true" :close-on-click-modal="false">
             <div class="startDetail">
                 <p class="starttitleSty">单据信息:</p>
                 <el-row class="danjuMsg">

+ 1 - 13
src/components/assessment/evaluationDeptStartPage.vue

@@ -31,18 +31,6 @@
                  @select-all="rowClick" @row-dblclick="getDetail" @cell-click="clickDes">
                     <el-table-column type="selection" label="操作" align="center"></el-table-column>
                     <el-table-column label="业务编号" prop="responsibilityCode" width="300"  />
-                    <!-- <el-table-column label="考评部门" width="400">
-                        <template #default="scope">
-                            <el-tooltip
-                                class="box-item"
-                                effect="customized"
-                                :content="scope.row.deptName"
-                                placement="top"
-                            >
-                                <span class="tooltipCC">{{scope.row.deptName}}</span>
-                            </el-tooltip>
-                        </template>
-                    </el-table-column> -->
                     <el-table-column label="考评年度" prop="appraisalYear" width="200" />
                     <el-table-column label="业务简述" prop="des">
                         <template #default="scope">
@@ -206,7 +194,7 @@ export default {
                     { required: true, message: '请选择考评类别', trigger: 'change' }
                 ],
                 evaluationCycle: [
-                    { required: true, message: '请选择考评周期', trigger: 'blur' }
+                    { required: true, message: '请选择考评周期', trigger: 'change' }
                 ],
                 evaluateRule: [
                     { required: true, message: '请选择考评规则', trigger: 'change' }

+ 8 - 2
src/components/assessment/evaluationQuarterPage.vue

@@ -25,7 +25,6 @@
                 :disExport="true"
                 @handleAdd="handleAdd"
                 @handleDelete="handleDelete"
-                @handleExport="handleExport"
                 ></btns>
             </div>
             <div class="evaluationQuarterTableData">
@@ -71,7 +70,7 @@
                             </el-tooltip>
                         </template>
                     </el-table-column> -->
-                    <el-table-column label="操作" width="200">
+                    <el-table-column label="操作" width="300">
                         <template #default="scope">
                             <div style="display:flex;justify-content: left;">
                                 <div>
@@ -80,6 +79,7 @@
                                 </div>
                                 <p class="indicitem" @click="calculateScore(scope.row)">计算得分</p>
                                 <p class="indicitem" @click="generateReport(scope.row)">生成报表</p>
+                                <!-- <p class="indicitem" @click="handleReport(scope.row)">指标考核打分</p> -->
                             </div>
                         </template>
                     </el-table-column>
@@ -152,11 +152,13 @@
             </el-dialog>
         </div>
         <start-from-list ref="startFromDetail"></start-from-list>
+        <month-quarter-year-report ref="reportDia"></month-quarter-year-report>
     </div>
 </template>
 
 <script>
 import startFromList from './monthQuarterFrom.vue'
+import monthQuarterYearReport from './monthQuarterYearReport.vue'
 import btns from '../elbuttonS.vue'
 import seachs from '../seachGroup.vue'
 import {apiGetOrgEvaluationList, apiPostOrgEvaSave,apiPostOrgevaluationDelete,apiGetdoAction,apiGetgenerateEvaluateReport,
@@ -164,6 +166,7 @@ apiGetgenerateUnitMonthEvaluation, apiGetdatadictionaryList, apiGetcalculatorcro
 export default {
     components: {
         startFromList,
+        monthQuarterYearReport,
         btns,
         seachs
     },
@@ -498,6 +501,9 @@ export default {
                 })
             })
         }, 
+        handleReport(row) {
+            this.$refs.reportDia.init(row)
+        }
     }
 }
 </script>

+ 282 - 0
src/components/assessment/monthQuarterYearReport.vue

@@ -0,0 +1,282 @@
+<template>
+    <div class="monthQuarterYearReport">
+        <el-dialog :title="tableoneLevelName" v-model="dialogVisible" :fullscreen="true" :close-on-click-modal="false">
+            <div class="collectSeach">
+                <div class="exceed">
+                    <span class="exceedSpan" style="margin-left: 10px;width: 80px">业务属性:</span>
+                    <el-select v-model="binstationStr" placeholder="请选择业务属性">
+                        <el-option
+                        v-for="item in moduleData"
+                        :key="item.id"
+                        :label="item.sectionName"
+                        :value="item.id">
+                        </el-option>
+                    </el-select>
+                </div>
+                <seachs @handleSeach="getSeachData" :showRest="false"></seachs>
+                <el-button type="info" icon="Download" size="mini" @click="handleExport" style="margin-left:10px">导出</el-button>
+            </div>
+            <div class="monthQuarterYearTableData">
+                <div class="tableMain">
+                    <el-table :data="monthQuarterYearTableData" style="width: 100%" ref="benchmark">
+                        <el-table-column :label="tableoneLevelName" align="center">
+                            <el-table-column type="index" label="序号" align="center"></el-table-column>
+                            <el-table-column label="单位名称" width="200">
+                                <template #default="scope">
+                                    <el-tooltip class="box-item" effect="customized" :content="scope.row.organizationShortName"
+                                        placement="right">
+                                        <span class="tooltipCC">{{scope.row.organizationShortName}}</span>
+                                    </el-tooltip>
+                                </template>
+                            </el-table-column>
+                            <el-table-column label="综合得分" prop="zhdf" width="100" />
+                            <el-table-column :label="tabletwoLevelName" align="center">
+                                <el-table-column  v-for="(it, index) in monthQuarterYearHeader" :key="index" :label="it.name" align="center">
+                                    <el-table-column v-for="(iv, index) in it.children" :key="index" :label="iv.name">
+                                        <template #default="scope">
+                                            <span >{{scope.row[iv.key]}}</span>
+                                        </template>
+                                    </el-table-column>
+                                </el-table-column>
+                            </el-table-column>
+                        </el-table-column>
+                    </el-table>
+                </div>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import seachs from '../seachGroup.vue'
+import * as XLSX from 'xlsx'
+import { saveAs } from 'file-saver'
+import  * as XLSXD from 'xlsx-js-style'
+import {apiGetorganizationevaluationlist, apiGetbinsectionList} from '../../api/api'
+export default {
+    components: {
+        seachs
+    },
+    data() {
+        return {
+            dialogVisible: false,
+            binstationStr: '',
+            moduleData: [],
+            tableoneLevelName: '',
+            tabletwoLevelName: '',
+            monthQuarterYearTableData: [],
+            monthQuarterYearHeader: []
+        }
+    },
+    methods: {
+        init(data) {
+            this.dialogVisible = true
+            this.getBinSectionS(data)
+        },
+        // 查询业务属性
+        getBinSectionS(data) {
+            let that = this
+            apiGetbinsectionList().then(datas =>{
+                if (datas && datas.data) {
+                    that.moduleData = datas.data
+                    that.binstationStr = datas.data[0].id
+                    that.getmonthQuarterYearData(data)
+                }
+            })
+        },
+        // 获取得分汇总数据
+        getmonthQuarterYearData(row) {
+            let that = this
+            let params = {
+                id: row.id,
+                binSection: that.binstationStr
+            }
+            apiGetorganizationevaluationlist(params).then(datas =>{
+                if (datas && datas.data) {
+                    if (datas.data.title) {
+                        let header = []
+                        for(let i in datas.data.title) {
+                            that.tableoneLevelName = i
+                            for(let j in datas.data.title[i]) {
+                                that.tabletwoLevelName = j
+                                header = datas.data.title[i][j]
+                            }
+                        }
+                        let headerFin = []
+                        header.forEach(el => {
+                            for(let k in el) {
+                                let obj = {
+                                    name: k,
+                                    children: el[k]
+                                }
+                                headerFin.push(obj)
+                            }
+                        });
+                        that.monthQuarterYearHeader = headerFin
+                    }
+                    if (datas.data.values.length>0) {
+                        that.monthQuarterYearTableData = datas.data.values
+                    }
+                }
+            })
+        },
+        getSeachData() {
+            this.getmonthQuarterYearData()
+        },
+        handleExport() {
+            let $e = this.$refs.benchmark.$el
+            try {
+                let $table = $e.querySelector('.el-table__fixed')
+                if(!$table) {
+                    $table = $e
+                }
+                const wb = XLSX.utils.table_to_book($table, {raw:true})
+
+                const wbout = XLSXD.write(wb, {bookType: 'xlsx', bookSST:true, type: 'array'})
+                saveAs(
+                    new Blob([wbout],{type: 'application/octet-stream'}),
+                    `${this.tableoneLevelName}.xlsx`,
+                )
+            } catch (e) {
+                if (typeof console !== 'undefined') console.error(e)
+            }
+        }
+    }
+}
+</script>
+
+<style lang="less">
+.monthQuarterYearReport{
+    .el-overlay{
+        .el-dialog{
+            // margin-top: 7vh;
+            .el-dialog__body{
+                padding: 0 20px !important;
+                .collectSeach {
+                    display: flex;
+                    padding: 24px 20px;
+                    border-bottom: 1px solid#D6DBEA;
+
+                    .exceed {
+                        display: flex;
+
+                        .exceedSpan {
+                            width: 100px;
+                            height: 12px;
+                            font-size: 14px;
+                            font-family: Microsoft YaHei;
+                            font-weight: 400;
+                            color: #8991B0;
+                            line-height: 12px;
+                            margin-top: 14px;
+                        }
+
+                        .el-input {
+                            margin-right: 10px;
+
+                            .el-input__inner {
+                                height: 30px;
+                            }
+
+                            .el-input__suffix {
+                                .el-select__caret {
+                                    line-height: 30px;
+                                }
+                            }
+                        }
+                        .el-select{
+                            line-height: 40px !important;
+                            .el-input__inner, .is-disabled{
+                                height:40px !important;
+                            }
+                            .el-input__suffix{
+                                .el-select__caret{
+                                    line-height:40px;
+                                }
+                            }
+                        }
+                        .el-date-editor--month{
+                            height: 40px;
+                        }
+                    }
+
+                    span {
+                        font-size: 14px;
+                    }
+
+                    .PeriodBtn {
+                        display: flex;
+                        justify-content: end;
+                        padding: 20px 0;
+                    }
+
+                    .el-button {
+                        height: 30px;
+                        // width:100px;
+                        padding: 0 30px;
+
+                        // padding-top: 8px;
+                        span {
+                            margin: 0;
+                        }
+                    }
+                }
+                .monthQuarterYearTableData{
+                    width: 100%;
+                    margin-top: 20px;
+                    .tableMain{
+                        width: 100%;
+                        .el-table {
+                            .el-table__body-wrapper {
+                                height: 58vh !important;
+                            }
+            
+                            .el-input__inner {
+                                height: 30px !important;
+                            }
+            
+                            .el-radio__label {
+                                display: none;
+                            }
+            
+                            .tooltipCC {
+                                width: 180px;
+                                display: inline-block;
+                                overflow: hidden;
+                                text-overflow: ellipsis;
+                                white-space: nowrap;
+                            }
+            
+                            .indicitem {
+                                color: #409EFF;
+                                font-size: 12px;
+                                margin-right: 20px;
+                                cursor: pointer;
+            
+                                &:hover {
+                                    text-decoration: underline;
+                                }
+                            }
+                        }
+                        .el-pagination {
+                            margin-top: 20px;
+                            text-align: end;
+                            position: relative;
+                        }
+                    }
+                }
+            }
+            .el-dialog__footer{
+                .dialog-footer{
+                    display: flex;
+                    justify-content: center;
+                    .el-button{
+                        width: 180px !important;
+                        height: 40px !important;
+                    }
+                }
+            }
+        }
+    }
+}
+</style>

+ 28 - 1
src/components/elbuttonS.vue

@@ -51,6 +51,16 @@
             @click="handleExport"
             >{{exportName}}</el-button>
         </el-col>
+        <el-col :span="1.5" v-if="showreportForms">
+            <el-button
+            type="info"
+            size="mini"
+            @click="handleReport"
+            >
+            <img :src="report" style="margin-right: 10px">
+            <span>{{reportFormsName}}</span>
+            </el-button>
+        </el-col>
     </el-row>
 </template>
 
@@ -58,6 +68,7 @@
 import addW from '../assets/btnIcon/addW.png'
 import editW from '../assets/btnIcon/editW.png'
 import deleteW from '../assets/btnIcon/deleteW.png'
+import report from '../assets/btnIcon/report.png'
 export default {
     props: {
         showAdd: {
@@ -150,12 +161,25 @@ export default {
                 return '导出';
             },
         },
+        showreportForms: {
+            type: Boolean,
+            default: () => {
+                return false;
+            },
+        },
+        reportFormsName: {
+            type: String,
+            default: () => {
+                return '报表';
+            },
+        },
     },
     data() {
         return {
             addW: addW,
             editW: editW,
-            deleteW: deleteW
+            deleteW: deleteW,
+            report: report
         }
     },
     methods: {
@@ -174,6 +198,9 @@ export default {
         handleExport() {
             this.$emit('handleExport')
         },
+        handleReport() {
+            this.$emit('handleReport')
+        },
     }
 }
 </script>

+ 11 - 0
src/router/index.js

@@ -152,6 +152,17 @@ const routes = [
                             ),
                     },
                     {
+                        path: '/assessment/assessmentApplication',
+                        name: 'assessmentApplication',
+                        meta: {
+                            title: '绩效结果考核申报',
+                        },
+                        component: () =>
+                            import(
+                                '../components/assessment/assessmentApplicationPage.vue'
+                            ),
+                    },
+                    {
                         path: '/assessment/evaluationBenchmarkingIndic',
                         name: 'evaluationBenchmarkingIndic',
                         meta: {

+ 1 - 1
src/utils/baseUrl.js

@@ -10,7 +10,7 @@ switch (process.env.NODE_ENV) {
     case 'development': 
         baseUrl.ROOT = "/api"  //开发环境url
         // baseUrl.URL = "http://10.65.59.67:28800"
-        baseUrl.URL = "http://192.168.2.13:28800"
+        baseUrl.URL = "http://192.168.2.14:28800"
         // baseUrl.URL = "http://10.65.78.23:28800"  //测试环境
         // baseUrl.URL = "http://10.65.78.81:28800"  // 正式环境
         break

+ 1 - 1
src/views/homePage.vue

@@ -203,7 +203,7 @@ export default {
                         name: '部门考评评级'
                     },
                     {
-                        index: '',
+                        index: '/assessment/assessmentApplication',
                         name: '绩效结果考核申报'
                     }
                 ]