<template>
  <el-card class="content-div">
    <div class="all-content">
      <div class="top-div">
        <el-button type="primary" @click="addData">新增</el-button>
      </div> 
      <el-table
        :data="tableData"
        height="730"
        style="width: 100%"
        border
        stripe
        :header-cell-style="{ background: '#F6F7FC' }"
      >
        <el-table-column type="index" label="序号" width="100" align="center" />
        <el-table-column
          prop="lable"
          label="标题"
          width="300"
          align="center"
          show-overflow-tooltip
        />
        <el-table-column
          prop="info"
          label="描述"
          width="500"
          align="center"
          show-overflow-tooltip
        /> 
        <el-table-column label="规则管理" align="center" show-overflow-tooltip>
          <template #default="scope">
            <el-button type="primary" @click="editData(scope.row)">
              编辑
            </el-button>
            <el-button type="danger" @click="delData(scope.row)">
              删除
            </el-button>
            <el-switch
              v-model="scope.row.enable"
              class="l10-r10"
              inline-prompt
              active-text="启用"
              inactive-text="停用"
              :active-value="false"
              :inactive-value="true"
              active-color="#13ce66"
              inactive-color="red"
              @change="changeStatus(scope.row)"
            />
            <el-button type="danger" @click="setData(scope.row)">
              设计
            </el-button>
          </template>
        </el-table-column>
      </el-table>
    </div> 
    <AddRule
      :type="type"
      :formData="formData"
      :dialogVisible="dialogVisible"
      v-if="dialogVisible"
      @dialogClose="dialogClose"
      @dialogSuccess="dialogSuccess"
    >
    </AddRule>
  </el-card>
</template>

<script>
import { onMounted, reactive, ref, toRefs } from "vue"; 
import { ElMessage, ElMessageBox } from "element-plus"; 
import infoApi from "@/api/infoApi.js";
import { response, rule,rule_info,post } from '../proto/data/pd'
import AddRule from "@/components/AddRule.vue";
export default {
  name: "rules",
  components: {
    AddRule
  },
  setup() {
    const state = reactive({
      tableData: [],
      formData: {
        lable: '',
        info: ''
      },
      dialogVisible: false,
      type: 'I'
    });

    onMounted(() => {
      getTableData();
    });
    // 获取列表
    const getTableData = async () => {
      const res = await infoApi.getRules();
      const ret = response.decode(new Uint8Array(res));
      
      if (ret.code == 0) {
          // 获取数据
          state.tableData = rule.decode(ret.data).rule;
          console.log(rule.decode(ret.data));
          /**
           * 组长看这里
           * 
           */
           // lable 是标题
           // info 是描述
      } else {
          console.log(res);
      }
    };
    // 编辑
    const editData = (item) => {
      state.dialogVisible = true;
      state.type = 'U';
      state.formData = JSON.parse(JSON.stringify(item));
    };
    // 删除
    const delData = (item) => {
      ElMessageBox.confirm("确定删除该数据?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(async () => {
          const req_databuf = rule_info.encode({
            id: item.id,
          }).finish();
          // 截取有效长度
          const req_data = req_databuf.slice(0, req_databuf.length);
          const req_databuf1 = post.encode({
              cmd: 2,
              data: req_data,
          }).finish();
          // 截取有效长度
          const req_data1 = req_databuf1.slice(0, req_databuf1.length);
 
          const res = await infoApi.postRules(req_data1);
          const ret = response.decode(new Uint8Array(res));
          if (ret.code == 0) {
            ElMessage.success(res.msg || "请求成功");
            getTableData();
          } else {
            ElMessage.error(res.msg);
          }
        })
        .catch(() => {
          ElMessage.info("已取消删除");
        });
    };
    // 新增
    const addData = () => {
      //清空数据
      state.formData = {
        lable: '',
        info: ''
      }
      state.type = 'I';
      state.dialogVisible = true;
    };
    // 启用停用
    const changeStatus = async (item) => {
      const req_databuf = rule_info.encode({
          id: item.id,
      }).finish();
      // 截取有效长度
      const req_data = req_databuf.slice(0, req_databuf.length);

      const req_databuf1 = post.encode({
        cmd: 3,
        data: req_data,
    }).finish();
    // 截取有效长度
    const req_data1 = req_databuf1.slice(0, req_databuf1.length);

    const req_databuf2 = post.encode({
        cmd: 3,
        data: req_data,
    }).finish();
    // 截取有效长度
    const req_data2 = req_databuf2.slice(0, req_databuf2.length);
      const res =  item.enable==='启动' ? await infoApi.postRules(req_data2) : await infoApi.postRules(req_data1);
      const ret = response.decode(new Uint8Array(res));
      if (ret.code == 0) {
        ElMessage.success(res.msg || "更新成功");
        getTableData();
      } else {
        ElMessage.error(res.msg);
      }
    };
    const dialogClose = () => {
      state.dialogVisible = false;
    };

    const dialogSuccess = () => {
      state.dialogVisible = false;
      getTableData();
    };
    return {
      ...toRefs(state),
      editData,
      delData,
      getTableData,
      addData,
      changeStatus,
      dialogSuccess,
      dialogClose
    };
  },
};
</script>
<style lang="scss" scoped>
.all-content {
  display: flex;
  flex-direction: column;
} 
.top-div {
  display: flex;
  justify-content: flex-end;
}
.l10-r10 {
  margin: 0 10px;
}
</style>
