import { getObjectKey } from '@/assets/utils/host.js'
export default {
    methods: {
        // 记录信息 label-value
        info (label, value, type, hide) {
            if (/dateRange|address|info|subform/.test(type) || hide) return ''
            if (type === 'checkbox') value = value.join('，')
            if (type === 'contacts') value = value.map(n => n.realname).join('，')
            if (/img|file/.test(type)) value = value.map(item => getObjectKey(item, 'fullName')).join('，')
            return JSON.stringify({ label, value })
        },
        // 隐藏单选的关联项
        radioHide (form, optionList, optionChecked) {
            // 根据自身层级获取，即外面的拿外面的，子表单内拿子表单内的
            // 先将其他选项关联的隐藏，然后当前选项关联的显示（空的关联不参与循环）
            optionList.forEach(optionItem => {
                if (optionItem.value !== optionChecked) {
                    optionItem.link.forEach(linkId => {
                        for (let i in form) {
                            if (form[i].uuid === linkId) form[i].hide = true
                        }
                    })
                }
            })
            optionList.forEach(optionItem => {
                if (optionItem.value === optionChecked) {
                    optionItem.link.forEach(linkId => {
                        for (let i in form) {
                            if (form[i].uuid === linkId) form[i].hide = false
                        }
                    })
                }
            })
        },
        // 必填校验
        required (title, deep) {
            return {
                required: true,
                trigger: ['change', 'blur'],
                validator: (rule, value, callback) => {
                    let val = deep ? value.value : value
                    if (Array.isArray(val)) val = val.length
                    !val
                        ? callback(new Error(title + '必填'))
                        : callback()
                }
            }
        },
        // 输入框最小长度校验
        lengthMin (min, deep) {
            return {
                trigger: 'blur',
                validator: (rule, value, callback) => {
                    const val = deep ? value.value : value
                    val && val.length < min
                        ? callback(new Error(`至少输入 ${min} 个字符`))
                        : callback()
                }
            }
        },
        // 输入框最大长度校验
        lengthMax (max, deep) {
            return {
                trigger: 'blur',
                validator: (rule, value, callback) => {
                    const val = deep ? value.value : value
                    val && val.length > max
                        ? callback(new Error(`最多输入 ${max} 个字符`))
                        : callback()
                }
            }
        },
        // 多选框最小数量校验
        checkboxMin (min) {
            return {
                trigger: 'blur',
                validator: (rule, value, callback) => {
                    value.value.length && value.value.length < min
                        ? callback(new Error(`至少选择 ${min} 个选项`))
                        : callback()
                }
            }
        },
        // 多选框最大数量校验
        checkboxMax (max) {
            return {
                trigger: 'blur',
                validator: (rule, value, callback) => {
                    value.value.length && value.value.length > max
                        ? callback(new Error(`最多选择 ${max} 个选项`))
                        : callback()
                }
            }
        },
        // 图片校验（例如至少需要上传 2 张又不需要必填，则可以不上传，如果上传了则需要是 2 张以上）
        img (item) {
            return {
                validator: (rule, value, callback) => {
                    value.value.length && value.value.length < item.verify.limit[0]
                        ? callback(new Error(`至少上传 ${item.verify.limit[0]} 张图片`))
                        : value.value.length > item.verify.limit[1]
                            ? callback(new Error(`最多上传 ${item.verify.limit[1]} 张图片`))
                            : callback()
                }
            }
        }
    }
}
