浏览代码

生成完整代码

lcl 7 月之前
父节点
当前提交
af0007b899
共有 82 个文件被更改,包括 15817 次插入52 次删除
  1. 248 0
      src/views/pri/priCondition/components/add/index.vue
  2. 258 0
      src/views/pri/priCondition/components/updatePriCondition/index.vue
  3. 223 0
      src/views/pri/priCondition/hook.tsx
  4. 161 0
      src/views/pri/priCondition/index.vue
  5. 228 0
      src/views/pri/priDatabaseSet/components/add/index.vue
  6. 215 0
      src/views/pri/priDatabaseSet/components/updatePriDatabaseSet/index.vue
  7. 212 0
      src/views/pri/priDatabaseSet/hook.tsx
  8. 167 0
      src/views/pri/priDatabaseSet/index.vue
  9. 10 10
      src/views/pri/priList/components/add/index.vue
  10. 11 11
      src/views/pri/priList/components/updatePriList/index.vue
  11. 51 22
      src/views/pri/priList/hook.tsx
  12. 54 0
      src/views/pri/priList/index.vue
  13. 210 0
      src/views/pri/priLog/components/add/index.vue
  14. 220 0
      src/views/pri/priLog/components/updatePriLog/index.vue
  15. 214 0
      src/views/pri/priLog/hook.tsx
  16. 164 0
      src/views/pri/priLog/index.vue
  17. 215 0
      src/views/pri/priLoopSet/components/add/index.vue
  18. 205 0
      src/views/pri/priLoopSet/components/updatePriLoopSet/index.vue
  19. 213 0
      src/views/pri/priLoopSet/hook.tsx
  20. 161 0
      src/views/pri/priLoopSet/index.vue
  21. 209 0
      src/views/pri/priPrizeInField/components/add/index.vue
  22. 219 0
      src/views/pri/priPrizeInField/components/updatePriPrizeInField/index.vue
  23. 208 0
      src/views/pri/priPrizeInField/hook.tsx
  24. 162 0
      src/views/pri/priPrizeInField/index.vue
  25. 241 0
      src/views/pri/priPrizeInQueryField/components/add/index.vue
  26. 251 0
      src/views/pri/priPrizeInQueryField/components/updatePriPrizeInQueryField/index.vue
  27. 218 0
      src/views/pri/priPrizeInQueryField/hook.tsx
  28. 162 0
      src/views/pri/priPrizeInQueryField/index.vue
  29. 199 0
      src/views/pri/priPrizeInTable/components/add/index.vue
  30. 203 0
      src/views/pri/priPrizeInTable/components/updatePriPrizeInTable/index.vue
  31. 216 0
      src/views/pri/priPrizeInTable/hook.tsx
  32. 191 0
      src/views/pri/priPrizeInTable/index.vue
  33. 241 0
      src/views/pri/priPrizeObjectField/components/add/index.vue
  34. 251 0
      src/views/pri/priPrizeObjectField/components/updatePriPrizeObjectField/index.vue
  35. 218 0
      src/views/pri/priPrizeObjectField/hook.tsx
  36. 162 0
      src/views/pri/priPrizeObjectField/index.vue
  37. 207 0
      src/views/pri/priPrizeObjectTable/components/add/index.vue
  38. 194 0
      src/views/pri/priPrizeObjectTable/components/updatePriPrizeObjectTable/index.vue
  39. 216 0
      src/views/pri/priPrizeObjectTable/hook.tsx
  40. 178 0
      src/views/pri/priPrizeObjectTable/index.vue
  41. 44 9
      src/views/pri/priProject/hook.tsx
  42. 70 0
      src/views/pri/priProject/index.vue
  43. 210 0
      src/views/pri/priProjectParam/components/add/index.vue
  44. 220 0
      src/views/pri/priProjectParam/components/updatePriProjectParam/index.vue
  45. 202 0
      src/views/pri/priProjectParam/hook.tsx
  46. 167 0
      src/views/pri/priProjectParam/index.vue
  47. 241 0
      src/views/pri/priQueryField/components/add/index.vue
  48. 245 0
      src/views/pri/priQueryField/components/updatePriQueryField/index.vue
  49. 218 0
      src/views/pri/priQueryField/hook.tsx
  50. 162 0
      src/views/pri/priQueryField/index.vue
  51. 201 0
      src/views/pri/priQueryTable/components/add/index.vue
  52. 188 0
      src/views/pri/priQueryTable/components/updatePriQueryTable/index.vue
  53. 216 0
      src/views/pri/priQueryTable/hook.tsx
  54. 188 0
      src/views/pri/priQueryTable/index.vue
  55. 210 0
      src/views/pri/priRecord/components/add/index.vue
  56. 200 0
      src/views/pri/priRecord/components/updatePriRecord/index.vue
  57. 214 0
      src/views/pri/priRecord/hook.tsx
  58. 164 0
      src/views/pri/priRecord/index.vue
  59. 241 0
      src/views/pri/priRecursionEndField/components/add/index.vue
  60. 251 0
      src/views/pri/priRecursionEndField/components/updatePriRecursionEndField/index.vue
  61. 218 0
      src/views/pri/priRecursionEndField/hook.tsx
  62. 162 0
      src/views/pri/priRecursionEndField/index.vue
  63. 201 0
      src/views/pri/priRecursionEndTable/components/add/index.vue
  64. 188 0
      src/views/pri/priRecursionEndTable/components/updatePriRecursionEndTable/index.vue
  65. 211 0
      src/views/pri/priRecursionEndTable/hook.tsx
  66. 178 0
      src/views/pri/priRecursionEndTable/index.vue
  67. 241 0
      src/views/pri/priRecursionStartField/components/add/index.vue
  68. 251 0
      src/views/pri/priRecursionStartField/components/updatePriRecursionStartField/index.vue
  69. 218 0
      src/views/pri/priRecursionStartField/hook.tsx
  70. 162 0
      src/views/pri/priRecursionStartField/index.vue
  71. 201 0
      src/views/pri/priRecursionStartTable/components/add/index.vue
  72. 188 0
      src/views/pri/priRecursionStartTable/components/updatePriRecursionStartTable/index.vue
  73. 211 0
      src/views/pri/priRecursionStartTable/hook.tsx
  74. 178 0
      src/views/pri/priRecursionStartTable/index.vue
  75. 216 0
      src/views/pri/priRequestLog/components/add/index.vue
  76. 203 0
      src/views/pri/priRequestLog/components/updatePriRequestLog/index.vue
  77. 211 0
      src/views/pri/priRequestLog/hook.tsx
  78. 164 0
      src/views/pri/priRequestLog/index.vue
  79. 204 0
      src/views/pri/priReturnField/components/add/index.vue
  80. 208 0
      src/views/pri/priReturnField/components/updatePriReturnField/index.vue
  81. 203 0
      src/views/pri/priReturnField/hook.tsx
  82. 162 0
      src/views/pri/priReturnField/index.vue

+ 248 - 0
src/views/pri/priCondition/components/add/index.vue

@@ -0,0 +1,248 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  listIdQuery();
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  listId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  listId: props.listId, //配置ID
+  returnFieldId: null, //条件返回字段
+  fieldQueryKind: "", //匹配条件
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  fieldQueryValueType: "", //匹配值类型
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 配置ID选项数据
+const listIdOptionList = ref([]);
+// 匹配条件选项数据
+const fieldQueryKindOptionList = [
+  { id: 1, label: '模糊匹配' },
+  { id: 2, label: '精确匹配' },
+  { id: 3, label: '范围匹配' },
+]
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'fixed_value', label: '固定值' },
+]
+// 匹配值类型选项数据
+const fieldQueryValueTypeOptionList = [
+  { id: 'text', label: '文本' },
+  { id: 'number', label: '数字' },
+  { id: 'range', label: '范围' },
+]
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriCondition.method,
+        url: UrlList.prizeSet.priaddPriCondition.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      listId: props.listId, //配置ID
+      returnFieldId: null, //条件返回字段
+      fieldQueryKind: "", //匹配条件
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      fieldQueryValueType: "", //匹配值类型
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取配置ID数据
+const listIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriListDic.method, url: UrlList.prizeSet.prigetPriListDic.url, params: { } });
+  if (status === 1) {
+    listIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    listId: props.listId, //配置ID
+    returnFieldId: null, //条件返回字段
+    fieldQueryKind: "", //匹配条件
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    fieldQueryValueType: "", //匹配值类型
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label="配置ID", prop="listId")
+        el-select(
+          v-model="UpdateForm.listId",
+          placeholder="请选择配置ID",
+          clearable,
+        )
+          el-option(:label="item.id", :value="item.prizeName" v-for="(item,index) in listIdOptionList")
+      el-form-item(label='条件返回字段' prop="returnFieldId")
+        el-input-number(v-model='UpdateForm.returnFieldId' :min="1" :max="1000"
+          placeholder="请输入条件返回字段")
+      el-form-item(label="匹配条件", prop="fieldQueryKind")
+        el-select(
+          v-model="UpdateForm.fieldQueryKind",
+          placeholder="请选择匹配条件",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryKindOptionList")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label="匹配值类型", prop="fieldQueryValueType")
+        el-select(
+          v-model="UpdateForm.fieldQueryValueType",
+          placeholder="请选择匹配值类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryValueTypeOptionList")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 258 - 0
src/views/pri/priCondition/components/updatePriCondition/index.vue

@@ -0,0 +1,258 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  listIdQuery();
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  listId: null, //配置ID
+  returnFieldId: null, //条件返回字段
+  fieldQueryKind: "", //匹配条件
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  fieldQueryValueType: "", //匹配值类型
+
+});
+// 配置ID选项数据
+const listIdOptionList = ref([]);
+// 匹配条件选项数据
+const fieldQueryKindOptionList = [
+  { id: 1, label: '模糊匹配' },
+  { id: 2, label: '精确匹配' },
+  { id: 3, label: '范围匹配' },
+]
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'fixed_value', label: '固定值' },
+]
+// 匹配值类型选项数据
+const fieldQueryValueTypeOptionList = [
+  { id: 'text', label: '文本' },
+  { id: 'number', label: '数字' },
+  { id: 'range', label: '范围' },
+]
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriCondition.method,
+        url: UrlList.prizeSet.priupdatePriCondition.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      listId: null, //配置ID
+      returnFieldId: null, //条件返回字段
+      fieldQueryKind: "", //匹配条件
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      fieldQueryValueType: "", //匹配值类型
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriConditionVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取配置ID数据
+const listIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriListDic.method, url: UrlList.prizeSet.prigetPriListDic.url, params: { } });
+  if (status === 1) {
+    listIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriConditionVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriConditionQuery.method, url: UrlList.prizeSet.prigetPriConditionQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriConditionVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    listId: null, //配置ID
+    returnFieldId: null, //条件返回字段
+    fieldQueryKind: "", //匹配条件
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    fieldQueryValueType: "", //匹配值类型
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriConditionVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label="配置ID", prop="listId")
+        el-select(
+          v-model="UpdateForm.listId",
+          placeholder="请选择配置ID",
+          clearable,
+        )
+          el-option(:label="item.id", :value="item.prizeName" v-for="(item,index) in listIdOptionList")
+      el-form-item(label='条件返回字段' prop="returnFieldId")
+        el-input-number(v-model='UpdateForm.returnFieldId' :min="1" :max="1000"
+          placeholder="请输入条件返回字段")
+      el-form-item(label="匹配条件", prop="fieldQueryKind")
+        el-select(
+          v-model="UpdateForm.fieldQueryKind",
+          placeholder="请选择匹配条件",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryKindOptionList")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label="匹配值类型", prop="fieldQueryValueType")
+        el-select(
+          v-model="UpdateForm.fieldQueryValueType",
+          placeholder="请选择匹配值类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryValueTypeOptionList")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriConditionVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 223 - 0
src/views/pri/priCondition/hook.tsx

@@ -0,0 +1,223 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriCondition() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.listId = Number(route.query.listId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+  listIdQuery();
+
+  });
+  let form = reactive({
+  listId:null, //配置ID
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "配置ID",
+      prop: "listId",
+      minWidth: 200
+      formatter: ({ listId }) => {
+        return listIdOptionList.find(item => item.id == listId).label
+      },
+    },
+    {
+      label: "条件返回字段",
+      prop: "returnFieldId",
+      minWidth: 200
+    },
+    {
+      label: "匹配条件",
+      prop: "fieldQueryKind",
+      minWidth: 200
+    },
+    {
+      label: "匹配方式",
+      prop: "fieldQueryModel",
+      minWidth: 200
+    },
+    {
+      label: "匹配值",
+      prop: "fieldQueryValue",
+      minWidth: 200
+    },
+    {
+      label: "匹配值类型",
+      prop: "fieldQueryValueType",
+      minWidth: 200
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriConditionList.method,
+          url: UrlList.prizeSet.prigetPriConditionList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+    // 配置ID选项数据
+    const listIdOptionList = ref([]);
+  //获取配置ID数据
+  async function listIdQuery() {
+    const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriListDic.method, url: UrlList.prizeSet.prigetPriListDic.url, params: { } });
+    if (status === 1) {
+      listIdOptionList.value = data.records;
+    }
+  }
+
+
+
+  
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该奖励条件? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriCondition.method, url: UrlList.prizeSet.prideletePriCondition.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriConditionVisible = ref(false);
+  const editUpdatePriConditionFormData = ref({});
+  function handleUpdatePriCondition(row) {
+    editUpdatePriConditionVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriConditionFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+    listIdQuery,
+    listIdOptionList,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriCondition,
+    editUpdatePriConditionVisible,
+    editUpdatePriConditionFormData,
+    handleDelete,
+
+  };
+}

+ 161 - 0
src/views/pri/priCondition/index.vue

@@ -0,0 +1,161 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriCondition"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriCondition } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriCondition from "./components/updatePriCondition/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  listIdOptionList,
+  handleAdd,
+  addVisible,
+  handleUpdatePriCondition,
+  editUpdatePriConditionVisible,
+  editUpdatePriConditionFormData,
+  handleDelete,
+
+} = usePriCondition();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriConditionVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriConditionVisible.value = false
+}
+provide('closeEditUpdatePriConditionVisible', closeEditUpdatePriConditionVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label="配置ID", prop="listId")
+        el-select(
+          v-model="form.listId",
+          placeholder="请选择配置ID",
+          clearable,
+        )
+          el-option(:label="item.id", :value="item.prizeName" v-for="(item,index) in listIdOptionList")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="奖励条件", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriCondition(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriCondition'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :listId="form.listId")
+    EditUpdatePriCondition(:editVisible="editUpdatePriConditionVisible" :formData="editUpdatePriConditionFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 228 - 0
src/views/pri/priDatabaseSet/components/add/index.vue

@@ -0,0 +1,228 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  projectIdQuery();
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  projectId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  ipAddress: "", //IP地址
+  port: null, //端口
+  userId: "", //用户名
+  password: "", //密码
+  projectId: props.projectId, //项目
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 项目选项数据
+const projectIdOptionList = ref([]);
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriDatabaseSet.method,
+        url: UrlList.prizeSet.priaddPriDatabaseSet.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      ipAddress: "", //IP地址
+      port: null, //端口
+      userId: "", //用户名
+      password: "", //密码
+      projectId: props.projectId, //项目
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取项目数据
+const projectIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: { } });
+  if (status === 1) {
+    projectIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+  ipAddress: [
+    { required: true, message: '请输入IP地址', trigger: 'blur' },
+  ],
+  port: [
+    { required: true, message: '请输入端口', trigger: 'blur' },
+  ],
+  userId: [
+    { required: true, message: '请输入用户名', trigger: 'blur' },
+  ],
+  password: [
+    { required: true, message: '请输入密码', trigger: 'blur' },
+  ],
+  projectId: [
+    { required: true, message: '请输入项目', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    ipAddress: "", //IP地址
+    port: null, //端口
+    userId: "", //用户名
+    password: "", //密码
+    projectId: props.projectId, //项目
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='IP地址' prop="ipAddress")
+        el-input(v-model='UpdateForm.ipAddress' autocomplete='off'
+          placeholder="请输入IP地址")
+      el-form-item(label='端口' prop="port")
+        el-input-number(v-model='UpdateForm.port' :min="1" :max="1000"
+          placeholder="请输入端口")
+      el-form-item(label='用户名' prop="userId")
+        el-input(v-model='UpdateForm.userId' autocomplete='off'
+          placeholder="请输入用户名")
+      el-form-item(label='密码' prop="password")
+        el-input(v-model='UpdateForm.password' autocomplete='off'
+          placeholder="请输入密码")
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="UpdateForm.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.projectName", :value="item.id" v-for="(item,index) in projectIdOptionList")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 215 - 0
src/views/pri/priDatabaseSet/components/updatePriDatabaseSet/index.vue

@@ -0,0 +1,215 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  ipAddress: "", //IP地址
+  port: null, //端口
+  userId: "", //用户名
+  password: "", //密码
+
+});
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriDatabaseSet.method,
+        url: UrlList.prizeSet.priupdatePriDatabaseSet.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      ipAddress: "", //IP地址
+      port: null, //端口
+      userId: "", //用户名
+      password: "", //密码
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriDatabaseSetVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+  ipAddress: [
+    { required: true, message: '请输入IP地址', trigger: 'blur' },
+  ],
+  port: [
+    { required: true, message: '请输入端口', trigger: 'blur' },
+  ],
+  userId: [
+    { required: true, message: '请输入用户名', trigger: 'blur' },
+  ],
+  password: [
+    { required: true, message: '请输入密码', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriDatabaseSetVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriDatabaseSetQuery.method, url: UrlList.prizeSet.prigetPriDatabaseSetQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriDatabaseSetVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    ipAddress: "", //IP地址
+    port: null, //端口
+    userId: "", //用户名
+    password: "", //密码
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriDatabaseSetVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='IP地址' prop="ipAddress")
+        el-input(v-model='UpdateForm.ipAddress' autocomplete='off'
+          placeholder="请输入IP地址")
+      el-form-item(label='端口' prop="port")
+        el-input-number(v-model='UpdateForm.port' :min="1" :max="1000"
+          placeholder="请输入端口")
+      el-form-item(label='用户名' prop="userId")
+        el-input(v-model='UpdateForm.userId' autocomplete='off'
+          placeholder="请输入用户名")
+      el-form-item(label='密码' prop="password")
+        el-input(v-model='UpdateForm.password' autocomplete='off'
+          placeholder="请输入密码")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriDatabaseSetVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 212 - 0
src/views/pri/priDatabaseSet/hook.tsx

@@ -0,0 +1,212 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriDatabaseSet() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.projectId = Number(route.query.projectId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+  projectIdQuery();
+
+  });
+  let form = reactive({
+  ipAddress:"", //IP地址
+  userId:"", //用户名
+  projectId:null, //项目
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "IP地址",
+      prop: "ipAddress",
+      minWidth: 200
+    },
+    {
+      label: "端口",
+      prop: "port",
+      minWidth: 200
+    },
+    {
+      label: "用户名",
+      prop: "userId",
+      minWidth: 200
+    },
+    {
+      label: "密码",
+      prop: "password",
+      minWidth: 200
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriDatabaseSetList.method,
+          url: UrlList.prizeSet.prigetPriDatabaseSetList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+    // 项目选项数据
+    const projectIdOptionList = ref([]);
+  //获取项目数据
+  async function projectIdQuery() {
+    const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: { } });
+    if (status === 1) {
+      projectIdOptionList.value = data.records;
+    }
+  }
+
+
+
+  
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该数据库连接配置? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriDatabaseSet.method, url: UrlList.prizeSet.prideletePriDatabaseSet.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriDatabaseSetVisible = ref(false);
+  const editUpdatePriDatabaseSetFormData = ref({});
+  function handleUpdatePriDatabaseSet(row) {
+    editUpdatePriDatabaseSetVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriDatabaseSetFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+    projectIdQuery,
+    projectIdOptionList,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriDatabaseSet,
+    editUpdatePriDatabaseSetVisible,
+    editUpdatePriDatabaseSetFormData,
+    handleDelete,
+
+  };
+}

+ 167 - 0
src/views/pri/priDatabaseSet/index.vue

@@ -0,0 +1,167 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriDatabaseSet"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriDatabaseSet } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriDatabaseSet from "./components/updatePriDatabaseSet/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  projectIdOptionList,
+  handleAdd,
+  addVisible,
+  handleUpdatePriDatabaseSet,
+  editUpdatePriDatabaseSetVisible,
+  editUpdatePriDatabaseSetFormData,
+  handleDelete,
+
+} = usePriDatabaseSet();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriDatabaseSetVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriDatabaseSetVisible.value = false
+}
+provide('closeEditUpdatePriDatabaseSetVisible', closeEditUpdatePriDatabaseSetVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label='IP地址' prop="ipAddress")
+        el-input(v-model='form.ipAddress' autocomplete='off'
+          placeholder="请输入IP地址")
+      el-form-item(label='用户名' prop="userId")
+        el-input(v-model='form.userId' autocomplete='off'
+          placeholder="请输入用户名")
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="form.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.projectName", :value="item.id" v-for="(item,index) in projectIdOptionList")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="数据库连接配置", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriDatabaseSet(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriDatabaseSet'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :projectId="form.projectId")
+    EditUpdatePriDatabaseSet(:editVisible="editUpdatePriDatabaseSetVisible" :formData="editUpdatePriDatabaseSetFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 10 - 10
src/views/pri/priList/components/add/index.vue

@@ -86,13 +86,13 @@ const submit = async (formEl) => {
           type: "success"
         });
         UpdateForm.value = {
-          projectId: props.projectId, //项目
-          prizeName: "", //奖励名称
-          prizePercent: "", //奖励比例
-          prizeAmount: "", //奖励固定金额
-          conditionMode: "", //条件模式
-          recursionFlag: "", //是否递归
-          prizeContent: "", //奖励内容
+      projectId: props.projectId, //项目
+      prizeName: "", //奖励名称
+      prizePercent: "", //奖励比例
+      prizeAmount: "", //奖励固定金额
+      conditionMode: "", //条件模式
+      recursionFlag: "", //是否递归
+      prizeContent: "", //奖励内容
 
         };
         // 关闭新增弹窗;
@@ -116,7 +116,7 @@ const submit = async (formEl) => {
 
 //获取项目数据
 const projectIdQuery = async () => {
-  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: {} });
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: { } });
   if (status === 1) {
     projectIdOptionList.value = data.records;
   }
@@ -176,10 +176,10 @@ const isFullscreen = ref(false)
         el-input(v-model='UpdateForm.prizeName' autocomplete='off'
           placeholder="请输入奖励名称")
       el-form-item(label='奖励比例' prop="prizePercent")
-        el-input-number(v-model='UpdateForm.prizePercent' :min="0" :max="1000"
+        el-input-number(v-model='UpdateForm.prizePercent' :min="1" :max="1000"
           placeholder="请输入奖励比例")
       el-form-item(label='奖励固定金额' prop="prizeAmount")
-        el-input-number(v-model='UpdateForm.prizeAmount' :min="0" :max="1000"
+        el-input-number(v-model='UpdateForm.prizeAmount' :min="1" :max="1000"
           placeholder="请输入奖励固定金额")
       el-form-item(label="条件模式", prop="conditionMode")
         el-select(

+ 11 - 11
src/views/pri/priList/components/updatePriList/index.vue

@@ -78,13 +78,13 @@ const submit = async (formEl) => {
           type: "success"
         });
         UpdateForm.value = {
-          id: null, //ID
-          prizeName: "", //奖励名称
-          prizePercent: "", //奖励比例
-          prizeAmount: "", //奖励固定金额
-          conditionMode: "", //条件模式
-          recursionFlag: "", //是否递归
-          prizeContent: "", //奖励内容
+      id: null, //ID
+      prizeName: "", //奖励名称
+      prizePercent: "", //奖励比例
+      prizeAmount: "", //奖励固定金额
+      conditionMode: "", //条件模式
+      recursionFlag: "", //是否递归
+      prizeContent: "", //奖励内容
 
         };
         // 关闭修改弹窗;
@@ -129,7 +129,7 @@ const rules = reactive({
 const closeFn: any = inject('closeEditUpdatePriListVisible');
 const openVisible = async () => {
   //通过ID获取表格数据
-  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriListQuery.method, url: UrlList.prizeSet.prigetPriListQuery.url, params: { id: props.formData.id } });
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriListQuery.method, url: UrlList.prizeSet.prigetPriListQuery.url, params: { id: props.formData.id }});
   if (status === 1) {
     UpdateForm.value = data;
 
@@ -159,16 +159,16 @@ const isFullscreen = ref(false)
   el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriListVisible" @open="openVisible")
     el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
       el-form-item(label='ID' prop="id")
-        el-input-number(v-model='UpdateForm.id' :min="0" :max="1000"
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
           placeholder="请输入ID")
       el-form-item(label='奖励名称' prop="prizeName")
         el-input(v-model='UpdateForm.prizeName' autocomplete='off'
           placeholder="请输入奖励名称")
       el-form-item(label='奖励比例' prop="prizePercent")
-        el-input-number(v-model='UpdateForm.prizePercent' :min="0" :max="1000"
+        el-input-number(v-model='UpdateForm.prizePercent' :min="1" :max="1000"
           placeholder="请输入奖励比例")
       el-form-item(label='奖励固定金额' prop="prizeAmount")
-        el-input-number(v-model='UpdateForm.prizeAmount' :min="0" :max="1000"
+        el-input-number(v-model='UpdateForm.prizeAmount' :min="1" :max="1000"
           placeholder="请输入奖励固定金额")
       el-form-item(label="条件模式", prop="conditionMode")
         el-select(

+ 51 - 22
src/views/pri/priList/hook.tsx

@@ -13,14 +13,14 @@ export function usePriList() {
 
     UrlList = await getGroupUrl(["prizeSet"]);
     onSearch(ruleFormRef.value);
-    projectIdQuery();
+  projectIdQuery();
 
   });
   let form = reactive({
-    projectId: null, //项目
-    prizeName: "", //奖励名称
-    conditionMode: "", //条件模式
-    prizeContent: "", //奖励内容
+  projectId:null, //项目
+  prizeName:"", //奖励名称
+  conditionMode:"", //条件模式
+  prizeContent:"", //奖励内容
 
 
   });
@@ -69,10 +69,7 @@ export function usePriList() {
     {
       label: "条件模式",
       prop: "conditionMode",
-      minWidth: 200,
-      formatter: ({ conditionMode }) => {
-        return conditionModeOptionList.find(item => item.id == conditionMode).label
-      },
+      minWidth: 200
     },
     {
       label: "是否递归",
@@ -82,10 +79,17 @@ export function usePriList() {
     {
       label: "奖励内容",
       prop: "prizeContent",
-      minWidth: 200,
-      formatter: ({ prizeContent }) => {
-        return prizeContentOptionList.find(item => item.id == prizeContent).label
-      },
+      minWidth: 200
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "奖励名称",
+      prop: "prizeName",
+      minWidth: 200
     },
 
     {
@@ -149,11 +153,11 @@ export function usePriList() {
       }
     })
   }
-  // 项目选项数据
-  const projectIdOptionList = ref([]);
+    // 项目选项数据
+    const projectIdOptionList = ref([]);
   //获取项目数据
   async function projectIdQuery() {
-    const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: {} });
+    const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: { } });
     if (status === 1) {
       projectIdOptionList.value = data.records;
     }
@@ -172,8 +176,28 @@ export function usePriList() {
 
 
 
+    //跳转到奖励条件
+  function linkToPriCondition(row) {
+    router.push({ path: '../../pri/priCondition/index', query: { listId: row.id } });
+  }
+  //跳转到递归配置
+  function linkToPriLoopSet(row) {
+    router.push({ path: '../../pri/priLoopSet/index', query: { listId: row.id } });
+  }
+  //跳转到奖励记录
+  function linkToPriRecord(row) {
+    router.push({ path: '../../pri/priRecord/index', query: { listId: row.id } });
+  }
+  //跳转到奖励发放日志
+  function linkToPriLog(row) {
+    router.push({ path: '../../pri/priLog/index', query: { listId: row.id } });
+  }
+  //跳转到奖励入库表
+  function linkToPriPrizeInTable(row) {
+    router.push({ path: '../../pri/priPrizeInTable/index', query: { listId: row.id } });
+  }
 
-  // 删除
+    // 删除
   function handleDelete(row) {
     ElMessageBox.confirm(
       `是否删除该奖励配置? `,
@@ -193,20 +217,20 @@ export function usePriList() {
         onSearch(ruleFormRef.value);
       } else {
         ElMessageBox.alert(msg, "提示", {
-          confirmButtonText: "关闭",
-          type: "warning"
-        });
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
       };
     })
   }
 
-  // 新增
+    // 新增
   const addVisible = ref(false);
   function handleAdd() {
     addVisible.value = true;
   };
 
-  // 修改
+    // 修改
   const editUpdatePriListVisible = ref(false);
   const editUpdatePriListFormData = ref({});
   function handleUpdatePriList(row) {
@@ -237,6 +261,11 @@ export function usePriList() {
     editUpdatePriListVisible,
     editUpdatePriListFormData,
     handleDelete,
+    linkToPriCondition,
+    linkToPriLoopSet,
+    linkToPriRecord,
+    linkToPriLog,
+    linkToPriPrizeInTable,
 
   };
 }

+ 54 - 0
src/views/pri/priList/index.vue

@@ -37,6 +37,11 @@ const {
   editUpdatePriListVisible,
   editUpdatePriListFormData,
   handleDelete,
+  linkToPriCondition,
+  linkToPriLoopSet,
+  linkToPriRecord,
+  linkToPriLog,
+  linkToPriPrizeInTable,
 
 } = usePriList();
 // 关闭添加
@@ -142,6 +147,55 @@ provide('closeEditUpdatePriListVisible', closeEditUpdatePriListVisible)
             ) 删除
 
 
+            el-dropdown(trigger="click", :hide-on-click="false")
+              el-button.ml-3(class="mt-[2px]" link type='primary' :size='size' :icon='useRenderIcon(More)')
+              template(#dropdown)
+                el-dropdown-menu
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriCondition(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriCondition'])"
+                    ) 奖励条件
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriLoopSet(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriLoopSet'])"
+                    ) 递归配置
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriRecord(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriRecord'])"
+                    ) 奖励记录
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriLog(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriLog'])"
+                    ) 奖励发放日志
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriPrizeInTable(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriPrizeInTable'])"
+                    ) 奖励入库表
 
     Add(:addVisible="addVisible" :projectId="form.projectId")
     EditUpdatePriList(:editVisible="editUpdatePriListVisible" :formData="editUpdatePriListFormData")

+ 210 - 0
src/views/pri/priLog/components/add/index.vue

@@ -0,0 +1,210 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  listIdQuery();
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  listId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  listId: props.listId, //配置ID
+  prizeObjId: "", //发放对象
+  logSummary: "", //日志说明
+  batchNo: "", //批次号
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 配置ID选项数据
+const listIdOptionList = ref([]);
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriLog.method,
+        url: UrlList.prizeSet.priaddPriLog.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      listId: props.listId, //配置ID
+      prizeObjId: "", //发放对象
+      logSummary: "", //日志说明
+      batchNo: "", //批次号
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取配置ID数据
+const listIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriListDic.method, url: UrlList.prizeSet.prigetPriListDic.url, params: { } });
+  if (status === 1) {
+    listIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+  batchNo: [
+    { required: true, message: '请输入批次号', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    listId: props.listId, //配置ID
+    prizeObjId: "", //发放对象
+    logSummary: "", //日志说明
+    batchNo: "", //批次号
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label="配置ID", prop="listId")
+        el-select(
+          v-model="UpdateForm.listId",
+          placeholder="请选择配置ID",
+          clearable,
+        )
+          el-option(:label="item.id", :value="item.prizeName" v-for="(item,index) in listIdOptionList")
+      el-form-item(label='发放对象' prop="prizeObjId")
+        el-input(v-model='UpdateForm.prizeObjId' autocomplete='off'
+          placeholder="请输入发放对象")
+      el-form-item(label='日志说明' prop="logSummary")
+        el-input(v-model='UpdateForm.logSummary' autocomplete='off'
+          placeholder="请输入日志说明")
+      el-form-item(label='批次号' prop="batchNo")
+        el-input(v-model='UpdateForm.batchNo' autocomplete='off'
+          placeholder="请输入批次号")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 220 - 0
src/views/pri/priLog/components/updatePriLog/index.vue

@@ -0,0 +1,220 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  listIdQuery();
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  listId: null, //配置ID
+  prizeObjId: "", //发放对象
+  logSummary: "", //日志说明
+  batchNo: "", //批次号
+
+});
+// 配置ID选项数据
+const listIdOptionList = ref([]);
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriLog.method,
+        url: UrlList.prizeSet.priupdatePriLog.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      listId: null, //配置ID
+      prizeObjId: "", //发放对象
+      logSummary: "", //日志说明
+      batchNo: "", //批次号
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriLogVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取配置ID数据
+const listIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriListDic.method, url: UrlList.prizeSet.prigetPriListDic.url, params: { } });
+  if (status === 1) {
+    listIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+  batchNo: [
+    { required: true, message: '请输入批次号', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriLogVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriLogQuery.method, url: UrlList.prizeSet.prigetPriLogQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriLogVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    listId: null, //配置ID
+    prizeObjId: "", //发放对象
+    logSummary: "", //日志说明
+    batchNo: "", //批次号
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriLogVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label="配置ID", prop="listId")
+        el-select(
+          v-model="UpdateForm.listId",
+          placeholder="请选择配置ID",
+          clearable,
+        )
+          el-option(:label="item.id", :value="item.prizeName" v-for="(item,index) in listIdOptionList")
+      el-form-item(label='发放对象' prop="prizeObjId")
+        el-input(v-model='UpdateForm.prizeObjId' autocomplete='off'
+          placeholder="请输入发放对象")
+      el-form-item(label='日志说明' prop="logSummary")
+        el-input(v-model='UpdateForm.logSummary' autocomplete='off'
+          placeholder="请输入日志说明")
+      el-form-item(label='批次号' prop="batchNo")
+        el-input(v-model='UpdateForm.batchNo' autocomplete='off'
+          placeholder="请输入批次号")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriLogVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 214 - 0
src/views/pri/priLog/hook.tsx

@@ -0,0 +1,214 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriLog() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.listId = Number(route.query.listId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+  listIdQuery();
+
+  });
+  let form = reactive({
+  listId:null, //配置ID
+  batchNo:"", //批次号
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "配置ID",
+      prop: "listId",
+      minWidth: 200
+      formatter: ({ listId }) => {
+        return listIdOptionList.find(item => item.id == listId).label
+      },
+    },
+    {
+      label: "发放对象",
+      prop: "prizeObjId",
+      minWidth: 200
+    },
+    {
+      label: "日志说明",
+      prop: "logSummary",
+      minWidth: 200
+    },
+    {
+      label: "批次号",
+      prop: "batchNo",
+      minWidth: 200
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriLogList.method,
+          url: UrlList.prizeSet.prigetPriLogList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+    // 配置ID选项数据
+    const listIdOptionList = ref([]);
+  //获取配置ID数据
+  async function listIdQuery() {
+    const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriListDic.method, url: UrlList.prizeSet.prigetPriListDic.url, params: { } });
+    if (status === 1) {
+      listIdOptionList.value = data.records;
+    }
+  }
+
+
+
+  
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该奖励发放日志? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriLog.method, url: UrlList.prizeSet.prideletePriLog.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriLogVisible = ref(false);
+  const editUpdatePriLogFormData = ref({});
+  function handleUpdatePriLog(row) {
+    editUpdatePriLogVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriLogFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+    listIdQuery,
+    listIdOptionList,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriLog,
+    editUpdatePriLogVisible,
+    editUpdatePriLogFormData,
+    handleDelete,
+
+  };
+}

+ 164 - 0
src/views/pri/priLog/index.vue

@@ -0,0 +1,164 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriLog"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriLog } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriLog from "./components/updatePriLog/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  listIdOptionList,
+  handleAdd,
+  addVisible,
+  handleUpdatePriLog,
+  editUpdatePriLogVisible,
+  editUpdatePriLogFormData,
+  handleDelete,
+
+} = usePriLog();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriLogVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriLogVisible.value = false
+}
+provide('closeEditUpdatePriLogVisible', closeEditUpdatePriLogVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label="配置ID", prop="listId")
+        el-select(
+          v-model="form.listId",
+          placeholder="请选择配置ID",
+          clearable,
+        )
+          el-option(:label="item.id", :value="item.prizeName" v-for="(item,index) in listIdOptionList")
+      el-form-item(label='批次号' prop="batchNo")
+        el-input(v-model='form.batchNo' autocomplete='off'
+          placeholder="请输入批次号")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="奖励发放日志", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriLog(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriLog'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :listId="form.listId")
+    EditUpdatePriLog(:editVisible="editUpdatePriLogVisible" :formData="editUpdatePriLogFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 215 - 0
src/views/pri/priLoopSet/components/add/index.vue

@@ -0,0 +1,215 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  listIdQuery();
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  listId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  listId: props.listId, //配置ID
+  loopModel: "", //执行模式
+  parentField: "", //父ID字段
+  sonField: "", //子ID字段
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 配置ID选项数据
+const listIdOptionList = ref([]);
+// 执行模式选项数据
+const loopModelOptionList = [
+  { id: 'field', label: '父子关联字段' },
+]
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriLoopSet.method,
+        url: UrlList.prizeSet.priaddPriLoopSet.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      listId: props.listId, //配置ID
+      loopModel: "", //执行模式
+      parentField: "", //父ID字段
+      sonField: "", //子ID字段
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取配置ID数据
+const listIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriListDic.method, url: UrlList.prizeSet.prigetPriListDic.url, params: { } });
+  if (status === 1) {
+    listIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    listId: props.listId, //配置ID
+    loopModel: "", //执行模式
+    parentField: "", //父ID字段
+    sonField: "", //子ID字段
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label="配置ID", prop="listId")
+        el-select(
+          v-model="UpdateForm.listId",
+          placeholder="请选择配置ID",
+          clearable,
+        )
+          el-option(:label="item.id", :value="item.prizeName" v-for="(item,index) in listIdOptionList")
+      el-form-item(label="执行模式", prop="loopModel")
+        el-select(
+          v-model="UpdateForm.loopModel",
+          placeholder="请选择执行模式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in loopModelOptionList")
+      el-form-item(label='父ID字段' prop="parentField")
+        el-input(v-model='UpdateForm.parentField' autocomplete='off'
+          placeholder="请输入父ID字段")
+      el-form-item(label='子ID字段' prop="sonField")
+        el-input(v-model='UpdateForm.sonField' autocomplete='off'
+          placeholder="请输入子ID字段")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 205 - 0
src/views/pri/priLoopSet/components/updatePriLoopSet/index.vue

@@ -0,0 +1,205 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  loopModel: "", //执行模式
+  parentField: "", //父ID字段
+  sonField: "", //子ID字段
+
+});
+// 执行模式选项数据
+const loopModelOptionList = [
+  { id: 'field', label: '父子关联字段' },
+]
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriLoopSet.method,
+        url: UrlList.prizeSet.priupdatePriLoopSet.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      loopModel: "", //执行模式
+      parentField: "", //父ID字段
+      sonField: "", //子ID字段
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriLoopSetVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriLoopSetVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriLoopSetQuery.method, url: UrlList.prizeSet.prigetPriLoopSetQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriLoopSetVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    loopModel: "", //执行模式
+    parentField: "", //父ID字段
+    sonField: "", //子ID字段
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriLoopSetVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label="执行模式", prop="loopModel")
+        el-select(
+          v-model="UpdateForm.loopModel",
+          placeholder="请选择执行模式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in loopModelOptionList")
+      el-form-item(label='父ID字段' prop="parentField")
+        el-input(v-model='UpdateForm.parentField' autocomplete='off'
+          placeholder="请输入父ID字段")
+      el-form-item(label='子ID字段' prop="sonField")
+        el-input(v-model='UpdateForm.sonField' autocomplete='off'
+          placeholder="请输入子ID字段")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriLoopSetVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 213 - 0
src/views/pri/priLoopSet/hook.tsx

@@ -0,0 +1,213 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriLoopSet() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.listId = Number(route.query.listId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+  listIdQuery();
+
+  });
+  let form = reactive({
+  listId:null, //配置ID
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "配置ID",
+      prop: "listId",
+      minWidth: 200
+      formatter: ({ listId }) => {
+        return listIdOptionList.find(item => item.id == listId).label
+      },
+    },
+    {
+      label: "执行模式",
+      prop: "loopModel",
+      minWidth: 200
+    },
+    {
+      label: "父ID字段",
+      prop: "parentField",
+      minWidth: 200
+    },
+    {
+      label: "子ID字段",
+      prop: "sonField",
+      minWidth: 200
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriLoopSetList.method,
+          url: UrlList.prizeSet.prigetPriLoopSetList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+    // 配置ID选项数据
+    const listIdOptionList = ref([]);
+  //获取配置ID数据
+  async function listIdQuery() {
+    const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriListDic.method, url: UrlList.prizeSet.prigetPriListDic.url, params: { } });
+    if (status === 1) {
+      listIdOptionList.value = data.records;
+    }
+  }
+
+
+
+  
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该递归配置? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriLoopSet.method, url: UrlList.prizeSet.prideletePriLoopSet.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriLoopSetVisible = ref(false);
+  const editUpdatePriLoopSetFormData = ref({});
+  function handleUpdatePriLoopSet(row) {
+    editUpdatePriLoopSetVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriLoopSetFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+    listIdQuery,
+    listIdOptionList,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriLoopSet,
+    editUpdatePriLoopSetVisible,
+    editUpdatePriLoopSetFormData,
+    handleDelete,
+
+  };
+}

+ 161 - 0
src/views/pri/priLoopSet/index.vue

@@ -0,0 +1,161 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriLoopSet"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriLoopSet } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriLoopSet from "./components/updatePriLoopSet/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  listIdOptionList,
+  handleAdd,
+  addVisible,
+  handleUpdatePriLoopSet,
+  editUpdatePriLoopSetVisible,
+  editUpdatePriLoopSetFormData,
+  handleDelete,
+
+} = usePriLoopSet();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriLoopSetVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriLoopSetVisible.value = false
+}
+provide('closeEditUpdatePriLoopSetVisible', closeEditUpdatePriLoopSetVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label="配置ID", prop="listId")
+        el-select(
+          v-model="form.listId",
+          placeholder="请选择配置ID",
+          clearable,
+        )
+          el-option(:label="item.id", :value="item.prizeName" v-for="(item,index) in listIdOptionList")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="递归配置", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriLoopSet(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriLoopSet'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :listId="form.listId")
+    EditUpdatePriLoopSet(:editVisible="editUpdatePriLoopSetVisible" :formData="editUpdatePriLoopSetFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 209 - 0
src/views/pri/priPrizeInField/components/add/index.vue

@@ -0,0 +1,209 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  inTableId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  inTableId: props.inTableId, //入库表
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'loop_field', label: '循环递归字段' },
+  { id: 'fixed_value', label: '固定值' },
+]
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriPrizeInField.method,
+        url: UrlList.prizeSet.priaddPriPrizeInField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      inTableId: props.inTableId, //入库表
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    inTableId: props.inTableId, //入库表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label='入库表' prop="inTableId")
+        el-input-number(v-model='UpdateForm.inTableId' :min="1" :max="1000"
+          placeholder="请输入入库表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 219 - 0
src/views/pri/priPrizeInField/components/updatePriPrizeInField/index.vue

@@ -0,0 +1,219 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  inTableId: null, //入库表
+
+});
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'loop_field', label: '循环递归字段' },
+  { id: 'fixed_value', label: '固定值' },
+]
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriPrizeInField.method,
+        url: UrlList.prizeSet.priupdatePriPrizeInField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      inTableId: null, //入库表
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriPrizeInFieldVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriPrizeInFieldVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriPrizeInFieldQuery.method, url: UrlList.prizeSet.prigetPriPrizeInFieldQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriPrizeInFieldVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    inTableId: null, //入库表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriPrizeInFieldVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label='入库表' prop="inTableId")
+        el-input-number(v-model='UpdateForm.inTableId' :min="1" :max="1000"
+          placeholder="请输入入库表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriPrizeInFieldVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 208 - 0
src/views/pri/priPrizeInField/hook.tsx

@@ -0,0 +1,208 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriPrizeInField() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.inTableId = Number(route.query.inTableId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+
+  });
+  let form = reactive({
+  fieldName:"", //字段名称
+  fieldEnName:"", //字段名
+  inTableId:null, //入库表
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "字段名称",
+      prop: "fieldName",
+      minWidth: 200
+    },
+    {
+      label: "字段名",
+      prop: "fieldEnName",
+      minWidth: 200
+    },
+    {
+      label: "匹配方式",
+      prop: "fieldQueryModel",
+      minWidth: 200
+    },
+    {
+      label: "匹配值",
+      prop: "fieldQueryValue",
+      minWidth: 200
+    },
+    {
+      label: "入库表",
+      prop: "inTableId",
+      minWidth: 200
+      formatter: ({ inTableId }) => {
+        return inTableIdOptionList.find(item => item.id == inTableId).label
+      },
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriPrizeInFieldList.method,
+          url: UrlList.prizeSet.prigetPriPrizeInFieldList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+
+
+
+  
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该奖励入库字段? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriPrizeInField.method, url: UrlList.prizeSet.prideletePriPrizeInField.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriPrizeInFieldVisible = ref(false);
+  const editUpdatePriPrizeInFieldFormData = ref({});
+  function handleUpdatePriPrizeInField(row) {
+    editUpdatePriPrizeInFieldVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriPrizeInFieldFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriPrizeInField,
+    editUpdatePriPrizeInFieldVisible,
+    editUpdatePriPrizeInFieldFormData,
+    handleDelete,
+
+  };
+}

+ 162 - 0
src/views/pri/priPrizeInField/index.vue

@@ -0,0 +1,162 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriPrizeInField"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriPrizeInField } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriPrizeInField from "./components/updatePriPrizeInField/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  handleAdd,
+  addVisible,
+  handleUpdatePriPrizeInField,
+  editUpdatePriPrizeInFieldVisible,
+  editUpdatePriPrizeInFieldFormData,
+  handleDelete,
+
+} = usePriPrizeInField();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriPrizeInFieldVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriPrizeInFieldVisible.value = false
+}
+provide('closeEditUpdatePriPrizeInFieldVisible', closeEditUpdatePriPrizeInFieldVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='form.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='form.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label='入库表' prop="inTableId")
+        el-input-number(v-model='form.inTableId' :min="1" :max="1000"
+          placeholder="请输入入库表")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="奖励入库字段", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriPrizeInField(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriPrizeInField'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :inTableId="form.inTableId")
+    EditUpdatePriPrizeInField(:editVisible="editUpdatePriPrizeInFieldVisible" :formData="editUpdatePriPrizeInFieldFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 241 - 0
src/views/pri/priPrizeInQueryField/components/add/index.vue

@@ -0,0 +1,241 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  inTableId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldQueryKind: "", //匹配条件
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  fieldQueryValueType: "", //匹配值类型
+  inTableId: props.inTableId, //入库表
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 匹配条件选项数据
+const fieldQueryKindOptionList = [
+  { id: 1, label: '模糊匹配' },
+  { id: 2, label: '精确匹配' },
+  { id: 3, label: '范围匹配' },
+]
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'loop_field', label: '循环递归字段' },
+  { id: 'fixed_value', label: '固定值' },
+]
+// 匹配值类型选项数据
+const fieldQueryValueTypeOptionList = [
+  { id: 'text', label: '文本' },
+  { id: 'number', label: '数字' },
+  { id: 'range', label: '范围' },
+]
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriPrizeInQueryField.method,
+        url: UrlList.prizeSet.priaddPriPrizeInQueryField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldQueryKind: "", //匹配条件
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      fieldQueryValueType: "", //匹配值类型
+      inTableId: props.inTableId, //入库表
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldQueryKind: "", //匹配条件
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    fieldQueryValueType: "", //匹配值类型
+    inTableId: props.inTableId, //入库表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="匹配条件", prop="fieldQueryKind")
+        el-select(
+          v-model="UpdateForm.fieldQueryKind",
+          placeholder="请选择匹配条件",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryKindOptionList")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label="匹配值类型", prop="fieldQueryValueType")
+        el-select(
+          v-model="UpdateForm.fieldQueryValueType",
+          placeholder="请选择匹配值类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryValueTypeOptionList")
+      el-form-item(label='入库表' prop="inTableId")
+        el-input-number(v-model='UpdateForm.inTableId' :min="1" :max="1000"
+          placeholder="请输入入库表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 251 - 0
src/views/pri/priPrizeInQueryField/components/updatePriPrizeInQueryField/index.vue

@@ -0,0 +1,251 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldQueryKind: "", //匹配条件
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  fieldQueryValueType: "", //匹配值类型
+  inTableId: null, //入库表
+
+});
+// 匹配条件选项数据
+const fieldQueryKindOptionList = [
+  { id: 1, label: '模糊匹配' },
+  { id: 2, label: '精确匹配' },
+  { id: 3, label: '范围匹配' },
+]
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'loop_field', label: '循环递归字段' },
+  { id: 'fixed_value', label: '固定值' },
+]
+// 匹配值类型选项数据
+const fieldQueryValueTypeOptionList = [
+  { id: 'text', label: '文本' },
+  { id: 'number', label: '数字' },
+  { id: 'range', label: '范围' },
+]
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriPrizeInQueryField.method,
+        url: UrlList.prizeSet.priupdatePriPrizeInQueryField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldQueryKind: "", //匹配条件
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      fieldQueryValueType: "", //匹配值类型
+      inTableId: null, //入库表
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriPrizeInQueryFieldVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriPrizeInQueryFieldVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriPrizeInQueryFieldQuery.method, url: UrlList.prizeSet.prigetPriPrizeInQueryFieldQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriPrizeInQueryFieldVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldQueryKind: "", //匹配条件
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    fieldQueryValueType: "", //匹配值类型
+    inTableId: null, //入库表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriPrizeInQueryFieldVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="匹配条件", prop="fieldQueryKind")
+        el-select(
+          v-model="UpdateForm.fieldQueryKind",
+          placeholder="请选择匹配条件",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryKindOptionList")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label="匹配值类型", prop="fieldQueryValueType")
+        el-select(
+          v-model="UpdateForm.fieldQueryValueType",
+          placeholder="请选择匹配值类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryValueTypeOptionList")
+      el-form-item(label='入库表' prop="inTableId")
+        el-input-number(v-model='UpdateForm.inTableId' :min="1" :max="1000"
+          placeholder="请输入入库表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriPrizeInQueryFieldVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 218 - 0
src/views/pri/priPrizeInQueryField/hook.tsx

@@ -0,0 +1,218 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriPrizeInQueryField() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.inTableId = Number(route.query.inTableId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+
+  });
+  let form = reactive({
+  fieldName:"", //字段名称
+  fieldEnName:"", //字段名
+  inTableId:null, //入库表
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "字段名称",
+      prop: "fieldName",
+      minWidth: 200
+    },
+    {
+      label: "字段名",
+      prop: "fieldEnName",
+      minWidth: 200
+    },
+    {
+      label: "匹配条件",
+      prop: "fieldQueryKind",
+      minWidth: 200
+    },
+    {
+      label: "匹配方式",
+      prop: "fieldQueryModel",
+      minWidth: 200
+    },
+    {
+      label: "匹配值",
+      prop: "fieldQueryValue",
+      minWidth: 200
+    },
+    {
+      label: "匹配值类型",
+      prop: "fieldQueryValueType",
+      minWidth: 200
+    },
+    {
+      label: "入库表",
+      prop: "inTableId",
+      minWidth: 200
+      formatter: ({ inTableId }) => {
+        return inTableIdOptionList.find(item => item.id == inTableId).label
+      },
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriPrizeInQueryFieldList.method,
+          url: UrlList.prizeSet.prigetPriPrizeInQueryFieldList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+
+
+
+  
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该奖励入库条件字段? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriPrizeInQueryField.method, url: UrlList.prizeSet.prideletePriPrizeInQueryField.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriPrizeInQueryFieldVisible = ref(false);
+  const editUpdatePriPrizeInQueryFieldFormData = ref({});
+  function handleUpdatePriPrizeInQueryField(row) {
+    editUpdatePriPrizeInQueryFieldVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriPrizeInQueryFieldFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriPrizeInQueryField,
+    editUpdatePriPrizeInQueryFieldVisible,
+    editUpdatePriPrizeInQueryFieldFormData,
+    handleDelete,
+
+  };
+}

+ 162 - 0
src/views/pri/priPrizeInQueryField/index.vue

@@ -0,0 +1,162 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriPrizeInQueryField"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriPrizeInQueryField } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriPrizeInQueryField from "./components/updatePriPrizeInQueryField/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  handleAdd,
+  addVisible,
+  handleUpdatePriPrizeInQueryField,
+  editUpdatePriPrizeInQueryFieldVisible,
+  editUpdatePriPrizeInQueryFieldFormData,
+  handleDelete,
+
+} = usePriPrizeInQueryField();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriPrizeInQueryFieldVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriPrizeInQueryFieldVisible.value = false
+}
+provide('closeEditUpdatePriPrizeInQueryFieldVisible', closeEditUpdatePriPrizeInQueryFieldVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='form.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='form.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label='入库表' prop="inTableId")
+        el-input-number(v-model='form.inTableId' :min="1" :max="1000"
+          placeholder="请输入入库表")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="奖励入库条件字段", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriPrizeInQueryField(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriPrizeInQueryField'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :inTableId="form.inTableId")
+    EditUpdatePriPrizeInQueryField(:editVisible="editUpdatePriPrizeInQueryFieldVisible" :formData="editUpdatePriPrizeInQueryFieldFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 199 - 0
src/views/pri/priPrizeInTable/components/add/index.vue

@@ -0,0 +1,199 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  listId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  listId: props.listId, //奖励配置
+  tableEnName: "", //查询表
+  excuteKind: "", //执行方式
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 执行方式选项数据
+const excuteKindOptionList = [
+  { id: 'add', label: '添加' },
+  { id: 'update', label: '修改' },
+]
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriPrizeInTable.method,
+        url: UrlList.prizeSet.priaddPriPrizeInTable.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      listId: props.listId, //奖励配置
+      tableEnName: "", //查询表
+      excuteKind: "", //执行方式
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+  tableEnName: [
+    { required: true, message: '请输入查询表', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    listId: props.listId, //奖励配置
+    tableEnName: "", //查询表
+    excuteKind: "", //执行方式
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='奖励配置' prop="listId")
+        el-input(v-model='UpdateForm.listId' autocomplete='off'
+          placeholder="请输入奖励配置")
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='UpdateForm.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+      el-form-item(label="执行方式", prop="excuteKind")
+        el-select(
+          v-model="UpdateForm.excuteKind",
+          placeholder="请选择执行方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in excuteKindOptionList")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 203 - 0
src/views/pri/priPrizeInTable/components/updatePriPrizeInTable/index.vue

@@ -0,0 +1,203 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  tableEnName: "", //查询表
+  excuteKind: "", //执行方式
+
+});
+// 执行方式选项数据
+const excuteKindOptionList = [
+  { id: 'add', label: '添加' },
+  { id: 'update', label: '修改' },
+]
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriPrizeInTable.method,
+        url: UrlList.prizeSet.priupdatePriPrizeInTable.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      tableEnName: "", //查询表
+      excuteKind: "", //执行方式
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriPrizeInTableVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+  tableEnName: [
+    { required: true, message: '请输入查询表', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriPrizeInTableVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriPrizeInTableQuery.method, url: UrlList.prizeSet.prigetPriPrizeInTableQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriPrizeInTableVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    tableEnName: "", //查询表
+    excuteKind: "", //执行方式
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriPrizeInTableVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='UpdateForm.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+      el-form-item(label="执行方式", prop="excuteKind")
+        el-select(
+          v-model="UpdateForm.excuteKind",
+          placeholder="请选择执行方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in excuteKindOptionList")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriPrizeInTableVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 216 - 0
src/views/pri/priPrizeInTable/hook.tsx

@@ -0,0 +1,216 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriPrizeInTable() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.listId = Number(route.query.listId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+
+  });
+  let form = reactive({
+  listId:null, //奖励配置
+  tableEnName:"", //查询表
+  excuteKind:"", //执行方式
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "查询表",
+      prop: "tableEnName",
+      minWidth: 200
+    },
+    {
+      label: "执行方式",
+      prop: "excuteKind",
+      minWidth: 200
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "查询表",
+      prop: "tableEnName",
+      minWidth: 200
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriPrizeInTableList.method,
+          url: UrlList.prizeSet.prigetPriPrizeInTableList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+  // 执行方式选项数据
+  const excuteKindOptionList = [
+    { id: 'add', label: '添加' },
+    { id: 'update', label: '修改' },
+  ]
+
+
+
+    //跳转到奖励入库字段
+  function linkToPriPrizeInField(row) {
+    router.push({ path: '../../pri/priPrizeInField/index', query: { inTableId: row.id } });
+  }
+  //跳转到奖励入库条件字段
+  function linkToPriPrizeInQueryField(row) {
+    router.push({ path: '../../pri/priPrizeInQueryField/index', query: { inTableId: row.id } });
+  }
+
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该奖励入库表? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriPrizeInTable.method, url: UrlList.prizeSet.prideletePriPrizeInTable.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriPrizeInTableVisible = ref(false);
+  const editUpdatePriPrizeInTableFormData = ref({});
+  function handleUpdatePriPrizeInTable(row) {
+    editUpdatePriPrizeInTableVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriPrizeInTableFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+    excuteKindOptionList,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriPrizeInTable,
+    editUpdatePriPrizeInTableVisible,
+    editUpdatePriPrizeInTableFormData,
+    handleDelete,
+    linkToPriPrizeInField,
+    linkToPriPrizeInQueryField,
+
+  };
+}

+ 191 - 0
src/views/pri/priPrizeInTable/index.vue

@@ -0,0 +1,191 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriPrizeInTable"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriPrizeInTable } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriPrizeInTable from "./components/updatePriPrizeInTable/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  excuteKindOptionList,
+  handleAdd,
+  addVisible,
+  handleUpdatePriPrizeInTable,
+  editUpdatePriPrizeInTableVisible,
+  editUpdatePriPrizeInTableFormData,
+  handleDelete,
+  linkToPriPrizeInField,
+  linkToPriPrizeInQueryField,
+
+} = usePriPrizeInTable();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriPrizeInTableVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriPrizeInTableVisible.value = false
+}
+provide('closeEditUpdatePriPrizeInTableVisible', closeEditUpdatePriPrizeInTableVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label='奖励配置' prop="listId")
+        el-input(v-model='form.listId' autocomplete='off'
+          placeholder="请输入奖励配置")
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='form.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+      el-form-item(label="执行方式", prop="excuteKind")
+        el-select(
+          v-model="form.excuteKind",
+          placeholder="请选择执行方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in excuteKindOptionList")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="奖励入库表", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriPrizeInTable(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriPrizeInTable'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+            el-dropdown(trigger="click", :hide-on-click="false")
+              el-button.ml-3(class="mt-[2px]" link type='primary' :size='size' :icon='useRenderIcon(More)')
+              template(#dropdown)
+                el-dropdown-menu
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriPrizeInField(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriPrizeInField'])"
+                    ) 奖励入库字段
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriPrizeInQueryField(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriPrizeInQueryField'])"
+                    ) 奖励入库条件字段
+
+    Add(:addVisible="addVisible" :listId="form.listId")
+    EditUpdatePriPrizeInTable(:editVisible="editUpdatePriPrizeInTableVisible" :formData="editUpdatePriPrizeInTableFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 241 - 0
src/views/pri/priPrizeObjectField/components/add/index.vue

@@ -0,0 +1,241 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  objectTableId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldQueryKind: "", //匹配条件
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  fieldQueryValueType: "", //匹配值类型
+  objectTableId: props.objectTableId, //对象表
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 匹配条件选项数据
+const fieldQueryKindOptionList = [
+  { id: 1, label: '模糊匹配' },
+  { id: 2, label: '精确匹配' },
+  { id: 3, label: '范围匹配' },
+]
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'loop_field', label: '循环递归字段' },
+  { id: 'fixed_value', label: '固定值' },
+]
+// 匹配值类型选项数据
+const fieldQueryValueTypeOptionList = [
+  { id: 'text', label: '文本' },
+  { id: 'number', label: '数字' },
+  { id: 'range', label: '范围' },
+]
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriPrizeObjectField.method,
+        url: UrlList.prizeSet.priaddPriPrizeObjectField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldQueryKind: "", //匹配条件
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      fieldQueryValueType: "", //匹配值类型
+      objectTableId: props.objectTableId, //对象表
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldQueryKind: "", //匹配条件
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    fieldQueryValueType: "", //匹配值类型
+    objectTableId: props.objectTableId, //对象表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="匹配条件", prop="fieldQueryKind")
+        el-select(
+          v-model="UpdateForm.fieldQueryKind",
+          placeholder="请选择匹配条件",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryKindOptionList")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label="匹配值类型", prop="fieldQueryValueType")
+        el-select(
+          v-model="UpdateForm.fieldQueryValueType",
+          placeholder="请选择匹配值类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryValueTypeOptionList")
+      el-form-item(label='对象表' prop="objectTableId")
+        el-input-number(v-model='UpdateForm.objectTableId' :min="1" :max="1000"
+          placeholder="请输入对象表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 251 - 0
src/views/pri/priPrizeObjectField/components/updatePriPrizeObjectField/index.vue

@@ -0,0 +1,251 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldQueryKind: "", //匹配条件
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  fieldQueryValueType: "", //匹配值类型
+  objectTableId: null, //对象表
+
+});
+// 匹配条件选项数据
+const fieldQueryKindOptionList = [
+  { id: 1, label: '模糊匹配' },
+  { id: 2, label: '精确匹配' },
+  { id: 3, label: '范围匹配' },
+]
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'loop_field', label: '循环递归字段' },
+  { id: 'fixed_value', label: '固定值' },
+]
+// 匹配值类型选项数据
+const fieldQueryValueTypeOptionList = [
+  { id: 'text', label: '文本' },
+  { id: 'number', label: '数字' },
+  { id: 'range', label: '范围' },
+]
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriPrizeObjectField.method,
+        url: UrlList.prizeSet.priupdatePriPrizeObjectField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldQueryKind: "", //匹配条件
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      fieldQueryValueType: "", //匹配值类型
+      objectTableId: null, //对象表
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriPrizeObjectFieldVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriPrizeObjectFieldVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriPrizeObjectFieldQuery.method, url: UrlList.prizeSet.prigetPriPrizeObjectFieldQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriPrizeObjectFieldVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldQueryKind: "", //匹配条件
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    fieldQueryValueType: "", //匹配值类型
+    objectTableId: null, //对象表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriPrizeObjectFieldVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="匹配条件", prop="fieldQueryKind")
+        el-select(
+          v-model="UpdateForm.fieldQueryKind",
+          placeholder="请选择匹配条件",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryKindOptionList")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label="匹配值类型", prop="fieldQueryValueType")
+        el-select(
+          v-model="UpdateForm.fieldQueryValueType",
+          placeholder="请选择匹配值类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryValueTypeOptionList")
+      el-form-item(label='对象表' prop="objectTableId")
+        el-input-number(v-model='UpdateForm.objectTableId' :min="1" :max="1000"
+          placeholder="请输入对象表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriPrizeObjectFieldVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 218 - 0
src/views/pri/priPrizeObjectField/hook.tsx

@@ -0,0 +1,218 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriPrizeObjectField() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.objectTableId = Number(route.query.objectTableId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+
+  });
+  let form = reactive({
+  fieldName:"", //字段名称
+  fieldEnName:"", //字段名
+  objectTableId:null, //对象表
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "字段名称",
+      prop: "fieldName",
+      minWidth: 200
+    },
+    {
+      label: "字段名",
+      prop: "fieldEnName",
+      minWidth: 200
+    },
+    {
+      label: "匹配条件",
+      prop: "fieldQueryKind",
+      minWidth: 200
+    },
+    {
+      label: "匹配方式",
+      prop: "fieldQueryModel",
+      minWidth: 200
+    },
+    {
+      label: "匹配值",
+      prop: "fieldQueryValue",
+      minWidth: 200
+    },
+    {
+      label: "匹配值类型",
+      prop: "fieldQueryValueType",
+      minWidth: 200
+    },
+    {
+      label: "对象表",
+      prop: "objectTableId",
+      minWidth: 200
+      formatter: ({ objectTableId }) => {
+        return objectTableIdOptionList.find(item => item.id == objectTableId).label
+      },
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriPrizeObjectFieldList.method,
+          url: UrlList.prizeSet.prigetPriPrizeObjectFieldList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+
+
+
+  
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该奖励发放对象字段? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriPrizeObjectField.method, url: UrlList.prizeSet.prideletePriPrizeObjectField.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriPrizeObjectFieldVisible = ref(false);
+  const editUpdatePriPrizeObjectFieldFormData = ref({});
+  function handleUpdatePriPrizeObjectField(row) {
+    editUpdatePriPrizeObjectFieldVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriPrizeObjectFieldFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriPrizeObjectField,
+    editUpdatePriPrizeObjectFieldVisible,
+    editUpdatePriPrizeObjectFieldFormData,
+    handleDelete,
+
+  };
+}

+ 162 - 0
src/views/pri/priPrizeObjectField/index.vue

@@ -0,0 +1,162 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriPrizeObjectField"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriPrizeObjectField } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriPrizeObjectField from "./components/updatePriPrizeObjectField/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  handleAdd,
+  addVisible,
+  handleUpdatePriPrizeObjectField,
+  editUpdatePriPrizeObjectFieldVisible,
+  editUpdatePriPrizeObjectFieldFormData,
+  handleDelete,
+
+} = usePriPrizeObjectField();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriPrizeObjectFieldVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriPrizeObjectFieldVisible.value = false
+}
+provide('closeEditUpdatePriPrizeObjectFieldVisible', closeEditUpdatePriPrizeObjectFieldVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='form.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='form.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label='对象表' prop="objectTableId")
+        el-input-number(v-model='form.objectTableId' :min="1" :max="1000"
+          placeholder="请输入对象表")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="奖励发放对象字段", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriPrizeObjectField(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriPrizeObjectField'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :objectTableId="form.objectTableId")
+    EditUpdatePriPrizeObjectField(:editVisible="editUpdatePriPrizeObjectFieldVisible" :formData="editUpdatePriPrizeObjectFieldFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 207 - 0
src/views/pri/priPrizeObjectTable/components/add/index.vue

@@ -0,0 +1,207 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  projectIdQuery();
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  projectId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  projectId: props.projectId, //项目
+  tableEnName: "", //查询表
+  prizeListIds: "", //指定奖励配置
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 项目选项数据
+const projectIdOptionList = ref([]);
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriPrizeObjectTable.method,
+        url: UrlList.prizeSet.priaddPriPrizeObjectTable.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      projectId: props.projectId, //项目
+      tableEnName: "", //查询表
+      prizeListIds: "", //指定奖励配置
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取项目数据
+const projectIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: { } });
+  if (status === 1) {
+    projectIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+  projectId: [
+    { required: true, message: '请输入项目', trigger: 'blur' },
+  ],
+  tableEnName: [
+    { required: true, message: '请输入查询表', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    projectId: props.projectId, //项目
+    tableEnName: "", //查询表
+    prizeListIds: "", //指定奖励配置
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="UpdateForm.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.projectName", :value="item.id" v-for="(item,index) in projectIdOptionList")
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='UpdateForm.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+      el-form-item(label='指定奖励配置' prop="prizeListIds")
+        el-input(v-model='UpdateForm.prizeListIds' autocomplete='off'
+          placeholder="请输入指定奖励配置")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 194 - 0
src/views/pri/priPrizeObjectTable/components/updatePriPrizeObjectTable/index.vue

@@ -0,0 +1,194 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  tableEnName: "", //查询表
+  id: null, //ID
+  prizeListIds: "", //指定奖励配置
+
+});
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriPrizeObjectTable.method,
+        url: UrlList.prizeSet.priupdatePriPrizeObjectTable.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      tableEnName: "", //查询表
+      id: null, //ID
+      prizeListIds: "", //指定奖励配置
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriPrizeObjectTableVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+  tableEnName: [
+    { required: true, message: '请输入查询表', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriPrizeObjectTableVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriPrizeObjectTableQuery.method, url: UrlList.prizeSet.prigetPriPrizeObjectTableQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriPrizeObjectTableVisible = () => {
+  UpdateForm.value = {
+    tableEnName: "", //查询表
+    id: null, //ID
+    prizeListIds: "", //指定奖励配置
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriPrizeObjectTableVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='UpdateForm.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='指定奖励配置' prop="prizeListIds")
+        el-input(v-model='UpdateForm.prizeListIds' autocomplete='off'
+          placeholder="请输入指定奖励配置")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriPrizeObjectTableVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 216 - 0
src/views/pri/priPrizeObjectTable/hook.tsx

@@ -0,0 +1,216 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriPrizeObjectTable() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.projectId = Number(route.query.projectId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+  projectIdQuery();
+
+  });
+  let form = reactive({
+  projectId:null, //项目
+  tableEnName:"", //查询表
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "查询表",
+      prop: "tableEnName",
+      minWidth: 200
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "指定奖励配置",
+      prop: "prizeListIds",
+      minWidth: 200
+    },
+    {
+      label: "查询表",
+      prop: "tableEnName",
+      minWidth: 200
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriPrizeObjectTableList.method,
+          url: UrlList.prizeSet.prigetPriPrizeObjectTableList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+    // 项目选项数据
+    const projectIdOptionList = ref([]);
+  //获取项目数据
+  async function projectIdQuery() {
+    const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: { } });
+    if (status === 1) {
+      projectIdOptionList.value = data.records;
+    }
+  }
+
+
+
+    //跳转到奖励发放对象字段
+  function linkToPriPrizeObjectField(row) {
+    router.push({ path: '../../pri/priPrizeObjectField/index', query: { objectTableId: row.id } });
+  }
+
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该奖励发放对象表? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriPrizeObjectTable.method, url: UrlList.prizeSet.prideletePriPrizeObjectTable.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriPrizeObjectTableVisible = ref(false);
+  const editUpdatePriPrizeObjectTableFormData = ref({});
+  function handleUpdatePriPrizeObjectTable(row) {
+    editUpdatePriPrizeObjectTableVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriPrizeObjectTableFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+    projectIdQuery,
+    projectIdOptionList,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriPrizeObjectTable,
+    editUpdatePriPrizeObjectTableVisible,
+    editUpdatePriPrizeObjectTableFormData,
+    handleDelete,
+    linkToPriPrizeObjectField,
+
+  };
+}

+ 178 - 0
src/views/pri/priPrizeObjectTable/index.vue

@@ -0,0 +1,178 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriPrizeObjectTable"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriPrizeObjectTable } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriPrizeObjectTable from "./components/updatePriPrizeObjectTable/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  projectIdOptionList,
+  handleAdd,
+  addVisible,
+  handleUpdatePriPrizeObjectTable,
+  editUpdatePriPrizeObjectTableVisible,
+  editUpdatePriPrizeObjectTableFormData,
+  handleDelete,
+  linkToPriPrizeObjectField,
+
+} = usePriPrizeObjectTable();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriPrizeObjectTableVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriPrizeObjectTableVisible.value = false
+}
+provide('closeEditUpdatePriPrizeObjectTableVisible', closeEditUpdatePriPrizeObjectTableVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="form.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.projectName", :value="item.id" v-for="(item,index) in projectIdOptionList")
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='form.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="奖励发放对象表", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriPrizeObjectTable(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriPrizeObjectTable'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+            el-dropdown(trigger="click", :hide-on-click="false")
+              el-button.ml-3(class="mt-[2px]" link type='primary' :size='size' :icon='useRenderIcon(More)')
+              template(#dropdown)
+                el-dropdown-menu
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriPrizeObjectField(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriPrizeObjectField'])"
+                    ) 奖励发放对象字段
+
+    Add(:addVisible="addVisible" :projectId="form.projectId")
+    EditUpdatePriPrizeObjectTable(:editVisible="editUpdatePriPrizeObjectTableVisible" :formData="editUpdatePriPrizeObjectTableFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 44 - 9
src/views/pri/priProject/hook.tsx

@@ -15,8 +15,8 @@ export function usePriProject() {
 
   });
   let form = reactive({
-  projectName:"", //项目名称
-  requestMode:"", //调用方式
+    projectName: "", //项目名称
+    requestMode: "", //调用方式
 
 
   });
@@ -152,12 +152,40 @@ export function usePriProject() {
 
 
 
-    //跳转到奖励配置
+  //跳转到入参表
+  function linkToPriProjectParam(row) {
+    router.push({ path: '../../pri/priProjectParam/index', query: { projectId: row.id } });
+  }
+  //跳转到条件匹配表
+  function linkToPriQueryTable(row) {
+    router.push({ path: '../../pri/priQueryTable/index', query: { projectId: row.id } });
+  }
+  //跳转到奖励配置
   function linkToPriList(row) {
     router.push({ path: '../../pri/priList/index', query: { projectId: row.id } });
   }
+  //跳转到数据库连接配置
+  function linkToPriDatabaseSet(row) {
+    router.push({ path: '../../pri/priDatabaseSet/index', query: { projectId: row.id } });
+  }
+  //跳转到奖励发放对象表
+  function linkToPriPrizeObjectTable(row) {
+    router.push({ path: '../../pri/priPrizeObjectTable/index', query: { projectId: row.id } });
+  }
+  //跳转到请求和响应日志
+  function linkToPriRequestLog(row) {
+    router.push({ path: '../../pri/priRequestLog/index', query: { projectId: row.id } });
+  }
+  //跳转到递归开始条件对象表
+  function linkToPriRecursionStartTable(row) {
+    router.push({ path: '../../pri/priRecursionStartTable/index', query: { projectId: row.id } });
+  }
+  //跳转到递归停止条件对象表
+  function linkToPriRecursionEndTable(row) {
+    router.push({ path: '../../pri/priRecursionEndTable/index', query: { projectId: row.id } });
+  }
 
-    // 删除
+  // 删除
   function handleDelete(row) {
     ElMessageBox.confirm(
       `是否删除该奖励项目? `,
@@ -177,20 +205,20 @@ export function usePriProject() {
         onSearch(ruleFormRef.value);
       } else {
         ElMessageBox.alert(msg, "提示", {
-        confirmButtonText: "关闭",
-        type: "warning"
-      });
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
       };
     })
   }
 
-    // 新增
+  // 新增
   const addVisible = ref(false);
   function handleAdd() {
     addVisible.value = true;
   };
 
-    // 修改
+  // 修改
   const editUpdatePriProjectVisible = ref(false);
   const editUpdatePriProjectFormData = ref({});
   function handleUpdatePriProject(row) {
@@ -218,7 +246,14 @@ export function usePriProject() {
     editUpdatePriProjectVisible,
     editUpdatePriProjectFormData,
     handleDelete,
+    linkToPriProjectParam,
+    linkToPriQueryTable,
     linkToPriList,
+    linkToPriDatabaseSet,
+    linkToPriPrizeObjectTable,
+    linkToPriRequestLog,
+    linkToPriRecursionStartTable,
+    linkToPriRecursionEndTable,
 
   };
 }

+ 70 - 0
src/views/pri/priProject/index.vue

@@ -35,7 +35,14 @@ const {
   editUpdatePriProjectVisible,
   editUpdatePriProjectFormData,
   handleDelete,
+  linkToPriProjectParam,
+  linkToPriQueryTable,
   linkToPriList,
+  linkToPriDatabaseSet,
+  linkToPriPrizeObjectTable,
+  linkToPriRequestLog,
+  linkToPriRecursionStartTable,
+  linkToPriRecursionEndTable,
 
 } = usePriProject();
 // 关闭添加
@@ -131,6 +138,24 @@ provide('closeEditUpdatePriProjectVisible', closeEditUpdatePriProjectVisible)
               el-button.ml-3(class="mt-[2px]" link type='primary' :size='size' :icon='useRenderIcon(More)')
               template(#dropdown)
                 el-dropdown-menu
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriProjectParam(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriProjectParam'])"
+                    ) 入参表
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriQueryTable(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriQueryTable'])"
+                    ) 条件匹配表
                   el-dropdown-item
                     el-button.reset-margin.edit-btn(
                       link
@@ -140,6 +165,51 @@ provide('closeEditUpdatePriProjectVisible', closeEditUpdatePriProjectVisible)
                       :icon="useRenderIcon(EditPen)"
                       v-if="hasAuth(['linkToPriList'])"
                     ) 奖励配置
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriDatabaseSet(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriDatabaseSet'])"
+                    ) 数据库连接配置
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriPrizeObjectTable(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriPrizeObjectTable'])"
+                    ) 奖励发放对象表
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriRequestLog(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriRequestLog'])"
+                    ) 请求和响应日志
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriRecursionStartTable(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriRecursionStartTable'])"
+                    ) 递归开始条件对象表
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriRecursionEndTable(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriRecursionEndTable'])"
+                    ) 递归停止条件对象表
 
     Add(:addVisible="addVisible")
     EditUpdatePriProject(:editVisible="editUpdatePriProjectVisible" :formData="editUpdatePriProjectFormData")

+ 210 - 0
src/views/pri/priProjectParam/components/add/index.vue

@@ -0,0 +1,210 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  projectIdQuery();
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  projectId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  projectId: props.projectId, //项目
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 项目选项数据
+const projectIdOptionList = ref([]);
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriProjectParam.method,
+        url: UrlList.prizeSet.priaddPriProjectParam.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+          fieldName: "", //字段名称
+          fieldEnName: "", //字段名
+          projectId: props.projectId, //项目
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取项目数据
+const projectIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectList.method, url: UrlList.prizeSet.prigetPriProjectList.url, params: {} });
+  if (status === 1) {
+    projectIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+  fieldName: [
+    { required: true, message: '请输入字段名称', trigger: 'blur' },
+  ],
+  fieldEnName: [
+    { required: true, message: '请输入字段名', trigger: 'blur' },
+  ],
+  projectId: [
+    { required: true, message: '请输入项目', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    projectId: props.projectId, //项目
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="UpdateForm.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.projectName", :value="item.id" v-for="(item,index) in projectIdOptionList")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 220 - 0
src/views/pri/priProjectParam/components/updatePriProjectParam/index.vue

@@ -0,0 +1,220 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  projectIdQuery();
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  projectId: null, //项目
+
+});
+// 项目选项数据
+const projectIdOptionList = ref([]);
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriProjectParam.method,
+        url: UrlList.prizeSet.priupdatePriProjectParam.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+          id: null, //ID
+          fieldName: "", //字段名称
+          fieldEnName: "", //字段名
+          projectId: null, //项目
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriProjectParamVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取项目数据
+const projectIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectList.method, url: UrlList.prizeSet.prigetPriProjectList.url, params: {} });
+  if (status === 1) {
+    projectIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+  fieldName: [
+    { required: true, message: '请输入字段名称', trigger: 'blur' },
+  ],
+  fieldEnName: [
+    { required: true, message: '请输入字段名', trigger: 'blur' },
+  ],
+  projectId: [
+    { required: true, message: '请输入项目', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriProjectParamVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectParamQuery.method, url: UrlList.prizeSet.prigetPriProjectParamQuery.url, params: { id: props.formData.id } });
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriProjectParamVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    projectId: null, //项目
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriProjectParamVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="UpdateForm.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.projectName", :value="item.id" v-for="(item,index) in projectIdOptionList")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriProjectParamVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 202 - 0
src/views/pri/priProjectParam/hook.tsx

@@ -0,0 +1,202 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriProjectParam() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.projectId = Number(route.query.projectId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+    projectIdQuery();
+
+  });
+  let form = reactive({
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    projectId: null, //项目
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "字段名称",
+      prop: "fieldName",
+      minWidth: 200
+    },
+    {
+      label: "字段名",
+      prop: "fieldEnName",
+      minWidth: 200
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriProjectParamList.method,
+          url: UrlList.prizeSet.prigetPriProjectParamList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+  // 项目选项数据
+  const projectIdOptionList = ref([]);
+  //获取项目数据
+  async function projectIdQuery() {
+    const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectList.method, url: UrlList.prizeSet.prigetPriProjectList.url, params: {} });
+    if (status === 1) {
+      projectIdOptionList.value = data.records;
+    }
+  }
+
+
+
+
+  // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该入参表? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriProjectParam.method, url: UrlList.prizeSet.prideletePriProjectParam.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      };
+    })
+  }
+
+  // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+  // 修改
+  const editUpdatePriProjectParamVisible = ref(false);
+  const editUpdatePriProjectParamFormData = ref({});
+  function handleUpdatePriProjectParam(row) {
+    editUpdatePriProjectParamVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriProjectParamFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+    projectIdQuery,
+    projectIdOptionList,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriProjectParam,
+    editUpdatePriProjectParamVisible,
+    editUpdatePriProjectParamFormData,
+    handleDelete,
+
+  };
+}

+ 167 - 0
src/views/pri/priProjectParam/index.vue

@@ -0,0 +1,167 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriProjectParam"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriProjectParam } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriProjectParam from "./components/updatePriProjectParam/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  projectIdOptionList,
+  handleAdd,
+  addVisible,
+  handleUpdatePriProjectParam,
+  editUpdatePriProjectParamVisible,
+  editUpdatePriProjectParamFormData,
+  handleDelete,
+
+} = usePriProjectParam();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriProjectParamVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriProjectParamVisible.value = false
+}
+provide('closeEditUpdatePriProjectParamVisible', closeEditUpdatePriProjectParamVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='form.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='form.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="form.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.projectName", :value="item.id" v-for="(item,index) in projectIdOptionList")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="入参表", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriProjectParam(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriProjectParam'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :projectId="form.projectId")
+    EditUpdatePriProjectParam(:editVisible="editUpdatePriProjectParamVisible" :formData="editUpdatePriProjectParamFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 241 - 0
src/views/pri/priQueryField/components/add/index.vue

@@ -0,0 +1,241 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  queryTableId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldQueryKind: "", //匹配条件
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  fieldQueryValueType: "", //匹配值类型
+  queryTableId: props.queryTableId, //匹配表
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 匹配条件选项数据
+const fieldQueryKindOptionList = [
+  { id: 1, label: '模糊匹配' },
+  { id: 2, label: '精确匹配' },
+  { id: 3, label: '范围匹配' },
+]
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'loop_field', label: '循环递归字段' },
+  { id: 'fixed_value', label: '固定值' },
+]
+// 匹配值类型选项数据
+const fieldQueryValueTypeOptionList = [
+  { id: 'text', label: '文本' },
+  { id: 'number', label: '数字' },
+  { id: 'range', label: '范围' },
+]
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriQueryField.method,
+        url: UrlList.prizeSet.priaddPriQueryField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldQueryKind: "", //匹配条件
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      fieldQueryValueType: "", //匹配值类型
+      queryTableId: props.queryTableId, //匹配表
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldQueryKind: "", //匹配条件
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    fieldQueryValueType: "", //匹配值类型
+    queryTableId: props.queryTableId, //匹配表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="匹配条件", prop="fieldQueryKind")
+        el-select(
+          v-model="UpdateForm.fieldQueryKind",
+          placeholder="请选择匹配条件",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryKindOptionList")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label="匹配值类型", prop="fieldQueryValueType")
+        el-select(
+          v-model="UpdateForm.fieldQueryValueType",
+          placeholder="请选择匹配值类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryValueTypeOptionList")
+      el-form-item(label='匹配表' prop="queryTableId")
+        el-input-number(v-model='UpdateForm.queryTableId' :min="1" :max="1000"
+          placeholder="请输入匹配表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 245 - 0
src/views/pri/priQueryField/components/updatePriQueryField/index.vue

@@ -0,0 +1,245 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldQueryKind: "", //匹配条件
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  fieldQueryValueType: "", //匹配值类型
+
+});
+// 匹配条件选项数据
+const fieldQueryKindOptionList = [
+  { id: 1, label: '模糊匹配' },
+  { id: 2, label: '精确匹配' },
+  { id: 3, label: '范围匹配' },
+]
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'loop_field', label: '循环递归字段' },
+  { id: 'fixed_value', label: '固定值' },
+]
+// 匹配值类型选项数据
+const fieldQueryValueTypeOptionList = [
+  { id: 'text', label: '文本' },
+  { id: 'number', label: '数字' },
+  { id: 'range', label: '范围' },
+]
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriQueryField.method,
+        url: UrlList.prizeSet.priupdatePriQueryField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldQueryKind: "", //匹配条件
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      fieldQueryValueType: "", //匹配值类型
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriQueryFieldVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriQueryFieldVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriQueryFieldQuery.method, url: UrlList.prizeSet.prigetPriQueryFieldQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriQueryFieldVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldQueryKind: "", //匹配条件
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    fieldQueryValueType: "", //匹配值类型
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriQueryFieldVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="匹配条件", prop="fieldQueryKind")
+        el-select(
+          v-model="UpdateForm.fieldQueryKind",
+          placeholder="请选择匹配条件",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryKindOptionList")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label="匹配值类型", prop="fieldQueryValueType")
+        el-select(
+          v-model="UpdateForm.fieldQueryValueType",
+          placeholder="请选择匹配值类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryValueTypeOptionList")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriQueryFieldVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 218 - 0
src/views/pri/priQueryField/hook.tsx

@@ -0,0 +1,218 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriQueryField() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.queryTableId = Number(route.query.queryTableId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+
+  });
+  let form = reactive({
+  fieldName:"", //字段名称
+  fieldEnName:"", //字段名
+  queryTableId:null, //匹配表
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "字段名称",
+      prop: "fieldName",
+      minWidth: 200
+    },
+    {
+      label: "字段名",
+      prop: "fieldEnName",
+      minWidth: 200
+    },
+    {
+      label: "匹配条件",
+      prop: "fieldQueryKind",
+      minWidth: 200
+    },
+    {
+      label: "匹配方式",
+      prop: "fieldQueryModel",
+      minWidth: 200
+    },
+    {
+      label: "匹配值",
+      prop: "fieldQueryValue",
+      minWidth: 200
+    },
+    {
+      label: "匹配值类型",
+      prop: "fieldQueryValueType",
+      minWidth: 200
+    },
+    {
+      label: "匹配表",
+      prop: "queryTableId",
+      minWidth: 200
+      formatter: ({ queryTableId }) => {
+        return queryTableIdOptionList.find(item => item.id == queryTableId).label
+      },
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriQueryFieldList.method,
+          url: UrlList.prizeSet.prigetPriQueryFieldList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+
+
+
+  
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该条件匹配字段? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriQueryField.method, url: UrlList.prizeSet.prideletePriQueryField.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriQueryFieldVisible = ref(false);
+  const editUpdatePriQueryFieldFormData = ref({});
+  function handleUpdatePriQueryField(row) {
+    editUpdatePriQueryFieldVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriQueryFieldFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriQueryField,
+    editUpdatePriQueryFieldVisible,
+    editUpdatePriQueryFieldFormData,
+    handleDelete,
+
+  };
+}

+ 162 - 0
src/views/pri/priQueryField/index.vue

@@ -0,0 +1,162 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriQueryField"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriQueryField } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriQueryField from "./components/updatePriQueryField/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  handleAdd,
+  addVisible,
+  handleUpdatePriQueryField,
+  editUpdatePriQueryFieldVisible,
+  editUpdatePriQueryFieldFormData,
+  handleDelete,
+
+} = usePriQueryField();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriQueryFieldVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriQueryFieldVisible.value = false
+}
+provide('closeEditUpdatePriQueryFieldVisible', closeEditUpdatePriQueryFieldVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='form.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='form.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label='匹配表' prop="queryTableId")
+        el-input-number(v-model='form.queryTableId' :min="1" :max="1000"
+          placeholder="请输入匹配表")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="条件匹配字段", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriQueryField(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriQueryField'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :queryTableId="form.queryTableId")
+    EditUpdatePriQueryField(:editVisible="editUpdatePriQueryFieldVisible" :formData="editUpdatePriQueryFieldFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 201 - 0
src/views/pri/priQueryTable/components/add/index.vue

@@ -0,0 +1,201 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  projectIdQuery();
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  projectId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  tableEnName: "", //查询表
+  projectId: props.projectId, //项目
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 项目选项数据
+const projectIdOptionList = ref([]);
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriQueryTable.method,
+        url: UrlList.prizeSet.priaddPriQueryTable.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      tableEnName: "", //查询表
+      projectId: props.projectId, //项目
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取项目数据
+const projectIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: { } });
+  if (status === 1) {
+    projectIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+  tableEnName: [
+    { required: true, message: '请输入查询表', trigger: 'blur' },
+  ],
+  projectId: [
+    { required: true, message: '请输入项目', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    tableEnName: "", //查询表
+    projectId: props.projectId, //项目
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='UpdateForm.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="UpdateForm.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.projectName", :value="item.id" v-for="(item,index) in projectIdOptionList")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 188 - 0
src/views/pri/priQueryTable/components/updatePriQueryTable/index.vue

@@ -0,0 +1,188 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  tableEnName: "", //查询表
+
+});
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriQueryTable.method,
+        url: UrlList.prizeSet.priupdatePriQueryTable.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      tableEnName: "", //查询表
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriQueryTableVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+  tableEnName: [
+    { required: true, message: '请输入查询表', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriQueryTableVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriQueryTableQuery.method, url: UrlList.prizeSet.prigetPriQueryTableQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriQueryTableVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    tableEnName: "", //查询表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriQueryTableVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='UpdateForm.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriQueryTableVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 216 - 0
src/views/pri/priQueryTable/hook.tsx

@@ -0,0 +1,216 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriQueryTable() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.projectId = Number(route.query.projectId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+  projectIdQuery();
+
+  });
+  let form = reactive({
+  tableEnName:"", //查询表
+  projectId:null, //项目
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "查询表",
+      prop: "tableEnName",
+      minWidth: 200
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "查询表",
+      prop: "tableEnName",
+      minWidth: 200
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriQueryTableList.method,
+          url: UrlList.prizeSet.prigetPriQueryTableList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+    // 项目选项数据
+    const projectIdOptionList = ref([]);
+  //获取项目数据
+  async function projectIdQuery() {
+    const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: { } });
+    if (status === 1) {
+      projectIdOptionList.value = data.records;
+    }
+  }
+
+
+
+    //跳转到条件返回字段
+  function linkToPriReturnField(row) {
+    router.push({ path: '../../pri/priReturnField/index', query: { queryTableId: row.id } });
+  }
+  //跳转到条件匹配字段
+  function linkToPriQueryField(row) {
+    router.push({ path: '../../pri/priQueryField/index', query: { queryTableId: row.id } });
+  }
+
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该条件匹配表? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriQueryTable.method, url: UrlList.prizeSet.prideletePriQueryTable.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriQueryTableVisible = ref(false);
+  const editUpdatePriQueryTableFormData = ref({});
+  function handleUpdatePriQueryTable(row) {
+    editUpdatePriQueryTableVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriQueryTableFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+    projectIdQuery,
+    projectIdOptionList,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriQueryTable,
+    editUpdatePriQueryTableVisible,
+    editUpdatePriQueryTableFormData,
+    handleDelete,
+    linkToPriReturnField,
+    linkToPriQueryField,
+
+  };
+}

+ 188 - 0
src/views/pri/priQueryTable/index.vue

@@ -0,0 +1,188 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriQueryTable"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriQueryTable } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriQueryTable from "./components/updatePriQueryTable/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  projectIdOptionList,
+  handleAdd,
+  addVisible,
+  handleUpdatePriQueryTable,
+  editUpdatePriQueryTableVisible,
+  editUpdatePriQueryTableFormData,
+  handleDelete,
+  linkToPriReturnField,
+  linkToPriQueryField,
+
+} = usePriQueryTable();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriQueryTableVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriQueryTableVisible.value = false
+}
+provide('closeEditUpdatePriQueryTableVisible', closeEditUpdatePriQueryTableVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='form.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="form.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.projectName", :value="item.id" v-for="(item,index) in projectIdOptionList")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="条件匹配表", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriQueryTable(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriQueryTable'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+            el-dropdown(trigger="click", :hide-on-click="false")
+              el-button.ml-3(class="mt-[2px]" link type='primary' :size='size' :icon='useRenderIcon(More)')
+              template(#dropdown)
+                el-dropdown-menu
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriReturnField(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriReturnField'])"
+                    ) 条件返回字段
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriQueryField(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriQueryField'])"
+                    ) 条件匹配字段
+
+    Add(:addVisible="addVisible" :projectId="form.projectId")
+    EditUpdatePriQueryTable(:editVisible="editUpdatePriQueryTableVisible" :formData="editUpdatePriQueryTableFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 210 - 0
src/views/pri/priRecord/components/add/index.vue

@@ -0,0 +1,210 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  listIdQuery();
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  listId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  listId: props.listId, //配置ID
+  prizeAmount: "", //发放金额
+  prizeObjId: "", //发放对象
+  batchNo: "", //批次号
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 配置ID选项数据
+const listIdOptionList = ref([]);
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriRecord.method,
+        url: UrlList.prizeSet.priaddPriRecord.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      listId: props.listId, //配置ID
+      prizeAmount: "", //发放金额
+      prizeObjId: "", //发放对象
+      batchNo: "", //批次号
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取配置ID数据
+const listIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriListDic.method, url: UrlList.prizeSet.prigetPriListDic.url, params: { } });
+  if (status === 1) {
+    listIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+  batchNo: [
+    { required: true, message: '请输入批次号', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    listId: props.listId, //配置ID
+    prizeAmount: "", //发放金额
+    prizeObjId: "", //发放对象
+    batchNo: "", //批次号
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label="配置ID", prop="listId")
+        el-select(
+          v-model="UpdateForm.listId",
+          placeholder="请选择配置ID",
+          clearable,
+        )
+          el-option(:label="item.id", :value="item.prizeName" v-for="(item,index) in listIdOptionList")
+      el-form-item(label='发放金额' prop="prizeAmount")
+        el-input-number(v-model='UpdateForm.prizeAmount' :min="1" :max="1000"
+          placeholder="请输入发放金额")
+      el-form-item(label='发放对象' prop="prizeObjId")
+        el-input(v-model='UpdateForm.prizeObjId' autocomplete='off'
+          placeholder="请输入发放对象")
+      el-form-item(label='批次号' prop="batchNo")
+        el-input(v-model='UpdateForm.batchNo' autocomplete='off'
+          placeholder="请输入批次号")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 200 - 0
src/views/pri/priRecord/components/updatePriRecord/index.vue

@@ -0,0 +1,200 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  prizeAmount: "", //发放金额
+  prizeObjId: "", //发放对象
+  batchNo: "", //批次号
+
+});
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriRecord.method,
+        url: UrlList.prizeSet.priupdatePriRecord.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      prizeAmount: "", //发放金额
+      prizeObjId: "", //发放对象
+      batchNo: "", //批次号
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriRecordVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+  batchNo: [
+    { required: true, message: '请输入批次号', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriRecordVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriRecordQuery.method, url: UrlList.prizeSet.prigetPriRecordQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriRecordVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    prizeAmount: "", //发放金额
+    prizeObjId: "", //发放对象
+    batchNo: "", //批次号
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriRecordVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='发放金额' prop="prizeAmount")
+        el-input-number(v-model='UpdateForm.prizeAmount' :min="1" :max="1000"
+          placeholder="请输入发放金额")
+      el-form-item(label='发放对象' prop="prizeObjId")
+        el-input(v-model='UpdateForm.prizeObjId' autocomplete='off'
+          placeholder="请输入发放对象")
+      el-form-item(label='批次号' prop="batchNo")
+        el-input(v-model='UpdateForm.batchNo' autocomplete='off'
+          placeholder="请输入批次号")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriRecordVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 214 - 0
src/views/pri/priRecord/hook.tsx

@@ -0,0 +1,214 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriRecord() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.listId = Number(route.query.listId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+  listIdQuery();
+
+  });
+  let form = reactive({
+  listId:null, //配置ID
+  batchNo:"", //批次号
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "配置ID",
+      prop: "listId",
+      minWidth: 200
+      formatter: ({ listId }) => {
+        return listIdOptionList.find(item => item.id == listId).label
+      },
+    },
+    {
+      label: "发放金额",
+      prop: "prizeAmount",
+      minWidth: 200
+    },
+    {
+      label: "发放对象",
+      prop: "prizeObjId",
+      minWidth: 200
+    },
+    {
+      label: "批次号",
+      prop: "batchNo",
+      minWidth: 200
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriRecordList.method,
+          url: UrlList.prizeSet.prigetPriRecordList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+    // 配置ID选项数据
+    const listIdOptionList = ref([]);
+  //获取配置ID数据
+  async function listIdQuery() {
+    const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriListDic.method, url: UrlList.prizeSet.prigetPriListDic.url, params: { } });
+    if (status === 1) {
+      listIdOptionList.value = data.records;
+    }
+  }
+
+
+
+  
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该奖励记录? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriRecord.method, url: UrlList.prizeSet.prideletePriRecord.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriRecordVisible = ref(false);
+  const editUpdatePriRecordFormData = ref({});
+  function handleUpdatePriRecord(row) {
+    editUpdatePriRecordVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriRecordFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+    listIdQuery,
+    listIdOptionList,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriRecord,
+    editUpdatePriRecordVisible,
+    editUpdatePriRecordFormData,
+    handleDelete,
+
+  };
+}

+ 164 - 0
src/views/pri/priRecord/index.vue

@@ -0,0 +1,164 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriRecord"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriRecord } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriRecord from "./components/updatePriRecord/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  listIdOptionList,
+  handleAdd,
+  addVisible,
+  handleUpdatePriRecord,
+  editUpdatePriRecordVisible,
+  editUpdatePriRecordFormData,
+  handleDelete,
+
+} = usePriRecord();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriRecordVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriRecordVisible.value = false
+}
+provide('closeEditUpdatePriRecordVisible', closeEditUpdatePriRecordVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label="配置ID", prop="listId")
+        el-select(
+          v-model="form.listId",
+          placeholder="请选择配置ID",
+          clearable,
+        )
+          el-option(:label="item.id", :value="item.prizeName" v-for="(item,index) in listIdOptionList")
+      el-form-item(label='批次号' prop="batchNo")
+        el-input(v-model='form.batchNo' autocomplete='off'
+          placeholder="请输入批次号")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="奖励记录", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriRecord(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriRecord'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :listId="form.listId")
+    EditUpdatePriRecord(:editVisible="editUpdatePriRecordVisible" :formData="editUpdatePriRecordFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 241 - 0
src/views/pri/priRecursionEndField/components/add/index.vue

@@ -0,0 +1,241 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  objectTableId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldQueryKind: "", //匹配条件
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  fieldQueryValueType: "", //匹配值类型
+  objectTableId: props.objectTableId, //对象表
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 匹配条件选项数据
+const fieldQueryKindOptionList = [
+  { id: 1, label: '模糊匹配' },
+  { id: 2, label: '精确匹配' },
+  { id: 3, label: '范围匹配' },
+]
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'loop_field', label: '循环递归字段' },
+  { id: 'fixed_value', label: '固定值' },
+]
+// 匹配值类型选项数据
+const fieldQueryValueTypeOptionList = [
+  { id: 'text', label: '文本' },
+  { id: 'number', label: '数字' },
+  { id: 'range', label: '范围' },
+]
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriRecursionEndField.method,
+        url: UrlList.prizeSet.priaddPriRecursionEndField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldQueryKind: "", //匹配条件
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      fieldQueryValueType: "", //匹配值类型
+      objectTableId: props.objectTableId, //对象表
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldQueryKind: "", //匹配条件
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    fieldQueryValueType: "", //匹配值类型
+    objectTableId: props.objectTableId, //对象表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="匹配条件", prop="fieldQueryKind")
+        el-select(
+          v-model="UpdateForm.fieldQueryKind",
+          placeholder="请选择匹配条件",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryKindOptionList")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label="匹配值类型", prop="fieldQueryValueType")
+        el-select(
+          v-model="UpdateForm.fieldQueryValueType",
+          placeholder="请选择匹配值类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryValueTypeOptionList")
+      el-form-item(label='对象表' prop="objectTableId")
+        el-input-number(v-model='UpdateForm.objectTableId' :min="1" :max="1000"
+          placeholder="请输入对象表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 251 - 0
src/views/pri/priRecursionEndField/components/updatePriRecursionEndField/index.vue

@@ -0,0 +1,251 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldQueryKind: "", //匹配条件
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  fieldQueryValueType: "", //匹配值类型
+  objectTableId: null, //对象表
+
+});
+// 匹配条件选项数据
+const fieldQueryKindOptionList = [
+  { id: 1, label: '模糊匹配' },
+  { id: 2, label: '精确匹配' },
+  { id: 3, label: '范围匹配' },
+]
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'loop_field', label: '循环递归字段' },
+  { id: 'fixed_value', label: '固定值' },
+]
+// 匹配值类型选项数据
+const fieldQueryValueTypeOptionList = [
+  { id: 'text', label: '文本' },
+  { id: 'number', label: '数字' },
+  { id: 'range', label: '范围' },
+]
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriRecursionEndField.method,
+        url: UrlList.prizeSet.priupdatePriRecursionEndField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldQueryKind: "", //匹配条件
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      fieldQueryValueType: "", //匹配值类型
+      objectTableId: null, //对象表
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriRecursionEndFieldVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriRecursionEndFieldVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriRecursionEndFieldQuery.method, url: UrlList.prizeSet.prigetPriRecursionEndFieldQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriRecursionEndFieldVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldQueryKind: "", //匹配条件
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    fieldQueryValueType: "", //匹配值类型
+    objectTableId: null, //对象表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriRecursionEndFieldVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="匹配条件", prop="fieldQueryKind")
+        el-select(
+          v-model="UpdateForm.fieldQueryKind",
+          placeholder="请选择匹配条件",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryKindOptionList")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label="匹配值类型", prop="fieldQueryValueType")
+        el-select(
+          v-model="UpdateForm.fieldQueryValueType",
+          placeholder="请选择匹配值类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryValueTypeOptionList")
+      el-form-item(label='对象表' prop="objectTableId")
+        el-input-number(v-model='UpdateForm.objectTableId' :min="1" :max="1000"
+          placeholder="请输入对象表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriRecursionEndFieldVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 218 - 0
src/views/pri/priRecursionEndField/hook.tsx

@@ -0,0 +1,218 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriRecursionEndField() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.objectTableId = Number(route.query.objectTableId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+
+  });
+  let form = reactive({
+  fieldName:"", //字段名称
+  fieldEnName:"", //字段名
+  objectTableId:null, //对象表
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "字段名称",
+      prop: "fieldName",
+      minWidth: 200
+    },
+    {
+      label: "字段名",
+      prop: "fieldEnName",
+      minWidth: 200
+    },
+    {
+      label: "匹配条件",
+      prop: "fieldQueryKind",
+      minWidth: 200
+    },
+    {
+      label: "匹配方式",
+      prop: "fieldQueryModel",
+      minWidth: 200
+    },
+    {
+      label: "匹配值",
+      prop: "fieldQueryValue",
+      minWidth: 200
+    },
+    {
+      label: "匹配值类型",
+      prop: "fieldQueryValueType",
+      minWidth: 200
+    },
+    {
+      label: "对象表",
+      prop: "objectTableId",
+      minWidth: 200
+      formatter: ({ objectTableId }) => {
+        return objectTableIdOptionList.find(item => item.id == objectTableId).label
+      },
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriRecursionEndFieldList.method,
+          url: UrlList.prizeSet.prigetPriRecursionEndFieldList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+
+
+
+  
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该递归停止条件字段? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriRecursionEndField.method, url: UrlList.prizeSet.prideletePriRecursionEndField.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriRecursionEndFieldVisible = ref(false);
+  const editUpdatePriRecursionEndFieldFormData = ref({});
+  function handleUpdatePriRecursionEndField(row) {
+    editUpdatePriRecursionEndFieldVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriRecursionEndFieldFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriRecursionEndField,
+    editUpdatePriRecursionEndFieldVisible,
+    editUpdatePriRecursionEndFieldFormData,
+    handleDelete,
+
+  };
+}

+ 162 - 0
src/views/pri/priRecursionEndField/index.vue

@@ -0,0 +1,162 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriRecursionEndField"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriRecursionEndField } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriRecursionEndField from "./components/updatePriRecursionEndField/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  handleAdd,
+  addVisible,
+  handleUpdatePriRecursionEndField,
+  editUpdatePriRecursionEndFieldVisible,
+  editUpdatePriRecursionEndFieldFormData,
+  handleDelete,
+
+} = usePriRecursionEndField();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriRecursionEndFieldVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriRecursionEndFieldVisible.value = false
+}
+provide('closeEditUpdatePriRecursionEndFieldVisible', closeEditUpdatePriRecursionEndFieldVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='form.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='form.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label='对象表' prop="objectTableId")
+        el-input-number(v-model='form.objectTableId' :min="1" :max="1000"
+          placeholder="请输入对象表")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="递归停止条件字段", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriRecursionEndField(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriRecursionEndField'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :objectTableId="form.objectTableId")
+    EditUpdatePriRecursionEndField(:editVisible="editUpdatePriRecursionEndFieldVisible" :formData="editUpdatePriRecursionEndFieldFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 201 - 0
src/views/pri/priRecursionEndTable/components/add/index.vue

@@ -0,0 +1,201 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  projectIdQuery();
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  projectId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  projectId: props.projectId, //项目
+  tableEnName: "", //查询表
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 项目选项数据
+const projectIdOptionList = ref([]);
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriRecursionEndTable.method,
+        url: UrlList.prizeSet.priaddPriRecursionEndTable.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      projectId: props.projectId, //项目
+      tableEnName: "", //查询表
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取项目数据
+const projectIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: { } });
+  if (status === 1) {
+    projectIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+  projectId: [
+    { required: true, message: '请输入项目', trigger: 'blur' },
+  ],
+  tableEnName: [
+    { required: true, message: '请输入查询表', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    projectId: props.projectId, //项目
+    tableEnName: "", //查询表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="UpdateForm.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.projectName", :value="item.id" v-for="(item,index) in projectIdOptionList")
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='UpdateForm.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 188 - 0
src/views/pri/priRecursionEndTable/components/updatePriRecursionEndTable/index.vue

@@ -0,0 +1,188 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  tableEnName: "", //查询表
+  id: null, //ID
+
+});
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriRecursionEndTable.method,
+        url: UrlList.prizeSet.priupdatePriRecursionEndTable.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      tableEnName: "", //查询表
+      id: null, //ID
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriRecursionEndTableVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+  tableEnName: [
+    { required: true, message: '请输入查询表', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriRecursionEndTableVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriRecursionEndTableQuery.method, url: UrlList.prizeSet.prigetPriRecursionEndTableQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriRecursionEndTableVisible = () => {
+  UpdateForm.value = {
+    tableEnName: "", //查询表
+    id: null, //ID
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriRecursionEndTableVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='UpdateForm.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriRecursionEndTableVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 211 - 0
src/views/pri/priRecursionEndTable/hook.tsx

@@ -0,0 +1,211 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriRecursionEndTable() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.projectId = Number(route.query.projectId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+  projectIdQuery();
+
+  });
+  let form = reactive({
+  projectId:null, //项目
+  tableEnName:"", //查询表
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "查询表",
+      prop: "tableEnName",
+      minWidth: 200
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "查询表",
+      prop: "tableEnName",
+      minWidth: 200
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriRecursionEndTableList.method,
+          url: UrlList.prizeSet.prigetPriRecursionEndTableList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+    // 项目选项数据
+    const projectIdOptionList = ref([]);
+  //获取项目数据
+  async function projectIdQuery() {
+    const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: { } });
+    if (status === 1) {
+      projectIdOptionList.value = data.records;
+    }
+  }
+
+
+
+    //跳转到递归停止条件字段
+  function linkToPriRecursionEndField(row) {
+    router.push({ path: '../../pri/priRecursionEndField/index', query: { objectTableId: row.id } });
+  }
+
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该递归停止条件对象表? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriRecursionEndTable.method, url: UrlList.prizeSet.prideletePriRecursionEndTable.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriRecursionEndTableVisible = ref(false);
+  const editUpdatePriRecursionEndTableFormData = ref({});
+  function handleUpdatePriRecursionEndTable(row) {
+    editUpdatePriRecursionEndTableVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriRecursionEndTableFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+    projectIdQuery,
+    projectIdOptionList,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriRecursionEndTable,
+    editUpdatePriRecursionEndTableVisible,
+    editUpdatePriRecursionEndTableFormData,
+    handleDelete,
+    linkToPriRecursionEndField,
+
+  };
+}

+ 178 - 0
src/views/pri/priRecursionEndTable/index.vue

@@ -0,0 +1,178 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriRecursionEndTable"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriRecursionEndTable } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriRecursionEndTable from "./components/updatePriRecursionEndTable/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  projectIdOptionList,
+  handleAdd,
+  addVisible,
+  handleUpdatePriRecursionEndTable,
+  editUpdatePriRecursionEndTableVisible,
+  editUpdatePriRecursionEndTableFormData,
+  handleDelete,
+  linkToPriRecursionEndField,
+
+} = usePriRecursionEndTable();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriRecursionEndTableVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriRecursionEndTableVisible.value = false
+}
+provide('closeEditUpdatePriRecursionEndTableVisible', closeEditUpdatePriRecursionEndTableVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="form.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.projectName", :value="item.id" v-for="(item,index) in projectIdOptionList")
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='form.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="递归停止条件对象表", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriRecursionEndTable(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriRecursionEndTable'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+            el-dropdown(trigger="click", :hide-on-click="false")
+              el-button.ml-3(class="mt-[2px]" link type='primary' :size='size' :icon='useRenderIcon(More)')
+              template(#dropdown)
+                el-dropdown-menu
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriRecursionEndField(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriRecursionEndField'])"
+                    ) 递归停止条件字段
+
+    Add(:addVisible="addVisible" :projectId="form.projectId")
+    EditUpdatePriRecursionEndTable(:editVisible="editUpdatePriRecursionEndTableVisible" :formData="editUpdatePriRecursionEndTableFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 241 - 0
src/views/pri/priRecursionStartField/components/add/index.vue

@@ -0,0 +1,241 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  objectTableId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldQueryKind: "", //匹配条件
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  fieldQueryValueType: "", //匹配值类型
+  objectTableId: props.objectTableId, //对象表
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 匹配条件选项数据
+const fieldQueryKindOptionList = [
+  { id: 1, label: '模糊匹配' },
+  { id: 2, label: '精确匹配' },
+  { id: 3, label: '范围匹配' },
+]
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'loop_field', label: '循环递归字段' },
+  { id: 'fixed_value', label: '固定值' },
+]
+// 匹配值类型选项数据
+const fieldQueryValueTypeOptionList = [
+  { id: 'text', label: '文本' },
+  { id: 'number', label: '数字' },
+  { id: 'range', label: '范围' },
+]
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriRecursionStartField.method,
+        url: UrlList.prizeSet.priaddPriRecursionStartField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldQueryKind: "", //匹配条件
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      fieldQueryValueType: "", //匹配值类型
+      objectTableId: props.objectTableId, //对象表
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldQueryKind: "", //匹配条件
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    fieldQueryValueType: "", //匹配值类型
+    objectTableId: props.objectTableId, //对象表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="匹配条件", prop="fieldQueryKind")
+        el-select(
+          v-model="UpdateForm.fieldQueryKind",
+          placeholder="请选择匹配条件",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryKindOptionList")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label="匹配值类型", prop="fieldQueryValueType")
+        el-select(
+          v-model="UpdateForm.fieldQueryValueType",
+          placeholder="请选择匹配值类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryValueTypeOptionList")
+      el-form-item(label='对象表' prop="objectTableId")
+        el-input-number(v-model='UpdateForm.objectTableId' :min="1" :max="1000"
+          placeholder="请输入对象表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 251 - 0
src/views/pri/priRecursionStartField/components/updatePriRecursionStartField/index.vue

@@ -0,0 +1,251 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldQueryKind: "", //匹配条件
+  fieldQueryModel: "", //匹配方式
+  fieldQueryValue: "", //匹配值
+  fieldQueryValueType: "", //匹配值类型
+  objectTableId: null, //对象表
+
+});
+// 匹配条件选项数据
+const fieldQueryKindOptionList = [
+  { id: 1, label: '模糊匹配' },
+  { id: 2, label: '精确匹配' },
+  { id: 3, label: '范围匹配' },
+]
+// 匹配方式选项数据
+const fieldQueryModelOptionList = [
+  { id: 'request_param', label: '入参' },
+  { id: 'loop_field', label: '循环递归字段' },
+  { id: 'fixed_value', label: '固定值' },
+]
+// 匹配值类型选项数据
+const fieldQueryValueTypeOptionList = [
+  { id: 'text', label: '文本' },
+  { id: 'number', label: '数字' },
+  { id: 'range', label: '范围' },
+]
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriRecursionStartField.method,
+        url: UrlList.prizeSet.priupdatePriRecursionStartField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldQueryKind: "", //匹配条件
+      fieldQueryModel: "", //匹配方式
+      fieldQueryValue: "", //匹配值
+      fieldQueryValueType: "", //匹配值类型
+      objectTableId: null, //对象表
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriRecursionStartFieldVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriRecursionStartFieldVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriRecursionStartFieldQuery.method, url: UrlList.prizeSet.prigetPriRecursionStartFieldQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriRecursionStartFieldVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldQueryKind: "", //匹配条件
+    fieldQueryModel: "", //匹配方式
+    fieldQueryValue: "", //匹配值
+    fieldQueryValueType: "", //匹配值类型
+    objectTableId: null, //对象表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriRecursionStartFieldVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="匹配条件", prop="fieldQueryKind")
+        el-select(
+          v-model="UpdateForm.fieldQueryKind",
+          placeholder="请选择匹配条件",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryKindOptionList")
+      el-form-item(label="匹配方式", prop="fieldQueryModel")
+        el-select(
+          v-model="UpdateForm.fieldQueryModel",
+          placeholder="请选择匹配方式",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryModelOptionList")
+      el-form-item(label='匹配值' prop="fieldQueryValue")
+        el-input(v-model='UpdateForm.fieldQueryValue' autocomplete='off'
+          placeholder="请输入匹配值")
+      el-form-item(label="匹配值类型", prop="fieldQueryValueType")
+        el-select(
+          v-model="UpdateForm.fieldQueryValueType",
+          placeholder="请选择匹配值类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldQueryValueTypeOptionList")
+      el-form-item(label='对象表' prop="objectTableId")
+        el-input-number(v-model='UpdateForm.objectTableId' :min="1" :max="1000"
+          placeholder="请输入对象表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriRecursionStartFieldVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 218 - 0
src/views/pri/priRecursionStartField/hook.tsx

@@ -0,0 +1,218 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriRecursionStartField() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.objectTableId = Number(route.query.objectTableId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+
+  });
+  let form = reactive({
+  fieldName:"", //字段名称
+  fieldEnName:"", //字段名
+  objectTableId:null, //对象表
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "字段名称",
+      prop: "fieldName",
+      minWidth: 200
+    },
+    {
+      label: "字段名",
+      prop: "fieldEnName",
+      minWidth: 200
+    },
+    {
+      label: "匹配条件",
+      prop: "fieldQueryKind",
+      minWidth: 200
+    },
+    {
+      label: "匹配方式",
+      prop: "fieldQueryModel",
+      minWidth: 200
+    },
+    {
+      label: "匹配值",
+      prop: "fieldQueryValue",
+      minWidth: 200
+    },
+    {
+      label: "匹配值类型",
+      prop: "fieldQueryValueType",
+      minWidth: 200
+    },
+    {
+      label: "对象表",
+      prop: "objectTableId",
+      minWidth: 200
+      formatter: ({ objectTableId }) => {
+        return objectTableIdOptionList.find(item => item.id == objectTableId).label
+      },
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriRecursionStartFieldList.method,
+          url: UrlList.prizeSet.prigetPriRecursionStartFieldList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+
+
+
+  
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该递归开始条件字段? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriRecursionStartField.method, url: UrlList.prizeSet.prideletePriRecursionStartField.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriRecursionStartFieldVisible = ref(false);
+  const editUpdatePriRecursionStartFieldFormData = ref({});
+  function handleUpdatePriRecursionStartField(row) {
+    editUpdatePriRecursionStartFieldVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriRecursionStartFieldFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriRecursionStartField,
+    editUpdatePriRecursionStartFieldVisible,
+    editUpdatePriRecursionStartFieldFormData,
+    handleDelete,
+
+  };
+}

+ 162 - 0
src/views/pri/priRecursionStartField/index.vue

@@ -0,0 +1,162 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriRecursionStartField"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriRecursionStartField } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriRecursionStartField from "./components/updatePriRecursionStartField/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  handleAdd,
+  addVisible,
+  handleUpdatePriRecursionStartField,
+  editUpdatePriRecursionStartFieldVisible,
+  editUpdatePriRecursionStartFieldFormData,
+  handleDelete,
+
+} = usePriRecursionStartField();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriRecursionStartFieldVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriRecursionStartFieldVisible.value = false
+}
+provide('closeEditUpdatePriRecursionStartFieldVisible', closeEditUpdatePriRecursionStartFieldVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='form.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='form.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label='对象表' prop="objectTableId")
+        el-input-number(v-model='form.objectTableId' :min="1" :max="1000"
+          placeholder="请输入对象表")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="递归开始条件字段", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriRecursionStartField(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriRecursionStartField'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :objectTableId="form.objectTableId")
+    EditUpdatePriRecursionStartField(:editVisible="editUpdatePriRecursionStartFieldVisible" :formData="editUpdatePriRecursionStartFieldFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 201 - 0
src/views/pri/priRecursionStartTable/components/add/index.vue

@@ -0,0 +1,201 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  projectIdQuery();
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  projectId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  tableEnName: "", //查询表
+  projectId: props.projectId, //项目
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 项目选项数据
+const projectIdOptionList = ref([]);
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriRecursionStartTable.method,
+        url: UrlList.prizeSet.priaddPriRecursionStartTable.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      tableEnName: "", //查询表
+      projectId: props.projectId, //项目
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取项目数据
+const projectIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: { } });
+  if (status === 1) {
+    projectIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+  tableEnName: [
+    { required: true, message: '请输入查询表', trigger: 'blur' },
+  ],
+  projectId: [
+    { required: true, message: '请输入项目', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    tableEnName: "", //查询表
+    projectId: props.projectId, //项目
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='UpdateForm.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="UpdateForm.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.projectName", :value="item.id" v-for="(item,index) in projectIdOptionList")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 188 - 0
src/views/pri/priRecursionStartTable/components/updatePriRecursionStartTable/index.vue

@@ -0,0 +1,188 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  tableEnName: "", //查询表
+
+});
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriRecursionStartTable.method,
+        url: UrlList.prizeSet.priupdatePriRecursionStartTable.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      tableEnName: "", //查询表
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriRecursionStartTableVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+  tableEnName: [
+    { required: true, message: '请输入查询表', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriRecursionStartTableVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriRecursionStartTableQuery.method, url: UrlList.prizeSet.prigetPriRecursionStartTableQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriRecursionStartTableVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    tableEnName: "", //查询表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriRecursionStartTableVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='UpdateForm.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriRecursionStartTableVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 211 - 0
src/views/pri/priRecursionStartTable/hook.tsx

@@ -0,0 +1,211 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriRecursionStartTable() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.projectId = Number(route.query.projectId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+  projectIdQuery();
+
+  });
+  let form = reactive({
+  tableEnName:"", //查询表
+  projectId:null, //项目
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "查询表",
+      prop: "tableEnName",
+      minWidth: 200
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "查询表",
+      prop: "tableEnName",
+      minWidth: 200
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriRecursionStartTableList.method,
+          url: UrlList.prizeSet.prigetPriRecursionStartTableList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+    // 项目选项数据
+    const projectIdOptionList = ref([]);
+  //获取项目数据
+  async function projectIdQuery() {
+    const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectDic.method, url: UrlList.prizeSet.prigetPriProjectDic.url, params: { } });
+    if (status === 1) {
+      projectIdOptionList.value = data.records;
+    }
+  }
+
+
+
+    //跳转到递归开始条件字段
+  function linkToPriRecursionStartField(row) {
+    router.push({ path: '../../pri/priRecursionStartField/index', query: { objectTableId: row.id } });
+  }
+
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该递归开始条件对象表? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriRecursionStartTable.method, url: UrlList.prizeSet.prideletePriRecursionStartTable.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriRecursionStartTableVisible = ref(false);
+  const editUpdatePriRecursionStartTableFormData = ref({});
+  function handleUpdatePriRecursionStartTable(row) {
+    editUpdatePriRecursionStartTableVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriRecursionStartTableFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+    projectIdQuery,
+    projectIdOptionList,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriRecursionStartTable,
+    editUpdatePriRecursionStartTableVisible,
+    editUpdatePriRecursionStartTableFormData,
+    handleDelete,
+    linkToPriRecursionStartField,
+
+  };
+}

+ 178 - 0
src/views/pri/priRecursionStartTable/index.vue

@@ -0,0 +1,178 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriRecursionStartTable"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriRecursionStartTable } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriRecursionStartTable from "./components/updatePriRecursionStartTable/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  projectIdOptionList,
+  handleAdd,
+  addVisible,
+  handleUpdatePriRecursionStartTable,
+  editUpdatePriRecursionStartTableVisible,
+  editUpdatePriRecursionStartTableFormData,
+  handleDelete,
+  linkToPriRecursionStartField,
+
+} = usePriRecursionStartTable();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriRecursionStartTableVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriRecursionStartTableVisible.value = false
+}
+provide('closeEditUpdatePriRecursionStartTableVisible', closeEditUpdatePriRecursionStartTableVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label='查询表' prop="tableEnName")
+        el-input(v-model='form.tableEnName' autocomplete='off'
+          placeholder="请输入查询表")
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="form.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.projectName", :value="item.id" v-for="(item,index) in projectIdOptionList")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="递归开始条件对象表", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriRecursionStartTable(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriRecursionStartTable'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+            el-dropdown(trigger="click", :hide-on-click="false")
+              el-button.ml-3(class="mt-[2px]" link type='primary' :size='size' :icon='useRenderIcon(More)')
+              template(#dropdown)
+                el-dropdown-menu
+                  el-dropdown-item
+                    el-button.reset-margin.edit-btn(
+                      link
+                      type="primary"
+                      size="small"
+                      @click="linkToPriRecursionStartField(row)"
+                      :icon="useRenderIcon(EditPen)"
+                      v-if="hasAuth(['linkToPriRecursionStartField'])"
+                    ) 递归开始条件字段
+
+    Add(:addVisible="addVisible" :projectId="form.projectId")
+    EditUpdatePriRecursionStartTable(:editVisible="editUpdatePriRecursionStartTableVisible" :formData="editUpdatePriRecursionStartTableFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 216 - 0
src/views/pri/priRequestLog/components/add/index.vue

@@ -0,0 +1,216 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+  projectIdQuery();
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  projectId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  projectId: props.projectId, //项目
+  requestContent: "", //请求参数报文
+  responseContent: "", //响应数据报文
+  batchNo: "", //批次号
+  excuteDate: "", //执行时间
+  responseDate: "", //执行完响应时间
+  finishDate: "", //完成时间
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 项目选项数据
+const projectIdOptionList = ref([]);
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriRequestLog.method,
+        url: UrlList.prizeSet.priaddPriRequestLog.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      projectId: props.projectId, //项目
+      requestContent: "", //请求参数报文
+      responseContent: "", //响应数据报文
+      batchNo: "", //批次号
+      excuteDate: "", //执行时间
+      responseDate: "", //执行完响应时间
+      finishDate: "", //完成时间
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+//获取项目数据
+const projectIdQuery = async () => {
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectList.method, url: UrlList.prizeSet.prigetPriProjectList.url, params: { } });
+  if (status === 1) {
+    projectIdOptionList.value = data.records;
+  }
+};
+
+
+
+// 表单校验规则
+const rules = reactive({
+  projectId: [
+    { required: true, message: '请输入项目', trigger: 'blur' },
+  ],
+  batchNo: [
+    { required: true, message: '请输入批次号', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    projectId: props.projectId, //项目
+    requestContent: "", //请求参数报文
+    responseContent: "", //响应数据报文
+    batchNo: "", //批次号
+    excuteDate: "", //执行时间
+    responseDate: "", //执行完响应时间
+    finishDate: "", //完成时间
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="UpdateForm.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.id", :value="item.projectName" v-for="(item,index) in projectIdOptionList")
+      el-form-item(label='批次号' prop="batchNo")
+        el-input(v-model='UpdateForm.batchNo' autocomplete='off'
+          placeholder="请输入批次号")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 203 - 0
src/views/pri/priRequestLog/components/updatePriRequestLog/index.vue

@@ -0,0 +1,203 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  requestContent: "", //请求参数报文
+  responseContent: "", //响应数据报文
+  batchNo: "", //批次号
+  excuteDate: "", //执行时间
+  responseDate: "", //执行完响应时间
+  finishDate: "", //完成时间
+
+});
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriRequestLog.method,
+        url: UrlList.prizeSet.priupdatePriRequestLog.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      requestContent: "", //请求参数报文
+      responseContent: "", //响应数据报文
+      batchNo: "", //批次号
+      excuteDate: "", //执行时间
+      responseDate: "", //执行完响应时间
+      finishDate: "", //完成时间
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriRequestLogVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+  batchNo: [
+    { required: true, message: '请输入批次号', trigger: 'blur' },
+  ],
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriRequestLogVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriRequestLogQuery.method, url: UrlList.prizeSet.prigetPriRequestLogQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriRequestLogVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    requestContent: "", //请求参数报文
+    responseContent: "", //响应数据报文
+    batchNo: "", //批次号
+    excuteDate: "", //执行时间
+    responseDate: "", //执行完响应时间
+    finishDate: "", //完成时间
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriRequestLogVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='批次号' prop="batchNo")
+        el-input(v-model='UpdateForm.batchNo' autocomplete='off'
+          placeholder="请输入批次号")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriRequestLogVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 211 - 0
src/views/pri/priRequestLog/hook.tsx

@@ -0,0 +1,211 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriRequestLog() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.projectId = Number(route.query.projectId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+  projectIdQuery();
+
+  });
+  let form = reactive({
+  projectId:null, //项目
+  batchNo:"", //批次号
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "批次号",
+      prop: "batchNo",
+      minWidth: 200
+    },
+    {
+      label: "执行时间",
+      prop: "excuteDate",
+      minWidth: 200
+    },
+    {
+      label: "执行完响应时间",
+      prop: "responseDate",
+      minWidth: 200
+    },
+    {
+      label: "完成时间",
+      prop: "finishDate",
+      minWidth: 200
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriRequestLogList.method,
+          url: UrlList.prizeSet.prigetPriRequestLogList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+    // 项目选项数据
+    const projectIdOptionList = ref([]);
+  //获取项目数据
+  async function projectIdQuery() {
+    const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriProjectList.method, url: UrlList.prizeSet.prigetPriProjectList.url, params: { } });
+    if (status === 1) {
+      projectIdOptionList.value = data.records;
+    }
+  }
+
+
+
+  
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该请求和响应日志? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriRequestLog.method, url: UrlList.prizeSet.prideletePriRequestLog.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriRequestLogVisible = ref(false);
+  const editUpdatePriRequestLogFormData = ref({});
+  function handleUpdatePriRequestLog(row) {
+    editUpdatePriRequestLogVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriRequestLogFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+    projectIdQuery,
+    projectIdOptionList,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriRequestLog,
+    editUpdatePriRequestLogVisible,
+    editUpdatePriRequestLogFormData,
+    handleDelete,
+
+  };
+}

+ 164 - 0
src/views/pri/priRequestLog/index.vue

@@ -0,0 +1,164 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriRequestLog"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriRequestLog } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriRequestLog from "./components/updatePriRequestLog/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  projectIdOptionList,
+  handleAdd,
+  addVisible,
+  handleUpdatePriRequestLog,
+  editUpdatePriRequestLogVisible,
+  editUpdatePriRequestLogFormData,
+  handleDelete,
+
+} = usePriRequestLog();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriRequestLogVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriRequestLogVisible.value = false
+}
+provide('closeEditUpdatePriRequestLogVisible', closeEditUpdatePriRequestLogVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label="项目", prop="projectId")
+        el-select(
+          v-model="form.projectId",
+          placeholder="请选择项目",
+          clearable,
+        )
+          el-option(:label="item.id", :value="item.projectName" v-for="(item,index) in projectIdOptionList")
+      el-form-item(label='批次号' prop="batchNo")
+        el-input(v-model='form.batchNo' autocomplete='off'
+          placeholder="请输入批次号")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="请求和响应日志", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriRequestLog(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriRequestLog'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :projectId="form.projectId")
+    EditUpdatePriRequestLog(:editVisible="editUpdatePriRequestLogVisible" :formData="editUpdatePriRequestLogFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>

+ 204 - 0
src/views/pri/priReturnField/components/add/index.vue

@@ -0,0 +1,204 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Add"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+// 组件传参对象
+const props = defineProps<{
+  submit: Function;
+  addVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  queryTableId: {
+    type: Number;
+    default: 0;
+  },
+
+}>();
+// 表单数据
+let UpdateForm = ref({
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldReturnKind: "", //返回类型
+  queryTableId: props.queryTableId, //匹配表
+
+
+});
+// 表单实例
+const ruleFormRef = ref()
+
+// 传参选项数据
+// 返回类型选项数据
+const fieldReturnKindOptionList = [
+  { id: 1, label: '字段值' },
+  { id: 2, label: '数量' },
+  { id: 3, label: '求和' },
+  { id: 4, label: '平均值' },
+]
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priaddPriReturnField.method,
+        url: UrlList.prizeSet.priaddPriReturnField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "新增成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldReturnKind: "", //返回类型
+      queryTableId: props.queryTableId, //匹配表
+
+        };
+        // 关闭新增弹窗;
+        closeVisible()
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject("closeAddVisible");
+const closeVisible = () => {
+  // 清空表单项;
+  UpdateForm.value = {
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldReturnKind: "", //返回类型
+    queryTableId: props.queryTableId, //匹配表
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.addVisible' width="50%" :fullscreen="isFullscreen" title="新增" draggable @close="closeVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="返回类型", prop="fieldReturnKind")
+        el-select(
+          v-model="UpdateForm.fieldReturnKind",
+          placeholder="请选择返回类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldReturnKindOptionList")
+      el-form-item(label='匹配表' prop="queryTableId")
+        el-input-number(v-model='UpdateForm.queryTableId' :min="1" :max="1000"
+          placeholder="请输入匹配表")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        @click="closeVisible"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 208 - 0
src/views/pri/priReturnField/components/updatePriReturnField/index.vue

@@ -0,0 +1,208 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "Edit"
+};
+</script>
+<script setup lang="ts">
+import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
+// 接口列表实例
+let UrlList = reactive(null)
+// 获取当前板块接口列表
+onMounted(async () => {
+  UrlList = await getGroupUrl(["prizeSet"]);
+
+})
+const props = defineProps<{
+  editVisible: {
+    type: Boolean;
+    default: false;
+  };
+  width: {
+    type: Number;
+    default: 50;
+  };
+  formData: {
+    id: any;
+    type: any;
+    default: {};
+  };
+}>();
+// 表单数据
+const UpdateForm: any = ref({
+  id: null, //ID
+  fieldName: "", //字段名称
+  fieldEnName: "", //字段名
+  fieldReturnKind: "", //返回类型
+
+});
+// 返回类型选项数据
+const fieldReturnKindOptionList = [
+  { id: 1, label: '字段值' },
+  { id: 2, label: '数量' },
+  { id: 3, label: '求和' },
+  { id: 4, label: '平均值' },
+]
+
+// 表单实例
+const ruleFormRef = ref()
+
+// 选项卡参数(默认值为列表某项的id)
+const activeId = ref('1')
+// 提交函数
+const submit = async (formEl) => {
+  // 表单校验拦截
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      //表单校验成功回调
+      console.log('submit!')
+
+      // 需动态生成接口
+      const { status, msg }: any = await http.Request({
+        method: UrlList.prizeSet.priupdatePriReturnField.method,
+        url: UrlList.prizeSet.priupdatePriReturnField.url,
+        params: UpdateForm.value
+      });
+      if (status === 1) {
+        //业务成功回调
+        ElMessage({
+          message: "修改成功",
+          type: "success"
+        });
+        UpdateForm.value = {
+      id: null, //ID
+      fieldName: "", //字段名称
+      fieldEnName: "", //字段名
+      fieldReturnKind: "", //返回类型
+
+        };
+        // 关闭修改弹窗;
+        closeUpdatePriReturnFieldVisible();
+      } else {
+        //业务失败回调
+        ElMessageBox.alert(msg, "提示", {
+          confirmButtonText: "关闭",
+          type: "warning"
+        });
+      }
+    } else {
+      //表单校验失败回调
+      ElMessage({
+        message: "请输入完整信息",
+        type: "error"
+      });
+    }
+  })
+};
+
+
+
+
+// 表单校验规则
+const rules = reactive({
+
+})
+// 关闭弹窗回调函数
+const closeFn: any = inject('closeEditUpdatePriReturnFieldVisible');
+const openVisible = async () => {
+  //通过ID获取表格数据
+  const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriReturnFieldQuery.method, url: UrlList.prizeSet.prigetPriReturnFieldQuery.url, params: { id: props.formData.id }});
+  if (status === 1) {
+    UpdateForm.value = data;
+
+  }
+};
+// 关闭弹窗回调函数
+const closeUpdatePriReturnFieldVisible = () => {
+  UpdateForm.value = {
+    id: null, //ID
+    fieldName: "", //字段名称
+    fieldEnName: "", //字段名
+    fieldReturnKind: "", //返回类型
+
+  };
+  closeFn();
+};
+
+// 弹窗是否全屏
+const isFullscreen = ref(false)
+</script>
+
+<template lang="pug">
+.main
+  el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriReturnFieldVisible" @open="openVisible")
+    el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
+      el-form-item(label='ID' prop="id")
+        el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
+          placeholder="请输入ID")
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='UpdateForm.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='UpdateForm.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label="返回类型", prop="fieldReturnKind")
+        el-select(
+          v-model="UpdateForm.fieldReturnKind",
+          placeholder="请选择返回类型",
+          clearable,
+        )
+          el-option(:label="item.label", :value="item.id" v-for="(item,index) in fieldReturnKindOptionList")
+
+    .flex.justify-end
+      el-button(
+        :icon="useRenderIcon(Close)",
+        :loading="loading",
+        @click="closeUpdatePriReturnFieldVisible()"
+      ) 关闭
+      el-button(
+        type="primary",
+        :icon="useRenderIcon(Upload)",
+        @click="submit(ruleFormRef)"
+      ) 确认提交
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+.collapsedom {
+  padding: 0 20px;
+  background-color: #fff;
+}
+
+.ovh-x {
+  height: 40vh;
+  overflow-y: auto;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+
+.el-select {
+  width: 100%;
+}
+</style>

+ 203 - 0
src/views/pri/priReturnField/hook.tsx

@@ -0,0 +1,203 @@
+import { reactive, onMounted, ref, ElMessage, ElMessageBox, http, getGroupUrl, RegularVerification, verification, PaginationProps } from "@/utils/importUsed";
+import { useRoute } from "vue-router";
+import router from "@/router";
+// 表单实例
+const ruleFormRef = ref()
+export function usePriReturnField() {
+  // 接口列表实例
+  let UrlList = reactive(null)
+  // 获取当前板块接口列表
+  onMounted(async () => {
+    const route = useRoute();
+    form.queryTableId = Number(route.query.queryTableId);
+
+    UrlList = await getGroupUrl(["prizeSet"]);
+    onSearch(ruleFormRef.value);
+
+  });
+  let form = reactive({
+  fieldName:"", //字段名称
+  fieldEnName:"", //字段名
+  queryTableId:null, //匹配表
+
+
+  });
+  const dataList = ref([]);
+  const loading = ref(false);
+  const dialogAddVisible = ref(false);
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  const columns: TableColumnList = [
+    {
+      type: "selection",
+      width: 55,
+      align: "left",
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+    {
+      label: "ID",
+      prop: "id",
+      minWidth: 200
+    },
+    {
+      label: "字段名称",
+      prop: "fieldName",
+      minWidth: 200
+    },
+    {
+      label: "字段名",
+      prop: "fieldEnName",
+      minWidth: 200
+    },
+    {
+      label: "返回类型",
+      prop: "fieldReturnKind",
+      minWidth: 200
+    },
+    {
+      label: "匹配表",
+      prop: "queryTableId",
+      minWidth: 200
+      formatter: ({ queryTableId }) => {
+        return queryTableIdOptionList.find(item => item.id == queryTableId).label
+      },
+    },
+
+    {
+      label: "操作",
+      fixed: "right",
+      width: 200,
+      slot: "operation"
+    }
+  ];
+  // 当前页数量切换
+  function handleSizeChange(val: number) {
+    if (typeof val === "number") {
+      pagination.pageSize = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 当前页码切换
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+    if (typeof val === "number") {
+      pagination.currentPage = val;
+      onSearch(ruleFormRef.value);
+    }
+  }
+  // 选择表格项
+  function handleSelectionChange(val) {
+    console.log(`SelectionChange: ${val}`);
+    onSearch(ruleFormRef.value);
+  }
+  // 搜索列表
+  async function onSearch(formEl) {
+    // 表单校验拦截
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        //表单校验成功回调
+        console.log('submit!')
+        // 状态调整为加载中
+        loading.value = true;
+        // 调用接口(需动态生成接口)
+        const { status, msg, data }: any = await http.Request({
+          method: UrlList.prizeSet.prigetPriReturnFieldList.method,
+          url: UrlList.prizeSet.prigetPriReturnFieldList.url,
+          params: {
+            ...form,
+            pageSize: pagination.pageSize,
+            pageNum: pagination.currentPage
+          }
+        });
+        dataList.value = data.records;
+        pagination.total = data.total;
+        setTimeout(() => {
+          loading.value = false;
+        }, 500);
+      } else {
+        //表单校验失败回调
+        ElMessage({
+          message: "请输入完整信息",
+          type: "error"
+        });
+      }
+    })
+  }
+
+
+
+  
+    // 删除
+  function handleDelete(row) {
+    ElMessageBox.confirm(
+      `是否删除该条件返回字段? `,
+      "提示",
+      {
+        confirmButtonText: "删除",
+        cancelButtonText: "取消",
+        type: "warning"
+      }
+    ).then(async () => {
+      const { status, msg }: any = await http.Request({ method: UrlList.prizeSet.prideletePriReturnField.method, url: UrlList.prizeSet.prideletePriReturnField.url, params: String(row.id) });
+      if (status === 1) {
+        ElMessage({
+          message: "删除成功",
+          type: "success"
+        });
+        onSearch(ruleFormRef.value);
+      } else {
+        ElMessageBox.alert(msg, "提示", {
+        confirmButtonText: "关闭",
+        type: "warning"
+      });
+      };
+    })
+  }
+
+    // 新增
+  const addVisible = ref(false);
+  function handleAdd() {
+    addVisible.value = true;
+  };
+
+    // 修改
+  const editUpdatePriReturnFieldVisible = ref(false);
+  const editUpdatePriReturnFieldFormData = ref({});
+  function handleUpdatePriReturnField(row) {
+    editUpdatePriReturnFieldVisible.value = true;
+    // 表格数据赋值
+    editUpdatePriReturnFieldFormData.value = row;
+  };
+
+  return {
+    form,
+    loading,
+    columns,
+    dataList,
+    pagination,
+    onSearch,
+    handleSizeChange,
+    handleCurrentChange,
+    handleSelectionChange,
+    ruleFormRef,
+
+    handleAdd,
+    addVisible,
+    handleUpdatePriReturnField,
+    editUpdatePriReturnFieldVisible,
+    editUpdatePriReturnFieldFormData,
+    handleDelete,
+
+  };
+}

+ 162 - 0
src/views/pri/priReturnField/index.vue

@@ -0,0 +1,162 @@
+<script lang="ts">
+// 声明额外的选项
+export default {
+  name: "PriReturnField"
+};
+</script>
+<script setup lang="ts">
+import { provide } from "vue";
+import { usePriReturnField } from "./hook";
+import { http } from "@/utils/http";
+import { useRenderIcon, hasAuth, PureTableBar } from "@/utils/importUsed"
+import Add from "./components/add/index.vue";
+import EditUpdatePriReturnField from "./components/updatePriReturnField/index.vue";
+import Search from "@iconify-icons/ep/search";
+import Addicon from "@iconify-icons/ep/document-add";
+import Delete from "@iconify-icons/ep/delete";
+import EditPen from "@iconify-icons/ep/edit-pen";
+import More from "@iconify-icons/ep/more-filled";
+
+const {
+  form,
+  loading,
+  columns,
+  dataList,
+  pagination,
+  onSearch,
+  handleSizeChange,
+  handleCurrentChange,
+  handleSelectionChange,
+  ruleFormRef,
+  handleAdd,
+  addVisible,
+  handleUpdatePriReturnField,
+  editUpdatePriReturnFieldVisible,
+  editUpdatePriReturnFieldFormData,
+  handleDelete,
+
+} = usePriReturnField();
+// 关闭添加
+const closeAddVisible = () => {
+  onSearch(ruleFormRef.value);
+  addVisible.value = false;
+}
+provide('closeAddVisible', closeAddVisible)
+// 关闭修改
+const closeEditUpdatePriReturnFieldVisible = () => {
+  onSearch(ruleFormRef.value);
+  editUpdatePriReturnFieldVisible.value = false
+}
+provide('closeEditUpdatePriReturnFieldVisible', closeEditUpdatePriReturnFieldVisible)
+
+</script>
+
+<template lang="pug">
+.main
+  div
+    //- 搜索表格组件条件
+    el-form.bg-bg_color.pl-8.pt-4.pr-8(
+      label-position="left"
+      label-width="100px"
+      :inline="true",
+      :model="form",
+      class="w-[99/100]"
+      ref="ruleFormRef"
+      :rules="rules"
+    )
+      el-form-item(label='字段名称' prop="fieldName")
+        el-input(v-model='form.fieldName' autocomplete='off'
+          placeholder="请输入字段名称")
+      el-form-item(label='字段名' prop="fieldEnName")
+        el-input(v-model='form.fieldEnName' autocomplete='off'
+          placeholder="请输入字段名")
+      el-form-item(label='匹配表' prop="queryTableId")
+        el-input-number(v-model='form.queryTableId' :min="1" :max="1000"
+          placeholder="请输入匹配表")
+
+      el-form-item
+        el-button(
+          type="primary",
+          :icon="useRenderIcon(Search)",
+          :loading="loading",
+          @click="onSearch(ruleFormRef)"
+        ) 查询
+    //- 表格组件
+    PureTableBar(title="条件返回字段", @refresh="onSearch(ruleFormRef)" )
+      template(#buttons)
+        el-button(type="primary" :icon="useRenderIcon(Addicon)" @click="handleAdd()" v-if="hasAuth(['add'])") 新增
+
+      template(v-slot="{ size, checkList }")
+        pure-table( 
+          row-key="id"
+          ref="tableRef"
+          adaptive
+          align-whole="center"
+          table-layout="auto"
+          :loading="loading"
+          :size="size",
+          :data="dataList",
+          :columns="columns",
+          :checkList="checkList",
+          :pagination="pagination",
+          :paginationSmall="size === 'default' ? true : false",
+          :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }",
+          @selection-change="handleSelectionChange",
+          @size-change="handleSizeChange",
+          @current-change="handleCurrentChange"
+        )
+          template(#operation="{ row }")
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleUpdatePriReturnField(row)"
+              :icon="useRenderIcon(EditPen)"
+              v-if="hasAuth(['updatePriReturnField'])"
+            ) 编辑
+            el-button.reset-margin(
+              link
+              type="primary"
+              size="small"
+              @click="handleDelete(row)"
+              :icon="useRenderIcon(Delete)"
+              v-if="hasAuth(['delete'])"
+            ) 删除
+
+
+
+    Add(:addVisible="addVisible" :queryTableId="form.queryTableId")
+    EditUpdatePriReturnField(:editVisible="editUpdatePriReturnFieldVisible" :formData="editUpdatePriReturnFieldFormData")
+
+                    
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+:deep(.el-form-item__label) {
+  font-weight: 700;
+}
+
+:deep(.el-pagination) {
+  flex-flow: wrap;
+}
+
+:deep(.is-draggable) {
+  max-height: 80vh;
+  overflow: auto;
+}
+
+:deep(.el-dialog__header) {
+  position: sticky;
+  top: 0;
+  z-index: 2;
+  background: #fff;
+}
+
+:deep(.el-descriptions__header) {
+  margin: 16px 0 !important;
+}
+</style>