<template>
  <el-dialog
    v-model="visible"
    :title="title"
    width="500px"
    destroy-on-close
  >
    <el-form
      ref="formRef"
      :model="formData"
      :rules="formRules"
      label-width="80px"
    >
      <el-form-item label="功能选择" prop="name">
        <el-select>
          <el-option>11</el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="上传图片">
        <FileUpload :modelValue="imgUrl" :limit="1" :fileSize="5" :fileType="['png', 'jpg', 'jpeg']" />
      </el-form-item>
      <el-form-item label="描述" prop="description">
        <el-input
          v-model="formData.description"
          type="textarea"
          :rows="3"
          placeholder="请输入描述"
        />
      </el-form-item>
    </el-form>
    
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="handleCancel">取消</el-button>
        <el-button type="primary" @click="handleConfirm">确认</el-button>
      </span>
    </template>
  </el-dialog>
</template>

<script setup>
import { ref, watch } from 'vue'
import FileUpload from '@/components/FileUpload/index'

const props = defineProps({
  visible: {
    type: Boolean,
    default: false
  },
  title: {
    type: String,
    default: ''
  },
  formData: {
    type: Object,
    default: () => {}
  }
})
const emit = defineEmits(['update:visible', 'confirm'])

const formRef = ref()

// 表单验证规则
const formRules = {
  name: [
    { required: true, message: '请输入功能名称', trigger: 'blur' }
  ]
}

const visible = ref(props.visible)

const imgUrl = ref('')

watch(() => props.visible, (newVal) => {
  visible.value = newVal
})

watch(visible, (newVal) => {
  emit('update:visible', newVal)
})

function handleConfirm() {
  if (!formRef.value) return

  formRef.value.validate((valid) => {
    emit('confirm', valid, { ...props.formData })
  })
}

function handleCancel() {
  visible.value = false
}
</script>

<style scoped>
.dialog-footer {
  display: flex;
  justify-content: flex-end;
  gap: 12px;
}
</style>