Переглянути джерело

新增通告管理页面,服务联调(列表,新增/修改,删除,删除附件);测试并修改问题;根据后端需求前端配合修改;

SunZehao 2 роки тому
батько
коміт
b4a4446a4b

+ 48 - 1
src/api/api.js

@@ -127,6 +127,42 @@ export function apiPostScoreCountSave(params) {
 }
 
 
+//----------------------------------------通告管理------------------------------------------------
+//---------列表
+export function apiGetevaluationdeptnoticeList(params) {
+    return httpRequest({
+        url: 'evaluation-dept-notice/list',
+        method: 'get',
+        params: params
+    })
+}
+//----"通告管理-保存or修改"
+export function apiGetevaluationdeptnoticeSave(params, datas) {
+    return httpRequest({
+        url: `evaluation-dept-notice/save?id=${params.id?params.id: ''}&noticeTitle=${params.noticeTitle}&noticeContent=${params.noticeContent}&sendTo=${params.sendTo}&sendToContent=${params.sendToContent}&releaseState=${params.releaseState}&releaseDept=${params.releaseDept}&releasePeople=${params.releasePeople}`,
+        method: 'post',
+        header: { 'Content-Type': 'multipart/form-data' },
+        mimeType: 'multipart/form-data',
+        data: datas
+    })
+}
+//-----通告管理--删除附件
+export function apievaluationdeptnoticeDelete(params) {
+    return httpRequest({
+        url: 'evaluation-dept-notice/deleteAttachment',
+        method: 'post',
+        params: params
+    })
+}
+//-----批量删除通告管理信息
+export function apiPostevaluationdeptnoticeDelete(params) {
+    return httpRequest({
+        url: `evaluation-dept-notice/removeAll/${params}`,
+        method: 'post'
+    })
+}
+
+
 //----------------------------------------考评业务------------------------------------------------
 
 //获取审批流程数据
@@ -341,6 +377,16 @@ export function apiPostOrgevaluationDelete(params) {
     })
 }
 
+//考评对标分析---列表
+export function apiGetscoreCountevaluationList(params) {
+    return httpRequest({
+        url: 'score_count/evaluation/list',
+        method: 'get',
+        params: params
+    })
+}
+
+
 //--------考评报告列表
 export function apiGetEvalReportList(params) {
     return httpRequest({
@@ -404,7 +450,8 @@ export function apiGetevaluationdownloadReport(params) {
 //--------部门绩效考核评级列表
 export function apiGetevaluationdeptratinglist(params) {
     return httpRequest({
-        url: 'evaluation-dept-rating/list',
+        // url: 'evaluation-dept-rating/list',
+        url: 'evaluation-dept-rating/listAll',
         method: 'get',
         params: params
     })

+ 28 - 17
src/components/assessment/evaluationBenchmarkingIndicPage.vue

@@ -143,7 +143,7 @@ import xinCha from '../../assets/benchmarkImg/xinCha.png'
 import meiCha from '../../assets/benchmarkImg/meiCha.png'
 import guoCha from '../../assets/benchmarkImg/guoCha.png'
 import zongCha from '../../assets/benchmarkImg/zongCha.png'
-import {apiGetOrganizationList} from '../../api/api'
+import {apiGetscoreCountevaluationList, apiGetbinstageList} from '../../api/api'
 export default {
     components: {btns},
     data() {
@@ -156,6 +156,8 @@ export default {
             stageIds: '',
             indicatorIds: '',
             timeIds: '',
+            timeStr: '',
+            binSectionStr: 'HD',
             page: {
                 pagesize: 12,
                 currentPage: 1,
@@ -185,6 +187,7 @@ export default {
                 isClass: 'huoDef',
                 isClassC: 'huoCha',
                 isName: '火电',
+                isNameEn: 'HD',
                 img: huoDef,
                 clickImg: huoCha,
                 showClick: true
@@ -193,6 +196,7 @@ export default {
                 isClass: 'shuiDef',
                 isClassC: 'shuiCha',
                 isName: '水电',
+                isNameEn: 'SD',
                 img: shuiDef,
                 clickImg: shuiCha,
                 showClick: false
@@ -201,6 +205,7 @@ export default {
                 isClass: 'xinDef',
                 isClassC: 'xinCha',
                 isName: '新能源',
+                isNameEn: 'XNY',
                 img: xinDef,
                 clickImg: xinCha,
                 showClick: false
@@ -209,6 +214,7 @@ export default {
                 isClass: 'meiDef',
                 isClassC: 'meiCha',
                 isName: '煤电一体化',
+                isNameEn: 'MDYTH',
                 img: meiDef,
                 clickImg: meiCha,
                 showClick: false
@@ -217,6 +223,7 @@ export default {
                 isClass: 'guoDef',
                 isClassC: 'guoCha',
                 isName: '国际业务',
+                isNameEn: 'GJYW',
                 img: guoDef,
                 clickImg: guoCha,
                 showClick: false
@@ -225,45 +232,49 @@ export default {
                 isClass: 'zongDef',
                 isClassC: 'zongCha',
                 isName: '综合支持',
+                isNameEn: 'ZHZC',
                 img: zongDef,
                 clickImg: zongCha,
                 showClick: false
             }
         ]
-        this.getEvalCompanyData()
+        this.getEvalBenchmarkingIndicData()
     },
     methods: {
-        // 查询单位数据
-        getEvalCompanyData() {
+        // 查询考评对标分析数据
+        getEvalBenchmarkingIndicData() {
             let that = this
-            debugger
             let params = {
-                pageNum: that.page.currentPage,
-                pageSize: that.page.pagesize,
-                organizationType: 'DWKP',
-                organizationName: that.companyS,
-                binSection: that.binSectionIds,
-                binStage: that.stageIds,
-                evaluationCycle: that.periodId
+                condition: that.timeStr,
+                date: that.timeIds,
+                type: that.indicatorIds,
+                binSection: that.binSectionStr,
+                binStage: that.stageIds
             }
-            apiGetOrganizationList(params).then(datas => {
+            apiGetscoreCountevaluationList(params).then(datas => {
                 if (datas && datas.data) {
                     that.benchmarkingIndicatorData = datas.data.records
                     that.page.total = datas.data.total
                 }
             })
+            apiGetbinstageList(params).then(datas =>{
+                if (datas && datas.data) {
+                    that.stageData = datas.data
+                }
+            })
         },
         changType(data) {
             this.titleMsgArr.forEach(it =>{
                 it.showClick = false
                 if (it.isName === data.isName) {
                     it.showClick = true
+                    this.binSectionStr = it.isNameEn
                 }
             })
         },
         getSeachData() {
             this.page.currentPage = 1
-            this.getEvalCompanyData()
+            this.getEvalBenchmarkingIndicData()
         },
         resetSeach() {
             this.page.currentPage = 1
@@ -271,15 +282,15 @@ export default {
             this.periodId = ''
             this.stageIds = ''
             this.binSectionIds = ''
-            this.getEvalCompanyData()
+            this.getEvalBenchmarkingIndicData()
         },
         handleSizeChange(val) {
             this.page.pagesize = val
-            this.getEvalCompanyData()
+            this.getEvalBenchmarkingIndicData()
         },
         handleCurrentChange(val) {
             this.page.currentPage = val
-            this.getEvalCompanyData()
+            this.getEvalBenchmarkingIndicData()
         }
     }
 }

+ 77 - 8
src/components/assessment/evaluationDeptRatingPage.vue

@@ -15,22 +15,24 @@
             </div>
             <div class="PeriodBtn">
                 <btns
-                :showImport="false"
-                :showExport="false"
+                :showImport="true"
+                :showExport="true"
                 :showSave="true"
                 :showAdd="true"
                 :showDelete="true"
                 :disSave="changeDateSelect.length === 0 || changeDateSelect.length>1"
                 :disDelete="changeDateSelect.length === 0"
-                :disImport="true"
-                :disExport="true"
+                :disImport="false"
+                :disExport="false"
                 @handleAdd="handleAdd"
                 @handleEdit="handleEdit"
                 @handleDelete="handleDelete"
+                @handleImport="handleImport"
+                @handleExport="handleExport"
                 ></btns>
             </div>
             <div class="evaluationRatingTableData">
-                <el-table :data="evaluationRatingData" style="width: 100%" @select="rowClick" @select-all="rowClick">
+                <el-table :data="evaluationRatingData.length>0?evaluationRatingData.slice((page.currentPage-1)*page.pagesize, page.currentPage*page.pagesize):evaluationRatingData" style="width: 100%" @select="rowClick" @select-all="rowClick">
                     <el-table-column type="selection" label="操作" align="center"></el-table-column>
                     <el-table-column type="index" label="序号" align="center"></el-table-column>
                     <el-table-column label="考评部门" width="200">
@@ -133,17 +135,22 @@
             </el-dialog>
         </div>
         <start-from-list ref="startFromDetail" ></start-from-list>
+        <import-dailog ref="importPage" @successImport="successImport"></import-dailog>
     </div>
 </template>
 
 <script>
+import importDailog from '../importPage/importDailog.vue'
 import startFromList from './evaluationDeptStartFrom.vue'
 import btns from '../elbuttonS.vue'
+import ExcelJS from 'exceljs'
+import fileSave from 'file-saver'
 import {apiGetevaluationdeptratinglist, apiGetevaluationdeptratingsave,
 apiGetdatadictionaryList, apiPostevaluationdeptratingDelete} from '../../api/api'
 export default {
     components: {
         startFromList,
+        importDailog,
         btns
     },
     data() {
@@ -325,8 +332,8 @@ export default {
             }
             apiGetevaluationdeptratinglist(params).then(datas =>{
                 if (datas && datas.data) {
-                    that.evaluationRatingData = datas.data.records
-                    that.page.total = datas.data.total
+                    that.evaluationRatingData = datas.data
+                    that.page.total = datas.data.length
                 }
             })
         },
@@ -342,6 +349,11 @@ export default {
                 }
             })
         },
+        evaluationRatingFn() {
+            if (this.evaluationRatingData.length>0) {
+                evaluationRatingData.slice((page.currentPage-1)*page.pagesize, page.currentPage*page.pagesize)
+            }
+        },
         changeAData(val, data) {
             if (val !== '') {
                 this.monthArr.forEach(it =>{
@@ -470,7 +482,7 @@ export default {
             this.title = '新建部门绩效考核评级'
             this.acauseDataArr = []
             this.$nextTick(() =>{
-                this.$refs['ruleForm'].resetFields()
+                // this.$refs['ruleForm'].resetFields()
                 this.ruleForm = {
                     department: '',
                     year: '',
@@ -569,6 +581,63 @@ export default {
                 })
             })
         },  
+        handleImport() {
+            this.$refs.importPage.upload.title = "部门考评评级"
+            this.$refs.importPage.upload.open = true
+            this.$refs.importPage.upload.url = '/evaluation-dept-rating/import'
+        },
+        successImport(val) {
+            this.getevaluRatingList()
+        },
+        handleExport() {
+            let data = this.evaluationRatingData  //接口返回数据
+            const workbook = new ExcelJS.Workbook()
+            const worksheet = workbook.addWorksheet('Sheet1')
+            //根据数据自己调整
+            let colums = []
+            colums = [
+                { header: 'ID', key: 'id', width: 26 },
+                { header: '考评部门', key: 'deptName', width: 26 },
+                { header: '考评年度', key: 'annual', width: 26 },
+                { header: '一月', key: 'jan', width: 15 },
+                { header: '一月通告', key: 'janContent', width: 26 },
+                { header: '二月', key: 'feb', width: 15 },
+                { header: '二月通告', key: 'febContent', width: 26 },
+                { header: '三月', key: 'mar', width: 15 },
+                { header: '三月通告', key: 'marContent', width: 26 },
+                { header: '四月', key: 'apr', width: 15 },
+                { header: '四月通告', key: 'aprContent', width: 26 },
+                { header: '五月', key: 'may', width: 15 },
+                { header: '五月通告', key: 'mayContent', width: 26 },
+                { header: '六月', key: 'jun', width: 15 },
+                { header: '六月通告', key: 'junContent', width: 26 },
+                { header: '七月', key: 'jul', width: 15 },
+                { header: '七月通告', key: 'julContent', width: 26 },
+                { header: '八月', key: 'aug', width: 15 },
+                { header: '八月通告', key: 'augContent', width: 26 },
+                { header: '九月', key: 'sep', width: 15 },
+                { header: '九月通告', key: 'sepContent', width: 26 },
+                { header: '十月', key: 'oct', width: 15 },
+                { header: '十月通告', key: 'octContent', width: 26 },
+                { header: '十一月', key: 'nov', width: 15 },
+                { header: '十一月通告', key: 'novContent', width: 26 },
+                { header: '十二月', key: 'dece', width: 15 },
+                { header: '十二月通告', key: 'deceContent', width: 26 },
+                { header: 'A级总数', key: 'acount', width: 15 },
+            ]
+            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>

+ 3 - 3
src/components/assessment/evaluationStartFrom.vue

@@ -151,7 +151,7 @@
                             </el-table-column>
                             <el-table-column label="业务属性" prop="sectionName">
                                 <template #default="scope">
-                                    <el-select v-model="scope.row.sectionName" placeholder="请选择业务阶段"
+                                    <el-select v-model="scope.row.sectionName" placeholder="请选择业务属性"
                                     :disabled="!scope.row.showInput"
                                      @change="(val)=>changeIndic(val, scope.row)">
                                         <el-option
@@ -165,7 +165,7 @@
                             </el-table-column>
                             <el-table-column label="指标名称" prop="childName">
                                 <template #default="scope">
-                                    <el-select v-model="scope.row.childName" placeholder="请选择业务阶段"
+                                    <el-select v-model="scope.row.childName" placeholder="请选择指标名称"
                                     :disabled="!scope.row.showInput"
                                      @change="changeDept">
                                         <el-option
@@ -179,7 +179,7 @@
                             </el-table-column>
                             <el-table-column label="填报部门" prop="deptName" width="260">
                                 <template #default="scope">
-                                    <el-select v-model="scope.row.deptName" placeholder="请选择业务阶段" :disabled="!scope.row.showInput">
+                                    <el-select v-model="scope.row.deptName" placeholder="请选择填报部门" :disabled="!scope.row.showInput">
                                         <el-option
                                         v-for="item in deptNameArr"
                                         :key="item.id"

+ 594 - 0
src/components/notification/notificationMangePage.vue

@@ -0,0 +1,594 @@
+<template>
+    <div class="notification">
+        <div class="notificationBtn">
+            <div class="collectSeach">
+                <div class="exceed">
+                    <span class="exceedSpan">通告标题:</span>
+                    <el-input v-model="noticeTitle" placeholder="请输入通告标题"></el-input>
+                </div>
+                <el-button type="primary" style="margin-left: 10px;" @click="getSeachData">搜索</el-button>
+                <el-button style="margin-left: 10px;" @click="resetSeach">重置</el-button>
+            </div>
+            <div class="PeriodBtn">
+                <btns
+                :showImport="false"
+                :showExport="false"
+                :showSave="true"
+                :showAdd="true"
+                :showDelete="true"
+                :disSave="changeDateSelect.length === 0 || changeDateSelect.length>1"
+                :disDelete="changeDateSelect.length === 0"
+                :disImport="false"
+                :disExport="false"
+                @handleAdd="handleAdd"
+                @handleEdit="handleEdit"
+                @handleDelete="handleDelete"
+                ></btns>
+            </div>
+            <div class="notificationTableData">
+                <el-table :data="notificationData" style="width: 100%" @select="rowClick" @select-all="rowClick">
+                    <el-table-column type="selection" label="操作" align="center"></el-table-column>
+                    <el-table-column label="序号" prop="serialNumber" align="center" width="80"></el-table-column>
+                    <el-table-column label="通告标题" width="300">
+                        <template #default="scope">
+                            <el-tooltip
+                                class="box-item"
+                                effect="customized"
+                                :content="scope.row.noticeTitle"
+                                placement="right"
+                            >
+                                <span class="tooltipCC">{{scope.row.noticeTitle}}</span>
+                            </el-tooltip>
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="通告内容" width="400">
+                        <template #default="scope">
+                            <el-tooltip
+                                class="box-item"
+                                effect="customized"
+                                :content="scope.row.noticeContent"
+                                placement="right"
+                            >
+                                <span class="tooltipCC">{{scope.row.noticeContent}}</span>
+                            </el-tooltip>
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="通告对象" prop="sendTo" />
+                    <el-table-column label="个别部门" prop="deptNames" />
+                    <el-table-column label="发布状态" prop="releaseState" />
+                </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="noticeTitle">
+                            <el-input v-model="ruleForm.noticeTitle"  placeholder="请输入通告标题" />
+                        </el-form-item>
+                        <el-form-item label="通告内容" prop="noticeContent">
+                            <el-input v-model="ruleForm.noticeContent"
+                                type="textarea" :rows="3" placeholder="请输入通告内容"></el-input>
+                        </el-form-item>
+                        <el-form-item label="通告对象" prop="sendTo">
+                            <el-select v-model="ruleForm.sendTo" placeholder="请选择通告对象">
+                                <el-option
+                                v-for="item in sendToData"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="个别部门" prop="sendToContent" v-if="ruleForm.sendTo === '个别部门'">
+                            <el-select v-model="ruleForm.sendToContent" multiple collapse-tags placeholder="请选择部门">
+                                <el-option
+                                v-for="item in departData"
+                                :key="item.id"
+                                :label="item.keyName"
+                                :value="item.id">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="排序">
+                            <el-input-number v-model="ruleForm.serialNumber" :min="1" />
+                        </el-form-item>
+                        <el-form-item label="上传附件">
+                            <div>
+                                <el-upload
+                                    :file-list="filesList"
+                                    multiple
+                                    limit="3"
+                                    :auto-upload="false"
+                                    :show-file-list="false"
+                                    >
+                                    <el-button type="primary">选择上传文件</el-button>
+                                    <template #tip>
+                                        <div class="el-upload__tip">
+                                            最多上传3个文件
+                                        </div>
+                                    </template>
+                                </el-upload>
+                                <div v-if="!isSave">
+                                    <div v-for="it in filesList" :key="it.uid">
+                                        <div>
+                                            <span>{{it.name}}</span>
+                                            <el-icon :size="20" color="#3B7AD1"
+                                            @click="removeFile(it)"
+                                             style="position: relative;top: 5px;left: 10px;cursor:pointer"><CircleClose /></el-icon>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div v-else>
+                                    <div v-for="it in filesList" :key="it.uid">
+                                        <div>
+                                            <span>{{it.name}}</span>
+                                            <el-icon :size="20" color="#3B7AD1"
+                                            @click="removeFile(it)"
+                                            style="position: relative;top: 5px;left: 10px;cursor:pointer"><CircleClose /></el-icon>
+                                        </div>
+                                    </div>
+                                    <div v-for="it in filesListEdit" :key="it">
+                                        <div>
+                                            <span>{{it}}</span>
+                                            <el-icon :size="20" color="#3B7AD1"
+                                            @click="removeFileFn(it)"
+                                            style="position: relative;top: 5px;left: 10px;cursor:pointer"><CircleClose /></el-icon>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </el-form-item>
+                    </el-form>
+                </div>
+                <template #footer>
+                    <span class="dialog-footer">
+                        <el-button type="warning" @click="saveevaluaStart('ruleForm', '草稿')">草 稿</el-button>
+                        <el-button type="primary" @click="saveevaluaStart('ruleForm', '发布')">发 布</el-button>
+                        <el-button @click="saveevaluaStart('ruleForm', '取消')">取 消</el-button>
+                    </span>
+                </template>
+            </el-dialog>
+        </div>
+    </div>
+</template>
+
+<script>
+import btns from '../elbuttonS.vue'
+import {apiGetevaluationdeptnoticeList, apiGetevaluationdeptnoticeSave,apievaluationdeptnoticeDelete,
+apiGetdatadictionaryList, apiPostevaluationdeptnoticeDelete} from '../../api/api'
+export default {
+    components: {
+        btns
+    },
+    data() {
+        return {
+            dialogVisible: false,
+            isSave: false,
+            title: '',
+            evalradio: {},
+            changeDateSelect: [],
+            notificationData:[],
+            departData: [],
+            sendToData: [],
+            page:{
+                pagesize: 12,
+                currentPage: 1,
+                total: 0
+            },
+            ruleForm: {
+                serialNumber: 1,
+                noticeTitle: '',
+                noticeContent: '',
+                sendTo: '',
+                sendToContent: [],
+                releaseDept: '',
+                releasePeople: '',
+            },
+            filesList: [],
+            filesListEdit: [],
+            rules: {
+                noticeTitle: [
+                    { required: true, message: '请输入通告标题', trigger: 'blur' }
+                ],
+                noticeContent: [
+                    { required: true, message: '请输入通告内容', trigger: 'blur' }
+                ],
+                sendTo: [
+                    { required: true, message: '请选择通告对象', trigger: 'change' }
+                ],
+                sendToContent: [
+                    { required: true, message: '请选择个别部门', trigger: 'change' }
+                ]
+            },
+            noticeTitle: '',
+            headers: { "Content-Type": "multipart/form-data" },
+            fileType: [ "pdf", "doc", "docx", "xls", "xlsx","txt","png","jpg", "bmp", "jpeg"]
+        }
+    },
+    created() {
+        this.sendToData = [
+            {
+                label: '所有单位',
+                value: '所有单位'
+            },
+            {
+                label: '本部部门',
+                value: '本部部门'
+            },
+            {
+                label: '个别部门',
+                value: '个别部门'
+            }
+        ]
+        this.getevalunotificationList()
+        this.getDepartmentFromTreeData()
+    },
+    methods:{
+        // 查询列表页面
+        getevalunotificationList() {
+            let that = this
+            let params = {
+                pageNum: that.page.currentPage,
+                pageSize: that.page.pagesize,
+                noticeTitle: that.noticeTitle
+            }
+            apiGetevaluationdeptnoticeList(params).then(datas =>{
+                if (datas && datas.data) {
+                    that.notificationData = datas.data.records
+                    that.page.total = datas.data.total
+                }
+            })
+        },
+        // 查询部门
+        getDepartmentFromTreeData() {
+            let that = this
+            let params = {
+                superKey: 'BM0001'
+            }
+            apiGetdatadictionaryList(params).then(datas =>{
+                if (datas && datas.data) {
+                    that.departData = datas.data
+                }
+            })
+        },
+        notificationFn() {
+            if (this.notificationData.length>0) {
+                notificationData.slice((page.currentPage-1)*page.pagesize, page.currentPage*page.pagesize)
+            }
+        },
+        saveevaluaStart(formName, type) {
+            let that = this
+            that.$refs[formName].validate((valid) => {
+                if (valid) {
+                    that.saveAndEditnotificationData(type)
+                }
+            });
+        },
+        //新增/修改考评启动数据
+        saveAndEditnotificationData(type) {
+            let that = this
+            // let userMes = JSON.parse(window.sessionStorage.getItem('user'))
+            let params = {
+                serialNumber: that.ruleForm.serialNumber,
+                noticeTitle: that.ruleForm.noticeTitle,
+                noticeContent: that.ruleForm.noticeContent,
+                sendTo: that.ruleForm.sendTo,
+                sendToContent: that.ruleForm.sendToContent.join(','),
+                releaseState: type === '草稿'? '草稿': type === '发布'?'已发布':'未发布',
+                // releaseDept: userMes.deptId,
+                // releasePeople: userMes.id
+            }
+            debugger
+            const formData = new FormData()
+            if (that.filesList.length>0) {
+                that.filesList.forEach(item =>{
+                    formData.append('files', item.raw)
+                })
+            }
+            if (that.isSave) {
+                params.id = that.evalradio.id
+                formData.append('deptNames', 'deptNames')
+            }
+            apiGetevaluationdeptnoticeSave(params, formData).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.getevalunotificationList()
+                }
+            })
+        },
+        getSeachData() {
+            this.page.currentPage = 1
+            this.getevalunotificationList()
+        },
+        resetSeach() {
+            this.page.currentPage = 1
+            this.noticeTitle = ''
+            this.getevalunotificationList()
+        },
+        handleSizeChange(val){
+            this.page.pagesize = val
+            this.getevalunotificationList()
+        },
+        handleCurrentChange(val){
+            this.page.currentPage =val
+            this.getevalunotificationList()
+        },
+        rowClick(selection, row) {
+            this.changeDateSelect = selection
+        },
+        handleAdd() {
+            this.dialogVisible = true
+            this.isSave = false
+            this.title = '新建通告'
+            this.$nextTick(() =>{
+                this.$refs['ruleForm'].resetFields()
+                this.filesList = []
+                this.ruleForm = {
+                    serialNumber: 1,
+                    noticeTitle: '',
+                    noticeContent: '',
+                    sendTo: '',
+                    sendToContent: [],
+                    releaseDept: '',
+                    releasePeople: ''
+                }
+            })
+        },
+        handleEdit() {
+            this.dialogVisible = true
+            this.isSave = true
+            this.title = '修改通告'
+            this.filesList = []
+            this.filesListEdit = []
+            this.evalradio = this.changeDateSelect[0]
+            this.ruleForm = {
+                serialNumber: this.evalradio.serialNumber,
+                noticeTitle: this.evalradio.noticeTitle,
+                noticeContent: this.evalradio.noticeContent,
+                sendTo: this.evalradio.sendTo,
+                sendToContent: this.evalradio.sendToContent.split(','),
+                releaseDept: this.evalradio.releaseDept,
+                releasePeople: this.evalradio.releasePeople
+            }
+            let filesArr = this.evalradio.noticeAnnex.split(',')
+            filesArr.forEach(item =>{
+                let str = item.substring(item.lastIndexOf('/')+1, item.length)
+                this.filesListEdit.push(str)
+            })
+        },
+        //删除
+        handleDelete() {
+            this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                let that = this
+                let paramsArr = []
+                that.changeDateSelect.forEach(it =>{
+                    paramsArr.push(it.id)
+                })
+                apiPostevaluationdeptnoticeDelete(paramsArr.join(',')).then(datas =>{
+                    that.$message({
+                        type: 'success',
+                        message: '删除成功!'
+                    });
+                    that.getevalunotificationList()
+                    that.changeDateSelect = []
+                })
+            })
+        },
+        //上传文件之前验证文件类型和大小
+        beforeUpload(file) {
+            // this.ruleForm.files = []
+            if (file.type != "" || file.type != null || file.type != undefined){
+                //截取文件的后缀,判断文件类型
+                const FileExt = file.name.replace(/.+\./, "").toLowerCase();
+                //计算文件的大小
+                const isLt5M = file.size / 1024 / 1024 < 5; //这里做文件大小限制
+                //如果大于5M
+                if (!isLt5M) {
+                    this.$message({
+                    message: '上传文件大小不能超过 5MB!',
+                    type: 'info'
+                    });
+                    return false;
+                }
+                //如果文件类型不在允许上传的范围内
+                if(this.fileType.includes(FileExt)){
+                    return true;
+                }
+                else {
+                    this.$message.error("上传文件格式不正确!");
+                    return false;
+                }
+            }
+        },
+        //移除文件
+        removeFile(item) {
+            for (var i in this.filesList) {
+                if (item.name == this.filesList[i].name) {
+                    this.filesList.splice(i, 1)
+                }
+            }
+        },
+        removeFileFn(item) {
+            this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                let that = this
+                let params = {
+                    id: that.evalradio.id,
+                    noticeAnnex: item
+                }
+                apievaluationdeptnoticeDelete(params).then(datas =>{
+                    if (datas.success) {
+                        that.filesListEdit.forEach((it, index) =>{
+                            if (it === item) {
+                                that.filesListEdit.splice(index, 1)
+                            }
+                        })
+                    } else {
+                        this.$message({
+                            message: datas.message,
+                            type: 'error'
+                        });
+                    }
+                })
+            })
+        }
+    }
+}
+</script>
+
+<style lang="less">
+.notification{
+    .notificationBtn{
+        .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;
+            }
+        }
+        .notificationTableData{
+            .el-table{
+                .el-table__body-wrapper{
+                    height: 60vh !important;
+                }
+                .el-input__inner{
+                    height: 30px !important;
+                }
+                .el-radio__label{
+                    display: none;
+                }
+                .tooltipCC{
+                    width: 300px !important;
+                    display: inline-block;
+                    overflow: hidden;
+                    text-overflow: ellipsis;
+                    white-space: nowrap;
+                }
+                .tooltipCCDes{
+                    width: 50px;
+                    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>

+ 11 - 0
src/router/index.js

@@ -46,6 +46,17 @@ const routes = [
                     ),
             },
             {
+                path: '/notification',
+                name: 'notification',
+                meta: {
+                    title: '通告管理',
+                },
+                component: () =>
+                    import(
+                        '../components/notification/notificationMangePage.vue'
+                    ),
+            },
+            {
                 path: '/assessment',
                 name: 'assessment',
                 meta: {