<template>
  <div class="mainContentBox">
    <avue-form
      ref="formRef"
      v-model:search="search"
      v-model="form"
      :data="data"
      :option="option2"
      v-model:page="page"
      @row-save="createRow"
      @row-update="updateRow"
      @row-del="deleteRow"
      @search-change="searchChange"
      @size-change="dataList"
      @current-change="dataList"
      @selection-change="selectionChange"
    />
    <avue-crud
      ref="crudRef"
      v-model="form"
      :data="data"
      :option="option"
      v-model:page="page"
      @row-save="createRow"
      @row-update="updateRow"
      @row-del="deleteRow"
    >
      <template #skillDictValue="{ row, index, type }">
        <el-select
          v-model="row.skillValue"
          placeholder="请选择技能"
          @click="getPostSkills()"
          @change="skillChange(row)"
        >
          <el-option
            v-for="item in optionSkill"
            :key="item.value"
            :label="item.skillDictLabel"
            :value="item.skillDictValue"
          />
        </el-select>
      </template>
      <template #menu-left="{ size }">
        <el-button type="primary" icon="el-icon-plus" circle @click="addSkill"
      /></template>
    </avue-crud>
    <CommonTable
      ref="ctableRef"
      tableTitle="员工选择"
      tableType="USERS"
      @selected-sure="onSelectedFinish"
    />
    <div class="detail-footer">
      <el-button type="primary" @click="onHandle"> 确定 </el-button>
      <el-button @click="cancelWindow">取消</el-button>
    </div>
  </div>
</template>
<script setup>
import { ref, getCurrentInstance } from "vue";
import { useCrud } from "@/hooks/userCrud";
import ButtonPermKeys from "@/common/configs/buttonPermission";
import { useCommonStoreHook, useDictionaryStore } from "@/store";
import dictDataUtil from "@/common/configs/dictDataUtil";
import SingleUpload from "@/components/Upload/SingleUpload.vue";
const { isShowTable, tableType } = toRefs(useCommonStoreHook());
import { getPostSkill, addEmployeeSkill } from "@/api/system/skill";
// 数据字典相关
const { dicts } = useDictionaryStore();

const test = () => {
  isShowTable.value = true;
  tableType.value = tableType.value == 1 ? 2 : 1;
};
const data2 = ref(null);
// 传入一个url，后面不带/
const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  useCrud({
    src: "/api/v1/sys/skillScore",
  });
const {
  dataList,
  createRow,
  updateRow,
  deleteRow,
  searchChange,
  dataNoPageList,
} = Methords; //增删改查
const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
// checkBtnPerm(ButtonPermKeys.PLAN.BTNS.order_add) :permission="permission"
// const permission = reactive({
//   delBtn: checkPerm(buttonPermission.PLAN.BTNS.order_del),
//   addBtn: checkPerm(buttonPermission.PLAN.BTNS.order_add),
//   editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
//   menu: true,
// });
const option2 = ref(null);
const ctableRef = ref(null); //crudRef.value 获取avue-crud对象
const router = useRouter();

onMounted(() => {
  // console.log("crudRef", crudRef)
  //dataNoPageList();
});
const skillChange = (row) => {
  if (
    row.skillValue !== undefined &&
    row.skillValue !== null &&
    row.skillValue !== ""
  ) {
    data.value[row.$index].skillDictValue = row.skillValue;
  }
  console.log(data.value);
};
const cancelWindow = () => {
  props.dialog.visible = false;
};
const addSkill = () => {
  const bom = ref({
    $cellEdit: true,
  });
  data.value.push(bom.value);
};
const employeeSkill = ref({});
const onHandle = () => {
  console.info(form.value);
  if (
    form.value.userId === null ||
    form.value.userId === undefined ||
    form.value.userId === ""
  ) {
    ElMessage({
      message: "未选择打分用户",
      type: "error",
    });
    return false;
  }
  if (
    form.value.postId === null ||
    form.value.postId === undefined ||
    form.value.postId === ""
  ) {
    ElMessage({
      message: "未选择岗位",
      type: "error",
    });
    return false;
  }
  console.info("data", data.value);
  if (data.value.length === 0) {
    ElMessage({
      message: "没有要保存的打分项",
      type: "error",
    });
    return false;
  }
  if (data.value.length > 0) {
    for (let i = 0; i < data.value.length; i++) {
      if (
        data.value[i].skillDictValue === undefined ||
        data.value[i].skillDictValue === null ||
        data.value[i].skillDictValue === ""
      ) {
        ElMessage({
          message: "第" + (i + 1) + "项没有选择技能",
          type: "error",
        });
        return false;
      }
      if (
        data.value[i].score === undefined ||
        data.value[i].score === null ||
        data.value[i].score === ""
      ) {
        ElMessage({
          message: "第" + (i + 1) + "项没有打分",
          type: "error",
        });
        return false;
      }
    }
  }
  employeeSkill.value.userId = form.value.userId;
  employeeSkill.value.postId = form.value.postId;
  employeeSkill.value.skillList = Array.from(data.value);
  console.info("11", employeeSkill.value);
  addEmployeeSkill(employeeSkill.value).then((data) => {
    if (data.code === "200") {
      ElMessage({
        message: data.msg,
        type: "success",
      });
      props.dialog.visible = false;
    } else {
      ElMessage({
        message: data.msg,
        type: "error",
      });
    }
  });
};

const postIdValue = ref(null);
// 设置表格列或者其他自定义的option
option2.value = {
  selection: true,
  submitBtn: false,
  clearAbleBtn: false,
  emptyBtn: false,
  column: [
    {
      label: "用户id",
      prop: "userId",
      width: 130,
      overHidden: true,
      search: true,
      filterable: true,
      disabled: true,
      display: false,
    },
    {
      label: "用户名",
      prop: "userName",
      width: 140,
      overHidden: true,
      search: true,
      rules: [
        {
          required: true,
          search: true,
          message: "请选择员工姓名",
          trigger: "blur",
        },
      ],
      click: ({ value, column }) => {
        ctableRef.value.startSelect();
      },
    },
    /*{
          label: "所属机构",
          prop: "institution",
          width: 130,
          overHidden: true,
          search: true,
          filterable: true,
          disabled: true,
        },*/
    {
      label: "员工编号",
      prop: "employeeCode",
      search: true,
      disabled: true,
    },
    {
      label: "岗位",
      prop: "postId",
      search: true,
      filterable: true,
      type: "select",
      overHidden: true,
      dicUrl: dictDataUtil.post_list_url,
      dicMethod: "post",
      change: ({ value, column }) => {
        if (value !== undefined) {
          postIdValue.value = value;
          data.value = [];
          optionSkill.value = null;
        }
      },
      props: { label: "postName", value: "id" },
    },
    { label: "部门", prop: "deptName", overHidden: true, disabled: true },
  ],
};

const props = defineProps({
  dialog: {
    type: Object,
    default: () => {
      return {};
    },
  },
});
// 设置表格列或者其他自定义的option
option.value = Object.assign(option.value, {
  selection: false,
  addBtn: false,
  viewBtn: false,
  editBtn: false,
  saveBtn: false,

  cellBtn: true,
  column: [
    {
      label: "技能",
      prop: "skillDictValue",
      align: "center",
      headerAlign: "center",
      span: 24,
      type: "select",
      dicData: dicts.skill_type,
      props: { label: "dictLabel", value: "dictValue" },
    },
    {
      label: "分数",
      prop: "score",
      align: "center",
      headerAlign: "center",
      cell: true,
      type: "number",
      precision: 2,
      max: 100,
      min: 0,
      span: 24,
    },
  ],
});
const onSelectedFinish = (selectedValue) => {
  form.value.userId = selectedValue.id;
  form.value.userName = selectedValue.userName;
  form.value.deptName = selectedValue.deptName;
  form.value.employeeCode = selectedValue.employeeCode;
  //form.value.institution = selectedValue.institution;
};
const optionSkill = ref([]);
const getPostSkills = () => {
  if (
    postIdValue.value === undefined ||
    postIdValue.value === null ||
    postIdValue.value === ""
  ) {
    ElMessage({
      message: "未选择岗位",
      type: "error",
    });
    return false;
  }
  getPostSkill(postIdValue.value).then((data) => {
    optionSkill.value = Array.from(data.data);
  });
};
</script>
<style type="text/css">
.title-detail {
  width: 30%;
  height: 50px;
  line-height: 50px;
  margin: 25px 20px 25px 0;
  float: left;
}
.detail {
  margin: 0 auto;
  width: 100%;
}
.avue-crud {
  float: left;
}
.detail-footer {
  float: right;
  margin-top: 15px;
}
.el-select__selection {
  width: 150px;
}
</style>
