Browse Source

feat: 修改查询

DESKTOP-USV654P\pc 1 year ago
parent
commit
e20b61a3de

+ 32 - 1
apps/web-baicai/src/api/model/index.ts

@@ -1,5 +1,5 @@
 export interface BasicPageParams {
-  page: number;
+  pageIndex: number;
   pageSize: number;
 }
 
@@ -34,6 +34,17 @@ export interface RelationRequest {
   relationIds: number[] | string[];
 }
 
+export interface Condition {
+  fieldName: string;
+  fieldValue: any;
+  conditionalType?: string;
+}
+
+export interface QueryParams {
+  code: string;
+  conditions?: Condition[];
+}
+
 export const statusOptions: BasicOptionResult[] = [
   { label: '启用', value: 1 },
   { label: '停用', value: 2 },
@@ -79,3 +90,23 @@ export const connectTypeOptions: BasicOptionResult[] = [
   { label: '右联接', value: 2 },
   { label: '全联接', value: 3 },
 ];
+
+export const ConditionalTypeOptions: BasicOptionResult[] = [
+  { label: '等于', value: 0 },
+  { label: '包含', value: 1 },
+  { label: '大于', value: 2 },
+  { label: '大于等于', value: 3 },
+  { label: '小于', value: 4 },
+  { label: '小于等于', value: 5 },
+  { label: '介于', value: 6 },
+  { label: '不介于', value: 7 },
+  { label: '开始于', value: 8 },
+  { label: '结束于', value: 9 },
+  { label: '不等于', value: 10 },
+  { label: '不为空', value: 11 },
+
+  // { label: '不包含', value: 7 },
+  // { label: '为空', value: 8 },
+  // { label: '正则匹配', value: 14 },
+  // { label: '不正则匹配', value: 15 },
+];

+ 8 - 8
apps/web-baicai/src/api/system/query.ts

@@ -3,6 +3,7 @@ import type {
   BasicOptionResult,
   BasicPageParams,
   BasicTreeOptionResult,
+  QueryParams,
 } from '#/api/model';
 
 import { requestClient } from '#/api/request';
@@ -41,6 +42,7 @@ export namespace QueryApi {
     columns: Column[];
     columnKeys: string[];
   }
+
   export const getPage = (params: PageParams) =>
     requestClient.get<PageResult>('/query/page', { params });
 
@@ -61,25 +63,23 @@ export namespace QueryApi {
   export const getColumns = (code: string) =>
     requestClient.get<Column[]>('/query/column-list', { params: { code } });
 
-  export const postExecute = (data: Record<string, any>) =>
+  export const postExecute = (data: QueryParams) =>
     requestClient.post('/query/execute', data);
 
-  export const postExecuteReal = (data: Record<string, any>) =>
+  export const postExecuteReal = (data: QueryParams) =>
     requestClient.post('/query/execute-real', data);
   /**
    * @param data
    * { id: number, conditions:{ field: string,op:EnumApi.EnumType.QueryType,value:any } }
    * @returns
    */
-  export const postOptions = (data: Record<string, any>) =>
+  export const postOptions = (data: QueryParams) =>
     requestClient.post<BasicOptionResult[]>('/query/execute-options', data);
   /**
    *
-   * @param id
+   * @param data
    * @returns
    */
-  export const getExecuteTree = (id: number) =>
-    requestClient.get<BasicTreeOptionResult[]>('/query/execute-tree', {
-      params: { id },
-    });
+  export const getExecuteTree = (data: QueryParams) =>
+    requestClient.post<BasicTreeOptionResult[]>('/query/execute-tree', data);
 }

+ 7 - 1
apps/web-baicai/src/api/system/table.ts

@@ -25,6 +25,11 @@ export namespace TableApi {
 
   export type PageResult = BasicFetchResult<RecordItem>;
 
+  export interface ExecuteParams extends BasicPageParams {
+    code: string;
+    formData: any;
+  }
+
   export const getPage = (params: PageParams) =>
     requestClient.get<PageResult>('/table/query/page', { params });
 
@@ -45,6 +50,7 @@ export namespace TableApi {
 
   export const deleteDetail = (id: number) =>
     requestClient.delete('/table/query', { data: { id } });
-  export const postExecute = (data: Record<string, any>) =>
+
+  export const postExecute = (data: ExecuteParams) =>
     requestClient.post('/table/query/execute', data);
 }

+ 30 - 1
apps/web-baicai/src/components/form/components/api-popup.vue

@@ -1,7 +1,7 @@
 <script setup lang="ts">
 import type { SelectValue } from 'ant-design-vue/es/select';
 
-import { computed, type PropType, ref, unref } from 'vue';
+import { computed, type PropType, ref, unref, watch } from 'vue';
 
 import { useVbenModal } from '@vben/common-ui';
 import { cn } from '@vben/utils';
@@ -9,6 +9,7 @@ import { cn } from '@vben/utils';
 import { useVModel } from '@vueuse/core';
 import { Input } from 'ant-design-vue';
 
+import { TableApi } from '#/api';
 import { Icon } from '#/components/icon';
 
 import FormQuery from './api-popup/api-popup-modal-ignore.vue';
@@ -41,6 +42,7 @@ const emit = defineEmits(['update:value']);
 const [FormQueryModal, formQueryApi] = useVbenModal({
   connectedComponent: FormQuery,
 });
+const isFirstLoad = ref(true);
 
 const modelValue = useVModel(props, 'value', emit, {
   defaultValue: props.value,
@@ -79,6 +81,33 @@ const handleSuccess = (data: any) => {
     emit('update:value', value);
   }
 };
+
+const fetch = async () => {
+  const { value, fieldNames } = props;
+  const data = await TableApi.postExecute({
+    code: props.api,
+    pageIndex: 1,
+    pageSize: 1000,
+    formData: { _ids: value, _key: fieldNames.value },
+  });
+  if (data.items) {
+    options.value = data.items.map((item: any) => ({
+      label: item[fieldNames.label],
+      value: item[fieldNames.value],
+    }));
+  }
+  isFirstLoad.value = false;
+};
+
+watch(
+  () => props.value,
+  (value) => {
+    if (value) {
+      unref(isFirstLoad) && fetch();
+    }
+  },
+  { deep: true },
+);
 </script>
 
 <template>

+ 4 - 4
apps/web-baicai/src/views/system/design/query/components/view.vue

@@ -21,12 +21,12 @@ const gridOptions = reactive<VxeGridProps<QueryApi.BasicRecordItem>>({
   proxyConfig: {
     autoLoad: false,
     ajax: {
-      query: async ({ page }, formValues) => {
+      query: async ({ page }) => {
         return await QueryApi.postExecuteReal({
           pageIndex: page.currentPage,
           pageSize: page.pageSize,
-          ...formValues,
-          id: unref(modelRef).id,
+          // conditions: { ...formValues },
+          code: unref(modelRef).code,
         });
       },
     },
@@ -49,7 +49,7 @@ const [Modal, { getData, setState }] = useVbenModal({
 
       modelRef.value = { ...data.baseData };
 
-      const resColumns = await QueryApi.getColumns(data.baseData.id);
+      const resColumns = await QueryApi.getColumns(data.baseData.code);
 
       const columns: Record<string, any>[] = [
         { align: 'center', title: '序号', type: 'seq', width: 50 },

+ 3 - 3
apps/web-baicai/src/views/system/design/query/index.vue

@@ -49,8 +49,8 @@ const handleEdit = (record: any, isUpdate: boolean) => {
   formEditApi.open();
 };
 
-const handleView = (id: number) => {
-  formViewApi.setData({ baseData: { id } });
+const handleView = (code: string) => {
+  formViewApi.setData({ baseData: { code } });
   formViewApi.open();
 };
 
@@ -87,7 +87,7 @@ const handelSuccess = () => {
               label: '查看',
               type: 'text',
               disabled: !hasAccessByCodes(['query:view']),
-              onClick: handleView.bind(null, row.id),
+              onClick: handleView.bind(null, row.code),
             },
           ]"
           :drop-down-actions="[