<template>
  <div class="airportInfo scroll-y">
    <div class="wrap">
      <Minheader
        :is-auth="true"
        :is-statuser="true"
        powerData="column_setting_add_button"
        @addForm="addForm"
      >
        <template #header>
          <div class="status flex-wrap">
            <div class="manageTitle">查询项设置</div>
          </div>
        </template></Minheader
      >
      <div class="app-containers">
        <DataTable
          :tableHeader="tableCols"
          :tableData="tableData"
          :tableBtnGroup="tableBtnGroup"
          :tableProperty="{ rowKey: 'ID' }"
          @btnClick="btnClick"
        />
      </div>
      <Dialog
        width="734px"
        :flag="flag"
        :type="type"
        :msgTitle="msgTitle"
        @resetForm="resetForm"
        @delRest="delRest"
        @submitForm="submitForm"
        @delRemove="delRemove"
      >
        <div class="diacont">
          <el-form
            :model="tableForm"
            :rules="formRules"
            ref="queryTemplateColumnForm"
          >
            <el-row :gutter="24">
              <el-col :span="12">
                <el-form-item
                  label="名称"
                  size="default"
                  prop="columnName"
                  :rules="formRules.isNotNull"
                >
                  <el-input
                    v-model="tableForm.columnName"
                    placeholder="请输入名称"
                  />
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item
                  label="标签"
                  size="default"
                  prop="columnLabel"
                  :rules="formRules.isNotNull"
                >
                  <el-input
                    v-model="tableForm.columnLabel"
                    placeholder="请输入标签"
                  />
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="描述" size="default">
                  <el-input
                    v-model="tableForm.columnDescribe"
                    placeholder="请输入描述"
                  />
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="排序" size="default">
                  <el-select
                    style="width: 100%"
                    v-model="tableForm.needSort"
                    class="input-shadow"
                    filterable
                    default-first-option
                    clearable
                    placeholder="请选择"
                  >
                    <el-option
                      v-for="item in tableOptionser"
                      :key="item.v ? item.v : item.planDepartureApt"
                      :label="item.k ? item.k : item.planDepartureApt"
                      :value="item.v ? item.v : item.planDepartureApt"
                    >
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="过滤" size="default">
                  <el-select
                    style="width: 100%"
                    v-model="tableForm.needFilters"
                    class="input-shadow"
                    filterable
                    default-first-option
                    clearable
                    placeholder="请选择"
                  >
                    <el-option
                      v-for="item in tableOptionser"
                      :key="item.v ? item.v : item.planDepartureApt"
                      :label="item.k ? item.k : item.planDepartureApt"
                      :value="item.v ? item.v : item.planDepartureApt"
                    >
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="显示" size="default">
                  <el-select
                    style="width: 100%"
                    v-model="tableForm.needShow"
                    class="input-shadow"
                    filterable
                    default-first-option
                    clearable
                    placeholder="请选择"
                  >
                    <el-option
                      v-for="item in tableOptionser"
                      :key="item.v ? item.v : item.planDepartureApt"
                      :label="item.k ? item.k : item.planDepartureApt"
                      :value="item.v ? item.v : item.planDepartureApt"
                    >
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="数据类型" size="default">
                  <el-input
                    v-model="tableForm.dataType"
                    placeholder="请输入数据类型"
                  />
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="分组" size="default">
                  <el-select
                    style="width: 100%"
                    v-model="tableForm.needGroup"
                    class="input-shadow"
                    filterable
                    default-first-option
                    clearable
                    placeholder="请选择"
                  >
                    <el-option
                      v-for="item in tableOptionser"
                      :key="item.v ? item.v : item.planDepartureApt"
                      :label="item.k ? item.k : item.planDepartureApt"
                      :value="item.v ? item.v : item.planDepartureApt"
                    >
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="下拉" size="default">
                  <el-select
                    style="width: 100%"
                    v-model="tableForm.listqueryTemplateID"
                    class="input-shadow"
                    filterable
                    default-first-option
                    clearable
                    placeholder="请选择"
                  >
                    <el-option
                      v-for="item in tableOptionse"
                      :key="item.v ? item.v : item.planDepartureApt"
                      :label="item.k ? item.k : item.planDepartureApt"
                      :value="item.v ? item.v : item.planDepartureApt"
                    >
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="合计" size="default">
                  <el-select
                    style="width: 100%"
                    v-model="tableForm.needCount"
                    class="input-shadow"
                    filterable
                    default-first-option
                    clearable
                    placeholder="请选择"
                  >
                    <el-option
                      v-for="item in tableOptionser"
                      :key="item.v ? item.v : item.planDepartureApt"
                      :label="item.k ? item.k : item.planDepartureApt"
                      :value="item.v ? item.v : item.planDepartureApt"
                    >
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="字段排序" size="default">
                  <el-input
                    v-model="tableForm.orderNumber"
                    placeholder="请输入字段排序"
                  />
                  <!-- <el-select
                    style="width: 100%"
                    v-model="tableForm.orderNumber"
                    class="input-shadow"
                    filterable
                    default-first-option
                    clearable
                    placeholder="请选择"
                  >
                    <el-option
                      v-for="item in tableOptionser"
                      :key="item.v ? item.v : item.planDepartureApt"
                      :label="item.k ? item.k : item.planDepartureApt"
                      :value="item.v ? item.v : item.planDepartureApt"
                    >
                    </el-option>
                  </el-select> -->
                </el-form-item>
              </el-col>
            </el-row>
          </el-form>
        </div>
      </Dialog>
    </div>
  </div>
</template>
<script setup lang="ts">
import DataTable from "@/components/tableTemp/index.vue";
import Minheader from "@/components/minheader/index.vue";
import Dialog from "@/components/dialog/index.vue";
import { Query, GeneralDataReception } from "@/api/webApi";
import { ElMessage } from "element-plus";
const route = useRoute();
const formRules = useElement().formRules;
const page = ref<number>(0); //分页参数
const dataContent = ref<object>({});
const noMore = ref<Boolean>(false);
const rowTitle = ref<String>("");
const tableCols = ref([]); //表头数据
const serviceId = ref<String>("");
const tableObj = ref({}); //增删改数据缓存
const flag = ref<Boolean>(false); //弹窗开关
const type = ref<String>(""); //判断是否删除
const msgTitle = ref<String>("新增查询项"); //弹窗标题
const tableColsCopys = reactive<Object>({}); //弹窗
const tableOptionser = ref<Array>([
  {
    k: "是",
    v: "1",
  },
  {
    k: "否",
    v: "0",
  },
]); //弹窗下拉
const tableOptionse = ref<Array>([]);
const tableForm = reactive({
  queryTemplateColumnSetID: "",
  queryTemplateID: route.query.queryTemplateID,
  columnName: "",
  columnLabel: "",
  columnDescribe: "",
  needSort: "",
  needFilters: "",
  needShow: "",
  needGroup: "",
  dataType: "",
  listqueryTemplateID: "",
  needCount: "",
  orderNumber: "",
  needSearch: "",
  event: "",
}); //弹窗内容
//列表
const tableData = ref([]);
//表头
const state = reactive({
  list: [
    { label: "名称", key: "name" },
    { label: "标签", key: "china" },
    { label: "描述", key: "englin" },
    { label: "排序", key: "two" },
    { label: "过滤", key: "three" },
    { label: "显示", key: "text" },
    { label: "分组", key: "text1" },
    { label: "下拉", key: "text2" },
    { label: "数据类型", key: "text3" },
    { label: "字段排位", key: "text4" },
    { label: "合计", key: "text5" },
  ],
  listLoading: true,
});
const tableBtnGroup = ref([
  {
    name: "编辑",
    className: "editBtn",
    param: 2,
    is: "column_settings_edit_button",
  },
  {
    name: "删除",
    className: "delBtn",
    param: 3,
    is: "column_setting_deletion_button",
  },
]);
//新增
const addForm = () => {
  msgTitle.value = "新增查询项";
  flag.value = true;
  tableForm.event = 1;
  type.value = "";
};
//取消
const resetForm = () => {
  flag.value = false;
  tableForm.queryTemplateColumnSetID = "";
  tableForm.columnName = "";
  tableForm.columnLabel = "";
  tableForm.columnDescribe = "";
  tableForm.needSort = "";
  tableForm.needFilters = "";
  tableForm.needShow = "";
  tableForm.needGroup = "";
  tableForm.dataType = "";
  tableForm.listqueryTemplateID = "";
  tableForm.needCount = "";
  tableForm.orderNumber = "";
  tableForm.needSearch = "";
};
//编辑
// const editDialog = (data) => {
//   msgTitle.value = "编辑航司信息维护";
//   flag.value = true;
//   type.value = "";
//   tableForm.name = data.name;
//   tableForm.china = data.china;
//   tableForm.englin = data.englin;
//   tableForm.two = data.two;
//   tableForm.three = data.three;
//   tableForm.text = data.text;
// };
//编辑-删除
const btnClick = (row, index, param) => {
  if (param === 2) {
    msgTitle.value = "编辑查询项";
    flag.value = true;
    type.value = "";
    tableForm.event = 2;
    tableForm.queryTemplateColumnSetID = index.queryTemplateColumnSetID;
    tableForm.columnName = index.columnName;
    tableForm.columnLabel = index.columnLabel;
    tableForm.columnDescribe = index.columnDescribe;
    tableForm.needSort = index.needSort === "需要" ? "1" : "0";
    tableForm.needFilters = index.needFilters === "需要" ? "1" : "0";
    tableForm.needShow = index.needShow === "需要" ? "1" : "0";
    tableForm.needGroup = index.needGroup === "需要" ? "1" : "0";
    tableForm.dataType = index.dataType;
    tableForm.listqueryTemplateID = index.listqueryTemplateID
      ? index.listqueryTemplateID
      : null;
    tableForm.needCount = index.needCount === "需要" ? "1" : "0";
    tableForm.orderNumber = index.orderNumber === "需要" ? "1" : "0";
    tableForm.needSearch = index.needSearch === "需要" ? "1" : "0";
  } else if (param === 3) {
    msgTitle.value = "删除查询项";
    flag.value = true;
    type.value = "del";
    tableForm.event = 3;
    tableForm.queryTemplateColumnSetID = index.queryTemplateColumnSetID;
    tableForm.columnName = index.columnName;
    tableForm.columnLabel = index.columnLabel;
    tableForm.columnDescribe = index.columnDescribe;
    tableForm.needSort = index.needSort;
    tableForm.needFilters = index.needFilters;
    tableForm.needShow = index.needShow;
    tableForm.needGroup = index.needGroup;
    tableForm.dataType = index.dataType;
    tableForm.listqueryTemplateID = index.listqueryTemplateID;
    tableForm.needCount = index.needCount;
    tableForm.orderNumber = index.orderNumber;
    tableForm.needSearch = index.needSearch;
  } else if (param === 4) {
  }
};
//删除
const eleDialog = () => {
  msgTitle.value = "删除查询项";
  flag.value = true;
  type.value = "del";
};
const delRemove = () => {
  tableForm.event = 3;
  generalDataReception(tableForm);
};
//删除
const delRest = () => {
  flag.value = false;
};
//获取表格数据
const getQuery = async () => {
  try {
    const { code, returnData } = await Query({
      id: DATACONTENT_ID.sysQueryChildTabId,
      needPage: ++page.value,
      dataContent: [route.query.queryTemplateID],
    });
    if (code === "0") {
      if (returnData.listValues.length === 0) {
        page.value--;
        noMore.value = true;
      }
      const titleColumn = returnData.columnSet.find(
        (item) => item.needShow === 1
      );
      if (titleColumn) {
        rowTitle.value = titleColumn.columnName;
      }
      tableData.value.push(...returnData.listValues);
      tableCols.value = returnData.columnSet;
      returnData.columnSet.forEach((item) => {
        if (
          item.listqueryTemplateID &&
          item.columnName === "listqueryTemplateID"
        ) {
          getSelectData(item.listqueryTemplateID);
        }
      });
      tableCols.value.forEach((element) => {
        element.label = element.columnLabel;
        element.key = element.columnName;
        // if (element.columnName === "queryTemplate") {
        //   element.width = "300px";
        // }
      });
      serviceId.value = returnData.submitID;
    } else {
      page.value--;
    }
  } catch (error) {
    page.value--;
  }
};
//获取弹框-下拉数据
const getSelectData = async (id, name) => {
  const { code, returnData } = await Query({
    id,
    dataContent: name ? [name] : name === null ? [null] : [],
  });
  if (code == 0) {
    tableOptionse.value = returnData.listValues;
  } else {
    tableOptionse.value = [];
  }
};
//确认提交
const queryTemplateColumnForm: any = ref(null);
const submitForm = () => {
  queryTemplateColumnForm.value.validate((valid: any) => {
    if (valid) {
      generalDataReception(tableForm);
    } else {
      return false;
    }
  });
};
const resetTable = () => {
  page.value = 0;
  noMore.value = false;
  tableData.value = [];
};
//新增-编辑-删除
const generalDataReception = async (data) => {
  try {
    let obj = {
      IATACode: route.query.IATACode,
    };
    data = {
      ...data,
      ...obj,
    };
    const { code } = await GeneralDataReception({
      serviceId: serviceId.value,
      dataContent: JSON.stringify(data),
    });
    if (code == 0) {
      ElMessage.success(`操作成功`);
      // this.$message.success("操作成功");
      resetTable();
      getQuery();
      resetForm();
      flag.value = false;
      // rmFlag.value = false;
      tableObj.value = {};
      // this.$router.go(0);
    } else {
      ElMessage.error(`操作失败`);
      // this.$message.error("操作失败");
      // this.flag = false;
      // this.rmFlag = false;
      tableObj.value = {};
      resetForm();
    }
  } catch (error) {
    flag.value = false;
    //  rmFlag.value = false;
    tableObj.value = {};
    resetForm();
  }
};
getQuery();
</script>
<style lang="scss" scoped>
::v-deep .el-form-item__label {
  width: 100px;
}
.app-containers {
  height: calc(100vh - 180px);
}
</style>
