<template>
  <!-- 主容器块，用于样式隔离与布局 -->
  <div class="addEdit-block">
    <!-- 表单组件，绑定ruleForm数据模型，使用ref方便在JS中引用 -->
    <el-form
      class="detail-form-content"
      ref="ruleForm"                      <!-- 表单引用 -->
      :model="ruleForm"                  <!-- 数据模型 -->
      :rules="rules"                     <!-- 校验规则 -->
      label-width="80px"                 <!-- 标签宽度 -->
	  :style="{backgroundColor:addEditForm.addEditBoxColor}"  <!-- 动态背景色 -->
    >
      <!-- 布局行，用于排列表单项 -->
      <el-row>
        <!-- 左半列，跨度12（占50%） -->
        <el-col :span="12">
          <!-- 非查看模式时显示可编辑名称输入框 -->
          <el-form-item class="input" v-if="type!='info'" label="名称" prop="name">
            <!-- 输入框，双向绑定ruleForm.name -->
            <el-input v-model="ruleForm.name"
              placeholder="名称" clearable  :readonly="ro.name"></el-input> <!-- 可清空、只读控制 -->
          </el-form-item>
          <!-- 查看模式下显示只读名称输入框 -->
          <div v-else>
            <el-form-item class="input" label="名称" prop="name">
              <!-- 强制只读状态 -->
              <el-input v-model="ruleForm.name"
                placeholder="名称" readonly></el-input> <!-- 只读模式 -->
            </el-form-item>
          </div>
        </el-col>
        <!-- 全宽列，跨度24（占100%） -->
        <el-col :span="24">
          <!-- 非查看模式且value未锁定时显示上传组件 -->
          <el-form-item class="upload" v-if="type!='info' && !ro.value" label="值" prop="value">
            <!-- 文件上传组件 -->
            <file-upload
              tip="点击上传值"               <!-- 提示文字 -->
              action="file/upload"           <!-- 上传接口地址 -->
              :limit="3"                     <!-- 最多上传3个文件 -->
              :multiple="true"               <!-- 支持多选 -->
              :fileUrls="ruleForm.value?ruleForm.value:''"  <!-- 初始文件路径 -->
              @change="valueUploadChange"    <!-- 上传完成后的回调 -->
            ></file-upload>
          </el-form-item>
          <!-- 查看模式下展示图片预览 -->
          <div v-else>
            <el-form-item v-if="ruleForm.value" label="值" prop="value">
              <!-- 循环展示多个图片 -->
              <img style="margin-right:20px;" v-bind:key="index" v-for="(item,index) in ruleForm.value.split(',')" :src="item" width="100" height="100"> <!-- 图片预览 -->
            </el-form-item>
          </div>
        </el-col>
      </el-row>

      <!-- 提交/取消按钮组 -->
      <el-form-item class="btn">
        <!-- 非查看模式显示提交按钮 -->
        <el-button v-if="type!='info'" type="primary" class="btn-success" @click="onSubmit">提交</el-button> <!-- 提交操作 -->
        <!-- 非查看模式显示取消按钮 -->
        <el-button v-if="type!='info'" class="btn-close" @click="back()">取消</el-button> <!-- 取消操作 -->
        <!-- 查看模式显示返回按钮 -->
        <el-button v-if="type=='info'" class="btn-close" @click="back()">返回</el-button> <!-- 返回操作 -->
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
// 导入校验工具函数：数字、整数、邮箱、手机号等
import { isNumber,isIntNumer,isEmail,isPhone, isMobile,isURL,checkIdCard } from "@/utils/validate";

export default {
  data() {
    let self = this;

    // 身份证号码校验函数
    var validateIdCard = (rule, value, callback) => {
      if(!value){                             // 如果值为空
        callback();                           // 不触发错误
      } else if (!checkIdCard(value)) {       // 校验身份证号码格式
        callback(new Error("请输入正确的身份证号码")); // 触发错误提示
      } else {
        callback();                           // 校验通过
      }
    };

    // URL地址校验函数
    var validateUrl = (rule, value, callback) => {
      if(!value){                             // 如果值为空
        callback();                           // 不触发错误
      } else if (!isURL(value)) {             // 校验URL格式
        callback(new Error("请输入正确的URL地址")); // 触发错误提示
      } else {
        callback();                           // 校验通过
      }
    };

    // 手机号码校验函数
    var validateMobile = (rule, value, callback) => {
      if(!value){                             // 如果值为空
        callback();                           // 不触发错误
      } else if (!isMobile(value)) {          // 校验手机号码格式
        callback(new Error("请输入正确的手机号码")); // 触发错误提示
      } else {
        callback();                           // 校验通过
      }
    };

    // 固定电话号码校验函数
    var validatePhone = (rule, value, callback) => {
      if(!value){                             // 如果值为空
        callback();                           // 不触发错误
      } else if (!isPhone(value)) {           // 校验固定电话格式
        callback(new Error("请输入正确的电话号码")); // 触发错误提示
      } else {
        callback();                           // 校验通过
      }
    };

    // 邮箱地址校验函数
    var validateEmail = (rule, value, callback) => {
      if(!value){                             // 如果值为空
        callback();                           // 不触发错误
      } else if (!isEmail(value)) {           // 校验邮箱格式
        callback(new Error("请输入正确的邮箱地址")); // 触发错误提示
      } else {
        callback();                           // 校验通过
      }
    };

    // 数字校验函数
    var validateNumber = (rule, value, callback) => {
      if(!value){                             // 如果值为空
        callback();                           // 不触发错误
      } else if (!isNumber(value)) {          // 校验是否为数字
        callback(new Error("请输入数字"));     // 触发错误提示
      } else {
        callback();                           // 校验通过
      }
    };

    // 整数校验函数
    var validateIntNumber = (rule, value, callback) => {
      if(!value){                             // 如果值为空
        callback();                           // 不触发错误
      } else if (!isIntNumer(value)) {        // 校验是否为整数
        callback(new Error("请输入整数"));     // 触发错误提示
      } else {
        callback();                           // 校验通过
      }
    };

    return {
      // 表单样式配置对象（包含所有样式参数）
      addEditForm: {"btnSaveFontColor":"#fff", ...},  // 省略完整样式配置

      id: '',                 // 当前记录ID
      type: '',               // 操作类型（add/edit/view）

      ro:{                    // 只读字段标识
		name : false,         // 名称字段是否只读
		value : false,        // 值字段是否只读
      },

      ruleForm: {             // 表单数据模型
		name: '',             // 名称字段初始值
		value: '',            // 值字段初始值
      },

      rules: {                // 表单验证规则
        name: [
          { required: true, message: '名称不能为空', trigger: 'blur' },  // 必填项
        ],
        value: []             // 空规则占位
      }
    };
  },
  props: ["parent"],        // 接收父组件传参

  computed: {},              // 计算属性（暂无）

  created() {               // 组件创建后执行
	this.addEditStyleChange();       // 初始化表单样式
	this.addEditUploadStyleChange(); // 初始化上传区域样式
  },

  methods: {

    // 下载方法：打开文件链接
    download(file){
      window.open(`${file}`)  // 新窗口打开文件链接
    },

    // 初始化方法，带id和type参数
    init(id,type) {
      if (id) {
        this.id = id;         // 设置当前记录ID
        this.type = type;     // 设置操作类型
      }

      // 根据类型加载数据
      if(this.type == 'info' || this.type == 'else'){
        this.info(id);        // 加载详情信息
      } else if (this.type == 'cross') {  // 处理跨模块数据
        var obj = this.$storage.getObj('crossObj');  // 获取跨页传递数据
        for (var o in obj){
          	if(o == 'name'){   // 名称字段处理
            	this.ruleForm.name = obj[o];
	            this.ro.name = true;
            	continue;
          	}
          	if(o == 'value'){  // 值字段处理
            	this.ruleForm.value = obj[o];
	            this.ro.value = true;
            	continue;
          	}
        }
      }
    },

    // 加载指定ID的详情数据
    info(id) {
      this.$http({            // 发起HTTP请求
        url: `config/info/${id}`,  // 请求URL
        method: "get"         // 请求方法
      }).then(({ data }) => { // 成功回调
        if (data && data.code === 0) {
          this.ruleForm = data.data;  // 填充表单数据
        } else {
          this.$message.error(data.msg);  // 错误提示
        }
      });
    },

    // 表单提交处理
    onSubmit() {
      this.$refs["ruleForm"].validate(valid => {  // 表单校验
        if (valid) {
          this.$http({  // 提交请求
            url: `config/${!this.ruleForm.id ? "save" : "update"}`,  // 动态URL
            method: "post",  // 请求方法
            data: this.ruleForm  // 提交数据
          }).then(({ data }) => {
            if (data && data.code === 0) {  // 成功处理
              this.$message({
                message: "操作成功",
                type: "success",
                duration: 1500,
                onClose: () => {
                  this.parent.showFlag = true;
                  this.parent.addOrUpdateFlag = false;
                  this.parent.configCrossAddOrUpdateFlag = false;
                  this.parent.search();  // 刷新父组件数据
                  this.parent.contentStyleChange();
                }
              });
            } else {
              this.$message.error(data.msg);  // 失败提示
            }
          });
        }
      });
    },

    // UUID生成方法
    getUUID () {
      return new Date().getTime();  // 返回时间戳作为UUID
    },

    // 返回操作
    back() {
      // 重置父组件状态
      this.parent.showFlag = true;
      this.parent.addOrUpdateFlag = false;
      this.parent.configCrossAddOrUpdateFlag = false;
      this.parent.contentStyleChange();
    },

    // 文件上传变更处理
    valueUploadChange(fileUrls) {
      this.ruleForm.value = fileUrls;  // 更新文件路径
      this.addEditUploadStyleChange()  // 重新计算上传区样式
    },

    // 动态样式设置
    addEditStyleChange() {
      this.$nextTick(() => {
        // input样式设置
        document.querySelectorAll('.addEdit-block .input .el-input__inner').forEach(el => {
          el.style.height = this.addEditForm.inputHeight
          el.style.color = this.addEditForm.inputFontColor
          el.style.fontSize = this.addEditForm.inputFontSize
          el.style.borderWidth = this.addEditForm.inputBorderWidth
          el.style.borderStyle = this.addEditForm.inputBorderStyle
          el.style.borderColor = this.addEditForm.inputBorderColor
          el.style.borderRadius = this.addEditForm.inputBorderRadius
          el.style.backgroundColor = this.addEditForm.inputBgColor
        })

        // label样式设置
        document.querySelectorAll('.addEdit-block .input .el-form-item__label').forEach(el => {
          el.style.lineHeight = this.addEditForm.inputHeight
          el.style.color = this.addEditForm.inputLableColor
          el.style.fontSize = this.addEditForm.inputLableFontSize
        })
        // 其他组件样式设置（select/date/upload/textarea等）...
      })
    },

    // 上传组件样式调整
    addEditUploadStyleChange() {
      this.$nextTick(() => {
        document.querySelectorAll('.addEdit-block .upload .el-upload-list--picture-card .el-upload-list__item').forEach(el => {
          el.style.width = this.addEditForm.uploadHeight
          el.style.height = this.addEditForm.uploadHeight
          el.style.borderWidth = this.addEditForm.uploadBorderWidth
          el.style.borderStyle = this.addEditForm.uploadBorderStyle
          el.style.borderColor = this.addEditForm.uploadBorderColor
          el.style.borderRadius = this.addEditForm.uploadBorderRadius
          el.style.backgroundColor = this.addEditForm.uploadBgColor
        })
      })
    },
  }
};
</script>
<style lang="scss">
.editor{
  height: 500px;  // 编辑器高度

  & /deep/ .ql-container {
	  height: 310px;  // Quill编辑器内容区域高度
  }
}

.amap-wrapper {
  width: 100%;    // 地图容器宽度
  height: 500px;  // 地图容器高度
}

.search-box {
  position: absolute;  // 搜索框绝对定位
}

.addEdit-block {
	margin: -10px;  // 容器外边距
}

.detail-form-content {
	padding: 12px;  // 表单内容内边距
}

.btn .el-button {
  padding: 0;  // 按钮内边距设为0
}
</style>
