205 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			205 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | ||
|   <ai-detail>
 | ||
|     <template slot="title">
 | ||
|       <ai-title title="公告详情" isShowBack isShowBottomBorder @onBackClick="$parent.goBack"></ai-title>
 | ||
|     </template>
 | ||
|     <template #content>
 | ||
|       <ai-sidebar v-model="index" :tabTitle="tabTitle" @change="onChange"></ai-sidebar>
 | ||
|       <template v-if="index==0">
 | ||
|         <ai-card :title="detailObj.title" class="title">
 | ||
|           <template #content>
 | ||
|             <el-row type="flex" justify="space-between" class="info">
 | ||
|               <span>时间:{{ detailObj.releaseTime }}</span>
 | ||
|               <span style="display:flex">发布单位:
 | ||
|                 <span v-text="detailObj.unitName"/>
 | ||
|               </span>
 | ||
|               <span style="display:flex">发布人:
 | ||
|                 <span v-text="detailObj.releaseUserName"/>
 | ||
|               </span>
 | ||
|             </el-row>
 | ||
|             <div v-html="detailObj.content" style="margin: 20px 0;"></div>
 | ||
|           </template>
 | ||
|         </ai-card>
 | ||
|         <ai-card title="附件" v-if="detailObj.files && detailObj.files.length">
 | ||
|           <template #right>
 | ||
|             <span class="Edit" @click="downFileAll"><i class="iconfont iconDownload"></i>下载全部</span>
 | ||
|           </template>
 | ||
|           <template #content>
 | ||
|             <ai-file-list :fileList="detailObj.files" :fileOps="{ name: 'fileName', size: 'size' }"></ai-file-list>
 | ||
|           </template>
 | ||
|         </ai-card>
 | ||
|       </template>
 | ||
|       <template v-else>
 | ||
|         <ai-list>
 | ||
|           <template #content>
 | ||
|             <ai-search-bar>
 | ||
|               <template #left>
 | ||
|                 <ai-select
 | ||
|                     v-model="search.readStatus"
 | ||
|                     @change="search.current=1,getList()"
 | ||
|                     placeholder="查阅状态"
 | ||
|                     :selectList="dict.getDict('announcementReadStatus')"
 | ||
|                 ></ai-select>
 | ||
|               </template>
 | ||
|               <template #right>
 | ||
|                 <el-input v-model="search.readUserName" @keyup.enter.native="getList()" placeholder="姓名"
 | ||
|                           size="small" suffix-icon="iconfont iconSearch" clearable
 | ||
|                           @clear="search.current=1,getList()"></el-input>
 | ||
|               </template>
 | ||
|             </ai-search-bar>
 | ||
|             <ai-table
 | ||
|                 :tableData="tableData"
 | ||
|                 :col-configs="colConfigs"
 | ||
|                 :total="total"
 | ||
|                 :current.sync="search.current"
 | ||
|                 :size.sync="search.size"
 | ||
|                 @getList="getList">
 | ||
|               <el-table-column slot="readUserName" label="姓名" align="center">
 | ||
|                 <template slot-scope="{ row }">
 | ||
|                   <span v-text="row.readUserName"/>
 | ||
|                 </template>
 | ||
|               </el-table-column>
 | ||
|               <el-table-column slot="unitName" label="所属部门" align="center">
 | ||
|                 <template slot-scope="{ row }">
 | ||
|                   <span v-text="row.unitName"/>
 | ||
|                 </template>
 | ||
|               </el-table-column>
 | ||
|             </ai-table>
 | ||
|           </template>
 | ||
|         </ai-list>
 | ||
|       </template>
 | ||
|     </template>
 | ||
|   </ai-detail>
 | ||
| </template>
 | ||
| 
 | ||
| <script>
 | ||
| export default {
 | ||
|   name: "manageDetail",
 | ||
|   props: {
 | ||
|     instance: Function,
 | ||
|     dict: Object,
 | ||
|     detail: Object
 | ||
|   },
 | ||
|   data() {
 | ||
|     return {
 | ||
|       index: 0,
 | ||
|       tableData: [],
 | ||
|       total: 0,
 | ||
|       detailObj: {},
 | ||
|       search: {
 | ||
|         current: 1,
 | ||
|         size: 10
 | ||
|       }
 | ||
|     }
 | ||
|   },
 | ||
|   computed: {
 | ||
|     tabTitle() {
 | ||
|       return ["公告详情", "查询情况"];
 | ||
|     },
 | ||
|     colConfigs() {
 | ||
|       return [
 | ||
|         {slot: "readUserName"},
 | ||
|         {prop: "readUserPhone", label: "手机号", align: "center"},
 | ||
|         {slot: "unitName"},
 | ||
|         {
 | ||
|           prop: "readStatus", label: "查阅状态", align: "center",
 | ||
|           render: (h, {row}) => [<span
 | ||
|               style={{color: this.dict.getColor("announcementReadStatus", row.readStatus)}}>{this.dict.getLabel("announcementReadStatus", row.readStatus)}</span>]
 | ||
|         },
 | ||
|       ];
 | ||
|     }
 | ||
|   },
 | ||
|   methods: {
 | ||
|     downFileAll() {
 | ||
|       if (this.detailObj.files.length > 0) {
 | ||
|         this.instance.post('/app/appannouncement/downLoadAllFileForDetail', null, {
 | ||
|           responseType: 'blob',
 | ||
|           params: {
 | ||
|             id: this.detailObj.id
 | ||
|           }
 | ||
|         }).then((res) => {
 | ||
|           const link = document.createElement('a')
 | ||
|           let blob = new Blob([res], {type: 'application/octet-stream'})
 | ||
|           link.style.display = 'none'
 | ||
|           link.href = URL.createObjectURL(blob)
 | ||
|           var num = ''
 | ||
|           for (let i = 0; i < 10; i++) {
 | ||
|             num += Math.ceil(Math.random() * 10)
 | ||
|           }
 | ||
|           link.setAttribute('download', '公告文件' + '.zip')
 | ||
|           document.body.appendChild(link)
 | ||
|           link.click()
 | ||
|           document.body.removeChild(link)
 | ||
|         })
 | ||
|       } else {
 | ||
|         this.$message.error('暂无附件提供下载')
 | ||
|       }
 | ||
|     },
 | ||
|     onChange(val) {
 | ||
|       if (val == 0) {
 | ||
|         this.getDetail();
 | ||
|       } else {
 | ||
|         this.getList();
 | ||
|       }
 | ||
|     },
 | ||
|     getDetail() {
 | ||
|       this.instance.post("/app/appannouncement/detail", null, {
 | ||
|         params: {
 | ||
|           id: this.detail.id
 | ||
|         }
 | ||
|       }).then(res => {
 | ||
|         if (res && res.data) {
 | ||
|           this.detailObj = res.data;
 | ||
| 
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
|     getList() {
 | ||
|       this.instance.post("/app/appannouncementreader/list", null, {
 | ||
|         params: {
 | ||
|           announcementId: this.detail.id,
 | ||
|           ...this.search
 | ||
|         }
 | ||
|       }).then(res => {
 | ||
|         if (res && res.data) {
 | ||
|           this.tableData = res.data.records;
 | ||
|           this.total = res.data.total;
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
|   },
 | ||
|   created() {
 | ||
|     this.dict.load("announcementReadStatus").then(this.getDetail);
 | ||
|   }
 | ||
| }
 | ||
| </script>
 | ||
| 
 | ||
| <style lang="scss" scoped>
 | ||
| :deep( .title ){
 | ||
|   .aibar-left {
 | ||
|     width: 100%;
 | ||
|     text-align: center;
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| .file {
 | ||
|   height: 40px;
 | ||
|   line-height: 40px;
 | ||
|   padding: 0 8px;
 | ||
|   font-size: 14px;
 | ||
|   color: #333;
 | ||
|   background: #fff;
 | ||
|   border-radius: 4px;
 | ||
|   border: 1px solid #d0d4dc;
 | ||
|   margin-bottom: 16px;
 | ||
|   cursor: pointer;
 | ||
| }
 | ||
| 
 | ||
| .info {
 | ||
|   & > span {
 | ||
|     font-size: 14px;
 | ||
|     color: #333;
 | ||
|   }
 | ||
| }
 | ||
| </style>
 |