<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-col :span="12">
          <el-form-item class="input" v-if="type!='info'"  label="用户名" prop="yonghuming">
            <!-- 输入框，非只读模式 -->
            <el-input v-model="ruleForm.yonghuming"
                      placeholder="用户名" clearable  :readonly="ro.yonghuming"></el-input>
          </el-form-item>
          <div v-else>
            <!-- 输入框，只读模式 -->
            <el-form-item class="input" label="用户名" prop="yonghuming">
              <el-input v-model="ruleForm.yonghuming"
                        placeholder="用户名" readonly></el-input>
            </el-form-item>
          </div>
        </el-col>
        <!-- 密码表单 -->
        <el-col :span="12">
          <el-form-item class="input" v-if="type!='info'"  label="密码" prop="mima">
            <el-input v-model="ruleForm.mima"
                      placeholder="密码" clearable  :readonly="ro.mima"></el-input>
          </el-form-item>
          <div v-else>
            <el-form-item class="input" label="密码" prop="mima">
              <el-input v-model="ruleForm.mima"
                        placeholder="密码" readonly></el-input>
            </el-form-item>
          </div>
        </el-col>
        <!-- 姓名表单 -->
        <el-col :span="12">
          <el-form-item class="input" v-if="type!='info'"  label="姓名" prop="xingming">
            <el-input v-model="ruleForm.xingming"
                      placeholder="姓名" clearable  :readonly="ro.xingming"></el-input>
          </el-form-item>
          <div v-else>
            <el-form-item class="input" label="姓名" prop="xingming">
              <el-input v-model="ruleForm.xingming"
                        placeholder="姓名" readonly></el-input>
            </el-form-item>
          </div>
        </el-col>
        <!-- 头像上传 -->
        <el-col :span="24">
          <el-form-item class="upload" v-if="type!='info' && !ro.touxiang" label="头像" prop="touxiang">
            <file-upload
                tip="点击上传头像"
                action="file/upload"
                :limit="3"
                :multiple="true"
                :fileUrls="ruleForm.touxiang?ruleForm.touxiang:''"
                @change="touxiangUploadChange"
            ></file-upload>
          </el-form-item>
          <div v-else>
            <el-form-item v-if="ruleForm.touxiang" label="头像" prop="touxiang">
              <img style="margin-right:20px;" v-bind:key="index" v-for="(item,index) in ruleForm.touxiang.split(',')" :src="item" width="100" height="100">
            </el-form-item>
          </div>
        </el-col>
        <!-- 性别下拉选择 -->
        <el-col :span="12">
          <el-form-item class="select" v-if="type!='info'"  label="性别" prop="xingbie">
            <el-select v-model="ruleForm.xingbie" placeholder="请选择性别">
              <el-option
                  v-for="(item,index) in xingbieOptions"
                  v-bind:key="index"
                  :label="item"
                  :value="item">
              </el-option>
            </el-select>
          </el-form-item>
          <div v-else>
            <el-form-item class="input" label="性别" prop="xingbie">
              <el-input v-model="ruleForm.xingbie"
                        placeholder="性别" readonly></el-input>
            </el-form-item>
          </div>
        </el-col>
        <!-- 职业表单 -->
        <el-col :span="12">
          <el-form-item class="input" v-if="type!='info'"  label="职业" prop="zhiye">
            <el-input v-model="ruleForm.zhiye"
                      placeholder="职业" clearable  :readonly="ro.zhiye"></el-input>
          </el-form-item>
          <div v-else>
            <el-form-item class="input" label="职业" prop="zhiye">
              <el-input v-model="ruleForm.zhiye"
                        placeholder="职业" readonly></el-input>
            </el-form-item>
          </div>
        </el-col>
        <!-- 联系电话表单 -->
        <el-col :span="12">
          <el-form-item class="input" v-if="type!='info'"  label="联系电话" prop="lianxidianhua">
            <el-input v-model="ruleForm.lianxidianhua"
                      placeholder="联系电话" clearable  :readonly="ro.lianxidianhua"></el-input>
          </el-form-item>
          <div v-else>
            <el-form-item class="input" label="联系电话" prop="lianxidianhua">
              <el-input v-model="ruleForm.lianxidianhua"
                        placeholder="联系电话" readonly></el-input>
            </el-form-item>
          </div>
        </el-col>
        <!-- 身份证表单 -->
        <el-col :span="12">
          <el-form-item class="input" v-if="type!='info'"  label="身份证" prop="shenfenzheng">
            <el-input v-model="ruleForm.shenfenzheng"
                      placeholder="身份证" clearable  :readonly="ro.shenfenzheng"></el-input>
          </el-form-item>
          <div v-else>
            <el-form-item class="input" label="身份证" prop="shenfenzheng">
              <el-input v-model="ruleForm.shenfenzheng"
                        placeholder="身份证" readonly></el-input>
            </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();
      }
    };
    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","btnCancelBorderColor":"rgba(152, 129, 129, 1)","inputBorderRadius":"22px","inputFontSize":"14px","textareaBgColor":"#fff","btnSaveFontSize":"14px","textareaBorderRadius":"22px","uploadBgColor":"#fff","textareaBorderStyle":"solid","btnCancelWidth":"88px","textareaHeight":"120px","dateBgColor":"#fff","btnSaveBorderRadius":"22px","uploadLableFontSize":"14px","textareaBorderWidth":"1px","inputLableColor":"#606266","addEditBoxColor":"rgba(210, 194, 194, 0.29)","dateIconFontSize":"14px","btnSaveBgColor":"#409EFF","uploadIconFontColor":"#8c939d","textareaBorderColor":"rgba(152, 129, 129, 1)","btnCancelBgColor":"rgba(143, 222, 143, 1)","selectLableColor":"#606266","btnSaveBorderStyle":"solid","dateBorderWidth":"1px","dateLableFontSize":"14px","dateBorderRadius":"22px","btnCancelBorderStyle":"solid","selectLableFontSize":"14px","selectBorderStyle":"solid","selectIconFontColor":"#C0C4CC","btnCancelHeight":"44px","inputHeight":"40px","btnCancelFontColor":"#606266","dateBorderColor":"rgba(152, 129, 129, 1)","dateIconFontColor":"#C0C4CC","uploadBorderStyle":"solid","dateBorderStyle":"solid","dateLableColor":"#606266","dateFontSize":"14px","inputBorderWidth":"1px","uploadIconFontSize":"28px","selectHeight":"40px","inputFontColor":"#606266","uploadHeight":"148px","textareaLableColor":"#606266","textareaLableFontSize":"14px","btnCancelFontSize":"14px","inputBorderStyle":"solid","btnCancelBorderRadius":"22px","inputBgColor":"rgba(252, 250, 250, 1)","inputLableFontSize":"14px","uploadLableColor":"#606266","uploadBorderRadius":"22px","btnSaveHeight":"44px","selectBgColor":"#fff","btnSaveWidth":"88px","selectIconFontSize":"14px","dateHeight":"40px","selectBorderColor":"rgba(152, 129, 129, 1)","inputBorderColor":"rgba(152, 129, 129, 1)","uploadBorderColor":"rgba(152, 129, 129, 1)","textareaFontColor":"#606266","selectBorderWidth":"1px","dateFontColor":"#606266","btnCancelBorderWidth":"1px","uploadBorderWidth":"1px","textareaFontSize":"14px","selectBorderRadius":"22px","selectFontColor":"#606266","btnSaveBorderColor":"#409EFF","btnSaveBorderWidth":"1px"},
      // 表单ID
      id: '',
      // 表单类型
      type: '',
      // 是否只读
      ro:{
        yonghuming : false,
        mima : false,
        xingming : false,
        touxiang : false,
        xingbie : false,
        zhiye : false,
        lianxidianhua : false,
        shenfenzheng : false,
      },
      // 表单数据
      ruleForm: {
        yonghuming: '',
        mima: '',
        xingming: '',
        touxiang: '',
        xingbie: '',
        zhiye: '',
        lianxidianhua: '',
        shenfenzheng: '',
      },
      // 性别选项
      xingbieOptions: [],
      // 表单验证规则
      rules: {
        yonghuming: [
          { required: true, message: '用户名不能为空', trigger: 'blur' },
        ],
        mima: [
          { required: true, message: '密码不能为空', trigger: 'blur' },
        ],
        xingming: [
        ],
        touxiang: [
        ],
        xingbie: [
        ],
        zhiye: [
        ],
        lianxidianhua: [
          { validator: validateMobile, trigger: 'blur' },
        ],
        shenfenzheng: [
          { validator: validateIdCard, trigger: 'blur' },
        ],
      }
    };
  },
  // 父组件传入参数
  props: ["parent"],
  computed: {
  },
  created() {
    this.addEditStyleChange()
    this.addEditUploadStyleChange()
  },
  methods: {
    // 下载文件
    download(file){
      window.open(`${file}`)
    },
    // 初始化表单
    init(id,type) {
      if (id) {
        this.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=='yonghuming'){
            this.ruleForm.yonghuming = obj[o];
            this.ro.yonghuming = true;
            continue;
          }
          if(o=='mima'){
            this.ruleForm.mima = obj[o];
            this.ro.mima = true;
            continue;
          }
          if(o=='xingming'){
            this.ruleForm.xingming = obj[o];
            this.ro.xingming = true;
            continue;
          }
          if(o=='touxiang'){
            this.ruleForm.touxiang = obj[o];
            this.ro.touxiang = true;
            continue;
          }
          if(o=='xingbie'){
            this.ruleForm.xingbie = obj[o];
            this.ro.xingbie = true;
            continue;
          }
          if(o=='zhiye'){
            this.ruleForm.zhiye = obj[o];
            this.ro.zhiye = true;
            continue;
          }
          if(o=='lianxidianhua'){
            this.ruleForm.lianxidianhua = obj[o];
            this.ro.lianxidianhua = true;
            continue;
          }
          if(o=='shenfenzheng'){
            this.ruleForm.shenfenzheng = obj[o];
            this.ro.shenfenzheng = true;
            continue;
          }
        }
      }
      // 获取用户信息
      this.$http({
        url: `${this.$storage.get('sessionTable')}/session`,
        method: "get"
      }).then(({ data }) => {
        if (data && data.code === 0) {
          var json = data.data;
        } else {
          this.$message.error(data.msg);
        }
      });
      this.xingbieOptions = "男,女".split(',')
    },
    // 获取表单详情
    info(id) {
      this.$http({
        url: `yonghu/info/${id}`,
        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: `yonghu/${!this.ruleForm.id ? "save" : "update"}`,
            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.yonghuCrossAddOrUpdateFlag = false;
                  this.parent.search();
                  this.parent.contentStyleChange();
                }
              });
            } else {
              this.$message.error(data.msg);
            }
          });
        }
      });
    },
    // 获取唯一标识符
    getUUID () {
      return new Date().getTime();
    },
    // 返回上一页
    back() {
      this.parent.showFlag = true;
      this.parent.addOrUpdateFlag = false;
      this.parent.yonghuCrossAddOrUpdateFlag = false;
      this.parent.contentStyleChange();
    },
    // 头像上传变更
    touxiangUploadChange(fileUrls) {
      this.ruleForm.touxiang = fileUrls;
      this.addEditUploadStyleChange()
    },
    // 表单样式变更
    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
          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
        })
        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样式更新
        document.querySelectorAll('.addEdit-block .select .el-input__inner').forEach(el=>{
          el.style.height = this.addEditForm.selectHeight
          el.style.color = this.addEditForm.selectFontColor
          el.style.fontSize = this.addEditForm.selectFontSize
          el.style.borderWidth = this.addEditForm.selectBorderWidth
          el.style.borderStyle = this.addEditForm.selectBorderStyle
          el.style.borderColor = this.addEditForm.selectBorderColor
          el.style.borderRadius = this.addEditForm.selectBorderRadius
          el.style.backgroundColor = this.addEditForm.selectBgColor
        })
        document.querySelectorAll('.addEdit-block .select .el-form-item__label').forEach(el=>{
          el.style.lineHeight = this.addEditForm.selectHeight
          el.style.color = this.addEditForm.selectLableColor
          el.style.fontSize = this.addEditForm.selectLableFontSize
        })
        document.querySelectorAll('.addEdit-block .select .el-select__caret').forEach(el=>{
          el.style.color = this.addEditForm.selectIconFontColor
          el.style.fontSize = this.addEditForm.selectIconFontSize
        })
        // date样式更新
        document.querySelectorAll('.addEdit-block .date .el-input__inner').forEach(el=>{
          el.style.height = this.addEditForm.dateHeight
          el.style.color = this.addEditForm.dateFontColor
          el.style.fontSize = this.addEditForm.dateFontSize
          el.style.borderWidth = this.addEditForm.dateBorderWidth
          el.style.borderStyle = this.addEditForm.dateBorderStyle
          el.style.borderColor = this.addEditForm.dateBorderColor
          el.style.borderRadius = this.addEditForm.dateBorderRadius
          el.style.backgroundColor = this.addEditForm.dateBgColor
        })
        document.querySelectorAll('.addEdit-block .date .el-form-item__label').forEach(el=>{
          el.style.lineHeight = this.addEditForm.dateHeight
          el.style.color = this.addEditForm.dateLableColor
          el.style.fontSize = this.addEditForm.dateLableFontSize
        })
        document.querySelectorAll('.addEdit-block .date .el-input__icon').forEach(el=>{
          el.style.color = this.addEditForm.dateIconFontColor
          el.style.fontSize = this.addEditForm.dateIconFontSize
          el.style.lineHeight = this.addEditForm.dateHeight
        })
        // upload样式更新
        let iconLineHeight = parseInt(this.addEditForm.uploadHeight) - parseInt(this.addEditForm.uploadBorderWidth) * 2 + 'px'
        document.querySelectorAll('.addEdit-block .upload .el-upload--picture-card').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
        })
        document.querySelectorAll('.addEdit-block .upload .el-form-item__label').forEach(el=>{
          el.style.lineHeight = this.addEditForm.uploadHeight
          el.style.color = this.addEditForm.uploadLableColor
          el.style.fontSize = this.addEditForm.uploadLableFontSize
        })
        document.querySelectorAll('.addEdit-block .upload .el-icon-plus').forEach(el=>{
          el.style.color = this.addEditForm.uploadIconFontColor
          el.style.fontSize = this.addEditForm.uploadIconFontSize
          el.style.lineHeight = iconLineHeight
          el.style.display = 'block'
        })
        // 多文本输入框
        document.querySelectorAll('.addEdit-block .textarea .el-textarea__inner').forEach(el=>{
          el.style.height = this.addEditForm.textareaHeight
          el.style.color = this.addEditForm.textareaFontColor
          el.style.fontSize = this.addEditForm.textareaFontSize
          el.style.borderWidth = this.addEditForm.textareaBorderWidth
          el.style.borderStyle = this.addEditForm.textareaBorderStyle
          el.style.borderColor = this.addEditForm.textareaBorderColor
          el.style.borderRadius = this.addEditForm.textareaBorderRadius
          el.style.backgroundColor = this.addEditForm.textareaBgColor
        })
        document.querySelectorAll('.addEdit-block .textarea .el-form-item__label').forEach(el=>{
          // el.style.lineHeight = this.addEditForm.textareaHeight
          el.style.color = this.addEditForm.textareaLableColor
          el.style.fontSize = this.addEditForm.textareaLableFontSize
        })
        // 保存按钮样式更新
        document.querySelectorAll('.addEdit-block .btn .btn-success').forEach(el=>{
          el.style.width = this.addEditForm.btnSaveWidth
          el.style.height = this.addEditForm.btnSaveHeight
          el.style.color = this.addEditForm.btnSaveFontColor
          el.style.fontSize = this.addEditForm.btnSaveFontSize
          el.style.borderWidth = this.addEditForm.btnSaveBorderWidth
          el.style.borderStyle = this.addEditForm.btnSaveBorderStyle
          el.style.borderColor = this.addEditForm.btnSaveBorderColor
          el.style.borderRadius = this.addEditForm.btnSaveBorderRadius
          el.style.backgroundColor = this.addEditForm.btnSaveBgColor
        })
        // 返回按钮样式更新
        document.querySelectorAll('.addEdit-block .btn .btn-close').forEach(el=>{
          el.style.width = this.addEditForm.btnCancelWidth
          el.style.height = this.addEditForm.btnCancelHeight
          el.style.color = this.addEditForm.btnCancelFontColor
          el.style.fontSize = this.addEditForm.btnCancelFontSize
          el.style.borderWidth = this.addEditForm.btnCancelBorderWidth
          el.style.borderStyle = this.addEditForm.btnCancelBorderStyle
          el.style.borderColor = this.addEditForm.btnCancelBorderColor
          el.style.borderRadius = this.addEditForm.btnCancelBorderRadius
          el.style.backgroundColor = this.addEditForm.btnCancelBgColor
        })
      })
    },
    addEditUploadStyleChange() {  // 文件上传样式变更
      this.$nextTick(()=>{  // DOM更新后执行
        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;
  }
}
.amap-wrapper {
  width: 100%;
  height: 500px;
}
.search-box {
  position: absolute;
}
.addEdit-block {
  margin: -10px; // 外边距
}
.detail-form-content {
  padding: 12px; // 内边距
}
.btn .el-button {
  padding: 0; // 按钮填充
}
</style>