<template>
  <div class="app-container">
    <el-descriptions class="margin-top" :title="ruleInfo.ruleName" :column="3" border>
      <template slot="extra">
        <el-dropdown split-button type="primary" @command="handleClick">
          更多操作
          <el-dropdown-menu slot="dropdown">
            <el-dropdown-item command="add">版本添加</el-dropdown-item>
            <el-dropdown-item command="updIsActivate">激活状态</el-dropdown-item>
            <el-dropdown-item command="updStatus">版本状态</el-dropdown-item>
          </el-dropdown-menu>
        </el-dropdown>
      </template>
        <el-descriptions-item label="规则名称">{{ruleInfo.ruleName}}</el-descriptions-item>
        <el-descriptions-item label="引擎编码">{{ruleInfo.ruleCode}}</el-descriptions-item>
        <el-descriptions-item label="规则级别">
          <el-tag>
            <dict-tag :options="dict.type.rule_engine_level" :value="ruleInfo.ruleLevel"/>
          </el-tag>
        </el-descriptions-item>
        <el-descriptions-item label="规则类型">
          <el-tag>
            <dict-tag :options="dict.type.rule_engine_type" :value="ruleInfo.ruleType"/>
          </el-tag>
        </el-descriptions-item>
        <el-descriptions-item label="是否激活">
          <span v-if="ruleInfo.ruleIsActivate === 'Y' ">
            <el-tag type="success"><dict-tag :options="dict.type.rule_engine_activate_status" :value="ruleInfo.ruleIsActivate"/></el-tag>
          </span>
          <span v-if="ruleInfo.ruleIsActivate === 'N' ">
            <el-tag type="danger"><dict-tag :options="dict.type.rule_engine_activate_status" :value="ruleInfo.ruleIsActivate"/></el-tag>
          </span>
        </el-descriptions-item>
        <el-descriptions-item label="规则状态">
            <span v-if="ruleInfo.ruleStatus === 'Y'">
              <el-tag type="success">
                在用
              </el-tag>
            </span>
            <span v-if="ruleInfo.ruleStatus === 'N'">
              <el-tag type="danger">
                停用
              </el-tag>
            </span>
        </el-descriptions-item>
      </el-descriptions>

  <div class="app-container">
    <el-card class="box-card">
      <div slot="header" class="clearfix">
        <span>规则引擎版本</span>
      </div>
      <el-row :gutter="20">
        <el-col :span="12" v-for="edition in editionList">
          <el-card class="box-card">
            <div slot="header" class="clearfix">
              <span>{{edition.name+"_"+edition.versionCode}}</span>
              <el-dropdown style="float: right; padding: 3px 0" @command="checkRuleEngineVersion">
                <span class="el-dropdown-link">
                  更多操作<i class="el-icon-arrow-down el-icon--right"></i>
                </span>
                <el-dropdown-menu slot="dropdown">
                  <el-dropdown-item :command="{event: 'select', rule: edition}">规则详情</el-dropdown-item>
                  <el-dropdown-item :command="{event: 'test', rule: edition}"
                                    :disabled="edition.editionStatus === '-1'"
                  >测试规则</el-dropdown-item>
                  <el-dropdown-item :command="{event: 'status', rule: edition}" :disabled="edition.editionStatus !== 1">
                    {{edition.ruleStatus === 'Y' ? "禁用" : "激活"}}规则
                  </el-dropdown-item>
                  <el-dropdown-item :command="{event: 'publish', rule: edition.id}"
                    v-if="edition.editionStatus === 0 && edition.ruleIsTest === 1">
                    发布规则
                  </el-dropdown-item>
                  <el-dropdown-item :command="{event: 'delete', rule: edition}">规则删除</el-dropdown-item>
                </el-dropdown-menu>
              </el-dropdown>
            </div>
          <el-descriptions class="margin-top" :column="2" border>
            <el-descriptions-item label="版本类" :span="2">{{edition.versionClass}}</el-descriptions-item>
            <el-descriptions-item label="版本名称">{{edition.name}}</el-descriptions-item>
            <el-descriptions-item label="版本编码">{{edition.versionCode}}</el-descriptions-item>
            <el-descriptions-item label="是否激活">
              <span v-if="edition.ruleStatus === 'Y'"><el-tag type="success">
                <dict-tag :options="dict.type.rule_engine_activate_status" :value="edition.ruleStatus"></dict-tag>
              </el-tag></span>
              <span v-if="edition.ruleStatus === 'N'"><el-tag type="danger">
                <dict-tag :options="dict.type.rule_engine_activate_status" :value="edition.ruleStatus"></dict-tag>
              </el-tag></span>
            </el-descriptions-item>
            <el-descriptions-item label="规则状态">
              <span v-if="edition.editionStatus == 0"><el-tag type="danger">
                <dict-tag :options="dict.type.rule_engine_edition_status" :value="edition.editionStatus"></dict-tag>
              </el-tag> </span>
              <span v-if="edition.editionStatus == 1"><el-tag type="success">
                <dict-tag :options="dict.type.rule_engine_edition_status" :value="edition.editionStatus"></dict-tag>
              </el-tag> </span>
              <span v-if="edition.editionStatus == -1"><el-tag type="info">
                <dict-tag :options="dict.type.rule_engine_edition_status" :value="edition.editionStatus"></dict-tag>
              </el-tag> </span>
            </el-descriptions-item>
            <el-descriptions-item label="是否测试">
              <span v-if="edition.ruleIsTest == 0">
                <el-tag type="danger">
                  <dict-tag :options="dict.type.rule_engine_is_test" :value="edition.ruleIsTest"></dict-tag>
                </el-tag>
              </span>
              <span v-if="edition.ruleIsTest == 1">
                <el-tag type="success">
                  <dict-tag :options="dict.type.rule_engine_is_test" :value="edition.ruleIsTest"></dict-tag>
                </el-tag>
              </span>
              <span v-if="edition.ruleIsTest == -1">
                <el-tag type="info">
                  <dict-tag :options="dict.type.rule_engine_is_test" :value="edition.ruleIsTest"></dict-tag>
                </el-tag>
              </span>
            </el-descriptions-item>
            <editor style="margin-top: 10px" :read-only="true" v-model="edition.editionContent"></editor>
          </el-descriptions>
          </el-card>
        </el-col>
      </el-row>
    </el-card>
  </div>
    <!-- 添加或修改规则引擎版本对话框 -->
    <el-dialog title="添加数据" :visible.sync="open" width="75%" append-to-body>
      <el-card class="box-card">
        <el-button style="float: right; padding: 3px 0" type="text" @click="genEngineVersion">生成引擎版本类</el-button>
      </el-card>
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-row>
        <el-col :span="24">
          <el-form-item label="版本类">
            <el-input v-model="form.versionClass" disabled placeholder="点击类生成自动生成类版本"  />
          </el-form-item>
        </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="版本名称">
              <el-input v-model="form.name" placeholder="请输入版本名称" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="版本编码">
              <el-input v-model="form.versionCode" placeholder="请输入版本编码" />
            </el-form-item>
          </el-col>
        </el-row>
          <el-form-item label="内容">
            <editor v-model="form.editionContent" :min-height="180"/>
          </el-form-item>
      </el-form>
      <el-card class="box-card" v-if="form.ruleContent != ''">
        <div slot="header" class="clearfix">
          <span>引擎编码</span>
        </div>
        <encoding style="height: 800px" v-model="form.ruleContent"></encoding>
      </el-card>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">确 定</el-button>
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>

<!--    查看详情-->
    <el-drawer title="查看详情" size="80%" :before-close="ruleEngineVersionInfoStatusClose"
               :visible.sync="oppten"
               :direction="'rtl'">
      <div>
        <el-descriptions v-if="selectList != null" class="margin-tog" :column="2" border>
          <el-descriptions-item label="版本类" :span="2">{{selectList.versionClass}}</el-descriptions-item>
          <el-descriptions-item label="版本名称">
            <input v-model="selectList.name">
            </el-descriptions-item>
          <el-descriptions-item label="版本编码">{{selectList.versionCode}}</el-descriptions-item>
          <el-descriptions-item label="引擎状态">
            <dict-tag :options="dict.type.rule_engine_edition_status" :value="selectList.editionStatus"></dict-tag>
          </el-descriptions-item>
          <el-descriptions-item label="是否激活">
            <dict-tag :options="dict.type.rule_engine_activate_status" :value="selectList.ruleStatus"></dict-tag>
          </el-descriptions-item>
          <el-descriptions-item label="是否测试">
            <dict-tag :options="dict.type.rule_engine_is_test" :value="selectList.ruleIsTest"></dict-tag>
          </el-descriptions-item>
        </el-descriptions>
        <editor style="margin-top: 10px" :min-height="100" v-model="selectList.editionContent"></editor>
        <el-row style="margin-top: 10px">
            <el-button @click="saveCoding(selectList)">保存代码</el-button>
        </el-row>
        <encoding style="height: 800px; margin-top: 20px" v-model="selectList.ruleContent"></encoding>
      </div>
    </el-drawer>
<!--    规则测试  -->
    <el-drawer title="规则版本测试" size="80%" :before-close="ruleEngineVersionInfoStatusClose"
               :visible.sync="openRuleTest" :direction="'rtl'">
      <el-row :gutter="20">
        <el-col :span="12">
          <el-descriptions v-if="selectList!=null" class="margin-tog" :column="2" border>
            <el-descriptions-item label="版本类" :span="2">{{selectList.versionClass}}</el-descriptions-item>
            <el-descriptions-item label="版本名称">{{selectList.name}}</el-descriptions-item>
            <el-descriptions-item label="版本编码">{{selectList.versionCode}}</el-descriptions-item>
            <el-descriptions-item label="引擎状态">
            <dict-tag :options="dict.type.rule_engine_edition_status" :value="selectList.editionStatus"></dict-tag>
            </el-descriptions-item>
            <el-descriptions-item label="是否激活">
              <dict-tag :options="dict.type.rule_engine_activate_status" :value="selectList.ruleStatus"></dict-tag>
            </el-descriptions-item>
            <el-descriptions-item label="是否测试">
              <dict-tag :options="dict.type.rule_engine_is_test" :value="selectList.ruleIsTest"></dict-tag>
            </el-descriptions-item>
          </el-descriptions>
        </el-col>
        <el-col :span="12">
          <editor style="margin-top: 10px" :read-only="true" :min-height="105" v-model="selectList.editionContent"></editor>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="12">
          <encoding style="margin-top: 20px" v-model="selectList.ruleContent"></encoding>
        </el-col>
          <el-col :span="12">
              <el-col :span="primaryId == null ? 24:12">
                  <el-card class="box-card">
                      <div slot="header" class="clearfix">
                          <span>选择资产结构</span>
                      </div>
                      <el-select v-model="primaryId" style="width: 100%">
                          <el-option v-for="asses in primary"
                                     :key="asses.tableLists"
                                     :value="asses.tableLists"
                                     :label="asses.name+'('+asses.databaseName+')'">
                          </el-option>
                      </el-select>
                  </el-card>
              </el-col>
              <el-col :span="12" v-if="primaryId != []">
                  <el-card class="box-card">
                      <div slot="header" class="clearfix">
                          <span>选择资产模型</span>
                      </div>
                      <el-select v-model="tableLisrs" style="width: 100%;">
                          <el-option v-for="model in primaryId"
                                     :key="model.id+model.tableName"
                                     :value="model.id+model.tableName"
                                     :label="model.databaseName+'('+model.tableName+')'"
                          ></el-option>
                      </el-select>
                  </el-card>
              </el-col>
              <el-col :span="24" v-if="tableLisrs != null">
                  <el-card class="box-card" v-if="ruleInfo.ruleLevel === 1">
                      <div slot="header" class="clearfix">
                          <span>任务</span>
                      </div>
                  </el-card>
                  <el-card class="box-card" v-if="ruleInfo.ruleLevel === 2">
                      <div slot="header" class="clearfix">
                          <span>数据集</span>
                      </div>
                      <el-table ref="multipleTable" :data="columnOne2" max-height="200px" @selection-change="changeDataRow">
                        <el-table-column type="selection" width="55"></el-table-column>
<!--                        <el-table-column v-for="dataModel in columnOne2" :label="dataModel.key" :prop="dataModel.val"/>-->
                        <el-table-column v-for="(val, key) in columnOne2[0]" :key="key" :label="key" :prop="key"></el-table-column>
                      </el-table>
                      <div style="margin-top: 20px">
                        <el-button @click="toggleSelection()">清空选择</el-button>
                      </div>
                    <el-descriptions title="选择模型" :column="3" border style="margin-top: 20px">
                      <el-descriptions-item v-for="edinn in columnOne[0]"
                                            :label='edinn.key'>
                        <el-checkbox v-model="dataRecordSelectKeyList" :label="edinn.key" >{{edinn.key}}</el-checkbox>
                      </el-descriptions-item>
                    </el-descriptions>
                  </el-card>
                <el-card class="box-card" v-if="ruleInfo.ruleLevel === 3">
                      <div slot="header" class="clearfix">
                          <span>记录</span>
                      </div>
                      <el-table :data="columnOne2" max-height="200px">
                        <el-table-column v-for="(val, key) in columnOne2[0]" :key="key" :label="key" :prop="key"></el-table-column>
                        <el-table-column label="操作">
                          <template slot-scope="scope">
                            <el-button type="text" @click="dataRecordSelect(scope.row)">选择</el-button>
                          </template>
                        </el-table-column>
                      </el-table>
                  <el-descriptions title="选择行数据" direction="vertical" :column="3" border style="margin-top: 20px" v-if="fieldd != null">
                    <el-descriptions-item v-for="(val, key) in fieldd"
                                          :label='key'>
                      <el-checkbox v-model="dataRecordSelectKeyList" :label="val" :value="val">{{val}}</el-checkbox>
                    </el-descriptions-item>
                  </el-descriptions>
                  </el-card>
                  <el-card class="box-card" v-if="ruleInfo.ruleLevel === 4">
                      <div slot="header" class="clearfix">
                          <span>数据字段</span>
                      </div>
                      <button @click="dield(tableLisrs,ruleInfo.ruleLevel)">随机</button>
                      <el-descriptions title="字段" :column="3" border>
                          <el-descriptions-item v-for="tab in fields" :label="tab.key">
                            <el-radio v-model="dataMode" :label="tab.val" :value="tab.val">{{tab.val}}</el-radio>
                          </el-descriptions-item>
                      </el-descriptions>
<!--                    <el-descriptions direction="vertical" :column="3" border>-->
<!--                      <el-descriptions-item v-for="_dataModel in dataModelList"-->
<!--                                            :label='_dataModel.name + "("+_dataModel.comment+")"'>-->
<!--                        <el-radio v-model="dataModel" :label="_dataModel.name" :value="_dataModel.id">-->
<!--                          {{ newData[dataModelMapIndex][_dataModel.name] }}-->
<!--                        </el-radio>-->
<!--                      </el-descriptions-item>-->
<!--                    </el-descriptions>-->
                  </el-card>
              </el-col>
            <el-col :span="24" style="margin-top: 10px" v-if="dataMode != null || dataRecordSelectKeyList.length > 0">
              <el-button @click="dataTest">测试</el-button>
              <el-input style="margin-top: 10px" v-model="testResult" type="textarea" placeholder="请点击测试" disabled/>
            </el-col>
          </el-col>
      </el-row>
    </el-drawer>
  </div>
</template>

<script>
import { selectRuleEngineOne, updateRuleIsActivate, updateRuleStatus, spliceNameToCode  } from "@/api/goods/engine";
import { selectListRuleId, getEdition, delEdition, addEdition, updateEdition, updRuleStatus, updRuleSsTest, updEditionStatus } from "@/api/goods/edition";
import { selectFrimary  } from "@/api/system/accredit";
import { getRabdomData, getColumn, setColumn } from "@/api/test/testData";
import Encoding from "@/components/Encoding/index.vue";

export default {
  name: "Edition",
  components: {Encoding},
  dicts: ['rule_engine_level', 'rule_engine_activate_status', 'rule_engine_type', 'rule_engine_edition_status', 'rule_engine_is_test'],

  data() {
    return {
      // 接收数据
      ruleId: this.$route.params && this.$route.params.ruleId,
      //接收规则
      ruleInfo: {},
      selectList: {},
      // 遮罩层
      loading: true,
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 规则引擎版本表格数据
      editionList: null,
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      // 详情弹出层
      oppten: false,
      //测试弹出层
      openRuleTest: false,
      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
      },
      //测试传输
      testDataModelReq: {
        ruleLevel: '',
        editionId: '',
        keys: [],
        dataModel: {},
        dataModelList: [],
        dataModelLists: []
      },
      //测试表单
      ruleEngineTest:{},
      primary: [],
      //数据模型
      dataModelList: [],
      //复选列
      columns: [],
      //单选列
      columnOne: [],
      columnOne2: [],
      //复选字段
      fields: [],
      fieldd: [],
      //多选记录
      dataRecordSelectKeyList: [],
      dataModelMapList: [],
      dataModelMapIndex: 0,
      dataRecordSelectData: null,
      dataMode: null,
      //父类列
      primaryId: [],
      tableLisrs: null,
      //记录数据集选择的列
      changeDataList: [],
      //记录使用
      fieldDataModel: {},
      recordDataModel: [],
      dataSetDataModel: [],
      // 表单参数
      form: {
        versionClass: "",
        name: "",
        versionCode: "",
        editionContent: "",
        ruleContent: ""
      },
      //显示结果
      testResult: "",
      // 表单校验
      rules: {
      }
    };
  },
  //监控
  watch: {
    // 监控conditionVar变量
    tableLisrs(newVal, oldVal) {
      if (newVal !== null && newVal !== oldVal) {
        this.executeApi(); // 当tableLists不为null且变化时，执行接口请求的方法
      }
  },
},
  created() {
    this.getList();
  },
  methods: {
    // 测试
    dataTest(){
      // console.log(this.dataRecordSelectKeyList)
      // console.log(this.dataMode)
      if (this.ruleInfo.ruleLevel === 4){
        this.fieldDataModel = null;
        console.log(this.dataMode)
        this.fields.forEach(dataModel => {
          if (dataModel.val === this.dataMode){
            this.fieldDataModel = dataModel
          }
        })
      }else if (this.ruleInfo.ruleLevel === 3){
        this.recordDataModel = []
        this.columnOne.forEach(dataModel => {
          const keys = Object.keys(this.fieldd)
          const firstKey = keys[0];
          const firsValue = this.fieldd[firstKey];
          if (dataModel[0].val == firsValue) {
            this.dataRecordSelectKeyList.forEach(dataRecordSelect => {
              const foundDataModel = dataModel.find(dataModels => dataModels.key === dataRecordSelect);
              this.recordDataModel.push(foundDataModel)
            });
          }
        })
      }else if (this.ruleInfo.ruleLevel === 2){
        this.dataSetDataModel = []
        this.changeDataList.forEach(changeData => {
          const keys = Object.keys(changeData)
          const firstKey = keys[0];
          const firsValue = changeData[firstKey];
          this.recordDataModel = [];
          this.columnOne.forEach(dataModel => {
            if (dataModel[0].val == firsValue) {
              this.dataRecordSelectKeyList.forEach(dataRecordSelect => {
                const foundDataModel = dataModel.find(dataModels => dataModels.key === dataRecordSelect);
                this.recordDataModel.push(foundDataModel)
              });
            }
          })
          this.dataSetDataModel.push(this.recordDataModel)
        })
      }
      this.testDataModelReq = {
        ruleLevel: this.ruleInfo.ruleLevel,
        editionId: this.selectList.id,
        keys: this.dataRecordSelectKeyList,
        dataModel: this.fieldDataModel,
        dataModelList: this.recordDataModel,
        dataModelLists: this.dataSetDataModel
      }
      setColumn(this.testDataModelReq).then(res => {
        this.testResult = res.data
        if (this.testResult === '正常，无需返回'){
          updRuleSsTest(this.selectList.id,1)
        }else{
          updRuleSsTest(this.selectList.id,0)
        }
      })
    },
    // 记录选中行
    changeDataRow(val) {
      this.changeDataList = val
    },
    // 关闭
    ruleEngineVersionInfoStatusClose(done) {
      this.$confirm('确认关闭？')
        .then(_ => {
          this.ruleEngineVersionInfoAndTest = {};
          done();
          this.getList()
        })
        .catch(_ => {});
    },
    /**
     * 随机字段
     * @param id
     */
    dield(tableLisrs,ruleLevel) {
        var id = parseInt(tableLisrs.split('')[0]);
        var tableName = tableLisrs.slice(1)
      getRabdomData(id,tableName,ruleLevel).then(res => {
        this.fields = res.data;
      })
    },
    //显示队列
    executeApi() {
      var id = parseInt(this.tableLisrs.split('')[0]);
      var tableName = this.tableLisrs.slice(1)
      getColumn(id,tableName,this.ruleInfo.ruleLevel).then(res => {
        this.columnOne = res.data
        var list = this.columnOne;
        var list2 = [];
        list.forEach(function (sublist) {
          var dict2 = {}
          sublist.forEach(function (item) {
            dict2[item["key"]] = item["val"];
          })
          list2.push(dict2)
        })
        // list.forEach((item,index) => {
        //   list2[index] = item
        // })

        this.columnOne2 = list2;
      })
    },
    toggleSelection() {
      this.$refs.multipleTable.clearSelection();
    },
    //读取队列
    dataRecordSelect(row) {
      this.dataRecordSelectKeyList = []
      this.fieldd = row
    },
    /** 查询规则引擎版本列表 */
    getList() {
      this.form.ruleId = this.ruleId
      selectFrimary().then(res => {
        this.primary = res.data
      })
      selectRuleEngineOne(this.ruleId).then(res => {
        this.ruleInfo = res.data;
      })
      selectListRuleId(this.ruleId).then(res => {
        this.editionList = res.data
        this.loading = false;
      })
      this.loading = true;
    },
    // 取消按钮
    cancel() {
      this.open = false;
      this.reset();
    },
    saveCoding(row) {
      updateEdition(row).then(res => {
        this.$message.success(res.data)
      })
      updEditionStatus(row.id).then(
      )
      this.getList()
    },
    // 引擎版本操作
    checkRuleEngineVersion(clickType) {
      switch (clickType.event){
        case "delete"://删除
          if (confirm("确认删除吗")){
            delEdition(clickType.rule.id)
          }
          this.getList()
          break;
        case "publish"://版本发布
          updEditionStatus(clickType.rule).then(res => {
            this.$message.success(res.data)
            this.getList()
          })
          break;
        case "select"://详情
          this.selectList = clickType.rule
          this.oppten = true
          break;
        case "test"://测试
          this.openRuleTest = true
          this.selectList = clickType.rule
          break;
        case "status"://激活状态
          console.log(clickType)
          console.log(clickType.rule.ruleStatus)
          console.log(clickType.rule.id)
          if (clickType.rule.ruleStatus === "Y"){
            updRuleStatus(clickType.rule.id,"N").then(res => {
              this.$message.success(res.data)
              this.getList()
            })
          }else if (clickType.rule.ruleStatus === "N"){
            updRuleStatus(clickType.rule.id,"Y").then(res => {
              this.$message.success(res.data)
              this.getList()
            })
          }

        break;
      }
    },
    // 维护操作
    handleClick(clickType) {
      if (clickType === "add"){
        this.open = true;
      }else if (clickType === "updIsActivate"){
        updateRuleIsActivate(this.ruleInfo).then(res => {
          this.$message.success(res.data)
          this.getList()
        })
      }else if (clickType === "updStatus"){
        updateRuleStatus(this.ruleInfo).then(res => {
          this.$message.success(res.data)
          this.getList()
        })
      }
    },
    // 表单重置
    reset() {
      this.form = {
        id: null,
        ruleId: null,
        editionName: null,
        versionClass: null,
        name: null,
        versionCode: null,
        editionStatus: null,
        ruleStatus: null,
        ruleIsTest: null,
        editionContent: null,
        ruleContent: null
      };
      this.resetForm("form");
    },
    /** 新增按钮操作 */
    handleAdd() {
      this.reset();
      this.open = true;
      this.title = "添加规则引擎版本";
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset();
      const id = row.id || this.ids
      getEdition(id).then(response => {
        this.form = response.data;
        this.open = true;
        this.title = "修改规则引擎版本";
      });
    },
    genEngineVersion(){
      if (this.form.name == null || this.form.name === "") {
        this.$message.error('规则名称不可为空');
        return false;
      }
      if (this.form.versionCode == null || this.form.versionCode === "") {
        this.$message.error('版本编码不可为空');
        return false;
      }
      spliceNameToCode(this.ruleInfo.ruleCode,this.form.versionCode,this.ruleInfo.ruleLevel).then(res => {
        this.form.versionClass = res.data.val;
        this.form.ruleContent = res.data.code
      })
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          if (this.form.id != null) {
            updateEdition(this.form).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            });
          } else {
            addEdition(this.form).then(response => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
            });
          }
        }
      });
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      const ids = row.id || this.ids;
      this.$modal.confirm('是否确认删除规则引擎版本编号为"' + ids + '"的数据项？').then(function() {
        return delEdition(ids);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).catch(() => {});
    },
    // 获取代码模板
    getCodeIng(){
      let packageName = "com.muyu.rule.engine";
      let customName = "custom";
      let templateName = "template";
      let parentClass = "DataModelEngine";
      let ruleContent = `package ${packageName}.${customName};

import com.muyu.engine.action.ActionDiscard;
import com.muyu.engine.scope.${parentClass};

/**
 * @Author: DongZeLiang
 * @date: 2024/5/6
 * @Description: ${this.form.name}-${this.form.versionCode}
 * @Version: 1.0
 */
public class ${this.form.versionCode} extends ${parentClass} {
    @Override
    public void execution () {
        Object value = getValue();

        if (value == null || "".equals(value) || "null".equals(value)) {
            throw new ActionDiscard();
        }
    }
}`;
      return ruleContent;
    }
  }
};
</script>
