<!--suppress ALL -->
<template>
    <section class="appThreeMeetingUser init-list-table bg369">
        <ai-title title="统计详情" isShowBack @onBackClick="$parent.goBack()" isShowBottomBorder></ai-title>
        <div class="main-content">
            <el-row class="searchBar border-radius2" type="flex" justify="space-between" :style="search.style" :gutter="2" style="border-bottom: 1px solid #eee;">
                <el-col style="margin-bottom:6px">
                    <el-row :gutter="8" type="flex">
                      <section v-for="(item,i) in columns" :key="i">
                        <el-col v-if="item.type=='select'" :span="4">
                          <el-select size="small" v-model="search[item.prop]" :placeholder=" item.label" @change="$forceUpdate(),page.current=1,getAppThreeMeetingUser()" clearable>
                            <el-option v-for="(op,j) in dict.getDict(item.dict)" :key="j" :label="op.dictName"
                                       :value="op.dictValue"/>
                          </el-select>
                        </el-col>
                        <el-col v-else-if="item.type=='time'" :span="8" type="flex">
                          <span class="dateTitle">{{item.label}}</span>
                          <el-date-picker size="small" v-model="search[item.prop]" placeholder="请选择" type="daterange"
                                          :start-placeholder="item.prop+'开始时间'"
                                          :end-placeholder="item.prop+'结束日期'"></el-date-picker>
                        </el-col>
                        <el-col v-else-if="item.type=='num'" :span="8" style="display: flex;" type="flex">
                          <span class="dateTitle">{{item.label}}</span>
                          <ai-range v-model="search[item.prop]" />
                        </el-col>
                      </section>
                    </el-row>
                </el-col>
                <el-col style="width: auto;display: flex;margin-bottom:6px">
                    <el-col>
                      <el-input size="small" v-model="search.meetingUserName" placeholder="姓名"
                                prefix-icon="iconfont iconSearch" clearable @keyup.enter.native="page.current=1,getAppThreeMeetingUser()"></el-input>
                    </el-col>
                    <el-button size="mini" type="primary" icon="iconfont iconSearch" style="margin-left:5px;"
                               @click="page.current=1,getAppThreeMeetingUser()">查询
                    </el-button>
                    <el-button size="mini" icon="el-icon-refresh-right" style="margin-left:5px;" @click="resetSearch">
                        重置
                    </el-button>
                </el-col>
            </el-row>
            <el-table ref="multipleTable" :data="tableData" style="margin-top:16px;"
                      header-cell-class-name="table-header"
                      tooltip-effect="light" row-class-name="table-row" cell-class-name="table-cell" @selection-change="handleSelectionChange">
                <el-table-column prop="meetingUserName" label="姓名" align="center">
                    <div slot-scope="{row}">{{row.meetingUserName || "-"}}</div>
                </el-table-column>
                <el-table-column prop="joinStatus" label="参会情况" align="center">
                    <div slot-scope="{row}"> {{dict.getLabel('joinStatus',row.joinStatus)||'-'}}</div>
                </el-table-column>
                <el-table-column prop="absence" label="请假原因">
                    <div slot-scope="{row}">{{row.absence || "-"}}</div>
                </el-table-column>
                <el-table-column prop="signMethod" label="签到方式" align="center">
                    <div slot-scope="{row}"> {{dict.getLabel('signMethod',row.signMethod)||'-'}}</div>
                </el-table-column>
                <el-table-column prop="signStatus" label="签到状态" align="center">
                    <div slot-scope="{row}"> {{dict.getLabel('signStatus',row.signStatus)||'-'}}</div>
                </el-table-column>
                 <el-table-column prop="signTime" label="签到时间" align="center">
                    <div slot-scope="{row}">{{row.signTime || "-"}}</div>
                </el-table-column>
                <el-table-column prop="signUserName" label="代签人" align="center">
                    <div slot-scope="{row}">{{row.signUserName || "-"}}</div>
                </el-table-column>
                <el-table-column prop="operate" label="操作" width="240" align="center">
                    <div slot-scope="{row}">
                        <span class="iconfont iconqiandao icon-color89B" style="cursor: pointer;"
                        title="签到" @click="changeStatus(row, 0)" v-if="row.signMethod != 1"></span>
                        <span class="iconfont iconqingjia icon-color89B" style="cursor: pointer;"
                        title="请假"  @click="changeStatus(row, 1)"></span>
                        <span class="iconfont iconRepulse icon-color89B" style="cursor: pointer;"
                        title="重置" v-if="meetingStatus != 4" @click="changeStatus(row, 2)"></span>
                    </div>
                    <!-- <el-radio-group slot-scope="{row}" v-model="row.operation" @change="changeStatus(row)">
                        <el-radio :label="0">签到</el-radio>
                        <el-radio :label="1">请假</el-radio>
                        <el-radio :label="2" v-if="meetingStatus != 4">重置</el-radio>
                    </el-radio-group> -->
                </el-table-column>
                <div slot="empty" class="no-data" style="height:160px;"></div>
            </el-table>
            <div class="pagination">
                <el-pagination background
                                @current-change="handleCurrentChange"
                                @size-change="handleSizeChange"
                               layout="total,prev, pager, next,sizes, jumper"
                               :total="page.total">
                </el-pagination>
            </div>
        </div>
        <el-dialog :visible.sync="leaveMask" title="请假" width="520px" class="mask label-110"
            :close-on-click-modal="false"
            :before-close="maskInit" @close="maskInit">
            <div class="content input-240">
                <el-form ref="leaveMask" :rules="rules" :model="leaveInfo" label-width="100px">
                    <el-form-item label="请假原因："  class="user"  prop="leaveText">
                        <el-input  type="textarea" :rows="3" v-model="leaveInfo.leaveText" placeholder="请输入请假原因"/>
                    </el-form-item>
                </el-form>
            </div>
            <div class="operation">
                <el-button class="delete-btn" @click="maskInit" mini>取消</el-button>
                <el-button type="primary" @click="confirmMask('leaveMask')" mini>确认</el-button>
            </div>
        </el-dialog>
    </section>
</template>

<script>
    import {mapState} from "vuex";

    export default {
        name: "appThreeMeetingUser",
        props: {
            instance: Function,
            dict: Object,
            permissions: Function,
            meetingId:String,
            detail: Object,
            meetingStatus: String
        },
        data() {
            return {
                activeName: 'first',
                tableData: [],
                columns: [
                      {
                          label: '编号',
                          prop: 'id',
                          type: '',
                          dict:  ''
                      },
                      {
                          label: '会议编号',
                          prop: 'meetingId',
                          type: '',
                          dict:  ''
                      },
                      {
                          label: '参会人员角色',
                          prop: 'meetingUserRole',
                          type: '',
                          dict:  'meetingUserRole'
                      },
                      {
                          label: '会议人员编号',
                          prop: 'meetingUserId',
                          type: '',
                          dict:  ''
                      },
                      {
                          label: '会议人员姓名',
                          prop: 'meetingUserName',
                          type: '',
                          dict:  ''
                      },
                      {
                          label: '参会情况',
                          prop: 'joinStatus',
                          type: 'select',
                          dict:  'joinStatus'
                      },
                      {
                          label: '签到状态',
                          prop: 'signStatus',
                          type: 'select',
                          dict:  'signStatus'
                      },
                      {
                          label: '签到方式',
                          prop: 'signMethod',
                          type: 'select',
                          dict:  'signMethod'
                      },
                      {
                          label: '请假原因',
                          prop: 'absence',
                          type: '',
                          dict:  ''
                      },
                      {
                          label: '创建时间',
                          prop: 'createDate',
                          type: '',
                          dict:  ''
                      },
                      {
                          label: '签到人',
                          prop: 'signUserId',
                          type: '',
                          dict:  ''
                      },
                      {
                          label: '签到时间',
                          prop: 'signTime',
                          type: '',
                          dict:  ''
                      },
                      {
                          label: '操作',
                          prop: 'operate',
                          type: '',
                          dict:  ''
                      },
                                  ],
                search: {
                    style: {},
                    meetingUserName: "",
                    meetingId:""
                },
                page: {
                    current: 1,
                    size: 10,
                    total: 0,
                },
                leaveMask: false,
                leaveInfo: {
                    leaveText: ''
                },
                rules: {
                    leaveText: [{ required: true, message: '请输入请假原因', trigger: 'blur' }]
                },
                meetingInfo: {}, //点击操作的item
            }
        },
        methods: {
            confirmMask(formName) {
                this.$refs[formName].validate((valid) => {
                if (valid) {
                    this.signMeeting(0, 1, '', this.leaveInfo.leaveText, this.user.info.id, this.user.info.name, '', '请假成功')
                } else {
                    return false;
                }
                });
            },
            maskInit() {
                this.leaveMask = false
            },
            changeStatus(item, operation) {
                this.meetingInfo = item
                if(this.meetingStatus == 0) { //0未发布 1已发布 2已取消 3进行中 4已结束
                    this.$message({ message: '会议未发布，请发布后再操作', type: 'warning'});
                    return
                }
                if(item.meetingSignMethod == 1) { //签到方式为不签到
                    this.$message({ message: '签到方式选择为不签到，不可操作', type: 'warning'});
                    return
                }
                if(this.meetingStatus == 1) {
                    let d = new Date()
                    let time = item.meetingBefore
                    let beginTimestamp = new Date(time.replace(/\-/g, "\/"))
                    let newTimestamp = new Date(d.getFullYear() + '/' + (d.getMonth() + 1) + '/' + d.getDate()  + ' ' + d.getHours() + ':' + d.getMinutes())
                    if (newTimestamp < beginTimestamp) {
                        this.$message({ message: '未到签到时间，不可操作', type: 'warning'});
                        return
                    }
                }
                if(this.meetingStatus == 2) {
                    this.$message({ message: '会议已取消，不可操作', type: 'warning'});
                    return
                }

                // if(this.meetingStatus == 3) {
                //     let d = new Date()
                //     let time = item.meetingAfter
                //     let endTimestamp = new Date(time.replace(/\-/g, "\/"))
                //     let newTimestamp = new Date(d.getFullYear() + '/' + (d.getMonth() + 1) + '/' + d.getDate()  + ' ' + d.getHours() + ':' + d.getMinutes())
                //     if (endTimestamp > newTimestamp) { //代签
                //         this.operationStatus(operation)
                //     }
                // }

                if(!operation) { //0为签到
                    this.$confirm('确定签到吗?', '', {
                        type: 'info'
                    }).then(() => {
                        this.operationStatus(operation)
                    }).catch(() => {
                        return
                    });
                }else {
                    this.operationStatus(operation)
                }
            },
            operationStatus(status) {
                if(status == 0) { //签到
                    let signTime = new Date().getFullYear() + '-' + this.isDate(new Date().getMonth() + 1) + '-' + this.isDate(new Date().getDate())  + ' ' + this.isDate(new Date().getHours()) + ':' + this.isDate(new Date().getMinutes()) + ':' + this.isDate(new Date().getSeconds())
                    this.signMeeting(1, 0, 1, '', this.user.info.id, this.user.info.name, signTime, '签到成功')
                }
                if(status == 1) { //请假
                    this.leaveMask = true
                    this.leaveInfo.leaveText = ''
                }
                if(status == 2) { //重置
                    this.$confirm(`确认将该成员签到状态重置吗？`, {type: 'warning'}).then(() => {
                        this.signMeeting('', '', '', '', '', '', '', '重置成功')
                    })
                }
            },
            isDate(num) {
                if(num < 10) {
                    num = '0' + num
                }
                return num
            },
            signMeeting(signStatus, joinStatus, signMethod, absence, signUserId, signUserName, signTime, succText) {
                var params = {
                    signStatus,
                    joinStatus,
                    signMethod,
                    absence,
                    signUserId,
                    signUserName,
                    signTime,
                    id: this.meetingInfo.id,
                    meetingUserId: this.meetingInfo.meetingUserId,
                    meetingId: this.meetingInfo.meetingId
                }
                this.instance.post("/app/appthreemeetinguser/addOrUpdate", params).then(res => {
                    if(res.code==0){
                        this.maskInit()
                        this.$message.success(succText)
                        this.getAppThreeMeetingUser()
                    }
                })

            },
            isPermit(params) {
                return this.permissions ? this.permissions(params) : false
            },
            handleSelectionChange(){},
            //分页
            handleCurrentChange(val) {
                this.page.current = val;
                this.getAppThreeMeetingUser();
            },
            //分页
            handleSizeChange(val){
                this.page.size = val
                this.page.current = 1
                this.getAppThreeMeetingUser()
            },
            //重置
            resetSearch() {
                this.page.current = 1
                this.page.size = 10
                this.columns.map(c => {if(c.type) this.search[c.prop] = null})
                Object.keys(this.search).forEach((e)=>{
                  this.search[e]=null;
                })
                this.getAppThreeMeetingUser()
            },
            //列表
            getAppThreeMeetingUser() {
                var meetingId = this.meetingId
                this.instance.post("/app/appthreemeetinguser/list", null, {
                        params: {
                            ...this.search,
                            ...this.page,
                            meetingId
                        }
                    }).then(res => {
                    if(res.code==0){
                        this.tableData=res.data.records;
                        this.page.total=res.data.total;
                        this.tableData.map((item) => {
                            if(item.signStatus == 1) {  //签到
                                item.operation = 0
                            }
                            if(item.joinStatus == 1) { //请假
                                item.operation = 1
                            }
                            return item
                        })
                    }
                    }
                )
            },
            //请假,签到,取消代签
            updateStatus(row,text){
                var body = {};
                if(text == '请假'){
                    body = {
                        id:row.id,
                        joinStatus:'1'
                    }
                }
                 if(text == '签到'){
                    body = {
                        id:row.id,
                        signStatus:'1'
                    }
                }
                 if(text == '取消代签'){
                    body = {
                        id:row.id,
                        signStatus:'0'
                    }
                }
                console.log(body)
                this.$confirm(`是否${text}?`, {type: 'warning'}).then(() => {
                    this.instance.post("/app/appthreemeetinguser/addOrUpdate", body).then((res) => {
                        if(res.code ==0){
                            this.maskInit()
                            this.getAppThreeMeetingUser()
                            this.$message.success(`操作成功!`)
                        }
                    })
                })

            }

        },
        mounted() {
          if (this.dict) this.dict.load(this.columns.map(e => e.type == 'select' ? e.dict : ''))
        //   console.log(this.detail)
          this.resetSearch()
        },
        computed: {
            ...mapState(['user']),
        }
    }
</script>
<style scoped lang="scss">
.appThreeMeetingUser{
    ::v-deep .el-radio{
        margin-right: 16px!important;
    }
    ::v-deep .el-radio__label{
        padding-left: 4px!important;
    }
    .operation {
        overflow: hidden;
        //   position: absolute;
        bottom: 0;
        left: 0;
        width: 100%;
        height: 64px;
        line-height: 64px;
        display: flex;
        align-items: center;
        justify-content: center;
        background-color: #f3f6f9;
        box-shadow: inset 0 1px 0 0 #eeeeee;
    }
    ::v-deep .el-textarea{
        width: 362px;
    }
}
</style>
