<!--
 * @description: 编辑指标规则
 * @fileName: EditRule
 * @author: 17076
 * @date: 2024/6/14-上午10:43
 * @version: V1.0.0
-->

<template>
  <cs-drawer
    :drawer-option="drawerOption"
    @onReset="handleReset"
    @onSubmit="handleSubmit"
  >
    <div slot="content">
      <el-steps :active="activeStep" align-center>
        <el-step title="指标基础信息" description="设置指标名称及原子指标项目" />
        <el-step title="指标规则" description="模型按规则分析案件指标" />
      </el-steps>
      <el-form
        v-if="activeStep === 0"
        ref="form"
        :model="ruleForm"
        :rules="rules"
        label-width="90px"
        style="margin-top: 20px"
      >
        <el-row :gutter="10">
          <el-col :span="24">
            <el-form-item label="指标名称" prop="name">
              <el-input v-model="ruleForm['name']" placeholder="请输入指标名称" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="指标简称" prop="shortName">
              <el-input v-model="ruleForm['shortName']" placeholder="请输入指标简称" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="指标分数" prop="indexScore">
              <el-input v-model="ruleForm['indexScore']" placeholder="请输入指标分数" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="指标类型" prop="indexType">
              <el-select v-model="ruleForm['indexType']" placeholder="请选择指标类型" @change="handleChange">
                <el-option v-for="item in indexTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="案件类型" prop="caseType">
              <el-select v-model="ruleForm['caseType']" placeholder="请选择案件类型" multiple>
                <el-option v-for="item in caseTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label="原子指标" prop="atomicIndexList">
              <el-button type="primary" @click="handleSelectAtomic">请选择</el-button>
              <!-- <span
                v-if="ruleForm['atomicIndexList'] && ruleForm['atomicIndexList'].length > 0"
                style="margin-left: 10px; font-size: 12px; color: #0A4DF0"
              >
                {{ `已选中${ruleForm['atomicIndexList'].length}项原子指标` }}
              </span> -->
              <div v-if="ruleForm['atomicIndexList'] && ruleForm['atomicIndexList'].length > 0" class="select_list">
                <div v-for="(item,index) in ruleForm['atomicIndexList']" :key="index" class="select_list_item">
                  <span>{{ item.name }}</span>
                  <i class="el-icon-circle-close  closed" style="margin-left: 12px;" @click="delItem(index)" />
                </div>

              </div>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label="指标说明" prop="remark">
              <el-input v-model="ruleForm['remark']" type="textarea" :rows="5" placeholder="请输入指标说明" />
            </el-form-item>
          </el-col>
        </el-row>
        <!--        <el-form-item label="判断逻辑" prop="judgeLogic">-->
        <!--          <template>-->
        <!--            <div class="flex-row">-->
        <!--              <el-select v-model="ruleForm['judgeLogic']" placeholder="请选择判断逻辑">-->
        <!--                <el-option-->
        <!--                  v-for="item in judgmentLogicOptions"-->
        <!--                  :key="item.value"-->
        <!--                  :label="item.label"-->
        <!--                  :value="item.value"-->
        <!--                />-->
        <!--              </el-select>-->
        <!--              <el-button type="primary" plain style="margin-left: 10px" @click="handleCustom">自定义</el-button>-->
        <!--            </div>-->
        <!--            <span style="color: #999999; font-size: 12px">支持原子指标的逻辑运算(and,or,not),并可自定义指标关系</span>-->
        <!--          </template>-->
        <!--        </el-form-item>-->
        <!--        <el-form-item label="指标规则" prop="indexRules">-->
        <!--          <el-checkbox-group v-model="ruleForm['indexRules']">-->
        <!--            <el-checkbox-->
        <!--              v-for="item in indexRulesOption"-->
        <!--              :key="item.value"-->
        <!--              :label="item.label"-->
        <!--              :true-label="1"-->
        <!--              :false-label="0"-->
        <!--            />-->
        <!--          </el-checkbox-group>-->
        <!--        </el-form-item>-->
        <!--        <el-form-item label="必要证据" prop="necessaryEvidence">-->
        <!--          <el-select v-model="ruleForm['necessaryEvidence']" placeholder="请选择必要证据" multiple>-->
        <!--            <el-option v-for="item in evidenceOptions" :key="item.value" :label="item.label" :value="item.value" />-->
        <!--          </el-select>-->
        <!--        </el-form-item>-->
      </el-form>
      <div v-if="activeStep === 1">
        <p>{{ `[${indexTypeName}] ${ruleForm['name']}` }}</p>
        <custom-logic ref="custom" :is-change="isChange" :atomic-index-data="ruleForm['atomicIndexList']" :judge-logic="ruleForm['judgeLogic']" />
      </div>
      <!--原子指标选择-->
      <select-atomic ref="select" @submit="handleAtomicSubmit" />
    </div>
    <div slot="footer">
      <el-button type="primary" plain style="width: 150px" @click="handleReset">重 置</el-button>
      <el-button v-if="activeStep === 0" type="primary" style="width: 150px" @click="nextStep">下一步</el-button>
      <el-button v-if="activeStep === 1" type="primary" plain style="width: 150px" @click="lastStep">上一步</el-button>
      <el-button v-if="activeStep === 1" type="primary" style="width: 150px" @click="handleSubmit">确 定</el-button>
    </div>
  </cs-drawer>
</template>

<script>
import SelectAtomic from '@/views/ruleEngine/indexRule/components/SelectAtomic.vue'
import CustomLogic from '@/views/ruleEngine/indexRule/components/CustomLogic.vue'
import { addOrUpdIndex } from '@/api/indexRule'

export default {
  name: 'EditRule',
  components: { CustomLogic, SelectAtomic },
  data() {
    return {
      drawerOption: {
        show: false,
        width: '45%',
        title: '指标配置'
      },
      // 当前激活的步骤
      activeStep: 0,
      // 案件类型数据
      caseTypeOptions: JSON.parse(sessionStorage.getItem('case_type')),
      // 指标类型数据
      indexTypeOptions: JSON.parse(sessionStorage.getItem('index_type')),
      // 指标类型名称保存
      indexTypeName: '',
      // 必要证据
      evidenceOptions: [],
      // 判断逻辑
      judgmentLogicOptions: JSON.parse(sessionStorage.getItem('judge_logic')),
      // 指标规则数据
      indexRulesOption: [
        { label: '证据判断', value: 'evidenceJudge' },
        { label: '笔录判断', value: 'recordJudge' },
        { label: '外部数据', value: 'externalData' }
      ],
      // 规则配置表单
      ruleForm: {},
      rules: {
        name: [{ required: true, message: '指标名称不能为空!', trigger: 'blur' }],
        caseType: [{ required: true, message: '案件类型不能为空!', trigger: 'blur' }],
        indexType: [{ required: true, message: '指标类型不能为空!', trigger: 'blur' }],
        indexScore: [{ required: true, message: '指标分数不能为空!', trigger: 'blur' }, {
          pattern: /^-?\d+(\.\d+)?$/,
          message: '请输入正确格式',
          trigger: 'change'
        }],
        // indexRules: [{ required: true, message: '指标规则不能为空!', trigger: 'blur' }],
        atomicIndex: [{ required: true, message: '原子指标不能为空!', trigger: 'blur' }],
        judgeLogic: [{ required: true, message: '指标说明不能为空!', trigger: 'blur' }]
      },
      // 是否是编辑
      isEdit: false,
      // 是否修改过
      isChange: false
    }
  },
  methods: {
    // 显示弹窗
    show(data, isEdit) {
      this.isEdit = isEdit
      this.drawerOption.show = true
      this.isChange = false
      this.$nextTick(() => {
        const _this = this
        _this.ruleForm = isEdit ? JSON.parse(JSON.stringify(data)) : {}
        if (isEdit && _this.$baseLodash.isString(_this.ruleForm['caseType'])) {
          _this.ruleForm.caseType = _this.ruleForm.caseType.split(',')
        }
        if (_this.isEdit) {
          _this.indexTypeName = _this.ruleForm.indexTypeName
        }
      })
    },
    delItem(index) {
      this.ruleForm['atomicIndexList'].splice(index, 1)
      this.isChange = true
    },
    // 指标类型选择
    handleChange(val) {
      this.indexTypeName = this.indexTypeOptions.find(item => item.value === val).label
    },
    // 选择原子指标
    handleSelectAtomic() {
      this.$refs.select.show(this.ruleForm['atomicIndexList'])
    },
    // 原子指标选择
    handleAtomicSubmit(data) {
      this.$refs.form.clearValidate('atomicIndexList')
      this.$set(this.ruleForm, 'atomicIndexList', data)
      this.isChange = true
    },
    // 重置
    handleReset() {
      this.$refs.form.resetFields()
      this.$refs.form.clearValidate()
    },
    // 下一步
    nextStep() {
      this.$refs.form.validate(valid => {
        if (valid) {
          this.activeStep = 1
        }
      })
    },
    // 上一步
    lastStep() {
      this.activeStep = 0
    },
    // 确定
    async handleSubmit() {
      // 拿到对应原子指标逻辑
      const logicData = this.$refs.custom.validate()
      if (logicData) {
        this.$set(this.ruleForm, 'judgeLogic', JSON.stringify(logicData))
      }
      if (this.$baseLodash.isArray(this.ruleForm['caseType'])) {
        this.ruleForm['caseType'] = this.ruleForm['caseType'].join(',')
      }
      const { code, msg } = await addOrUpdIndex(this.ruleForm)
      code === 200 ? (this.isEdit ? this.$baseMessage.success(msg || '编辑成功!') : this.$baseMessage.success(msg || '新增成功!')) : (this.isEdit ? this.$baseMessage.error(msg || '新增失败!') : this.$baseMessage.error(msg || '新增失败!'))
      this.drawerOption.show = false
      this.$emit('reloadData')
    }
  }
}
</script>

<style scoped lang="scss">
::v-deep {
  .el-select {
    width: 100%;
  }
}
.select_list {
  display: flex;
  flex-direction: column;
  .select_list_item {
    display: flex;
    align-items: center;
    .closed {
      cursor: pointer;
    }
  }
}
</style>