<template>
  <el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
    <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" :label-width="$i18n.locale === 'en-US' ? '120px' : '120px'">
      <el-form-item label="功能名称" prop="functionName">
        <el-input v-model="dataForm.functionName" placeholder="功能名称"></el-input>
      </el-form-item>
      <el-form-item label="功能类型" prop="functionGroup">
        <el-select v-model="dataForm.functionGroup"
               placeholder="请选择" clearable>
          <el-option v-for="item in functionGroupList"
                 :key="item.dictValue"
                 :label="item.dictName"
                 :value="item.dictValue">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item prop="functionIcon" label="功能图标">
        <el-upload
          class="avatar-uploader"
          :action="uploadUlr"
          :show-file-list="false"
          :on-success="handleAvatarSuccess"
          :before-upload="beforeAvatarUpload">
          <img v-if="dataForm.functionIcon" :src="dataForm.functionIcon" class="function-icon">
          <i v-else class="el-icon-plus avatar-uploader-icon"></i>
        </el-upload>
      </el-form-item>
      <el-form-item label="上架状态" prop="shoppingStatus">
        <el-select v-model="dataForm.shoppingStatus"
               placeholder="请选择" clearable>
          <el-option v-for="item in shoppingStatusList"
                 :key="item.dictValue"
                 :label="item.dictName"
                 :value="item.dictValue">
          </el-option>
        </el-select>
      </el-form-item>

      <el-form-item label="功能说明" prop="functionExplain">
        <el-input v-model="dataForm.functionExplain" placeholder="功能说明" type="textarea"></el-input>
      </el-form-item>

    </el-form>
    <template slot="footer">
      <el-button @click="visible = false">{{ $t('cancel') }}</el-button>
      <el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
    </template>
  </el-dialog>
</template>

<script>
import debounce from 'lodash/debounce'
import { getIconList } from '@/utils'
export default {
  data () {
    return {
      visible: false,
      iconList: [],
      iconListVisible: false,
      dataForm: {
        functionName: '',
        functionIcon: '',
        functionGroup: 0,
        shoppingStatus: 1,
        functionExplain: ''
      },
      uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/function/upload',
      functionGroupList: [
        {
          'dictName': '默认功能',
          'dictValue': 0
        }, {
          'dictName': '定制功能',
          'dictValue': 1
        }
      ],
      shoppingStatusList: [
        {
          'dictName': '下架',
          'dictValue': 0
        }, {
          'dictName': '上架',
          'dictValue': 1
        }
      ]
    }
  },
  created () {
    this.queryFunctionList()
  },
  computed: {
    dataRule () {
      return {
        functionName: [
          { required: true, message: this.$t('validate.required'), trigger: 'blur' }
        ],
        functionIcon: [
          { required: true, message: this.$t('validate.required'), trigger: 'blur' }
        ],
        functionGroup: [
          { required: true, message: this.$t('validate.required'), trigger: 'blur' }
        ],
        shoppingStatus: [
          { required: true, message: this.$t('validate.required'), trigger: 'blur' }
        ],
        functionExplain: [
          { required: true, message: this.$t('validate.required'), trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    init () {
      this.visible = true
      this.iconList = getIconList()
      this.$nextTick(() => {
        this.$refs['dataForm'].resetFields()
        if (this.dataForm.id) {
          this.getInfo()
        }
      })
    },
    // 获取信息
    getInfo () {
      this.$http.get(`/oper/customize/function/${this.dataForm.id}`).then(({ data: res }) => {
        if (res.code !== 0) {
          return this.$message.error(res.msg)
        }
        this.dataForm = {
          ...this.dataForm,
          ...res.data
        }
      }).catch(() => {})
    },
    handleAvatarSuccess (res, file) {
      if (res.code === 0 && res.msg === 'success') {
        this.dataForm.functionIcon = res.data.url
      } else {
        this.$message.error(res.msg)
      }
    },
    beforeAvatarUpload (file) {
      const isPNG = file.type === 'image/png'
      const isLt1M = file.size / 1024 / 1024 < 1

      if (!isPNG) {
        this.$message.error('上传头像图片只能是 PNG 格式!')
      }
      if (!isLt1M) {
        this.$message.error('上传头像图片大小不能超过 1MB!')
      }
      return isPNG && isLt1M
    },
    // 表单提交
    dataFormSubmitHandle: debounce(function () {
      this.$refs['dataForm'].validate((valid) => {
        if (!valid) {
          return false
        }
        this.$http[!this.dataForm.id ? 'post' : 'put']('/oper/customize/function/', this.dataForm).then(({ data: res }) => {
          if (res.code !== 0) {
            return this.$message.error(res.msg)
          }
          this.$message({
            message: this.$t('prompt.success'),
            type: 'success',
            duration: 500,
            onClose: () => {
              this.visible = false
              this.$emit('refreshDataList')
            }
          })
        }).catch(() => {})
      })
    }, 1000, { 'leading': true, 'trailing': false })
  }
}
</script>

<style scoped>
  .function-icon {
    width: 28px;
  }
</style>
