<template>
    <el-container>
        <el-main>

            <el-row>
                <el-tabs type="border-card" @tab-click="handleClick">
                    <el-tab-pane label="我的待办">
                        <!--检索条件-->
                        <el-row class="toolbar" style="background-color: white;margin-bottom: 10px">
                            <el-col :span="6">
                                <el-input v-model="queryinfo.name" placeholder="任务名称" style="width: 200px" clearable>
                                    <template slot="prepend">任务名称</template>
                                </el-input>
                            </el-col>
                            <el-col :span="6">
                                <el-input v-model="queryinfo.taskDefinitionKey " placeholder="关键字" style="width: 200px" clearable>
                                    <template slot="prepend">关键字</template>
                                </el-input>
                            </el-col>

                            <el-col :span="8">
                                <el-button type="primary" v-on:click="geMyTask">查询</el-button>
                                <!--                    <el-button type="success" v-on:click="toAddDialog">新增</el-button>-->

                            </el-col>
                        </el-row>
                        <template>
                            <el-table
                                    v-loading="tableloading"
                                    :data="tableData"
                                    style="width: 100%"
                                    :default-sort = "{prop: 'date', order: 'descending'}"
                                    :header-cell-style="{background:'#6F8294',color:'#FFFFFF'}" size="mini"
                            >
                                <el-table-column
                                        prop="name"
                                        label="任务名称"
                                        width="160">
                                </el-table-column>
                                <el-table-column
                                        prop="taskDefinitionKey "
                                        label="关键字">
                                </el-table-column>
                                <el-table-column
                                        prop="owner"
                                        label="所有者">
                                </el-table-column>
                                <el-table-column
                                        prop="assignee "
                                        label="执行者"
                                        width="160"
                                        show-overflow-tooltip>
                                </el-table-column>
                                <el-table-column
                                        prop="createTime"
                                        label="开始时间"
                                        width="160">
                                </el-table-column>
                                <el-table-column
                                        fixed="right"
                                        label="操作"
                                        width="280">
                                    <template slot-scope="scope">
                                        <el-button type="success" size="mini" @click="checkProcess(scope.$index,scope.row)">查看进度</el-button>
                                        <el-button type="warning" size="mini" @click="getProcessFormInfoPromise(scope.$index,scope.row)">办理任务</el-button>
                                        <el-button type="danger" size="mini" @click="handleTask(scope.$index,scope.row)">驳回</el-button>
                                    </template>
                                </el-table-column>
                            </el-table>
                        </template>
                        <!--分页模块-->
                        <el-row style="float: right;margin-top: 20px">
                            <el-col>
                                <div class="block">
                                    <el-pagination
                                            @size-change="handleSizeChange"
                                            @current-change="handleCurrentChange"
                                            :current-page="queryinfo.pageNum"
                                            :page-sizes="[10, 20, 30, 40]"
                                            :page-size="queryinfo.pageSize"
                                            layout="total, sizes, prev, pager, next, jumper"
                                            :total="total">
                                    </el-pagination>
                                </div>
                            </el-col>
                        </el-row>
                    </el-tab-pane>
                    <el-tab-pane label="我的已办">
                        <!--检索条件-->
                        <el-row class="toolbar" style="background-color: white;margin-bottom: 10px">
                            <el-col :span="6">
                                <el-input v-model="queryinfo.name" placeholder="任务名称" style="width: 200px" clearable>
                                    <template slot="prepend">任务名称</template>
                                </el-input>
                            </el-col>
                            <el-col :span="6">
                                <el-input v-model="queryinfo.taskDefinitionKey " placeholder="关键字" style="width: 200px" clearable>
                                    <template slot="prepend">关键字</template>
                                </el-input>
                            </el-col>

                            <el-col :span="8">
                                <el-button type="primary" v-on:click="getAllList">查询</el-button>
                                <!--                    <el-button type="success" v-on:click="toAddDialog">新增</el-button>-->

                            </el-col>
                        </el-row>
                        <template>
                            <el-table
                                    v-loading="tableloading"
                                    :data="tableData"
                                    style="width: 100%"
                                    :default-sort = "{prop: 'date', order: 'descending'}"
                                    :header-cell-style="{background:'#6F8294',color:'#FFFFFF'}" size="mini"
                            >
                                <el-table-column
                                        prop="name"
                                        label="任务名称"
                                        width="160">
                                </el-table-column>
                                <el-table-column
                                        prop="taskDefinitionKey"
                                        label="关键字">
                                </el-table-column>
                                <el-table-column
                                        prop="owner"
                                        label="所有者">
                                </el-table-column>
                                <el-table-column
                                        prop="assignee"
                                        label="执行人"
                                        width="160"
                                        show-overflow-tooltip>
                                </el-table-column>
                                <el-table-column
                                        prop="createTime"
                                        label="开始时间"
                                        width="160">
                                </el-table-column>
                                <!--                        <el-table-column-->
                                <!--                                fixed="right"-->
                                <!--                                label="操作"-->
                                <!--                                width="280">-->
                                <!--                            <template slot-scope="scope">-->
                                <!--                                <el-button type="success" size="mini" @click="sendForm()">实例管理</el-button>-->
                                <!--                                <el-button type="warning" size="mini" @click="remove(scope.$index,scope.row)">删除</el-button>-->
                                <!--                                <el-button type="danger" size="mini" @click="removeDel(scope.$index,scope.row)">彻底删除</el-button>-->
                                <!--                            </template>-->
                                <!--                        </el-table-column>-->
                            </el-table>
                        </template>
                        <!--分页模块-->
                        <el-row style="float: right;margin-top: 20px">
                            <el-col>
                                <div class="block">
                                    <el-pagination
                                            @size-change="handleSizeChange"
                                            @current-change="handleCurrentChange"
                                            :current-page="queryinfo.pageNum"
                                            :page-sizes="[10, 20, 30, 40]"
                                            :page-size="queryinfo.pageSize"
                                            layout="total, sizes, prev, pager, next, jumper"
                                            :total="total">
                                    </el-pagination>
                                </div>
                            </el-col>
                        </el-row>
                    </el-tab-pane>
                    <el-tab-pane label="我发起的">
                        <!--检索条件-->
                        <el-row class="toolbar" style="background-color: white;margin-bottom: 10px">
                            <el-col :span="6">
                                <el-input v-model="queryinfo.name" placeholder="任务名称" style="width: 200px" clearable>
                                    <template slot="prepend">任务名称</template>
                                </el-input>
                            </el-col>
                            <el-col :span="6">
                                <el-input v-model="queryinfo.taskDefinitionKey " placeholder="关键字" style="width: 200px" clearable>
                                    <template slot="prepend">关键字</template>
                                </el-input>
                            </el-col>

                            <el-col :span="8">
                                <el-button type="primary"  v-on:click="getMyList">查询</el-button>
                                <!--                    <el-button type="success" v-on:click="toAddDialog">新增</el-button>-->

                            </el-col>
                        </el-row>
                        <template>
                            <el-table
                                    v-loading="tableloading"
                                    :data="tableData"
                                    style="width: 100%"
                                    :default-sort = "{prop: 'date', order: 'descending'}"
                                    :header-cell-style="{background:'#6F8294',color:'#FFFFFF'}" size="mini"
                            >
                                <el-table-column
                                        prop="name"
                                        label="任务名称"
                                        width="160">
                                </el-table-column>
                                <el-table-column
                                        prop="taskDefinitionKey"
                                        label="关键字">
                                </el-table-column>
                                <el-table-column
                                        prop="owner"
                                        label="所有者">
                                </el-table-column>
                                <el-table-column
                                        prop="assignee"
                                        label="执行者"
                                        width="160"
                                        show-overflow-tooltip>
                                </el-table-column>
                                <el-table-column
                                        prop="createTime"
                                        label="开始时间"
                                        width="160">
                                </el-table-column>
                                <!--                        <el-table-column-->
                                <!--                                fixed="right"-->
                                <!--                                label="操作"-->
                                <!--                                width="280">-->
                                <!--                            <template slot-scope="scope">-->
                                <!--                                <el-button type="success" size="mini" @click="sendForm()">实例管理</el-button>-->
                                <!--                                <el-button type="warning" size="mini" @click="remove(scope.$index,scope.row)">删除</el-button>-->
                                <!--                                <el-button type="danger" size="mini" @click="removeDel(scope.$index,scope.row)">彻底删除</el-button>-->
                                <!--                            </template>-->
                                <!--                        </el-table-column>-->
                            </el-table>
                        </template>
                        <!--分页模块-->
                        <el-row style="float: right;margin-top: 20px">
                            <el-col>
                                <div class="block">
                                    <el-pagination
                                            @size-change="handleSizeChange"
                                            @current-change="handleCurrentChange"
                                            :current-page="queryinfo.pageNum"
                                            :page-sizes="[10, 20, 30, 40]"
                                            :page-size="queryinfo.pageSize"
                                            layout="total, sizes, prev, pager, next, jumper"
                                            :total="total">
                                    </el-pagination>
                                </div>
                            </el-col>
                        </el-row>
                    </el-tab-pane>
                </el-tabs>
            </el-row>

        </el-main>
        <el-dialog title="流程图" :visible.sync="dialogFormVisible" v-loading="dialogloading">
            <el-form :model="form">
                <el-form-item>
                    <div class="demo-image__preview">
                        <el-image

                                :src="form.url">
                        </el-image>
                    </div>
                </el-form-item>
            </el-form>
            <div slot="footer" class="dialog-footer">
                <el-button @click="dialogFormVisible = false">取 消</el-button>
            </div>
        </el-dialog>

        <el-dialog title="任务表单" :visible.sync="dialogTaskFormVisible" :loading="dialogloading1">
            <el-divider content-position="left">已提交表单</el-divider>
            <el-row>
                    <el-col :span="12" v-for="(item,index) in AllTaskFormInfoData" :key="item.id">
                        <el-input
                                v-model="item.variableValue"
                                :disabled="true"
                                v-if="item.variableType==='string'"
                        >
                            <template slot="prepend">{{typeOptions[item.variableName]}}</template>
                        </el-input>
                        <el-input
                                v-model="item.variableValue"
                                :disabled="true"
                                v-else-if="item.variableType==='long'"
                        >
                            <template slot="prepend">{{typeOptions[item.variableName]}}</template>
                        </el-input>
                        <el-input
                                v-model="item.variableValue"
                                :disabled="true"
                                v-else-if="item.variableType==='jodadate'"
                        >
                            <template slot="prepend">{{typeOptions[item.variableName]}}</template>
                        </el-input>
                        <el-switch
                                v-model="item.variableValue"
                                active-color="#13ce66"
                                inactive-color="#ff4949"
                                active-text="出库完成"
                                inactive-text="出库未完成"
                                v-else-if="item.variableType==='boolean'"
                                disabled
                        >
                        </el-switch>
                        <span v-else>
                            {{item.variableName}} = {{item.variableValue}} -[类型] {{item.variableType}}
                        </span>
                    </el-col>
            </el-row>
            <el-divider content-position="left">需要提交的表单</el-divider>
            <parser :key="key2" :form-conf="formResource" @submit="handleTask" />
        </el-dialog>

    </el-container>
</template>

<script>
    import {allTask, allTaskHistory, myTask, processDiagram, handleTask, getFormResource,getAllTaskFormInfo} from "../../api/technological";
    import {loginedUserInfo} from '@/api/user';
    import Parser from 'form-gen-parser'
    import jsutil from "@/common/js/util";

    export default {
        name: "mytask",
        components: {
            Parser
        },
        data() {
            return{
                queryinfo:{
                    assignee:'',
                    pageNum:1,
                    pageSize:10,
                },
                form: {
                    url: ''
                },
                dialogFormVisible: false,
                dialogTaskFormVisible: false,
                dialogloading: false,
                dialogloading1: false,
                sysUserName:'',
                total:0,
                tableData: [],
                tableloading:false,
                key2: +new Date(),
                formResource: {
                    "fields": [],
                    "formRef": "formRef",
                    "formModel": "formModel",
                    "size": "mini",
                    "labelPosition": "left",
                    "labelWidth": 100,
                    "formRules": "",
                    "gutter": 5,
                    "disabled": false,
                    "span": 12,
                    "formBtns": true,
                    "unFocusedComponentBorder": true
                },
                submitTaskParm:{
                    "assignee": "",
                    "cascade": true,
                    "outcome": "",
                    "processDefinitionId": "",
                    "processInstanceId": "",
                    "taskDefinitionKey": "",
                    "taskId": "",
                    "variables": {}
                },
                AllTaskFormInfoData: [],
                typeOptions: {
                    "truck_type" : "车辆类型",
                    "truck_quantity" : "车辆数量",
                    "waybillNo" : "运单列表",
                    "scheduleTime" : "预定时间",
                    "userCompanyId" : "企业信息",
                    "busnessType" : "业务类型",
                    "candidateUsername" : "用户名称",
                    "form_wms_truck_plan_outcome" : "表单输出",
                    "form_truck_form_outcome" : "表单输出",
                    "form_truck_distribute_outcome" : "表单输出",
                    "delivery_complete" : "出库完成"

                }

            }
        },
        mounted() {
            let user  = loginedUserInfo();
            this.queryinfo.assignee = user.username;
            console.log("当前用户名:"+this.queryinfo.assignee);
            this.$nextTick(function () {
                this.geMyTask();
            })

        },
        methods: {
            // 分页
            handleSizeChange(val) {
                this.queryinfo.pageSize= val
                this.getList()
            },
            handleCurrentChange(val) {
                this.queryinfo.pageNum  = val
                this.getList()
            },
            //查询我的任务
            geMyTask() {
                const _this = this
                this.tableloading = true;
                myTask(this.queryinfo).then((response) => {
                    const res = response.data
                    if (res.code != '200') {
                        return _this.$message.error('获取消息收发记录,失败!')
                    }
                    // 获取列表数据
                    _this.tableData = res.data
                    // 获取列表的总记录数
                    _this.total = res.total
                    this.tableloading = false;
                    _this.$message.success('获取消息收发记录,成功!')
                }).catch(error => {
                    // 关闭加载
                    _this.$message.error(error.toString())
                    this.tableloading = false;

                })
            },
            //查看进度
            checkProcess(index,row){
                console.log(row)
                this.dialogFormVisible = true
                this.dialogloading = true;
                processDiagram({processId:row.processInstanceId}).then(res =>{
                    // eslint-disable-next-line no-console
                    this.form.url=window.URL.createObjectURL(res.data);
                    this.dialogloading = false;
                }).catch(err => {
                    this.dialogloading = false;
                });
            },
            //获取工单中已完成任务的表单数据的promise
            getProcessFormInfoPromise(index,row){
                // this.dialogloading1 = true;
                this.dialogTaskFormVisible = true
                let _this = this;
                this.getProcessFormInfo(index,row).then(data =>{
                    _this.getFormDefine(index,row)
                    _this.dialogloading1 = false;
                }).catch(err => {
                    _this.$message.error(err)
                    _this.dialogloading1 = false;
                })
            },
            // 提交任务
            handleTask(paras){
                this.dialogloading1 = true;
                let _this=this
                this.submitTaskParm.variables = paras
                handleTask(this.submitTaskParm).then(response =>{
                    const res = response.data
                    if (res.code != '200') {
                        this.dialogloading1 = false;
                        this.dialogTaskFormVisible = false
                        return _this.$message.error('获取记录失败!')
                    }
                    this.$message.success("任务完成"+res.msg);
                    this.dialogTaskFormVisible = false
                    this.dialogloading1 = false;
                    _this.geMyTask()
                }).catch(err=>{
                    _this.$message.error("失败"+err);
                    _this.dialogTaskFormVisible = false
                    _this.dialogloading1 = false;
                })
            },
            //我发起的任务
            getMyList(){

            },

            //获取工单中已完成任务的表单数据
            getProcessFormInfo(index,row){
                let _this = this;
                return new Promise((resolve,reject)=> {
                    getAllTaskFormInfo({processInstanceId:row.processInstanceId}).then(response =>{
                        const res = response.data
                        if (res.code != '200') {
                            _this.$message.error('获取已提交工单数据失败!')
                        }
                        const  data =res.data;
                        _this.AllTaskFormInfoData = data
                        resolve(data);

                    }).catch(err => {
                        _this.$message.error(err)
                        _this.dialogloading = false;
                    });
                })
            },
            //获取任务的表单定义
            getFormDefine(index,row){
                this.submitTaskParm.taskId = row.id
                let _this = this;
                return new Promise((resolve,reject)=> {
                    getFormResource({taskid:row.id}).then(response =>{
                        const res = response.data
                        if (res.code != '200') {
                             _this.$message.error('提交任务失败!')
                        }
                        const  data =res.data;
                        resolve(data);
                        if (jsutil.checkNull(data)){
                            _this.key2 = +new Date()
                            _this.formResource = JSON.parse(data)
                        }else {
                            _this.formResource = {
                                "fields": [],
                                "formRef": "formRef",
                                "formModel": "formModel",
                                "size": "mini",
                                "labelPosition": "left",
                                "labelWidth": 100,
                                "formRules": "",
                                "gutter": 5,
                                "disabled": false,
                                "span": 12,
                                "formBtns": true,
                                "unFocusedComponentBorder": true
                            }
                            console.log("此任务没有表单定义")
                        }
                    }).catch(err => {
                        _this.$message.error(err)
                        _this.formResource = {
                            "fields": [],
                            "formRef": "formRef",
                            "formModel": "formModel",
                            "size": "mini",
                            "labelPosition": "left",
                            "labelWidth": 100,
                            "formRules": "",
                            "gutter": 5,
                            "disabled": false,
                            "span": 12,
                            "formBtns": true,
                            "unFocusedComponentBorder": true
                        }
                    });
                })

            },
            //查询
            getList() {
                const _this = this
                this.tableloading = true;
                allTask(this.queryinfo).then((response) => {
                    const res = response.data
                    if (res.code != '200') {
                        return _this.$message.error('获取消息收发记录,失败!')
                    }
                    // 获取列表数据
                    _this.tableData = res.data
                    // 获取列表的总记录数
                    _this.total = res.total
                    this.tableloading = false;
                    _this.$message.success('获取消息收发记录,成功!')
                }).catch(error => {

                    // 关闭加载
                    _this.$message.error(error.toString())
                    this.tableloading = false;

                })
            },
            handleClick(tab, event){
                if (tab.index == 0) {
                    this.geMyTask();
                } else if (tab.index == 1) {
                    this.getAllList();
                } else {
                    this.getMyList();
                }
            },
            //查询
            getAllList() {
                const _this = this
                this.tableloading = true;
                allTaskHistory(this.queryinfo).then((response) => {
                    const res = response.data
                    if (res.code != '200') {
                        return _this.$message.error('获取消息收发记录,失败!')
                    }
                    // 获取列表数据
                    _this.tableData = res.data
                    // 获取列表的总记录数
                    _this.total = res.total
                    this.tableloading = false;
                    _this.$message.success('获取消息收发记录,成功!')
                }).catch(error => {

                    // 关闭加载
                    _this.$message.error(error.toString())
                    this.tableloading = false;

                })
            },
        }

    }
</script>

<style scoped>

</style>