<template>
    <div class="saga-recommend">
        <div v-if="hasData">
            <div class="recommend-card">
                <h4>当前资产：
                    <el-tooltip class="item" effect="dark" :content="fm.FmName">
                        <span>{{fm.FmName}}</span>
                    </el-tooltip>
                </h4>
            </div>
            <div class="saga-change-name" v-if="!isChangeFor">
                <h3 class="saga-gray saga-explain">您可能需要快捷改值操作</h3>
                <!-- 智能推荐按钮 -->
                <div v-if="isChangeId">
                    <template v-if="changeList.length" v-for="(item,index) in changeList">
                        <saga-button :key="index" @click="getList(item)">修正 "{{getName(key)}}" 为 {{item.value}}</saga-button>
                    </template>
                    <template v-if="!changeList.length">
                        <p>{{changeMsg}}</p>
                    </template>
                        </div>
                        <!-- 修正按钮 -->
                        <div v-else>
                        <saga-button @click="changeToNull">修正 "{{getName(key)}}" 为 {{noIdChangeVal}}</saga-button>
                        </div>
                    </div>
                    <div class="saga-change-name" v-if="!isSameForCreate">
                        <h3 class="saga-gray saga-explain">您可能需要快捷维护厂商库</h3>
                <template>
                    <saga-button v-if="!isChangeVender" @click="create">
                        增加 {{obj.name}} “ {{val ? val : fm.Infos[key]}} ”</saga-button>
                    <saga-button v-if="isChangeVender" @click="changeVender">更新厂商库中此{{obj.name}}对应值</saga-button>
                </template>
      </div>
      <div class="saga-change-name" v-if="elseBtnsShow">
        <h3 class="saga-gray saga-explain">您可能需要其他快捷操作</h3>
        <!-- <saga-button @click="checkVenders">先维护 xxx 信息点</saga-button> -->
        <saga-button @click="checkVenders" v-if="showBtn">批量维护 {{!!obj ? obj.name : ""}} 相关信息点</saga-button>
        <saga-button v-if="!showBtn">先维护 {{objMsg}}</saga-button>
        <!-- <saga-button @click="checkVenders"></saga-button> -->
      </div>
    </div>
    <div v-else class="saga-message">
      <p>{{!!dataMessage ? dataMessage : "请确定该信息点是支持推荐的信息点"}}</p>
    </div>
    <venders-change
      :create="isCreate"
      v-if="dialog.visible"
      ref="venders"
      :dialog="dialog"
      :infosKey="infosKey"
      :types="types"
      :fmData="fm"
      @change="loadFm"
      :title="isCreate ? '添加' + obj.name : '修改' + obj.name"
    ></venders-change>
  </div>
</template>
<script>
    import sagaButton from "./sagaButton"
    import vendersChange from "./vendersChange"
    import getVenderRecommend from "./findId"
    import tools from "@/utils/scan/tools"
    import getJson from "@/utils/buildData/vendersUtils"
    import buildJson from "@/utils/buildData/buildJson"
    import cutHeader from "@/utils/scan/cutHeader"
    import {
        upDateTableMain,
        getBasicMatch
    } from "@/api/scan/request"
    export default {
        components: {
            sagaButton,
            vendersChange
        },
        data() {
            return {
                hasData: false,
                fm: {},
                infosKey: null,
                dialog: {
                    visible: false
                },
                createList: [],
                changeList: [],
                types: {},
                headers: [],
                message: "",
                obj: {},
                key: "",
                isCreate: false,
                showBtn: false,
                createShow: false,
                changeMsg: "", //修改的提示
                dataMessage: "⬅请点击资产信息点",
                falg: false, //上级页面传入的数值，用于实时请求
                val: null, //上级传入的val
                isSameForCreate: false,
                isChangeFor: false,
                isChangeVender: false,
                isChangeId: true, //是否为修改id
                noIdChangeVal: "",
                elseBtnsShow: true, //是否显示修改按钮
                msgTable: true,
                content: {}, //厂商库信息点
                objMsg: "相关信息点"
            }
        },
        created() {},
        mounted() {},
        methods: {
            //主页面重新加载
            loadFm() {
                this.$emit("loadData")
            },
            //根据id获得信息点名称
            getName(code) {
                if (!!code) {
                    let name = ""
                    this.headers.map(item => {
                        if (item.InfoPointCode == code) {
                            name = item.InfoPointName
                        }
                    })
                    return name
                } else {
                    return ""
                }
            },
            //修改
            checkVenders() {
                this.isCreate = false
                this.dialog.visible = true
                this.$nextTick(_ => {
                    this.$refs.venders.getData()
                })
            },
            //获取表头
            changeObj() {
                buildJson.map(item => {
                    if (item.name == "型号") {
                        item.options = []
                        item.infosArr = []
                        this.headers.map(child => {
                            if (child.FirstTag == "技术参数" ||
                                child.InfoPointCode == "Specification" ||
                                child.InfoPointCode == "MaintainPeriod" ||
                                child.InfoPointCode == "ServiceLife") {
                                item.infosArr.push(child.InfoPointCode)
                                let option = {
                                    key: "contact.infos." + child.InfoPointCode,
                                    label: child.InfoPointName,
                                    optLabel: child.InfoPointCode,
                                    type: child.DataType,
                                    dataSource: child.DataSource,
                                    FirstTag: child.FirstTag,
                                    SecondTag: child.SecondTag
                                }
                                if (child.InfoPointCode == "Specification") {
                                    option.key = "content.specificationName"
                                }
                                item.options.push(option)
                            }
                        })
                        item.options = cutHeader(item.options)
                    }
                })
            },
            changeToNull() {
                //   let param = {
                //     FmId: this.fm.FmId,
                //     Infos: {
                //       [this.key]: null
                //     }
                //   }
                //   this.updateMain(param)
                console.log(this.noIdChangeVal, "this.noIdChangeVal")
                this.fm.Infos[this.key] = this.noIdChangeVal
            },
            //上级页面传输的数据
            randerData(idData, infosKey, headers, falg = false, val = null) {
                this.isChangeVender = false
                console.log(idData, infosKey, headers, falg, "falg")
                this.falg = falg
                this.val = val
                this.fm = tools.deepCopyObj(idData)
                this.headers = headers
                this.changeObj()
                this.infosKey = infosKey
                this.message = ""
                this.key = infosKey.split(".")[1]
                this.obj = getJson(this.infosKey.split(".")[1])
                console.log("数据请求", this.obj)
                if (!!this.obj) {
                    console.log("有data")
                    this.hasData = true
                    this.getDataForm()
                } else {
                    this.hasData = false
                }
            },
            changeVender() {
                // 修改厂商库中对应的值
                console.log("修改厂商库中的值", this.obj, this.key)
                let webArr = ["SupplierWeb", "InsurerWeb", "MaintainerWeb"],
                    //三大厂商的key
                    keysArr = ["DPInsurerID", "DPSupplierID", "DPMaintainerID"]
                //如果是三大厂商的网址
                if (webArr.indexOf(this.key) > -1) {
                    let param = {
                        venderId: this.fm.Infos[this.obj.infosKey],
                        website: this.fm.Infos[this.key]
                    }
                    this.obj.updateVender(param, res => {
                        this.updateKey(this.key, this.fm)
                    })
                    return false
                } else if (keysArr.indexOf(this.obj.infosKey) > -1) {
                    let param = {
                        venderId: this.fm.Infos[this.obj.infosKey],
                        projectId: this.$route.query.projId
                    }
                    //如果存在content的联系人
                    console.log(this.content, "content")
                    if (this.content.hasOwnProperty("contact")) {
                        let contents = this.content.contact
                        for (let k in contents) {
                            param[k] = contents[k]
                        }
                    }
                    param[[this.getKey(this.obj.options, this.key)]] = this.fm.Infos[this.key]
                    this.obj.update(param, res => {
                        this.updateKey(this.key, this.fm)
                    })
                    return false
                } else {
                    let param = {
                        specificationId: this.fm.Infos.DPSpecificationID,
                        infos: {
                            [this.key]: this.fm.Infos[this.key]
                        }
                    }
                    this.obj.updateVender(param, res => {
                        this.updateKey(this.key, this.fm)
                    })
                    return false
                }
            },
            updateKey(key, obj) {
                let param = {
                    FmId: obj.FmId,
                    Infos: {
                        [key]: null
                    }
                }
                this.updateMain(param)
            },
            /**
             * @param arr 传入的数组
             * @param key 传入的key
             * 
             * @return key 对应的key
             */
            getKey(arr, key) {
                let returnKey = ""
                arr.map(item => {
                    if (item.optLabel == key) {
                        returnKey = item.key.split(".")[1]
                        console.log(returnKey, item, "item")
                    }
                })
                return returnKey
            },
            //有obj的信息时
            getDataForm() {
                let idArr = ["DPManufacturerID", "DPSupplierID", "DPInsurerID", "DPMaintainerID", "DPSpecificationID", "DPBrandID", "DPSpecificationID"]
                //点击以下按钮触发按钮事件
                let vendersArr = ["Manufacturer", "Supplier", "Maintainer", "Insurer", "Brand", "Specification"]
                if (!!this.fm.Infos[this.obj.infosKey]) {
                    this.falgChange(true)
                } else {
                    this.falgChange(false)
                }
            },
            //falg为是否存在id
            falgChange(falg) {
                let vendersArr = ["Manufacturer", "Supplier", "Maintainer", "Insurer", "Brand", "Specification"]
                if (this.val || !!this.fm.Infos[this.key]) {
                    //存在id且单元格存在值
                    if (falg) {
                        if (this.falg && vendersArr.indexOf(this.key) > -1) {
                            this.noIdDo()
                        } else {
                            this.getVendersList()
                        }
                    } else {
                        // 没有id
                        this.noIdDo()
                    }
                } else {
                    //不存在值
                    // this.isChangeFor = false
                    // this.isSameForCreate = true
                    // this.changeList = []
                    this.noIdDo()
                    // this.changeMsg = "请确定该单元格内存在值"
                }
            },
            //没有id执行
            noIdDo() {
                console.log("没有id")
                let param = {
                        infoCode: this.key,
                        infoValue: this.val || this.fm.Infos[this.key]
                    },
                    falg = true
                this.createShow = true
                this.showBtn = false
                this.elseBtnsShow = true
                if (this.key == "Brand") {
                    param.manufacturerID = this.fm.Infos.DPManufacturerID
                }
                if (this.key == "Specification") {
                    param.manufacturerID = this.fm.Infos.DPManufacturerID
                    param.brandID = this.fm.Infos.DPBrandID
                    param.eqFamily = this.fm.Family
                }
                for (let k in param) {
                    if (!param[k]) {
                        falg = false
                    }
                }
                console.log(falg, "falg")
                //如果传参中某个值为空不发生请求
                if (!falg) {
                    this.noShowTop12()
                    return false
                } else {
                    this.elseBtnsShow = false
                }
                console.log(this.obj.infosArr[0], this.infosKey, "this.infosKey")
                if (this.obj.infosArr[0] != this.key) {
                    console.log("其他信息点")
                    this.noShowTop12()
                    return false
                }
                getVenderRecommend(param, res => {
                    this.changeList = res.content || []
                    this.isChangeId = true
                    this.isSameForCreate = false
                    this.isChangeFor = false
                    console.log(this.changeList, "changeList")
                    if (!!this.changeList && this.changeList.length == 1) {
                        if (this.changeList[0].value == this.fm.Infos[this.key] &&
                            this.changeList[0].id == this.fm.Infos["DP" + this.key + "ID"]) {
                            this.isSameForCreate = true
                            this.isChangeFor = true
                            if (!!this.val && this.val != this.fm.Infos[this.key]) {
                                this.isChangeFor = false
                                this.isSameForCreate = false
                            }
                        }
                    }
                    if (res.content[0] && res.content[0].similarity == 100) {
                        this.changeList = []
                        this.isSameForCreate = true
                        this.isChangeFor = false
                    }
                    if (this.changeList.length <= 0) {
                        //   this.changeMsg = "不存在符合条件的推荐"
                    }
                })
            },
            //第一栏第二栏不显示
            noShowTop12() {
                if (!this.val && !this.fm.Infos[this.key]) {
                    this.elseBtnsShow = false
                }
                console.log(this.obj.infosKey, this.fm.Infos)
                //型号
                if (this.obj.infosKey == "DPSpecificationID") {
                    if (!this.fm.Infos.DPManufacturerID) {
                        this.elseBtnsShow = true
                        this.objMsg = "生产厂家"
                    } else if (!this.fm.Infos.DPBrandID) {
                        this.elseBtnsShow = true
                        this.objMsg = "品牌"
                    } else if (!this.fm.Infos.DPSpecificationID) {
                        console.log("设备型号")
                        this.elseBtnsShow = true
                        this.objMsg = "设备型号"
                    }
                }
                //品牌
                if (this.obj.infosKey == "DPBrandID") {
                    if (!this.fm.Infos.DPManufacturerID) {
                        this.objMsg = "生产厂家"
                    }
                }
                //生产厂家
                if (this.obj.infosKey == "DPManufacturerID") {
                    this.elseBtnsShow = false
                }
                //供应商
                if (this.obj.infosKey == "DPSupplierID") {
                    if (!this.fm.Infos.DPSupplierID) {
                        console.log("没有供应商id")
                        this.elseBtnsShow = false
                        if (this.key != "Supplier") {
                            this.elseBtnsShow = true
                        }
                        this.objMsg = "供应商单位名称"
                    }
                }
                //维修商
                if (this.obj.infosKey == "DPMaintainerID") {
                    if (!this.fm.Infos.DPMaintainerID) {
                        console.log("没有维修商id")
                        this.elseBtnsShow = false
                        if (this.key != "Maintainer") {
                            this.elseBtnsShow = true
                        }
                        this.objMsg = "维修商单位名称"
                    }
                }
                //保险公司
                if (this.obj.infosKey == "DPInsurerID") {
                    if (!this.fm.Infos.DPInsurerID) {
                        console.log("没有保险id")
                        this.elseBtnsShow = false
                        if (this.key != "Insurer") {
                            this.elseBtnsShow = true
                        }
                        this.objMsg = "保险公司名称"
                    }
                }
                this.isSameForCreate = true
                this.isChangeFor = true
            },
            //当前单元格内存在id且单元格存在值
            getVendersList() {
                //四大厂商名称
                this.isChangeId = true
                let venderIdArr = ["DPManufacturerID", "DPSupplierID", "DPInsurerID", "DPMaintainerID", "DPBrandID"],
                    vendersArr = ["Manufacturer", "Supplier", "Maintainer", "Insurer", "Brand"],
                    infosKey = this.obj.infosKey
                this.showBtn = true
                this.elseBtnsShow = true
                //获取label
                let ownLabel = ""
                this.obj.options.map(item => {
                    if (item.optLabel == this.key) {
                        ownLabel = item.key
                    }
                })
                if (venderIdArr.indexOf(infosKey) > -1) {
                    let param = {
                        venderId: this.fm.Infos[infosKey],
                        projectId: this.$route.query.projId
                    }
                    if (infosKey == "DPBrandID") {
                        param = {
                            brandId: this.fm.Infos[infosKey]
                        }
                    }
                    this.obj.getList(param, res => {
                        console.log(this.key, this.obj.options, res, ownLabel, "ownLabel")
                        let optArr = ownLabel.split("."),
                            optContent = ""
                        if (this.obj.infosKey == "DPBrandID") {
                            optContent = res[optArr[0]][optArr[1]]
                        } else {
                            optContent = res.content[optArr[0]][optArr[1]]
                        }
                        if (optContent == (this.val || this.fm.Infos[this.key])) {
                            //厂商库中的值与现有的值相等
                            this.isChangeFor = true
                            this.isSameForCreate = true
                            let keysBtns = ["DPBrandID", "DPManufacturerID"]
                            if (keysBtns.indexOf(this.obj.infosKey) > -1) {
                                this.elseBtnsShow = false
                            }
                        } else {
                            if (!optContent) {
                                //如果厂商库中没有值
                                console.log("没有该信息点")
                                this.isChangeFor = true
                                this.isChangeVender = true
                                this.isSameForCreate = false
                            } else {
                                //有值
                                console.log("有值,且值不同")
                                this.isChangeId = false
                                this.hasData = true
                                this.content = res.content
                                //修改的值（其实做置空操作）
                                this.noIdChangeVal = optContent
                                this.isChangeFor = false
                                this.isSameForCreate = false
                                this.isChangeVender = true
                            }
                        }
                    })
                }
                if (infosKey == "DPSpecificationID") {
                    let paramData = {
                        specificationId: this.fm.Infos[infosKey]
                    }
                    this.obj.getList(paramData, res => {
                        let optContent = res.content.infos[this.key]
                        console.log(optContent, this.val, this.fm.Infos[this.key], "optContent")
                        if (optContent == (this.val || this.fm.Infos[this.key])) {
                            console.log("有值，且值相同")
                            this.isChangeFor = true
                            this.isSameForCreate = true
                            if (this.key == "Specification") {
                                this.elseBtnsShow = false
                            } else {
                                this.elseBtnsShow = true
                            }
                        } else {
                            if (!optContent) {
                                //如果厂商库中没有值
                                console.log("没有该信息点")
                                this.isChangeFor = true
                                this.isChangeVender = true
                                this.isSameForCreate = false
                            } else {
                                //有值
                                console.log("有值,且值不同")
                                this.isChangeId = false
                                this.hasData = true
                                //修改的值（其实做置空操作）
                                this.noIdChangeVal = optContent
                                this.isChangeFor = false
                                this.isSameForCreate = false
                                this.isChangeVender = true
                            }
                        }
                    })
                }
                if (vendersArr.indexOf(this.key) > -1) {
                    this.showBtn = true
                }
            },
            //创建函数
            create(item) {
                // console.log(this.obj.infosKey)
                // let param;
                // if(this.obj.infosKey == "DPBrandID" || this.obj.infosKey == "DPManufacturerID"){
                //     if(this.obj.infosKey == "DPBrandID"){
                //         param = {
                //             "venderId": this.fm.Infos.DPManufacturerID,     //String,必填,生产商id
                //             "name": this.fm.Infos.Brand,              //String,必填,品牌名称   
                //         }
                //     }else{
                //         param = {
                //             "name": this.fm.Infos.Manufacturer,          
                //         }
                //     }
                //     this.obj.createFunc(param,res=>{
                //     })
                // }
                this.isCreate = true
                this.dialog.visible = true
                this.$nextTick(_ => {
                    this.$refs.venders.getCreateData()
                })
            },
            updateMain(param) {
                upDateTableMain({
                    ProjId: this.$route.query.projId,
                    UserId: this.$route.query.userId
                }, [param]).then(res => {
                    if (res.data.Result == "success") {
                        this.loadFm()
                    } else {
                        this.$message.error("保存出错")
                    }
                })
            },
            //点击按钮，对表格操作
            getList(data) {
                //   this.fm.Infos[this.key] = data.value
                let infos = tools.deepCopyObj(this.fm.Infos)
                infos[this.key] = data.value
                let param = {
                    "projectId": this.$route.query.projId,
                    "criterias": [{
                        id: this.fm.FmId,
                        family: this.fm.Family,
                        infos: infos
                    }]
                }
                console.log(param, "paramparam")
                this.getIdForVender(param)
            },
            //判断文案是否相同
            getIdForVender(param) {
                getBasicMatch(param).then(res => {
                    if (res.data.result == "success") {
                        let myParam = res.data.content.map(item => {
                            return {
                                Family: item.family,
                                FmId: item.id,
                                Infos: item.infos
                            }
                        })
                        this.updateMain(myParam[0])
                    } else {
                        this.$message.error("请求错误" + res.data.resultMsg)
                    }
                }).catch(error => {
                    this.$message.error(error)
                })
            },
        }
    }
</script>
<style lang="scss" scoped>
h4{
    font-size: 18px;
    font-weight: 400;
}
    .saga-recommend {
        background-color: #fff;
        height: 100%;
        overflow-y: auto; //   background-color: red;
        .recommend-card{
            padding: 5px;
            border: 1px solid #E4E7ED;
            margin: 10px;
        }
        .saga-gray {
            color: #909399;
            font-weight: 400;
            font-size: 16px;
        }
        .saga-change-name {
            padding: 5px;
            margin: 10px;
            min-height: 100px; // background-color: yellow;
            border-bottom: 1px solid #ccc;
            border: 1px solid #E4E7ED;
        }
    }
    .saga-message {
        background-color: #fff;
        height: 400px;
        line-height: 400px;
        font-size: 16px;
        color: #909399;
    }
</style>
