<template>
  <!-- 主容器 -->
  <div class="addEdit-block">
    <!-- 表单组件 -->
    <el-form
      class="detail-form-content"
      ref="ruleForm" <!-- 表单引用 -->
      :model="ruleForm" <!-- 绑定表单数据模型 -->
      :rules="rules" <!-- 绑定验证规则 -->
      label-width="80px" <!-- 标签宽度 -->
      :style="{backgroundColor:addEditForm.addEditBoxColor}" <!-- 动态背景色 -->
    >
      <!-- 空行 -->
      <el-row></el-row>
      <!-- 评论内容区域 -->
      <el-row>
        <el-col :span="24"> <!-- 占满整列 -->
          <!-- 编辑模式下的评论内容输入框 -->
          <el-form-item class="textarea" v-if="type!='info'" label="评论内容" prop="content">
            <el-input
              style="min-width: 200px; max-width: 600px;" <!-- 输入框宽度限制 -->
              type="textarea" <!-- 文本域类型 -->
              :rows="8" <!-- 显示行数 -->
              placeholder="评论内容" <!-- 占位符 -->
              v-model="ruleForm.content" readonly> <!-- 双向绑定并只读 -->
            </el-input>
          </el-form-item>
          <!-- 查看模式下的评论内容显示 -->
          <div v-else>
            <el-form-item v-if="ruleForm.content" label="评论内容" prop="content">
                <span>{{ruleForm.content}}</span> <!-- 显示评论内容 -->
            </el-form-item>
          </div>
        </el-col>
      </el-row>
      <!-- 回复内容区域 -->
      <el-row>
        <el-col :span="24"> <!-- 占满整列 -->
          <!-- 编辑模式下的回复内容输入框 -->
          <el-form-item class="textarea" v-if="type!='info'" label="回复内容" prop="reply">
            <el-input
              style="min-width: 200px; max-width: 600px;" <!-- 输入框宽度限制 -->
              type="textarea" <!-- 文本域类型 -->
              :rows="8" <!-- 显示行数 -->
              placeholder="回复内容" <!-- 占位符 -->
              v-model="ruleForm.reply"> <!-- 双向绑定回复内容 -->
            </el-input>
          </el-form-item>
          <!-- 查看模式下的回复内容显示 -->
          <div v-else>
            <el-form-item v-if="ruleForm.reply" label="回复内容" prop="reply">
                <span>{{ruleForm.reply}}</span> <!-- 显示回复内容 -->
            </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)) {
        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","selectFontSize":"14px",...}, // 完整样式省略
      id: '', // 数据ID
      type: '', // 页面类型（新增/编辑/查看）
      ro:{ // 字段只读状态
        refid : false,
        userid : false,
        content : false,
        reply : false,
      },
      ruleForm: { // 表单数据模型
        refid: '',
        userid: '',
        content: '',
        reply: '',
      },
      rules: { // 表单验证规则
        refid: [
          { required: true, message: '关联表id不能为空', trigger: 'blur' }, // 必填校验
        ],
        userid: [
          { required: true, message: '用户id不能为空', trigger: 'blur' }, // 必填校验
        ],
        content: [
          { required: true, message: '评论内容不能为空', trigger: 'blur' }, // 必填校验
        ],
        reply: [] // 无校验
      }
    };
  },
  props: ["parent"], // 接收父组件传参
  computed: {}, // 计算属性
  created() { // 生命周期：创建时
    this.addEditStyleChange(); // 初始化样式
    this.addEditUploadStyleChange(); // 初始化上传样式
  },
  methods: {
    // 下载文件方法
    download(file){
      window.open(`${file}`); // 新窗口打开文件链接
    },
    // 初始化方法
    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=='refid'){ // 处理refid字段
            this.ruleForm.refid = obj[o];
            this.ro.refid = true; // 设置只读
            continue;
          }
          if(o=='userid'){ // 处理userid字段
            this.ruleForm.userid = obj[o];
            this.ro.userid = true; // 设置只读
            continue;
          }
          if(o=='content'){ // 处理content字段
            this.ruleForm.content = obj[o];
            this.ro.content = true; // 设置只读
            continue;
          }
          if(o=='reply'){ // 处理reply字段
            this.ruleForm.reply = obj[o];
            this.ro.reply = true; // 设置只读
            continue;
          }
        }
      }
    },
    // 获取详情数据
    info(id) {
      this.$http({
        url: `discusswoyaodangfangzhu/info/${id}`, // 请求路径
        method: "get" // 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: `discusswoyaodangfangzhu/${!this.ruleForm.id ? "save" : "update"}`, // 动态路径
            method: "post", // 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.discusswoyaodangfangzhuCrossAddOrUpdateFlag = false;
                  this.parent.search(); // 刷新数据
                  this.parent.contentStyleChange(); // 样式更新
                }
              });
            } else {
              this.$message.error(data.msg); // 错误提示
            }
          });
        }
      });
    },
    // 获取UUID
    getUUID () {
      return new Date().getTime(); // 返回时间戳
    },
    // 返回上一页
    back() {
      this.parent.showFlag = true; // 显示父组件
      this.parent.addOrUpdateFlag = false; // 关闭当前页
      this.parent.discusswoyaodangfangzhuCrossAddOrUpdateFlag = false;
      this.parent.contentStyleChange(); // 样式更新
    },
    // 动态样式调整
    addEditStyleChange() {
      this.$nextTick(()=>{ // 等待DOM更新
        // input样式应用
        document.querySelectorAll('.addEdit-block .input .el-input__inner').forEach(el=>{
          el.style.height = this.addEditForm.inputHeight; // 高度
          el.style.color = this.addEditForm.inputFontColor; // 字体颜色
          // ...其他样式设置（省略）
        });
        // textarea样式应用
        document.querySelectorAll('.addEdit-block .textarea .el-textarea__inner').forEach(el=>{
          el.style.height = this.addEditForm.textareaHeight; // 高度
          // ...其他样式设置（省略）
        });
        // 按钮样式应用
        document.querySelectorAll('.addEdit-block .btn .btn-success').forEach(el=>{
          el.style.width = this.addEditForm.btnSaveWidth; // 宽度
          // ...其他样式设置（省略）
        });
      })
    },
    // 上传控件样式调整
    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; // 高度
          // ...其他样式设置（省略）
        })
      })
    },
  }
};
</script>
<style lang="scss">
.editor{
  height: 500px; /* 编辑器高度 */
  & /deep/ .ql-container { /* 深度选择器覆盖子组件样式 */
	  height: 310px; /* 内容区高度 */
  }
}
.amap-wrapper { /* 地图容器 */
  width: 100%; /* 全宽 */
  height: 500px; /* 固定高度 */
}
.search-box { /* 搜索框定位 */
  position: absolute; /* 绝对定位 */
}
.addEdit-block { /* 主容器 */
	margin: -10px; /* 负边距抵消布局间隙 */
}
.detail-form-content { /* 表单内容 */
	padding: 12px; /* 内边距 */
}
.btn .el-button { /* 按钮样式 */
  padding: 0; /* 移除默认padding */
}
</style>
