<template>
  <!-- 弹出框表单 -->
  <el-drawer
    :title="title"
    :visible.sync="open"
    :direction="direction"
    :destroy-on-close="true"
    size="80%"
  >
    <el-form ref="form" :model="form" :rules="rules" label-width="140px" style="padding:0 40px;">
      <el-row>
        <Field label="企业名称" prop="companyName" v-model="form.companyName" placeholder="请输入企业名称" />
        <Field label="联系电话" prop="contactPhone" v-model="form.contactPhone" placeholder="请输入联系电话" />
        <!-- <Field label="公司编码" prop="companyCode" v-model="form.companyCode" placeholder="请输入公司编码"/>
                            <Field label="注册号" prop="registrationNumber" v-model="form.registrationNumber" placeholder="请输入注册号"/>
                            <Field label="法定代表人" prop="legalRepresentative" v-model="form.legalRepresentative" placeholder="请输入法定代表人"/>
                            <Field label="注册资本" prop="registeredCapital" v-model="form.registeredCapital" placeholder="请输入注册资本"/>
                            <Field label="公司类型" prop="companyType" v-model="form.companyType" placeholder="请输入公司类型"/>
        <Field :span="24" label="经营范围" prop="businessScope" v-model="form.businessScope" placeholder="请输入经营范围"/>-->
        <!-- <Field :span="24" label="经营地址" prop="businessAdress" v-model="form.businessAdress" placeholder="请输入经营地址">
                              <p>当前选中的行政区划编码为: {{regionCodeList}}</p>
                              <el-cascader  v-model="regionCodeList" :props="areaprops"></el-cascader>
        </Field>-->

        <Field
          :span="24"
          label="经营地址"
          prop="businessAdress"
          placeholder="请输入经营地址"
        >
          <area-select ref="areaselect" v-model="form.areaCode" @addressSelect="addressSelect"></area-select>
        </Field>

        <!-- <Field label="所在地" prop="location" v-model="form.location" placeholder="请输入所在地"/> -->
        <Field prop="location" v-model="form.location" placeholder="请输入详细地址" />
        <!-- <Field label="电子邮件地址" prop="email" v-model="form.email" placeholder="请输入电子邮件地址"/>
                            <Field label="公司网站" prop="website" v-model="form.website" placeholder="请输入公司网站"/>
                            <Field label="税务登记号" prop="taxRegistrationNumber" v-model="form.taxRegistrationNumber" placeholder="请输入税务登记号"/>
                            <Field label="社会信用代码" prop="socialCreditCode" v-model="form.socialCreditCode" placeholder="请输入社会信用代码"/>
                            <Field label="商标信息" prop="trademarkInfo" v-model="form.trademarkInfo" placeholder="请输入商标信息"/>
                            <Field label="网站历史备案信息" prop="websiteRegistrationInfo" v-model="form.websiteRegistrationInfo" placeholder="请输入网站历史备案信息"/>
                            <Field label="员工总数" prop="totalEmployees" v-model="form.totalEmployees"   placeholder="员工总数"/>
                            <Field label="软件著作权数量" prop="softNum" v-model="form.softNum"  placeholder="软件著作权数量"/>
                            <Field label="专利数量" prop="patentNum" v-model="form.patentNum" placeholder="专利数量"/>
                            <Field label="历史发展" prop="hisDevelop" v-model="form.hisDevelop" type="textarea" placeholder="请输入历史发展"/>
                            <Field label="经度" prop="lon" v-model="form.lon" placeholder="请输入经度"/>
        <Field label="纬度" prop="lati" v-model="form.lati" placeholder="请输入纬度"/>-->
        <!-- <Field label="公司文化" prop="companyCulture" v-model="form.companyCulture" type="textarea" placeholder="请输入公司文化"/>
                            <Field label="排序" prop="sort" v-model="form.sort" type="num" placeholder="请输入排序"/>
        <Field label="成立日期" prop="establishDate" v-model="form.establishDate" type="date" />-->

        <Field :span="24" label="企业logo">
          <imageUpload v-model="form.logoPath" prePath="/file/preview" />
        </Field>
        <Field :span="24" label="企业标签">
          <el-select
            v-model="companyLabelsList"
            multiple
            placeholder="请选择企业标签"
            :style="{ width: '590px' }"
          >
            <el-option
              v-for="($label, $value) in dict.labels"
              :key="$value"
              :label="$label"
              :value="$value"
            ></el-option>
          </el-select>
        </Field>
        <Field
          label="公司介绍"
          prop="companyIntroduction"
          v-model="form.companyIntroduction"
          type="textarea"
          placeholder="请输入公司介绍"
        />
        <!-- <Field :span="24" label="企业视频"><fileUpload v-model="form.companyVideoPath" :fileType="[ 'mp4', 'avi']"  prePath="/file/fileupload"/></Field>
              <Field :span="24" label="企业宣传图片"><fileUpload v-model="form.companyPicPath" :fileType="['png', 'jpg', 'jpeg']" prePath="/file/preview"/></Field>

        <Field :span="24" label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/>-->
      </el-row>
      <Field :span="24" label="知识产权">
        <el-table
          class="zhshchq"
          :data="companyPatentsList"
          :row-class-name="rowCompanyPatentsIndex"
          @selection-change="handleCompanyPatentsSelectionChange"
          ref="companyPatents"
        >
          <!-- <el-table-column type="selection" width="50" align="center" /> -->
          <el-table-column label="序号" align="center" prop="index" width="50" />
          <el-table-column label="知识产权类型" align="center" prop="intellectPropertyType">
            <template slot-scope="scope">
              <el-input v-model="scope.row.intellectPropertyType" placeholder="请输入知识产权类型" />
            </template>
          </el-table-column>

          <el-table-column label="知识产权数量" prop="labelId" align="center">
            <template slot-scope="scope">
              <el-input-number
                v-model="scope.row.intellectPropertyNum"
                size="small"
                placeholder="请输入知识产权数量"
              ></el-input-number>
            </template>
          </el-table-column>

          <el-table-column label="操作" width="240">
            <template slot-scope="scope">
              <Confirm @confirm="handleDeleteCompanyPatents(scope.row)" message="确定要删除该条知识产权吗?">
                <div class="del">删除</div>
              </Confirm>
            </template>
          </el-table-column>
        </el-table>
        <el-row
          style="margin:10px 0;display: flex;justify-content: center;"
          :gutter="10"
          class="mb8"
        >
          <el-col :span="1.5">
            <el-button type="primary" icon="el-icon-plus" @click="handleAddCompanyPatents">新增知识产权</el-button>
          </el-col>
        </el-row>

        <el-form-item v-if="pageInfo.type!='view'" class="formbtns">
          <el-button type="primary" @click="hanndleSubmit" icon="el-icon-circle-check-outline">保存</el-button>
          <el-button @click="open=false" icon="el-icon-circle-close-outline">取消</el-button>
        </el-form-item>
      </Field>
    </el-form>
  </el-drawer>
</template>

<script>
import form from "@/assets/mixins/formdialog";
import Confirm from "@/components/Confirm.vue";
export default {
  name: "CompanyDetail",
  mixins: [form],
  components: {
    Confirm
  },
  created() {
    this.changePath("company");
  },
  data() {
    let that = this;
    var checkPhone = (rule,value,callback) =>{
      let phoneReg = /^(((\d{3,4}-)?[0-9]{7,8})|(1(3|4|5|6|7|8|9)\d{9}))$/
      if(!value){
        callback()
      }else{
        if(phoneReg.test(value)){
          callback()
        }else{
          callback(new Error("请输入正确的联系电话"))
        }
      }
    }
    return {
      regionCodeList: [],
      areaprops: {
        // 单选
        checkStrictly: true,
        // 懒加载
        lazy: true,
        lazyLoad(node, resolve) {
          var param = {
            pid: node.level === 0 ? 0 : node.data.id,
            size: -1
          };

          that.$post("/base/area/list", param).then(res => {
            console.log(res);
            let nodes = res.data.data.map(item => {
              return {
                value: item.areaCode,
                label: item.name,
                id: item.iid,
                leaf: item.haveSonArea === "False"
              };
            });
            resolve(nodes);
          });
        }
      },
      // 子表选中数据
      checkedCompanyLabels: [],
      // 公司标注表格数据
      companyLabelsList: [],
      // 子表选中数据
      checkedCompanyPatents: [],
      // 公司专利表格数据
      companyPatentsList: [],
      // 遮罩层
      loading: true,
      // 弹出层标题
      title: "公司",
      // 是否显示弹出层
      open: false,
      direction: "rtl",
      toString: ["labelId"],
      toDate: ["establishDate"],
      // 表单校验
      rules: {
        companyName: [
          { required: true, message: "请输入公司名称", trigger: "blur" },
          { max: 128, message: "最多只能录入128个字符", trigger: "blur" }
        ],
        areaCode: [
          { required: true, message: "请输入所属区域编码", trigger: "blur" },
          { max: 128, message: "最多只能录入128个字符", trigger: "blur" }
        ],
        areaName: [
          { required: true, message: "请输入所属区域名称", trigger: "blur" },
          { max: 128, message: "最多只能录入128个字符", trigger: "blur" }
        ],
        contactPhone: [
          { required: true, message: "请输入联系电话", trigger: "blur" },
          { validator: checkPhone,trigger: "blur" },
          { max: 32, message: "最多只能录入32个字符", trigger: "blur" }
        ],
        lon: [
          { required: true, message: "请输入经度", trigger: "blur" },
          { max: 32, message: "最多只能录入32个字符", trigger: "blur" }
        ],
        lati: [
          { required: true, message: "请输入纬度", trigger: "blur" },
          { max: 32, message: "最多只能录入32个字符", trigger: "blur" }
        ],
        logoPath: [
          { required: true, message: "请输入企业logo", trigger: "blur" },
          { max: 128, message: "最多只能录入128个字符", trigger: "blur" }
        ],
        establishDate: [{ required: true, message: "请选择成立日期" }],
        createTime: [{ required: true, message: "请选择创建时间" }]
      }
    };
  },

  methods: {
    hanndleSubmit(){
      this.form.businessAdress = this.$refs.areaselect.provinceName+this.$refs.areaselect.cityName+this.$refs.areaselect.areaName+this.$refs.areaselect.streetName+this.$refs.areaselect.communityName+this.form.location
      // 检查知识产权list中类型不能为空
      if(this.companyPatentsList && this.companyPatentsList.length>0){
        let isNull = false
        this.companyPatentsList.forEach((item)=>{
          if (!item.intellectPropertyType) {
            isNull = true
          }
        })
        if(isNull){
          this.$confirm('知识产权类型不能为空', '提示', {
              confirmButtonText: '确定',
              type: 'warning',
              showCancelButton: false, //是否显示取消按钮
              showClose: false, //是否显示关闭按钮
          })
          return;
        }
      }
      this.submitForm()
    },
    addressSelect(val) {
      console.log("addressSelect", val);
    },

    /** 公司标注序号 */
    rowCompanyLabelsIndex({ row, rowIndex }) {
      row.index = rowIndex + 1;
    },

    /** 公司专利序号 */
    rowCompanyPatentsIndex({ row, rowIndex }) {
      row.index = rowIndex + 1;
    },
    /** 公司专利添加按钮操作 */
    handleAddCompanyPatents() {
      let obj = {};
      obj.companyId = "";
      obj.intellectPropertyType = "";
      obj.intellectPropertyNum = 1;
      obj.remark = "";
      obj.createUserId = "";
      obj.createTime = "";
      obj.updateUserId = "";
      obj.updateTime = "";
      this.companyPatentsList.push(obj);
    },
    /** 公司专利删除按钮操作 */

    handleDeleteCompanyPatents(row) {
      // 由于有一些知识产权还没有id,所以这里删除选用的是字段中带的index
      this.companyPatentsList = this.companyPatentsList.filter(
        item => item.index !== row.index
      );
      this.form.companyPatentsList = this.companyPatentsList;
    },
    /** 单选框选中数据 */
    handleCompanyPatentsSelectionChange(selection) {
      if (selection.length > 1) {
        this.$refs.companyPatents.clearSelection();
        this.$refs.companyPatents.toggleRowSelection(selection.pop());
      } else {
        this.checkedCompanyPatents = selection;
      }
    },

    // 渲染前置处理
    beforeRender(data) {
      if (data.entity.companyLabelsList) {
        let arr = [];
        data.entity.companyLabelsList.forEach(item => {
          //如果相等做操作
          item["labelId"] = item["labelId"] + "";
          arr.push(item.labelId);
        });
        this.companyLabelsList = arr;
      }
      if (data.entity.companyPatentsList) {
        this.companyPatentsList = data.entity.companyPatentsList;
      }

      return data;
    },
    /** 编辑 */
    edit(row) {
      this.reset();
      this.query = { id: row.id };
      this.urls.currUrl = "company/edit";
      this.getData();
      this.pageInfo.type = "edit";
      this.title = "编辑企业信息";
    },
    /** 新增 */
    add(row) {
      this.reset();
      this.urls.currUrl = "company/add";
      this.getData();
      this.pageInfo.type = "add";
      this.title = "新增企业";
    },
    /** 查看*/
    view(row) {
      this.reset();
      this.query = { id: row.id };
      this.urls.currUrl = "company/view";
      this.getData();
      this.pageInfo.type = "view";
      this.title = "企业详情";
    },
    /**取消按钮 */
    cancel() {
      this.open = false;
    },
    /**获取数据后弹框 */
    afterRender(data) {
      this.open = true;
    },

    afterSubmit(data) {
      this.open = false;
      this.$emit("ok");
    },

    // 表单重置
    reset() {
      this.form = {
        companyName: "",
        companyCode: "",
        registrationNumber: "",
        legalRepresentative: "",
        registeredCapital: "",
        companyType: "",
        businessScope: "",
        businessAdress: "",
        location: "",
        areaCode: "",
        areaName: "",
        contactPhone: "",
        email: "",
        website: "",
        taxRegistrationNumber: "",
        socialCreditCode: "",
        trademarkInfo: "",
        websiteRegistrationInfo: "",
        totalEmployees: null,
        softNum: null,
        patentNum: null,
        hisDevelop: "",
        lon: "",
        lati: "",
        logoPath: "",
        companyVideoPath: "",
        companyPicPath: "",
        companyIntroduction: "",
        companyCulture: "",
        sort: 0,
        establishDate: null,
        remark: "",
        companyLabelsList: [],
        companyPatentsList: []
      };
      this.resetForm("form");
    },
    resetForm(refName) {
      if (this.$refs[refName]) {
        this.$refs[refName].resetFields();
      }
    }
  },
  watch: {
    companyLabelsList(newval) {
      let arr = [];
      newval.forEach(item => {
        arr.push({
          labelId: item
        });
      });
      this.form.companyLabelsList = arr;
    }
  }
};
</script>

<style lang="less" scoped>
.del {
  color: red;
}
.formbtns {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  height: 60px;
  margin-top: 30px;
}
.zhshchq {
  margin-top: 20px;
}
</style>