Procházet zdrojové kódy

推广员计划数据

Szx před 2 roky
rodič
revize
c127a61bc8
5 změnil soubory, kde provedl 306 přidání a 261 odebrání
  1. binární
      dist.rar
  2. 187 232
      src/api/index.ts
  3. 6 4
      src/hooks/composable/useAuthUser.ts
  4. 93 6
      src/views/put/put-ad-plan.vue
  5. 20 19
      types/api.d.ts

binární
dist.rar


+ 187 - 232
src/api/index.ts

@@ -28,7 +28,6 @@ import {
   OListItem,
   IDomainItem,
   IPBookItem,
-  
 } from "#/api";
 import { any } from "vue-types";
 
@@ -91,9 +90,6 @@ export const getAdPushList = (
   return axios("/ad/userAdAdvertisers", { params: query });
 };
 
-
-
-
 /**
  * 获取公众号列表
  * @param query
@@ -105,41 +101,43 @@ export const getOfficialAccounts = (query: {
   report_module: any;
   report_status: any;
   report_platform?: string;
-
 }): AxiosPromise<IList<IOfficials>> => {
   return axios("/userOfficialAccounts", { params: query });
 };
 
-
 //橙子列表的获取
-export const getOrangeProductListApi =(query:{app_name:string}):AxiosPromise<IList<OListItem>>=>{
-  return axios("/yuewenfx/getProductList",{params:query})
-}
+export const getOrangeProductListApi = (query: {
+  app_name: string;
+}): AxiosPromise<IList<OListItem>> => {
+  return axios("/yuewenfx/getProductList", { params: query });
+};
 //橙子建站修改微信公众号
-export const editOrangeWxApi =(query:{appName:string,alias:string,appflag:string})=>{
-
-  return axios("/yuewenfx/editAppFlagsList",{params:query})
-
-}
+export const editOrangeWxApi = (query: {
+  appName: string;
+  alias: string;
+  appflag: string;
+}) => {
+  return axios("/yuewenfx/editAppFlagsList", { params: query });
+};
 //橙子建站回传配置
-export const upDateReportConfigApi =(query:{
-  appflag:string,
-  rate:string,
-  condition:string,
-  price:string
-})=>{
-  return axios("/yuewenfx/updateReportConfig",{params:query})
-}
+export const upDateReportConfigApi = (query: {
+  appflag: string;
+  rate: string;
+  condition: string;
+  price: string;
+}) => {
+  return axios("/yuewenfx/updateReportConfig", { params: query });
+};
 //橙子建站回传日志
 
-export const getOrangeLogListApi =(query:{
-  guid?:string,
-  start_time?:string,
-  end_time?:string,
-  appflag:string,
-}): AxiosPromise<IList<ILogitem>>=>{
-  return axios("/yuewenfx/getYueWenFxReportLogList",{params:query})
-}
+export const getOrangeLogListApi = (query: {
+  guid?: string;
+  start_time?: string;
+  end_time?: string;
+  appflag: string;
+}): AxiosPromise<IList<ILogitem>> => {
+  return axios("/yuewenfx/getYueWenFxReportLogList", { params: query });
+};
 // export const addDeliveryBook = (data: {
 //   delivery_bid: string | number;
 //   official_id: string | number;
@@ -148,26 +146,21 @@ export const getOrangeLogListApi =(query:{
 //   return axios.post("/addDeliveryBook", data);
 // };
 //橙子建站强制回传
-export const getforceReportApi =(data:{
-  guid:string,
-  paltform:string,
-  reportType:string
-
-})=>{
-  return axios.post("/yuewenfx/forceReport",data)
-}
-
-
-
-
-export const getOfficialOrangeApi = (query:{
-   appflag:string,
-   rate:string,
-   condition:string
-})=>{
-  return axios("api/yuewenfx/getProductList",{params:query})
-}
+export const getforceReportApi = (data: {
+  guid: string;
+  paltform: string;
+  reportType: string;
+}) => {
+  return axios.post("/yuewenfx/forceReport", data);
+};
 
+export const getOfficialOrangeApi = (query: {
+  appflag: string;
+  rate: string;
+  condition: string;
+}) => {
+  return axios("api/yuewenfx/getProductList", { params: query });
+};
 
 /**
  * 获取公众号列表
@@ -472,8 +465,7 @@ export const getCoustomClomuns = (): any => {
 export const setChannelRate = (data: {
   rate: string | number;
   channel_id: string;
-  report_platform?: string
-  
+  report_platform?: string;
 }) => {
   return axios.post("/setChannelConfig", data);
 };
@@ -548,16 +540,18 @@ export const statusAdChange = (data: {
  * 获取权限用户列表
  * @returns
  */
-export const getAuthorUser = (): AxiosPromise<IUserAdmin> => {
+export const getAuthorUser = (): AxiosPromise<any> => {
   return axios("/userInfo");
 };
 
 // 获取公众号回传配置
 export const getOfficialBackConfig = (
   channel_id: number,
-  report_platform?: string,
+  report_platform?: string
 ): AxiosPromise<AccountPlanConfig> => {
-  return axios("/channel/reportConfig", { params: { channel_id, report_platform } });
+  return axios("/channel/reportConfig", {
+    params: { channel_id, report_platform },
+  });
 };
 
 // 保存公众号回传配置
@@ -574,7 +568,7 @@ export const onUpdateOfficialReportType = (
   return axios.post("/channel/switchReportModule", {
     channel_id,
     report_module,
-    report_platform
+    report_platform,
   });
 };
 
@@ -808,19 +802,19 @@ export const getPromotionList = (data: {
   book_name: string;
   channel_name: string;
   channel_id: string | number;
-  page: number
+  page: number;
 }) => {
   // return axios("/yuewen/promotions", { params: data });
-  return axios(`/yuewen/promotions?book_name=${data.book_name}&channel_name=${data.channel_name}&channel_id=${data.channel_id}&page=${data.page}`);
+  return axios(
+    `/yuewen/promotions?book_name=${data.book_name}&channel_name=${data.channel_name}&channel_id=${data.channel_id}&page=${data.page}`
+  );
 };
 
 /**
  *  删除推广信息
  * @param channel_id
  */
-export const deletePromotion = (
-  query: { channel_id: number }
-): any => {
+export const deletePromotion = (query: { channel_id: number }): any => {
   return axios("/yuewen/deletePromotion", { params: query });
 };
 
@@ -836,7 +830,7 @@ export const addPromotionLInk = (data: {
 //修改回传配置
 export const updateReportConfig = (data: {
   channel_id: string | number;
-  rate: number
+  rate: number;
 }) => {
   return axios.post("/yuewen/updateReportConfig", data);
 };
@@ -845,9 +839,11 @@ export const updateReportConfig = (data: {
  * 获取用户数据
  * @param channel_id
  */
-export const getUserData = (
-  query: { channel_id: number | string, page: number, is_paid?: number }
-): any => {
+export const getUserData = (query: {
+  channel_id: number | string;
+  page: number;
+  is_paid?: number;
+}): any => {
   return axios("/yuewen/registerUsers", { params: query });
 };
 
@@ -855,9 +851,7 @@ export const getUserData = (
  *  用户数据强制回传
  * @param uid
  */
-export const forceReport = (
-  query: { uid: number | string }
-): any => {
+export const forceReport = (query: { uid: number | string }): any => {
   return axios("/yuewen/forceReport", { params: query });
 };
 
@@ -867,12 +861,16 @@ export const forceReport = (
  * 获取视频列表
  * @param
  */
-export const getVideoList = (
-  query: {
-    is_pubic: number | string, page: number, video_name?: string, video_type?: string, book_name?: string,
-    demander?: string, editor?: string, uploader?: string,
-  }
-): any => {
+export const getVideoList = (query: {
+  is_pubic: number | string;
+  page: number;
+  video_name?: string;
+  video_type?: string;
+  book_name?: string;
+  demander?: string;
+  editor?: string;
+  uploader?: string;
+}): any => {
   return axios("/video/list", { params: query });
 };
 
@@ -880,12 +878,16 @@ export const getVideoList = (
  * 获取图片列表
  * @param
  */
-export const getImageList = (
-  query: {
-    is_pubic: number | string, page: number, image_name?: string, image_type?: string, book_name?: string,
-    demander?: string, editor?: string, uploader?: string,
-  }
-): any => {
+export const getImageList = (query: {
+  is_pubic: number | string;
+  page: number;
+  image_name?: string;
+  image_type?: string;
+  book_name?: string;
+  demander?: string;
+  editor?: string;
+  uploader?: string;
+}): any => {
   return axios("/image/list", { params: query });
 };
 
@@ -893,11 +895,7 @@ export const getImageList = (
  * 删除视频
  * @param
  */
-export const deleteVideo = (
-  query: {
-    ids: string
-  }
-): any => {
+export const deleteVideo = (query: { ids: string }): any => {
   return axios("/video/delete", { params: query });
 };
 
@@ -905,11 +903,7 @@ export const deleteVideo = (
  * 删除图片
  * @param
  */
-export const deleteImage = (
-  query: {
-    ids: string
-  }
-): any => {
+export const deleteImage = (query: { ids: string }): any => {
   return axios("/image/delete", { params: query });
 };
 
@@ -918,22 +912,22 @@ export const deleteImage = (
  * @data
  */
 export const uploadVideo = (data: {
-  video: any,
-  is_public: number | string,
-  duration: number | string,
-  width: number | string,
-  height: number | string,
+  video: any;
+  is_public: number | string;
+  duration: number | string;
+  width: number | string;
+  height: number | string;
 }) => {
   // return axios.post("/video/upload", data);
   return axios({
-    method: 'post',
-    url: '/video/upload',
+    method: "post",
+    url: "/video/upload",
     data,
     headers: {
-      'Content-Type': 'multipart/form-data',
-      "contentType": false,
-    }
-  })
+      "Content-Type": "multipart/form-data",
+      contentType: false,
+    },
+  });
 };
 
 /**
@@ -941,26 +935,25 @@ export const uploadVideo = (data: {
  * @data
  */
 export const uploadImage = (data: {
-  image: any,
-  is_public: number | string,
+  image: any;
+  is_public: number | string;
 }) => {
   // return axios.post("/image/upload", data);
   return axios({
-    method: 'post',
-    url: '/image/upload',
+    method: "post",
+    url: "/image/upload",
     data,
     headers: {
-      'Content-Type': 'multipart/form-data'
-    }
-  })
+      "Content-Type": "multipart/form-data",
+    },
+  });
 };
 
 /**
  * 获取广告主列表用于推送
  * @param
  */
-export const getAdvertiser = (
-): any => {
+export const getAdvertiser = (): any => {
   return axios("/ad/advertiser/all");
 };
 
@@ -968,12 +961,10 @@ export const getAdvertiser = (
  * 推送素材
  * @param
  */
-export const pushMaterial = (
-  query: {
-    material_id: string | number,
-    advertiser_id: string | number,
-  }
-): any => {
+export const pushMaterial = (query: {
+  material_id: string | number;
+  advertiser_id: string | number;
+}): any => {
   return axios("/material/sync", { params: query });
 };
 
@@ -982,19 +973,17 @@ export const pushMaterial = (
  * 获取员工绩效列表
  * @param
  */
-export const getStuffPerformance = (
-  query: {
-    start_date: string,
-    end_date: string,
-    uname: string,
-    uid?: string | number,
-    type: string,
-    model: string,
-    value: string | number,
-    page: number,
-    back_amount_order: number | string
-  }
-): any => {
+export const getStuffPerformance = (query: {
+  start_date: string;
+  end_date: string;
+  uname: string;
+  uid?: string | number;
+  type: string;
+  model: string;
+  value: string | number;
+  page: number;
+  back_amount_order: number | string;
+}): any => {
   return axios("/promoter/stat", { params: query });
 };
 
@@ -1002,17 +991,15 @@ export const getStuffPerformance = (
  * 获取员工绩效曲线图数据
  * @param
  */
-export const getStuffPerformanceChart = (
-  query: {
-    start_date: string,
-    end_date: string,
-    uname: string,
-    uid?: string | number,
-    type: string,
-    model: string,
-    value: string | number,
-  }
-): any => {
+export const getStuffPerformanceChart = (query: {
+  start_date: string;
+  end_date: string;
+  uname: string;
+  uid?: string | number;
+  type: string;
+  model: string;
+  value: string | number;
+}): any => {
   return axios("/promoter/statAll", { params: query });
 };
 
@@ -1020,13 +1007,11 @@ export const getStuffPerformanceChart = (
  * 获取员工绩效总览
  * @param
  */
-export const getStuffPerformanceSum = (
-  query: {
-    start_date: string,
-    end_date: string,
-    uid: any,
-  }
-): any => {
+export const getStuffPerformanceSum = (query: {
+  start_date: string;
+  end_date: string;
+  uid: any;
+}): any => {
   return axios("/promoter/statSum", { params: query });
 };
 
@@ -1036,20 +1021,18 @@ export const getStuffPerformanceSum = (
  * 获取账户下的广告组
  * @param
  */
-export const getAdCampaigns = (
-  query: {
-    advertiser_id: string | number,
-    campaign_name?: string,
-    page: string | number,
-    pageSize: 200
-  }
-): any => {
+export const getAdCampaigns = (query: {
+  advertiser_id: string | number;
+  campaign_name?: string;
+  page: string | number;
+  pageSize: 200;
+}): any => {
   return axios("/ad/advertiser/campaigns", { params: query });
 };
 // 创建广告组
 /* 创建广告组
-* @param null
-*/
+ * @param null
+ */
 export const createAdCampaign = (data: {
   advertiser_id: string | number;
   budget?: string | number;
@@ -1066,41 +1049,33 @@ export const createAdCampaign = (data: {
  * 获取定向包
  * @param
  */
-export const getPackage = (
-  query: {
-    advertiser_id: string | number,
-    page: string | number,
-    page_size: string | number,
-  }
-): any => {
+export const getPackage = (query: {
+  advertiser_id: string | number;
+  page: string | number;
+  page_size: string | number;
+}): any => {
   return axios("/ad/package/get", { params: query });
 };
 /**
  * 新建定向包
  * @param
  */
- export const createPackage = (
-  data:any
-): any => {
+export const createPackage = (data: any): any => {
   return axios.post("/ad/package/create", data);
 };
 
 // 获取优化目标
-export const getBestTargetApi = (
-  query: {
-    advertiser_id: string | number,
-    landing_type: string | number,
-    marketing_purpose: string | number,
-  }
-): any => {
+export const getBestTargetApi = (query: {
+  advertiser_id: string | number;
+  landing_type: string | number;
+  marketing_purpose: string | number;
+}): any => {
   return axios("/tools/adConvert/optimizedTarget", { params: query });
 };
 
-
-
 /* 创建计划
-* @param null
-*/
+ * @param null
+ */
 export const createPlan = (data: {
   advertiser_id: any;
   campaign_id: any;
@@ -1116,15 +1091,13 @@ export const createPlan = (data: {
  * 获取计划列表
  * @param
  */
-export const getPlanList = (
-  query: {
-    ad_name?: string | number,
-    advertiser_name?: string | number,
-    campaign_name?: string | number,
-    status?: string | number,
-    page?: string | number,
-  }
-): any => {
+export const getPlanList = (query: {
+  ad_name?: string | number;
+  advertiser_name?: string | number;
+  campaign_name?: string | number;
+  status?: string | number;
+  page?: string | number;
+}): any => {
   return axios("/ad/create/logs", { params: query });
 };
 /**
@@ -1132,42 +1105,34 @@ export const getPlanList = (
  * @param
  */
 
-export const delModelItem=(query:{
-id:string
-}):any=>{
-  return axios("/ad/create/deleteTemplates",{params:query})
-}
-
+export const delModelItem = (query: { id: string }): any => {
+  return axios("/ad/create/deleteTemplates", { params: query });
+};
 
 /**
  * 删除管理计划
  * @param
  */
-export const delPlanList =(query:{log_id:string}):any=>{
-  return axios("/ad/create/log/delete",{params:query})
-}
-
+export const delPlanList = (query: { log_id: string }): any => {
+  return axios("/ad/create/log/delete", { params: query });
+};
 
 /**
  * 编辑管理计划
  * @param
  */
-export const editPlanLst =(query:any)=>{
-  return axios("/ad/create/log/edit")
-}
-
-
+export const editPlanLst = (query: any) => {
+  return axios("/ad/create/log/edit");
+};
 
 /**
  * 获取计划模板
  * @param
  */
-export const getPlanTemplate = (
-  query: {
-    page?: string | number,
-    name?:string
-  }
-): any => {
+export const getPlanTemplate = (query: {
+  page?: string | number;
+  name?: string;
+}): any => {
   return axios("/ad/create/templates", { params: query });
 };
 
@@ -1175,13 +1140,11 @@ export const getPlanTemplate = (
  * 获取计划媒体定向包
  * @param
  */
-export const getMediaPackage = (
-  query: {
-    advertiser_id: any,
-    page: string | number,
-    page_size: string | number,
-  }
-): any => {
+export const getMediaPackage = (query: {
+  advertiser_id: any;
+  page: string | number;
+  page_size: string | number;
+}): any => {
   return axios("/ad/flow/package/get", { params: query });
 };
 
@@ -1189,32 +1152,24 @@ export const getMediaPackage = (
  * 创建自定义创意
  * @param
  */
-export const createCustomCreative = (
-  data: {
-    task_id?: string | number,
-    advertiser_id: string | number,
-    ad_id: string | number,
-    creative_list: any,
-    ad_data: any,
-  }
-): any => {
+export const createCustomCreative = (data: {
+  task_id?: string | number;
+  advertiser_id: string | number;
+  ad_id: string | number;
+  creative_list: any;
+  ad_data: any;
+}): any => {
   return axios.post("/ad/customCreative/create", data);
 };
 
 /**
- * 
+ *
  * @param
  */
-export const getVideoLog = (
-  query: {
-    page?: string | number,
-  }
-): any => {
+export const getVideoLog = (query: { page?: string | number }): any => {
   return axios.get("/material/uploadStatus", { params: query });
 };
 
-
-
 /**
  * 回传日志
  * @param campaign_id
@@ -1230,4 +1185,4 @@ export const backLogList = (
   }>
 ): any => {
   return axios("/getReportLogs", { params: query });
-};
+};

+ 6 - 4
src/hooks/composable/useAuthUser.ts

@@ -1,20 +1,22 @@
 import { reactive, ref, toRefs, watchEffect } from "vue";
 
-import { IUserItem } from "#/api";
+import { IUserItem, IGroupItem } from "#/api";
 import { getAuthorUser } from "@/api";
 
 const useAuthUser = () => {
   const state = reactive({
     showDropDownBox: false,
-    available_uids: ref<IUserItem[]>([])
+    available_uids: ref<IUserItem[]>([]),
+    filter_users: [],
   });
-
   const initData = async () => {
     try {
       const { data } = await getAuthorUser();
       state.available_uids = data.available_uids;
       state.showDropDownBox = data.showDropDownBox;
-      console.log(state);
+
+      console.log(data.filter_users);
+      localStorage.setItem("filter_users", data.filter_users);
     } catch (error) {
       console.log("error happened in get auth user:", error.message);
     }

+ 93 - 6
src/views/put/put-ad-plan.vue

@@ -37,7 +37,7 @@
       <template v-if="!!showDropDownBox">
         <div class="tool-bar-item">
           <p class="label">推广员</p>
-          <a-select
+          <!-- <a-select
             mode="multiple"
             v-model:value="uids"
             placeholder="请选择推广员"
@@ -50,6 +50,28 @@
             >
               {{ user.nickname }}
             </a-select-option>
+          </a-select> -->
+          <!-- {{ filter_users }} -->
+          <a-cascader
+            v-model:value="getuids"
+            style="width: 100%"
+            mode="multiple"
+            max-tag-count="responsive"
+            :options="options"
+            placeholder="请选择推广员"
+            @change="getPromoteUser"
+            :allowClear="false"
+          ></a-cascader>
+        </div>
+        <div class="tool-bar-item">
+          <a-select
+            v-model:value="uidslabel"
+            mode="tags"
+            style="width: 100%"
+            placeholder="推广员"
+            allowClear
+            @change="delItems"
+          >
           </a-select>
         </div>
       </template>
@@ -342,6 +364,7 @@ import {
   unref,
   onMounted,
   computed,
+  toRef,
 } from "vue";
 import moment, { Moment } from "moment";
 import ToolBar from "@/components/tool-bar/index.vue";
@@ -372,12 +395,13 @@ import {
   setBackConfig,
   getAdStatus,
   getadDataSum,
+  getAuthorUser,
 } from "@/api";
 
 import { ADPlanItem, PageOptions, PlanBack } from "#/api";
 import useAuthUser from "@/hooks/composable/useAuthUser";
 import ARow from "ant-design-vue/lib/grid/Row";
-
+import { any } from "vue-types";
 const PutAdPlan = defineComponent({
   components: {
     ToolBar,
@@ -393,11 +417,9 @@ const PutAdPlan = defineComponent({
     let { loading, meta, tablePageOptions } = usePagination();
     const { showDropDownBox, available_uids } = useAuthUser();
     const { router, route, store } = useApp();
-
     let list: any[] = [],
       opList: any[] = [],
       stList: any = [];
-
     const state = reactive({
       platform: "platform1",
       list: ref<ADPlanItem[]>([]),
@@ -464,8 +486,38 @@ const PutAdPlan = defineComponent({
       fields: {},
       rangePick: picker,
       uids: ref<number[]>([]),
+      options: ref<any>([]),
+      filter_users: ref<any>([]),
+      getuids: ref<number[]>([]),
+      uidslabel: ref<string[]>([]),
+      uidslabelCurrent: ref<any>([]),
     });
+    const groupHandle = () => {
+      getAuthorUser().then((res) => {
+        state.filter_users = res.data.filter_users;
+        let arr = [] as any;
+        state.filter_users.map((item: any, useIndex: any) => {
+          arr.push({
+            value: item.group_id,
+            label: item.group_name,
+            children: [],
+          });
+          arr.map((a: any, index: any) => {
+            item.users.forEach((i: any, indexi: any) => {
+              if (index == useIndex) {
+                a.children.push({
+                  value: i.uid,
+                  label: i.nickname,
+                });
+              }
+            });
+          });
+        });
+        state.options = arr;
+      });
+    };
 
+    groupHandle();
     if (
       route.query &&
       (route.query.campaign_id || route.query.channel_id || route.query.book_id)
@@ -691,6 +743,38 @@ const PutAdPlan = defineComponent({
         width: 230,
       });
     });
+    const getPromoteUser = (val: any, selectedOptions: any) => {
+      if (val) {
+        state.uids.push(val.slice(-1));
+        state.uidslabelCurrent.push(selectedOptions[1]);
+        state.uidslabel.push(selectedOptions[1].label);
+      }
+      console.log(state.uids, "state.uids");
+    };
+    //删除监听
+    const delItems = (value: any) => {
+      if (!value[0]) {
+        state.uids = [];
+      }
+      let arr = [] as any;
+      state.uidslabelCurrent.map((item: any) =>
+        value.map((i: any) => {
+          if (i == item.label) {
+            console.log(item.value);
+            arr.push(item.value);
+          }
+        })
+      );
+      state.uids = unique(arr) as any;
+    };
+    //去重
+    const unique = (arr: any) => {
+      if (!Array.isArray(arr)) {
+        console.log("type error!");
+        return;
+      }
+      return Array.from(new Set(arr));
+    };
 
     const setSateSwitch = (val: string, name: string) => {
       state.cost_order = 0;
@@ -750,6 +834,8 @@ const PutAdPlan = defineComponent({
       handleTableChange,
       onSearch,
       switchDate,
+      getPromoteUser,
+      delItems,
     };
   },
   mounted() {
@@ -790,8 +876,9 @@ const PutAdPlan = defineComponent({
       this.temData = record;
     },
     confirmEdit() {
-      let { id, back_on, rate, condition, price, float_rate } =
-        this.popForm[this.currentTbs];
+      let { id, back_on, rate, condition, price, float_rate } = this.popForm[
+        this.currentTbs
+      ];
       if (float_rate && float_rate >= rate) {
         this.$message.error("浮动比例必须小于固定回传比例");
         return;

+ 20 - 19
types/api.d.ts

@@ -77,23 +77,21 @@ export interface IOfficials {
   nickname: string;
   report_module?: string;
 }
-export interface ILogitem{
-  order_no: string,
-  guid: string,
-  platform: string,
-  register_time: string,
-  pay_time: string,
-  pay_amount: string,
-  report_status: string,
-  reason: string,
-  back_percentage: number,
-  config_back_percentage: number,
-  report_type:string
-  appflag:string
+export interface ILogitem {
+  order_no: string;
+  guid: string;
+  platform: string;
+  register_time: string;
+  pay_time: string;
+  pay_amount: string;
+  report_status: string;
+  reason: string;
+  back_percentage: number;
+  config_back_percentage: number;
+  report_type: string;
+  appflag: string;
 }
 
-
-
 export interface ADPlanItem {
   ad_id: string | number;
   ad_name: string;
@@ -408,22 +406,26 @@ export interface OListItem {
   appflag: string;
   rate: number;
   platform: string;
-  condition:string;
+  condition: string;
 }
 
 interface IUserAdmin {
   uid: number;
   showDropDownBox: boolean;
   available_uids: IUserItem[];
+  filter_users: IUserItem[];
 }
 
 interface IUserItem {
   account: string;
   nickname: string;
   id: number;
-
 }
-
+interface IGroupItem {
+  group_name: string;
+  group_id: string;
+  users: any[];
+}
 interface AccountPlanConfig {
   ad_config: {
     channel_id: string;
@@ -451,4 +453,3 @@ interface IPBookItem {
   bid: string | number;
   book_name: string;
 }
-