<template>
    <div v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading">
        <div class="job-box">
            <div class="job-head">
                <div class="job-select">
                    <el-select @change="Inquirechange()" v-model="value" clearable placeholder="权限模块">
                        <el-option v-for="item in authority" :key="item.value" :label="item.name" :value="item.id">
                        </el-option>
                    </el-select>
                    <el-select v-model="pageValue" filterable placeholder="页面名称搜索" @change="pageChange">
                        <el-option v-for="item in pageOptions" :key="item.pageid" :label="item.pageName"
                            :value="item.pageid">
                        </el-option>
                    </el-select>
                </div>
                <div class="job-input">
                    <el-select @change="companyChange()" v-model="valuecorporation" clearable placeholder="公司">
                        <el-option v-for="item in corporation" :key="item.value" :label="item.companyName"
                            :value="item.id">
                        </el-option>
                    </el-select>
                    <el-select @change="depaChange()" v-model="valuedepartmental" clearable placeholder="部门">
                        <el-option v-for="item in departmental" :key="item.id" :label="item.depName" :value="item.id">
                        </el-option>
                    </el-select>
                    <el-select @change="JobChange()" v-model="valueposition" clearable placeholder="职位">
                        <el-option v-for="item in position" :key="item.id" :label="item.jobName" :value="item.id">
                        </el-option>
                    </el-select>
                    <el-button type="primary" @click="saveAuth()">保 存</el-button>
                </div>
            </div>
            <div class="job-table">
                <el-table :data="authorityLists.slice((currentPage - 1) * pageSize, currentPage * pageSize)" border
                    @select="handleSelect" @select-all="allchange" style="width: 100%">
                    <el-table-column type="selection" width="55">
                    </el-table-column>
                    <el-table-column prop="name" label="权限页面" width="180">
                    </el-table-column>

                    <el-table-column width="55" :label="op.functionName" :key="op.id" v-for="op in opList">
                        <template slot-scope="scope">
                            <div>
                                <el-checkbox @change='checkchange(scope.row.id, op.id)'
                                    v-if="scope.row.opList.indexOf(op.id) != -1"
                                    :value="scope.row.selList.indexOf(op.id) != -1">
                                </el-checkbox>
                                <el-checkbox v-else :disabled="true" :value="false">
                                </el-checkbox>
                            </div>
                        </template>
                    </el-table-column>

                    <el-table-column prop="address" label="备注">
                    </el-table-column>
                </el-table>
                <div class="block">
                    <el-pagination align='center' @size-change="handleSizeChange" @current-change="handleCurrentChange"
                        :current-page="currentPage" :page-sizes="[14, 20]" :page-size="pageSize"
                        layout="total, sizes, prev, pager, next" :total="authorityList.length">
                    </el-pagination>
                </div>
            </div>
        </div>
    </div>
</template>

<script>


export default {
    data() {
        return {
            authority: [],
            value: '',
            corporation: [],
            valuecorporation: '',

            departmental: [], //部门数据
            valuedepartmental: '', //部门val

            position: [], //职位数据
            valueposition: '',//职位val

            authorityLists: [],
            authorityList: [],
            currentPage: 1, // 当前页码
            pageSize: 14,// 每页的数据条数
            stateArr: [],
            selectedAccount: [],
            PathUrl: '',
            opList: [],//操作方式
            loading: true,
            userId: 0,
            token: '',
            pageOptions: [],
            pageValue: ''
        }
    },
    methods: {
        //每页条数改变时触发 选择一页显示多少行
        handleSizeChange(val) {
            this.currentPage = 1;
            this.pageSize = val;
        },
        //当前页改变时触发 跳转其他页
        handleCurrentChange(val) {
            this.currentPage = val;
        },
        //模块下拉框
        Inquirechange() {
            this.currentPage = 1;
            this.pageValue = '';
            this.pageload(this.value);
        },
        //多选框选中方法
        handleSelect(selection, row) {
            console.log(selection, row)
            if (selection.length > 0) {
                row.selList = this.opList.map(x => x.id);
            } else {
                row.selList = [];
            }
        },
        selectRadiocheck(index, row) {
            console.log(index)
            console.log(row)
        },
        selectRadioerase(index, row) {
            console.log(index, row)
        },
        selectRadioedit(index, row) {
            console.log(index, row)
        },
        selectRadiodown(index, row) {
            console.log(index, row)
        },
        selectRadioup(index, row) {
            console.log(index, row)
        },
        pageload(moduleId) {
            var that = this;
            //初始化界面数据
            this.$axios.post(this.PathUrl + '/api/System/GetAuth', {
                "pageSize": this.pageSize,
                "currentPage": this.currentPage,
                "moduleId": moduleId,
            }, {
                headers: {
                    'Authorization': that.token,
                }
            }).then(resp => {
                if (resp.data.code == 200) {
                    that.authority = resp.data.data.setDataResult; //模块数据
                    that.corporation = resp.data.data.companyDataResult; //公司数据
                    that.authorityList = resp.data.data.systemMenuPermissionData; //页面数据(默认权限页面)
                    that.authorityLists = that.authorityList;
                    that.opList = resp.data.data.pageOperation; //操作方式
                    that.loading = false;
                }
            }).then(suc => {
                if (this.valueposition != '') {
                    this.JobChange();
                }
            })
        },
        //公司下拉框
        companyChange() {
            this.valuedepartmental = ''; //清空数据
            this.valueposition = '';
            this.position = [];
            this.departmental = [];

            if (this.valuecorporation == '') {
                return;
            }

            var that = this;
            //初始化界面数据
            this.$axios.post(this.PathUrl + '/api/System/QueryDepartmentList', {
                "CompanyId": this.valuecorporation,
                "PortType": 1,
            }, {
                headers: {
                    'Authorization': that.token,
                }
            }).then(resp => {
                console.log(resp);
                if (resp.data.code == 200) {
                    that.departmental = resp.data.data;
                }
            })

        },
        //部门下拉框
        depaChange() {
            var that = this;
            this.position = []; //职位数据
            this.valueposition = '';//职位val

            if (this.valuecorporation == '' || this.valuedepartmental == '') {
                return;
            }

            //初始化界面数据
            this.$axios.post(this.PathUrl + '/api/System/QueryJobPost', {
                "CompanyId": this.valuecorporation,
                "DepId": this.valuedepartmental,
                "PortType": 1,
            }, {
                headers: {
                    'Authorization': that.token,
                }
            }).then(resp => {
                console.log(resp);
                if (resp.data.code == 200) {
                    that.position = resp.data.data;
                }
            })
        },
        //保存权限
        saveAuth() {
            var that = this;

            if (this.valueposition == '') {
                this.$message.error('请选择职位！');
                return;
            }

            var savejob = [];
            this.authorityLists.forEach(item => {
                savejob.push({
                    SmId: item.id,
                    FIds: item.selList,
                });
            })
            console.log(savejob);
            //初始化界面数据
            this.$axios.post(this.PathUrl + '/api/System/SaveJobAuth', {
                "Jpid": this.valueposition,
                "Savejobs": savejob,
                "modulId": this.value == '' ? '13' : this.value,
                userId: this.userId,
            }, {
                headers: {
                    'Authorization': that.token,
                }
            }).then(resp => {
                console.log(resp);
                if (resp.data.code == 200) {
                    this.$message({
                        message: '保存成功！',
                        type: 'success'
                    });
                } else {
                    this.$message.error('保存失败！' + resp.data.msg);
                }
            })
        },
        //职位下拉获取权限
        JobChange() {
            let val = this.value == '' ? 13 : this.value;
            var that = this;

            if (this.valueposition == '') {

                var arr = this.authorityList;
                arr.forEach(item => {
                    item.selList = [];
                })
                this.authorityList = arr;
                this.authorityLists = this.authorityList;

                return
            }

            //初始化界面数据
            this.$axios.post(this.PathUrl + '/api/System/QueryJobAuth', {
                "jobid": this.valueposition,
                "moduleId": val,
            }, {
                headers: {
                    'Authorization': that.token,
                }
            }).then(resp => {
                console.log(resp);
                if (resp.data.code == 200) {
                    that.authorityList = resp.data.data; //页面数据(默认权限页面)
                    that.authorityLists = that.authorityList;
                }
            })
        },
        //全选
        allchange(selection) {
            let that = this;

            if (selection.length > 0) {
                selection.forEach(item => {
                    item.selList = that.opList.map(x => x.id);
                });

            } else {
                this.authorityLists.forEach(item => {
                    item.selList = [];
                });
            }
        },
        checkchange(rowid, linid) {
            this.authorityLists.forEach(item => {
                if (item.id == rowid) {
                    if (item.selList.indexOf(linid) == -1) {
                        item.selList.push(linid);
                    } else {
                        item.selList.splice(item.selList.indexOf(linid), 1)
                    }
                }
            });
            console.warn(this.authorityLists);
        },
        pageChange() {
            console.log(this.pageValue);
            var that = this;
            let ischange = false;
            this.pageOptions.forEach(function (item, index) {
                if (item.pageid == that.pageValue) {
                    ischange = true;
                    that.value = item.modulid;
                }
            })

            if (ischange) {
                this.Inquirechange();
            } else {
                console.log("搜索异常!!");
            }

        },
        loadPages() {
            var that = this;
            this.$axios.post('/api/System/PageConfigInit', {

            }, {
                headers: {
                    'Authorization': that.token,
                }
            }).then(resp => {
                console.log(resp.data.data);
                if (resp.data.code == 200) {
                    that.pageOptions = resp.data.data.viewList.data;
                }
            })

        }
    },
    mounted() {
        this.token = JSON.parse(localStorage.getItem('userinif')).token;
        this.userId = JSON.parse(localStorage.getItem('userinif')).userInfo.userId
        this.pageload(13);
        this.loadPages();
    }
}
</script>
<style>
body {
    margin: 0;
    padding: 0;
}

.job-head {
    display: flex;
    justify-content: space-between;
}

.job-box {
    background-color: #fff;
    padding: 10px;
    border-radius: 10px;
}

.job-table {
    margin-top: 10px;
}

.job-table .block {
    margin-top: 10px;
}

.job-table .el-table--enable-row-transition .el-table__body td.el-table__cell {
    text-align: center;
}

.job-table .el-table--border .el-table__cell:first-child .cell {
    text-align: center;
}

.job-input {
    display: flex;
}

.job-input .el-select {
    margin-right: 5px;
}

.job-select .el-select {
    width: 250px;
}
</style>