瀏覽代碼

新增单位考评目标修订页面,服务联调(列表,详情,考评修订,修订弹框数据,导入,导出);重构公告管理页面(列表,新增);

SunZehao 1 年之前
父節點
當前提交
4ccc2101ad

+ 13 - 1
src/api/api.js

@@ -146,7 +146,7 @@ export function apiGetevaluationdeptnoticeList(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}`,
+        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}&serialNumber=${params.serialNumber}`,
         method: 'post',
         header: { 'Content-Type': 'multipart/form-data' },
         mimeType: 'multipart/form-data',
@@ -176,6 +176,18 @@ export function apiPostevaluationdeptnoticeModifiedState(params) {
         params: params
     })
 }
+//-----文件预览
+export function apiGetevaluationdeptnoticeFilePreview(params) {
+    return httpRequest({
+        url: 'evaluation-dept-notice/filePreview',
+        header: { 'responseType': 'blob' },
+        // responseType: 'blob',
+        method: 'get',
+        params: params
+    })
+}
+
+
 
 //----------------------------------------考评业务------------------------------------------------
 

二進制
src/assets/btnIcon/file.png


二進制
src/assets/btnIcon/fileDelete.png


二進制
src/assets/btnIcon/fileW.png


二進制
src/assets/btnIcon/yulan.png


+ 41 - 25
src/components/assessment/evaluationAmendmentFrom.vue

@@ -147,19 +147,25 @@
         </el-dialog>
         <el-dialog title="修订数据" v-model="revisionVisible" width="70vw" custom-class="revisionClass" :close-on-click-modal="false">
             <div class="revisionSty">
-                <el-table :data="revisionData" style="width: 100%">
+                <el-table :data="revisionData" style="width: 100%" @select="revisionClick" @select-all="revisionClick">
+                    <el-table-column type="selection" label="操作" align="center"></el-table-column>
                     <el-table-column label="单位名称" prop="organizationName" />
                     <el-table-column label="指标分类" prop="typeName" />
                     <el-table-column label="业务阶段" prop="stageName" />
                     <el-table-column label="业务属性" prop="sectionName" />
                     <el-table-column label="指标名称" prop="indicatorName" />
                     <el-table-column label="填报部门" prop="deptName" />
-                    <el-table-column label="目标值" prop="quantifiedValue" />
-                    <el-table-column label="值" prop="nonquantifiedValue" />
-                    <el-table-column label="单位" prop="unit" />
+                    <el-table-column label="目标值" prop="quantifiedValue" v-if="activeName === 'first'" />
+                    <el-table-column label="值" prop="nonquantifiedValue" v-if="activeName !== 'first'" />
+                    <el-table-column label="单位" prop="unit"  v-if="activeName === 'first'" />
                     <el-table-column label="审核状态" prop="state" />
                 </el-table>
             </div>
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button type="primary" @click="revisionOk">确 认</el-button>
+                </span>
+            </template>
         </el-dialog>
         <import-dailog ref="importPage" @successImport="successImport" @importLoading="importLoading"></import-dailog>
     </div>
@@ -190,6 +196,7 @@ export default {
             quantifiedList: [],
             nonQuantifiedList: [],
             changeDateSelect: [],
+            revisioDataSelect: [],
             receiptMsg: {
                 code: '',
                 des: '',
@@ -260,6 +267,19 @@ export default {
         rowClick(selection, row) {
             this.changeDateSelect = selection
         },
+        revisionClick(selection, row) {
+            this.revisioDataSelect = selection
+        },
+        revisionOk() {
+            this.revisionVisible = false
+            if (this.activeName === 'first') {
+                this.quantifiedList = this.quantifiedList.length>0?this.quantifiedList:[]
+                this.quantifiedList = this.quantifiedList.concat(this.revisioDataSelect)
+            } else {
+                this.nonQuantifiedList = this.nonQuantifiedList.length>0?this.nonQuantifiedList:[]
+                this.nonQuantifiedList = this.nonQuantifiedList.concat(this.revisioDataSelect)
+            }
+        },
         handleCurrentChangeLeft(val) {
             this.pageLeft.currentPage = val
         },
@@ -304,6 +324,7 @@ export default {
         // 修订数据
         getrevisionDataFn(row) {
             let that = this
+            that.revisionData = []
             let params = {
                 deptResponsibilityId: row.deptResponsibilityId,
                 isQuantified: this.activeName === 'first'?'是':'否'
@@ -330,21 +351,11 @@ export default {
             } else {
                 that.nonQuantifiedList.forEach(item =>{
                     let obj = {
+                        id: item.id,
                         isQuantified: '否',
                         quantifiedValue: 0.0,
-                        optionCode: 'ZRMB', // 指标项
                         nonQuantifiedValue: item.nonQuantifiedValue,
-                        state: item.state,
-                        deptResponsibilityId: that.rowMsg.id
-                    }
-                    if (item.showInput) {
-                        obj.organizationEvaluationRuleId = item.organizationName //单位id
-                        obj.indicatorId = item.childName //指标id
-                        
-                    } else {
-                        obj.id = item.id
-                        obj.organizationEvaluationRuleId = item.organizationEvaluationRuleId
-                        obj.indicatorId = item.indicatorId
+                        state: item.state
                     }
                     params.push(obj)
                 })
@@ -412,9 +423,12 @@ export default {
             })
         },
         handleImport() {
-            this.$refs.importPage.upload.title = "考评目标信息导入"
+            this.$refs.importPage.upload.title = "考评修订信息导入"
             this.$refs.importPage.upload.open = true
-            this.$refs.importPage.upload.url = '/responsibility-indicator-info/import'
+            this.$refs.importPage.upload.data = {
+                isQuantified: this.activeName === 'first'?'是':'否'
+            }
+            this.$refs.importPage.upload.url = `/evaluation-revision/import`
         },
         successImport(val) {
             this.getDetails(this.rowMsg.deptResponsibilityId)
@@ -427,7 +441,7 @@ export default {
             let colums = []
             colums = [
                 { header: 'ID', key: 'id', width: 26 },
-                { header: '单位名称', key: 'organizationShortName', width: 26 },
+                { header: '单位名称', key: 'organizationName', width: 26 },
                 { header: '指标分类', key: 'typeName', width: 18 },
                 { header: '业务阶段', key: 'stageName', width: 18 },
                 { header: '业务属性', key: 'sectionName', width: 18 },
@@ -441,9 +455,7 @@ export default {
                     { header: '审核状态', key: 'state', width: 18 }
                 )
                 this.quantifiedList.forEach(item =>{
-                    if (item.updateMark) {
-                        data.push(item)
-                    }
+                    data.push(item)
                 })
             } else {
                 colums.push(
@@ -451,9 +463,7 @@ export default {
                     { header: '审核状态', key: 'state', width: 18 }
                 )
                 this.nonQuantifiedList.forEach(item =>{
-                    if (item.updateMark) {
-                        data.push(item)
-                    }
+                    data.push(item)
                 })
             }
             worksheet.columns = colums
@@ -634,6 +644,12 @@ export default {
     }
     .revisionClass{
         margin-top: 7vh;
+        .el-table{
+            margin-bottom: 10px;
+            .el-table__body-wrapper{
+                height: 50vh;
+            }
+        }
     }
 }
 </style>

+ 1 - 1
src/components/gatewaynNewPage.vue

@@ -345,7 +345,7 @@ export default {
     },
     mounted() {
         this.getGateWayData()
-        // this.getDeptNoticeData()
+        this.getDeptNoticeData()
     },
     methods: {
         getDeptNoticeData() {

+ 3 - 2
src/components/importPage/importDailog.vue

@@ -1,9 +1,9 @@
 <template>
   <!-- 用户导入对话框 -->
     <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
+            <!-- :limit="1" -->
         <el-upload
             ref="upload"
-            :limit="1"
             accept=".xlsx, .xls"
             :headers="upload.headers"
             :action="upload.processurl + upload.url"
@@ -12,6 +12,7 @@
             :on-success="handleFileSuccess"
             :on-error="handleFileError"
             :auto-upload="false"
+            :data="upload.data"
             drag
         >
             <i class="el-icon-upload"></i>
@@ -40,6 +41,7 @@ export default {
         return {
             // 用户导入参数
             upload: {
+                data: null,
                 // 展示下载模板
                 showModel: true,
                 // 是否显示弹出层(用户导入)
@@ -89,7 +91,6 @@ export default {
             this.upload.isUploading = false;
             this.$refs.upload.clearFiles();
             // this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
-            debugger
             if (!response.success) {
                 if (response.message.indexOf('运行时异常') !== -1) {
                     this.$message.error('模板数据不匹配,请使用模板导入');

+ 183 - 53
src/components/notification/notificationMangePage.vue

@@ -90,18 +90,18 @@
                     :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-dialog :title="title" custom-class="startToDia" v-model="dialogVisible" width="900px" :close-on-click-modal="false">
+                <div class="notifcaFrom">
                     <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 label="告标题" prop="noticeTitle">
+                            <el-input v-model="ruleForm.noticeTitle"  placeholder="请输入告标题" />
                         </el-form-item>
-                        <el-form-item label="告内容" prop="noticeContent">
+                        <el-form-item label="告内容" prop="noticeContent">
                             <el-input v-model="ruleForm.noticeContent"
-                                type="textarea" :rows="3" placeholder="请输入通告内容"></el-input>
+                                type="textarea" :rows="10" placeholder="请输入公告内容"></el-input>
                         </el-form-item>
-                        <el-form-item label="通告对象" prop="sendTo">
-                            <el-select v-model="ruleForm.sendTo" placeholder="请选择通告对象">
+                        <el-form-item label="发布对象" prop="sendTo">
+                            <el-select v-model="ruleForm.sendTo" placeholder="请选择发布对象">
                                 <el-option
                                 v-for="item in sendToData"
                                 :key="item.value"
@@ -110,21 +110,27 @@
                                 </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-row>
+                            <el-col :span="12" v-if="ruleForm.sendTo === '个别部门'">
+                                <el-form-item label="个别部门" prop="sendToContent">
+                                    <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-col>
+                            <el-col :span="12">
+                                <el-form-item label="排序">
+                                    <el-input-number v-model="ruleForm.serialNumber" :min="1" />
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-form-item label="">
+                            <div class="uploadFiles">
                                 <el-upload
                                     :file-list="filesList"
                                     multiple
@@ -132,38 +138,87 @@
                                     :auto-upload="false"
                                     :show-file-list="false"
                                     >
-                                    <el-button type="primary">选择上传文件</el-button>
+                                    <el-button
+                                        color="#3B7AD1"
+                                        size="mini"
+                                        >
+                                        <img :src="fileW" style="margin-right: 10px">
+                                        <span>添加附件</span>
+                                    </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>
+                        </el-form-item>
+                        <el-form-item label="">
+                            <div class="fliesHeader">
+                                <span>附件名</span>
+                                <span>发送单位</span>
+                                <span>操作</span>
+                            </div>
+                            <div v-if="!isSave" style="width: 100%">
+                                <div v-for="it in filesList" :key="it.uid">
+                                    <div class="fliesMain">
                                         <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>
+                                            <img :src="file" style="margin-right: 10px" >
+                                            <span class="fliesMainSpan spanOne">{{it.name}}</span>
+                                        </div>
+                                        <span class="fliesMainSpan spanTwo">国能(绥中)发电有限责任公司</span>
+                                        <!-- <span>{{userMes.unitName}}</span> -->
+                                        <div class="removeDiv">
+                                            <!-- <div @click="previewFile(it)" style="cursor:pointer">
+                                                <img :src="yulan" style="margin-right: 10px;" >
+                                                <span>预览</span>
+                                            </div> -->
+                                            <div @click="removeFile(it)" style="cursor:pointer">
+                                                <img :src="fileDelete" class="removeImg">
+                                                <span>删除</span>
+                                            </div>
                                         </div>
                                     </div>
                                 </div>
-                                <div v-else>
-                                    <div v-for="it in filesList" :key="it.uid">
+                            </div>
+                            <div v-else>
+                                <div v-for="it in filesList" :key="it.uid">
+                                    <div class="fliesMain">
                                         <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>
+                                            <img :src="file" style="margin-right: 10px" >
+                                            <span class="fliesMainSpan spanOne">{{it.name}}</span>
+                                        </div>
+                                        <span class="fliesMainSpan spanTwo">国能(绥中)发电有限责任公司</span>
+                                        <!-- <span>{{userMes.unitName}}</span> -->
+                                        <div class="removeDiv">
+                                            <!-- <div @click="previewFile(it)" style="cursor:pointer">
+                                                <img :src="yulan" style="margin-right: 10px;" >
+                                                <span>预览</span>
+                                            </div> -->
+                                            <div @click="removeFile(it)" style="cursor:pointer">
+                                                <img :src="fileDelete" class="removeImg">
+                                                <span>删除</span>
+                                            </div>
                                         </div>
                                     </div>
-                                    <div v-for="it in filesListEdit" :key="it">
+                                </div>
+                                <div v-for="it in filesListEdit" :key="it">
+                                    <div class="fliesMain">
                                         <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>
+                                            <img :src="file" style="margin-right: 10px" >
+                                            <span class="fliesMainSpan spanOne">{{it}}</span>
+                                        </div>
+                                        <span class="fliesMainSpan spanTwo">国能(绥中)发电有限责任公司</span>
+                                        <!-- <span>{{userMes.unitName}}</span> -->
+                                        <div class="fileOperate">
+                                            <div @click="previewFile(it)" style="cursor:pointer">
+                                                <img :src="yulan" style="margin-right: 10px;" >
+                                                <span>预览</span>
+                                            </div>
+                                            <div @click="removeFile(it)" style="cursor:pointer">
+                                                <img :src="fileDelete" class="removeImg">
+                                                <span>删除</span>
+                                            </div>
                                         </div>
                                     </div>
                                 </div>
@@ -179,6 +234,10 @@
                     </span>
                 </template>
             </el-dialog>
+            <el-dialog title="预览" v-model="filesVisible" :fullscreen="true" :close-on-click-modal="false">
+                <!-- <div v-html="filesConcent"></div> -->
+                <iframe src="file:///C:/fakepath/数据导出 (29).xlsx" frameborder="0" width="100%" height="100%"></iframe>
+            </el-dialog>
         </div>
     </div>
 </template>
@@ -189,8 +248,13 @@ import seachs from '../seachGroup.vue'
 import fabuW from '../../assets/btnIcon/fabu.png'
 import editW from '../../assets/btnIcon/edit.png'
 import deleteW from '../../assets/btnIcon/delete.png'
+import fileW from '../../assets/btnIcon/fileW.png'
+import file from '../../assets/btnIcon/file.png'
+import yulan from '../../assets/btnIcon/yulan.png'
+import fileDelete from '../../assets/btnIcon/fileDelete.png'
 import {apiGetevaluationdeptnoticeList, apiGetevaluationdeptnoticeSave,apievaluationdeptnoticeDelete,
-apiGetdatadictionaryList, apiPostevaluationdeptnoticeDelete, apiPostevaluationdeptnoticeModifiedState} from '../../api/api'
+apiGetdatadictionaryList, apiPostevaluationdeptnoticeDelete, apiPostevaluationdeptnoticeModifiedState,
+apiGetevaluationdeptnoticeFilePreview} from '../../api/api'
 export default {
     components: {
         btns,
@@ -199,16 +263,22 @@ export default {
     data() {
         return {
             dialogVisible: false,
+            filesVisible: false,
             isSave: false,
             title: '',
             evalradio: {},
             changeDateSelect: [],
             notificationData:[],
+            filesData: [],
             departData: [],
             sendToData: [],
             fabuW: fabuW,
             editW: editW,
             deleteW: deleteW,
+            fileW: fileW,
+            file: file,
+            yulan: yulan,
+            fileDelete: fileDelete,
             page:{
                 pagesize: 12,
                 currentPage: 1,
@@ -225,6 +295,8 @@ export default {
             },
             filesList: [],
             filesListEdit: [],
+            filesConcent: '',
+            filesUrl: '',
             rules: {
                 noticeTitle: [
                     { required: true, message: '请输入通告标题', trigger: 'blur' }
@@ -240,11 +312,13 @@ export default {
                 ]
             },
             noticeTitle: '',
+            userMes: {},
             headers: { "Content-Type": "multipart/form-data" },
             fileType: [ "pdf", "doc", "docx", "xls", "xlsx","txt","png","jpg", "bmp", "jpeg"]
         }
     },
     created() {
+        this.userMes = JSON.parse(window.sessionStorage.getItem('user'))
         this.sendToData = [
             {
                 label: '所有单位',
@@ -319,7 +393,6 @@ export default {
         //新增/修改考评启动数据
         saveAndEditnotificationData(type) {
             let that = this
-            // let userMes = JSON.parse(window.sessionStorage.getItem('user'))
             let params = {
                 serialNumber: that.ruleForm.serialNumber,
                 noticeTitle: that.ruleForm.noticeTitle,
@@ -327,10 +400,10 @@ export default {
                 sendTo: that.ruleForm.sendTo,
                 sendToContent: that.ruleForm.sendToContent.join(','),
                 releaseState: type === '草稿'? '草稿': type === '发布'?'已发布':'未发布',
-                // releaseDept: userMes.deptId,
-                // releaseDeptName: userMes.deptName,
-                // releasePeople: userMes.id,
-                // releasePeopleName: userMes.name
+                // releaseDept: that.userMes.deptId,
+                // releaseDeptName: that.userMes.deptName,
+                // releasePeople: that.userMes.id,
+                // releasePeopleName: that.userMes.name
             }
             const formData = new FormData()
             if (that.filesList.length>0) {
@@ -416,7 +489,7 @@ export default {
                 this.evalradio = this.changeDateSelect[0]
             }
             this.ruleForm = {
-                serialNumber: this.evalradio.serialNumber,
+                serialNumber: this.evalradio.serialNumber*1,
                 noticeTitle: this.evalradio.noticeTitle,
                 noticeContent: this.evalradio.noticeContent,
                 sendTo: this.evalradio.sendTo,
@@ -425,10 +498,11 @@ export default {
                 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)
-            })
+            this.filesListEdit = filesArr
+            // filesArr.forEach(item =>{
+            //     let str = item.substring(item.lastIndexOf('/')+1, item.length)
+            //     this.filesListEdit.push(str)
+            // })
         },
         //删除
         handleDelete(row) {
@@ -484,6 +558,18 @@ export default {
                 }
             }
         },
+        previewFile(it) {
+            this.filesVisible = true
+            let params = {
+                url: it
+            }
+            debugger
+            apiGetevaluationdeptnoticeFilePreview(params).then(datas =>{
+                if (datas) {
+                    console.log('files', datas)
+                }
+            })
+        },
         //移除文件
         removeFile(item) {
             for (var i in this.filesList) {
@@ -636,15 +722,59 @@ export default {
         }
         .el-overlay{
             .startToDia{
+                margin-top: 3vh;
+                background: #EDEFF5;
                 .el-dialog__body{
                     padding: 30px 60px 30px 20px !important;
-                    .periodFrom{
+                    .notifcaFrom{
                         .el-select, .el-input{
                             width: 100%;
                         }
                         .el-input{
                             height: 30px;
                         }
+                        .uploadFiles{
+                            .el-button{
+                                height: 25px !important;
+                            }
+                        }
+                        .fliesHeader{
+                            width: 100%;
+                            display: flex;
+                            justify-content: space-around;
+                        }
+                        .fliesMain{
+                            width: 100%;
+                            display: flex;
+                            .fliesMainSpan{
+                                display: inline-block;
+                                width: 260px;
+                                overflow: hidden;
+                                text-overflow: ellipsis;
+                                white-space: nowrap;
+                            }
+                            .spanOne{
+                                color: #1063CB;
+                            }
+                            .fileOperate{
+                                width: 160px;
+                                display: flex;
+                                justify-content: space-around;
+                                .removeImg{
+                                    margin-right: 10px;
+                                    position: relative;
+                                    top: 2px;
+                                }
+                            }
+                            .removeDiv{
+                                width: 160px;
+                                .removeImg{
+                                    margin: 0 10px 0 20px;
+                                    position: relative;
+                                    top: 3px;
+                                }
+                            }
+                        }
                     }
                     .flowSty{
                         width: 100%;