|  | @@ -4,201 +4,48 @@
 | 
	
		
			
				|  |  |        <div class="squrt"></div>系统日志
 | 
	
		
			
				|  |  |      </h2>
 | 
	
		
			
				|  |  |      <div class="m-core">
 | 
	
		
			
				|  |  | -      <location-hash v-model="searchForm.group" @change="onTabClick">
 | 
	
		
			
				|  |  | -        <el-tabs v-model="activeIndex" @tab-click="onTabClick">
 | 
	
		
			
				|  |  | -          <el-tab-pane label="系统通知" v-if="permissionList.journalItem" name="SYSTEM" value="SYSTEM"></el-tab-pane>
 | 
	
		
			
				|  |  | -          <el-tab-pane label="学生申诉" v-if="permissionList.studentComplain" name="STUDENT" value="STUDENT"></el-tab-pane>
 | 
	
		
			
				|  |  | +      <location-hash v-model="activeIndex">
 | 
	
		
			
				|  |  | +        <el-tabs v-model="activeIndex">
 | 
	
		
			
				|  |  | +          <el-tab-pane label="系统通知" lazy v-if="permissionList.journalItem" name="SYSTEM">
 | 
	
		
			
				|  |  | +            <list :type="activeIndex" />
 | 
	
		
			
				|  |  | +          </el-tab-pane>
 | 
	
		
			
				|  |  | +          <el-tab-pane label="学生申诉" lazy v-if="permissionList.studentComplain" name="STUDENT">
 | 
	
		
			
				|  |  | +            <list :type="activeIndex" />
 | 
	
		
			
				|  |  | +          </el-tab-pane>
 | 
	
		
			
				|  |  |            <!-- <el-tab-pane label="退团退课" value="MUSICGROUP"></el-tab-pane> -->
 | 
	
		
			
				|  |  | -          <el-tab-pane label="请假处理" v-if="permissionList.leaveOperation" name="LEAVE" value="LEAVE"></el-tab-pane>
 | 
	
		
			
				|  |  | -          <el-tab-pane label="VIP申请审核" v-if="permissionList.vipApply" name="VIPAPPLY" value="VIPAPPLY"></el-tab-pane>
 | 
	
		
			
				|  |  | +          <el-tab-pane label="请假处理" lazy v-if="permissionList.leaveOperation" name="LEAVE">
 | 
	
		
			
				|  |  | +            <list :type="activeIndex" />
 | 
	
		
			
				|  |  | +          </el-tab-pane>
 | 
	
		
			
				|  |  | +          <el-tab-pane label="VIP申请审核" lazy v-if="permissionList.vipApply" name="VIPAPPLY">
 | 
	
		
			
				|  |  | +            <list :type="activeIndex" />
 | 
	
		
			
				|  |  | +          </el-tab-pane>
 | 
	
		
			
				|  |  |          </el-tabs>
 | 
	
		
			
				|  |  |        </location-hash>
 | 
	
		
			
				|  |  | -      <el-form :inline="true"
 | 
	
		
			
				|  |  | -                ref="searchForm"
 | 
	
		
			
				|  |  | -               :model="searchForm">
 | 
	
		
			
				|  |  | -        <el-form-item prop="readStatus">
 | 
	
		
			
				|  |  | -          <el-select v-model.trim="searchForm.readStatus"
 | 
	
		
			
				|  |  | -                     clearable
 | 
	
		
			
				|  |  | -                     placeholder="日志状态">
 | 
	
		
			
				|  |  | -            <el-option label="已读" :value="1"></el-option>
 | 
	
		
			
				|  |  | -            <el-option label="未读" :value="0"></el-option>
 | 
	
		
			
				|  |  | -          </el-select>
 | 
	
		
			
				|  |  | -        </el-form-item>
 | 
	
		
			
				|  |  | -        <!-- <el-form-item>
 | 
	
		
			
				|  |  | -          <el-date-picker :clearable="false"
 | 
	
		
			
				|  |  | -                          v-model="searchForm.month"
 | 
	
		
			
				|  |  | -                          type="date"
 | 
	
		
			
				|  |  | -                          placeholder="选择年月"></el-date-picker>
 | 
	
		
			
				|  |  | -        </el-form-item> -->
 | 
	
		
			
				|  |  | -        <el-form-item>
 | 
	
		
			
				|  |  | -          <el-button type="danger" @click="onSearch">搜索</el-button>
 | 
	
		
			
				|  |  | -        </el-form-item>
 | 
	
		
			
				|  |  | -      </el-form>
 | 
	
		
			
				|  |  | -      <div class="tableWrap">
 | 
	
		
			
				|  |  | -        <el-table style="width: 100%"
 | 
	
		
			
				|  |  | -                  :header-cell-style="{background:'#EDEEF0',color:'#444'}"
 | 
	
		
			
				|  |  | -                  :data="tableList">
 | 
	
		
			
				|  |  | -          <el-table-column label="申请人" prop="userId" width="100px">
 | 
	
		
			
				|  |  | -            <template slot-scope="scope">
 | 
	
		
			
				|  |  | -              <el-badge :is-dot="!scope.row.readStatus" style="vertical-align: sub;"></el-badge>
 | 
	
		
			
				|  |  | -              {{ scope.row.userId }}
 | 
	
		
			
				|  |  | -            </template>
 | 
	
		
			
				|  |  | -          </el-table-column>
 | 
	
		
			
				|  |  | -          <el-table-column align="center" label="申请时间" prop="createOn"></el-table-column>
 | 
	
		
			
				|  |  | -          <el-table-column align="center" label="内容" prop="content"></el-table-column>
 | 
	
		
			
				|  |  | -          <el-table-column align="center"
 | 
	
		
			
				|  |  | -                           label="操作"
 | 
	
		
			
				|  |  | -                           fixed="right">
 | 
	
		
			
				|  |  | -            <template slot-scope="scope">
 | 
	
		
			
				|  |  | -              <el-button type="text" @click="onLook(scope.row)">查看</el-button>
 | 
	
		
			
				|  |  | -            </template>
 | 
	
		
			
				|  |  | -          </el-table-column>
 | 
	
		
			
				|  |  | -        </el-table>
 | 
	
		
			
				|  |  | -        <pagination :total="pageInfo.total"
 | 
	
		
			
				|  |  | -                    :page.sync="pageInfo.page"
 | 
	
		
			
				|  |  | -                    :limit.sync="pageInfo.limit"
 | 
	
		
			
				|  |  | -                    :page-sizes="pageInfo.page_size"
 | 
	
		
			
				|  |  | -                    @pagination="getList" />
 | 
	
		
			
				|  |  | -      </div>
 | 
	
		
			
				|  |  |      </div>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    <el-dialog :title="dialogTitle"
 | 
	
		
			
				|  |  | -               :visible.sync="dialogSystem"
 | 
	
		
			
				|  |  | -               width="400px">
 | 
	
		
			
				|  |  | -      <el-row>
 | 
	
		
			
				|  |  | -        <el-col :span="24">{{ dialogDetail.content }}</el-col>
 | 
	
		
			
				|  |  | -      </el-row>
 | 
	
		
			
				|  |  | -      <div slot="footer">
 | 
	
		
			
				|  |  | -        <el-button type="primary" @click="dialogSystem = false">确 定</el-button>
 | 
	
		
			
				|  |  | -      </div>
 | 
	
		
			
				|  |  | -    </el-dialog>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    <el-dialog :title="dialogTitle"
 | 
	
		
			
				|  |  | -               :visible.sync="dialogStudent"
 | 
	
		
			
				|  |  | -               width="500px">
 | 
	
		
			
				|  |  | -      <student-model v-if="dialogStudent"
 | 
	
		
			
				|  |  | -               :dialogDetail="dialogDetail"
 | 
	
		
			
				|  |  | -               @close="dialogStudent = false" />
 | 
	
		
			
				|  |  | -    </el-dialog>
 | 
	
		
			
				|  |  | -    <!-- 请假 -->
 | 
	
		
			
				|  |  | -    <el-dialog :title="dialogTitle"
 | 
	
		
			
				|  |  | -               :visible.sync="dialogLeave"
 | 
	
		
			
				|  |  | -               width="800px">
 | 
	
		
			
				|  |  | -      <leave-model v-if="dialogLeave"
 | 
	
		
			
				|  |  | -               :dialogDetail="dialogDetail"
 | 
	
		
			
				|  |  | -               @close="dialogLeave = false" />
 | 
	
		
			
				|  |  | -    </el-dialog>
 | 
	
		
			
				|  |  | -    <!-- 请假 -->
 | 
	
		
			
				|  |  | -    <el-dialog :title="dialogTitle"
 | 
	
		
			
				|  |  | -               :visible.sync="dialogVipApply"
 | 
	
		
			
				|  |  | -               width="500px">
 | 
	
		
			
				|  |  | -      <vip-apply-model v-if="dialogVipApply"
 | 
	
		
			
				|  |  | -               :dialogDetail="dialogDetail"
 | 
	
		
			
				|  |  | -               @close="dialogVipApply = false" />
 | 
	
		
			
				|  |  | -    </el-dialog>
 | 
	
		
			
				|  |  |    </div>
 | 
	
		
			
				|  |  |  </template>
 | 
	
		
			
				|  |  |  <script>
 | 
	
		
			
				|  |  | -import cleanDeep from 'clean-deep';
 | 
	
		
			
				|  |  | -import pagination from "@/components/Pagination/index";
 | 
	
		
			
				|  |  | -import { queryCountOfUnread, sysMessageList, setRead } from '@/api/journal'
 | 
	
		
			
				|  |  | -import { journalType } from '@/constant'
 | 
	
		
			
				|  |  | -import StudentModel from './model/student'
 | 
	
		
			
				|  |  | -import LeaveModel from './model/leave'
 | 
	
		
			
				|  |  | -import vipApplyModel from './model/vipApply'
 | 
	
		
			
				|  |  |  import { permission } from '@/utils/directivePage'
 | 
	
		
			
				|  |  | +import List from './model/list'
 | 
	
		
			
				|  |  |  export default {
 | 
	
		
			
				|  |  | -  components: { pagination, StudentModel, LeaveModel, vipApplyModel },
 | 
	
		
			
				|  |  |    name: 'journal',
 | 
	
		
			
				|  |  | +  components: { List },
 | 
	
		
			
				|  |  |    data () {
 | 
	
		
			
				|  |  | -    const query = this.$route.query
 | 
	
		
			
				|  |  | +    const query = this.$route.query;
 | 
	
		
			
				|  |  |      return {
 | 
	
		
			
				|  |  | -      permissionList: {
 | 
	
		
			
				|  |  | -        journalItem: permission('/journalItem'),
 | 
	
		
			
				|  |  | -        studentComplain: permission('/studentComplain'),
 | 
	
		
			
				|  |  | -        musicGroupCourse: permission('/musicGroupCourse'),
 | 
	
		
			
				|  |  | -        leaveOperation: permission('/leaveOperation'),
 | 
	
		
			
				|  |  | -        vipApply: permission('/vipApply')
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -      dialogSystem: false,
 | 
	
		
			
				|  |  | -      dialogStudent: false,
 | 
	
		
			
				|  |  | -      dialogLeave: false,
 | 
	
		
			
				|  |  | -      dialogVipApply: false,
 | 
	
		
			
				|  |  | -      dialogTitle: null,
 | 
	
		
			
				|  |  | -      dialogDetail: {},
 | 
	
		
			
				|  |  |        activeIndex: query.opt || 'SYSTEM',
 | 
	
		
			
				|  |  | -      searchForm: {
 | 
	
		
			
				|  |  | -        search: null,
 | 
	
		
			
				|  |  | -        group: query.opt || 'SYSTEM',
 | 
	
		
			
				|  |  | -        readStatus: 0
 | 
	
		
			
				|  |  | +      permissionList: {
 | 
	
		
			
				|  |  | +        journalItem: permission("/journalItem"),
 | 
	
		
			
				|  |  | +        studentComplain: permission("/studentComplain"),
 | 
	
		
			
				|  |  | +        musicGroupCourse: permission("/musicGroupCourse"),
 | 
	
		
			
				|  |  | +        leaveOperation: permission("/leaveOperation"),
 | 
	
		
			
				|  |  | +        vipApply: permission("/vipApply")
 | 
	
		
			
				|  |  |        },
 | 
	
		
			
				|  |  | -      tableList: [],
 | 
	
		
			
				|  |  | -      pageInfo: {
 | 
	
		
			
				|  |  | -        // 分页规则
 | 
	
		
			
				|  |  | -        limit: 10, // 限制显示条数
 | 
	
		
			
				|  |  | -        page: 1, // 当前页
 | 
	
		
			
				|  |  | -        total: 0, // 总条数
 | 
	
		
			
				|  |  | -        page_size: [10, 20, 40, 50] // 选择限制显示条数
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  |    mounted() {
 | 
	
		
			
				|  |  | -    this.getList()
 | 
	
		
			
				|  |  | -    console.log(this.searchForm.group)
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  |    methods: {
 | 
	
		
			
				|  |  | -    onSearch() {
 | 
	
		
			
				|  |  | -      this.pageInfo.page = 1
 | 
	
		
			
				|  |  | -      this.getList()
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    onTabClick(elm) {
 | 
	
		
			
				|  |  | -      // 判断 group 是否一致
 | 
	
		
			
				|  |  | -      const searchForm = this.searchForm
 | 
	
		
			
				|  |  | -      console.log(searchForm)
 | 
	
		
			
				|  |  | -      this.activeIndex = searchForm.group
 | 
	
		
			
				|  |  | -      if(elm.$attrs.value == searchForm.group) {
 | 
	
		
			
				|  |  | -        return
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      searchForm.group = elm.$attrs.value
 | 
	
		
			
				|  |  | -      this.getList()
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    async getList() {
 | 
	
		
			
				|  |  | -      const pageInfo = this.pageInfo
 | 
	
		
			
				|  |  | -      const params = Object.assign({}, this.searchForm)
 | 
	
		
			
				|  |  | -      params.rows = pageInfo.limit
 | 
	
		
			
				|  |  | -      params.page = pageInfo.page
 | 
	
		
			
				|  |  | -      await sysMessageList(params).then(res => {
 | 
	
		
			
				|  |  | -        if (res.code == 200) {
 | 
	
		
			
				|  |  | -          this.tableList = res.data.rows
 | 
	
		
			
				|  |  | -          pageInfo.total = res.data.total
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      })
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    async onLook(row) {
 | 
	
		
			
				|  |  | -      // 把当前消息变成已读
 | 
	
		
			
				|  |  | -      if(row.readStatus != 1) {
 | 
	
		
			
				|  |  | -        await setRead({ id: row.id })
 | 
	
		
			
				|  |  | -        row.readStatus = 1 // 手动把消息变一下状态
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      this.dialogTitle = journalType[row.group]
 | 
	
		
			
				|  |  | -      this.dialogDetail = row
 | 
	
		
			
				|  |  | -      switch(row.group) {
 | 
	
		
			
				|  |  | -        case 'SYSTEM':
 | 
	
		
			
				|  |  | -          this.dialogSystem = true
 | 
	
		
			
				|  |  | -          break;
 | 
	
		
			
				|  |  | -        case 'STUDENT':
 | 
	
		
			
				|  |  | -          this.dialogStudent = true
 | 
	
		
			
				|  |  | -          break;
 | 
	
		
			
				|  |  | -        case 'LEAVE':
 | 
	
		
			
				|  |  | -          this.dialogLeave = true
 | 
	
		
			
				|  |  | -          break;
 | 
	
		
			
				|  |  | -        case 'VIPAPPLY':
 | 
	
		
			
				|  |  | -          this.dialogVipApply = true
 | 
	
		
			
				|  |  | -          break;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -</script>
 | 
	
		
			
				|  |  | -<style lang="scss" scoped>
 | 
	
		
			
				|  |  | -</style>
 | 
	
		
			
				|  |  | +</script>
 |