Bläddra i källkod

✨ feat(app): 筛选条件新增投放人

晓晓晓晓丶vv 4 år sedan
förälder
incheckning
573a077b50

+ 16 - 3
src/api/index.ts

@@ -21,6 +21,7 @@ import {
   FinanceData,
   AdGroupData,
   AdgroupList,
+  IUserAdmin
 } from "@/types/api";
 
 /**
@@ -44,7 +45,7 @@ export const getDeliveryBookList = (
   }> = { page: 1 }
 ): AxiosPromise<IList<IDeliveryBook>> => {
   return axios("/getUserDeliveryBooks", {
-    params: query,
+    params: query
   });
 };
 
@@ -348,6 +349,7 @@ export const getAdgroupList = (
     begin_date: string;
     end_date: string;
     page: number;
+    uids: string;
   }> = { page: 1 }
 ): AxiosPromise<IList<AdGroupData>> => {
   return axios("/ad/adCampaigns", { params: query });
@@ -369,6 +371,7 @@ export const getAdgroupData = (
     page: number;
     begin_date: string;
     end_date: string;
+    uids: string;
   }> = { page: 1 }
 ): AxiosPromise<IList<AdgroupList>> => {
   return axios("/ad/adAdvertisers", { params: query });
@@ -409,6 +412,7 @@ export const ALLadGroupData = (
     end_date: string;
     begin_date: string;
     cost_order: number;
+    uids: string;
   }>
 ) => {
   return axios("/ad/adCampaignSum", { params: query });
@@ -422,6 +426,7 @@ export const ALLAcountGroupData = (
     begin_date: string;
     end_date: string;
     cost_order: number;
+    uids: string;
   }>
 ) => {
   return axios("/ad/adAdvertiserSum", { params: query });
@@ -455,7 +460,15 @@ export const setBackMinimum = (data: {
  */
 export const statusAdChange = (data: {
   advertiser_id: string | number;
-  is_enable: string | number
+  is_enable: string | number;
 }) => {
   return axios("/ad/updateAdvertiserStatus", { params: data });
-};
+};
+
+/**
+ * 获取权限用户列表
+ * @returns
+ */
+export const getAuthorUser = (): AxiosPromise<IUserAdmin> => {
+  return axios("/userInfo");
+};

+ 28 - 0
src/hooks/composable/useAuthUser.ts

@@ -0,0 +1,28 @@
+import { reactive, ref, toRefs, watchEffect } from "vue";
+
+import { IUserItem } from "@/types/api";
+import { getAuthorUser } from "@/api";
+
+const useAuthUser = () => {
+  const state = reactive({
+    is_admin: 0,
+    available_uids: ref<IUserItem[]>([])
+  });
+
+  const initData = async () => {
+    try {
+      const { data } = await getAuthorUser();
+      state.available_uids = data.available_uids;
+      state.is_admin = data.is_admin;
+      console.log(state);
+    } catch (error) {
+      console.log("error happened in get auth user:", error.message);
+    }
+  };
+
+  watchEffect(initData);
+
+  return { ...toRefs(state) };
+};
+
+export default useAuthUser;

+ 13 - 1
src/types/api.d.ts

@@ -383,4 +383,16 @@ export interface GroupDatas {
   avg_click_cost: number;
   avg_show_cost: number;
   ctr: number;
-}
+}
+
+interface IUserAdmin {
+  uid: number;
+  is_admin: number;
+  available_uids: IUserItem[];
+}
+
+interface IUserItem {
+  account: string;
+  nickname: string;
+  id: number;
+}

+ 41 - 15
src/views/put/ad-countdata.vue

@@ -15,6 +15,25 @@
           @change="changeTime"
         />
       </template>
+      <template v-if="!!is_admin">
+        <div class="tool-bar-item">
+          <p class="label">推广员</p>
+          <a-select
+            mode="multiple"
+            v-model:value="uids"
+            placeholder="请选择推广员"
+            style="width: 300px"
+          >
+            <a-select-option
+              v-for="user in available_uids"
+              :key="user.id"
+              :value="user.id"
+            >
+              {{ user.nickname }}
+            </a-select-option>
+          </a-select>
+        </div>
+      </template>
     </tool-bar>
     <template v-if="showTable">
       <a-table
@@ -70,7 +89,7 @@ import {
   toRefs,
   ref,
   onMounted,
-  computed,
+  computed
 } from "vue";
 import { picker } from "@/helper/config/range";
 import ToolBar from "@/components/tool-bar/index.vue";
@@ -83,19 +102,22 @@ import {
   setGroupStatus,
   setGroupDay,
   ALLAcountGroupData,
-  setBackMinimum,
+  setBackMinimum
 } from "@/api";
 import usePagination from "@/hooks/usePagination";
 import EditableCell from "@/components/edit-cell/index.vue";
 import { AdgroupList, PageOptions } from "@/types/api";
+import useAuthUser from "@/hooks/composable/useAuthUser";
 
 const Adgroup = defineComponent({
   components: {
     ToolBar,
-    EditableCell,
+    EditableCell
   },
   setup() {
     let { loading, meta, tablePageOptions } = usePagination();
+    const { is_admin, available_uids } = useAuthUser();
+
     const { router, store } = useApp();
 
     console.log(moment(store.getters.selectTime[0]));
@@ -109,11 +131,12 @@ const Adgroup = defineComponent({
         store.getters.selectTime.length > 0
           ? [
               moment(store.getters.selectTime[0]),
-              moment(store.getters.selectTime[1]),
+              moment(store.getters.selectTime[1])
             ]
           : [moment().subtract(30, "d"), moment()]
       ),
       columns: ref<any[]>([]),
+      uids: ref<number[]>([]),
       fields: {},
       tableLoading: false,
       cost_order: 0,
@@ -121,7 +144,7 @@ const Adgroup = defineComponent({
       convert_cost_order: 0,
       balance_order: 0,
       showTable: false,
-      scrollY: 600,
+      scrollY: 600
     });
 
     const onSearch = (fields: Record<string, string>) => {
@@ -150,13 +173,14 @@ const Adgroup = defineComponent({
             end_date,
             advertiser_id: query?.advertiser_id,
             account_id: query?.account_id,
-            page: query?.current ?? 1,
+            page: query?.current ?? 1
           },
           {
             cost_order: state.cost_order,
             convert_order: state.convert_order,
             convert_cost_order: state.convert_cost_order,
             balance_order: state.balance_order,
+            uids: state.uids.toString()
           }
         );
         const { data } = await getAdgroupData(datas);
@@ -175,8 +199,8 @@ const Adgroup = defineComponent({
                 width: r.width,
                 ellipsis: true,
                 sorter: sortList.includes(r.dataIndex) ? true : false,
-                sortDirections: ["descend", "ascend", false],
-              },
+                sortDirections: ["descend", "ascend", false]
+              }
             ];
           }
           return r;
@@ -219,10 +243,10 @@ const Adgroup = defineComponent({
       if (sorter.columnKey == "balance") {
         setSateSwitch(sorter.order, "balance_order");
       }
-      if(sorter.columnKey == "convert"){
+      if (sorter.columnKey == "convert") {
         setSateSwitch(sorter.order, "convert_order");
       }
-      if(sorter.columnKey == "convert_cost"){
+      if (sorter.columnKey == "convert_cost") {
         setSateSwitch(sorter.order, "convert_cost_order");
       }
       const { current, pageSize, total } = pagination;
@@ -239,12 +263,14 @@ const Adgroup = defineComponent({
     onMounted(getData);
     return {
       ...toRefs(state),
+      is_admin,
+      available_uids,
       loading,
       tablePageOptions,
       onSearch,
       handleTableChange,
       goAdlgroup,
-      changeTime,
+      changeTime
     };
   },
   mounted() {
@@ -261,7 +287,7 @@ const Adgroup = defineComponent({
           advertiser_id: record.advertiser_id,
           budget_mode:
             value == "不限" ? "BUDGET_MODE_INFINITE" : "BUDGET_MODE_DAY",
-          budget: value == "不限" ? "0" : Number(value),
+          budget: value == "不限" ? "0" : Number(value)
         };
         setGroupDay(data).then((res) => {
           this.$message.success("修改成功!");
@@ -269,14 +295,14 @@ const Adgroup = defineComponent({
       } else {
         let data = {
           advertiser_id: record.advertiser_id,
-          back_min_price: value,
+          back_min_price: value
         };
         setBackMinimum(data).then((res) => {
           this.$message.success("修改成功!");
         });
       }
-    },
-  },
+    }
+  }
 });
 
 export default Adgroup;

+ 55 - 22
src/views/put/ad-group.vue

@@ -16,6 +16,25 @@
           @change="changeTime"
         />
       </template>
+      <template v-if="!!is_admin">
+        <div class="tool-bar-item">
+          <p class="label">推广员</p>
+          <a-select
+            mode="multiple"
+            v-model:value="uids"
+            placeholder="请选择推广员"
+            style="width: 300px"
+          >
+            <a-select-option
+              v-for="user in available_uids"
+              :key="user.id"
+              :value="user.id"
+            >
+              {{ user.nickname }}
+            </a-select-option>
+          </a-select>
+        </div>
+      </template>
     </tool-bar>
     <template v-if="showTable">
       <a-table
@@ -50,7 +69,7 @@ import {
   toRefs,
   ref,
   onMounted,
-  computed,
+  computed
 } from "vue";
 import { picker } from "@/helper/config/range";
 import ToolBar from "@/components/tool-bar/index.vue";
@@ -61,13 +80,16 @@ import { getAdgroupList, setGroupStatus, ALLadGroupData } from "@/api";
 import usePagination from "@/hooks/usePagination";
 import { MutationType } from "@/store/modules/app/_type";
 import { AdGroupData, PageOptions, GroupDatas } from "@/types/api";
+import useAuthUser from "@/hooks/composable/useAuthUser";
 
 const Adgroup = defineComponent({
   components: {
-    ToolBar,
+    ToolBar
   },
   setup() {
     let { loading, meta, tablePageOptions } = usePagination();
+    const { is_admin, available_uids } = useAuthUser();
+
     const { router, route, store } = useApp();
 
     const state = reactive({
@@ -77,26 +99,30 @@ const Adgroup = defineComponent({
       list: ref<any[]>([]),
       rangePick: picker,
       cost_order: 0,
-      convert_order:0,
-      convert_cost_order:0,
+      convert_order: 0,
+      convert_cost_order: 0,
       showTable: false,
       scrollY: 600,
       pickered: computed(() =>
         store.getters.selectTime.length > 0
-          ? [moment(store.getters.selectTime[0]),moment(store.getters.selectTime[1])]
+          ? [
+              moment(store.getters.selectTime[0]),
+              moment(store.getters.selectTime[1])
+            ]
           : [moment().subtract(30, "d"), moment()]
       ),
       columns: ref<any[]>([]),
       fields: {},
       tableLoading: false,
       defaultToolvalue: {},
+      uids: ref<number[]>([])
     });
     if (route.query && route.query.advertiser_id) {
       state.defaultToolvalue = {
-        advertiser_id: route.query.advertiser_id as string,
+        advertiser_id: route.query.advertiser_id as string
       };
       state.fields = {
-        advertiser_id: route.query.advertiser_id as string,
+        advertiser_id: route.query.advertiser_id as string
       };
     }
 
@@ -127,9 +153,14 @@ const Adgroup = defineComponent({
             end_date,
             advertiser_id: query?.advertiser_id,
             campaign_id: query?.campaign_id,
-            page: query?.current ?? 1,
+            page: query?.current ?? 1
           },
-          { cost_order: state.cost_order,convert_order:state.convert_order, convert_cost_order:state.convert_cost_order }
+          {
+            cost_order: state.cost_order,
+            convert_order: state.convert_order,
+            convert_cost_order: state.convert_cost_order,
+            uids: state.uids.toString()
+          }
         );
         const { data } = await getAdgroupList(datas);
         const { data: totals } = await ALLadGroupData(datas);
@@ -139,7 +170,7 @@ const Adgroup = defineComponent({
           item.is_enable = !!item.is_enable;
           return item;
         });
-      let sortList = ['cost','convert','convert_cost']
+        let sortList = ["cost", "convert", "convert_cost"];
         let mainCloumn = AdgroupCloumn.map((r) => {
           if (r.dataIndex != "check" && r.dataIndex !== "campaign_name") {
             r.children = [
@@ -148,9 +179,9 @@ const Adgroup = defineComponent({
                 dataIndex: r.dataIndex,
                 width: r.width,
                 sorter: sortList.includes(r.dataIndex) ? true : false,
-                sortDirections: ['descend', 'ascend',false],
-                ellipsis: true,
-              },
+                sortDirections: ["descend", "ascend", false],
+                ellipsis: true
+              }
             ];
           }
           return r;
@@ -191,10 +222,10 @@ const Adgroup = defineComponent({
       if (sorter.columnKey == "cost") {
         setSateSwitch(sorter.order, "cost_order");
       }
-      if(sorter.columnKey == "convert"){
+      if (sorter.columnKey == "convert") {
         setSateSwitch(sorter.order, "convert_order");
       }
-      if(sorter.columnKey == "convert_cost"){
+      if (sorter.columnKey == "convert_cost") {
         setSateSwitch(sorter.order, "convert_cost_order");
       }
       const { current, pageSize, total } = pagination;
@@ -205,7 +236,7 @@ const Adgroup = defineComponent({
     onMounted(() => {
       getData({
         advertiser_id: route.query?.advertiser_id ?? "",
-        current: 1,
+        current: 1
       });
     });
     const goAdlgroup = (id: string, campaign_id: string) => {
@@ -219,23 +250,25 @@ const Adgroup = defineComponent({
       }
       router.push({
         path: "/put/datas/ad-plan",
-        query: { campaign_id, begin_date, end_date },
+        query: { campaign_id, begin_date, end_date }
       });
     };
 
     const changeTime = (monent: any, string: string[]) => {
-      console.log(string)
+      console.log(string);
       store.commit(MutationType.setSelectTime, string);
     };
 
     return {
       ...toRefs(state),
+      is_admin,
+      available_uids,
       loading,
       tablePageOptions,
       onSearch,
       handleTableChange,
       goAdlgroup,
-      changeTime,
+      changeTime
     };
   },
   mounted() {
@@ -249,13 +282,13 @@ const Adgroup = defineComponent({
     switchMethod(record: any) {
       let data = {
         campaign_id: record.campaign_id,
-        status: Number(!record.is_enable) == 1 ? "enable" : "disable",
+        status: Number(!record.is_enable) == 1 ? "enable" : "disable"
       };
       setGroupStatus(data).then((res) => {
         this.$message.success("状态修改成功");
       });
-    },
-  },
+    }
+  }
 });
 
 export default Adgroup;

+ 114 - 61
src/views/put/put-ad-plan.vue

@@ -18,6 +18,25 @@
           >
         </a-select>
       </div>
+      <template v-if="!!is_admin">
+        <div class="tool-bar-item">
+          <p class="label">推广员</p>
+          <a-select
+            mode="multiple"
+            v-model:value="uids"
+            placeholder="请选择推广员"
+            style="width: 300px"
+          >
+            <a-select-option
+              v-for="user in available_uids"
+              :key="user.id"
+              :value="user.id"
+            >
+              {{ user.nickname }}
+            </a-select-option>
+          </a-select>
+        </div>
+      </template>
     </tool-bar>
 
     <div class="table-filter">
@@ -267,8 +286,16 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, reactive, toRefs, ref, unref, onMounted,computed } from "vue";
-import moment,{ Moment } from "moment";
+import {
+  defineComponent,
+  reactive,
+  toRefs,
+  ref,
+  unref,
+  onMounted,
+  computed
+} from "vue";
+import moment, { Moment } from "moment";
 import ToolBar from "@/components/tool-bar/index.vue";
 import PutData from "@/views/put/put-log.vue";
 import CustomCloumn from "@/views/put/component/customClomu.vue";
@@ -283,7 +310,7 @@ import { MutationType } from "@/store/modules/app/_type";
 
 import {
   TableColumnOfPutAdPlan,
-  ALLCloumnList,
+  ALLCloumnList
 } from "../_pageOptions/table-put";
 
 import {
@@ -296,10 +323,11 @@ import {
   getAdBackPlan,
   setBackConfig,
   getAdStatus,
-  getadDataSum,
+  getadDataSum
 } from "@/api";
 
 import { ADPlanItem, PageOptions, PlanBack } from "@/types/api";
+import useAuthUser from "@/hooks/composable/useAuthUser";
 
 const PutAdPlan = defineComponent({
   components: {
@@ -309,12 +337,13 @@ const PutAdPlan = defineComponent({
     PutCount,
     InfoCircleOutlined,
     RegisterDatad,
-    CustomCloumn,
+    CustomCloumn
   },
 
   setup() {
     let { loading, meta, tablePageOptions } = usePagination();
-    const { router, route,store } = useApp();
+    const { is_admin, available_uids } = useAuthUser();
+    const { router, route, store } = useApp();
 
     let list: any[] = [],
       opList: any[] = [],
@@ -331,7 +360,7 @@ const PutAdPlan = defineComponent({
       innerClomuns: ref<any[]>([]),
       lineVisable: false,
       defaultToolvalue: {},
-      tableLoading:false,
+      tableLoading: false,
       scrollY: 600,
       visible: false,
       popconfirmShow: false,
@@ -342,11 +371,14 @@ const PutAdPlan = defineComponent({
       columnShow: false,
       register: {
         ad_lid: 0,
-        back_platform: "",
+        back_platform: ""
       },
       pickerFilter: computed(() =>
         store.getters.selectTime.length > 0
-          ? [moment(store.getters.selectTime[0]),moment(store.getters.selectTime[1])]
+          ? [
+              moment(store.getters.selectTime[0]),
+              moment(store.getters.selectTime[1])
+            ]
           : [moment(), moment()]
       ),
       tablePageOptions,
@@ -356,7 +388,7 @@ const PutAdPlan = defineComponent({
         ids: "",
         begin_date: "",
         end_date: "",
-        field: "",
+        field: ""
       },
 
       currentTbs: 0,
@@ -368,44 +400,51 @@ const PutAdPlan = defineComponent({
           rate: 0,
           condition: "",
           price: 0,
-          float_rate: 0,
-        },
+          float_rate: 0
+        }
       ],
       isInit: false,
       cost_order: 0,
-      convert_order:0,
-      convert_cost_order:0,
+      convert_order: 0,
+      convert_cost_order: 0,
       optionList: opList,
       statsList: stList,
       currentStats: "paid_order_amount",
       defaultColumns: TableColumnOfPutAdPlan,
       fields: {},
       rangePick: picker,
+      uids: ref<number[]>([])
     });
 
-    if (route.query &&( route.query.campaign_id || route.query.channel_id || route.query.book_id)) {
+    if (
+      route.query &&
+      (route.query.campaign_id || route.query.channel_id || route.query.book_id)
+    ) {
       state.defaultToolvalue = {
-        campaign_id: route.query.campaign_id || '',
-        channel_id: route.query.channel_id || '',
-        book_id: route.query.book_id || '',
+        campaign_id: route.query.campaign_id || "",
+        channel_id: route.query.channel_id || "",
+        book_id: route.query.book_id || ""
       };
       state.fields = {
-         campaign_id: route.query.campaign_id || '',
-        channel_id: route.query.channel_id || '',
-        book_id: route.query.book_id || '',
+        campaign_id: route.query.campaign_id || "",
+        channel_id: route.query.channel_id || "",
+        book_id: route.query.book_id || ""
       };
     }
-    if(route.query.channel_id && route.query.book_id){
-      state.currentSelect = ''
+    if (route.query.channel_id && route.query.book_id) {
+      state.currentSelect = "";
     }
     if (route.query && route.query.begin_date && route.query.end_date) {
-      state.pickerFilter =[moment(route.query.begin_date as any), moment(route.query.end_date as any)]
+      state.pickerFilter = [
+        moment(route.query.begin_date as any),
+        moment(route.query.end_date as any)
+      ];
     }
 
     getAddStatus().then((res) => {
       res.data.unshift({
         name: "",
-        desc: "不限",
+        desc: "不限"
       });
       state.optionList = res.data;
     });
@@ -418,7 +457,7 @@ const PutAdPlan = defineComponent({
           ad_id,
           status: state.currentSelect,
           campaign_id,
-          page: 1,
+          page: 1
         };
         getData(data);
       } catch (e) {
@@ -428,7 +467,7 @@ const PutAdPlan = defineComponent({
       }
     };
 
-    const switchDate = (date: any, dateString:any[]) => {
+    const switchDate = (date: any, dateString: any[]) => {
       store.commit(MutationType.setSelectTime, dateString);
       onSearch(state.fields);
     };
@@ -443,11 +482,16 @@ const PutAdPlan = defineComponent({
         {
           page: 1,
           status: "AD_STATUS_DELIVERY_OK",
-          ...state.fields,
+          ...state.fields
         },
         query || {},
         { begin_date, end_date, status: state.currentSelect },
-        { cost_order: state.cost_order,convert_order:state.convert_order, convert_cost_order:state.convert_cost_order }
+        {
+          cost_order: state.cost_order,
+          convert_order: state.convert_order,
+          convert_cost_order: state.convert_cost_order,
+          uids: state.uids.toString()
+        }
       );
       const { data } = await getADPlanlist(datas);
       const { data: taotals } = await getadDataSum(datas);
@@ -456,7 +500,7 @@ const PutAdPlan = defineComponent({
         item.popShow = false;
         return item;
       });
-      let sortList = ['cost','convert','convert_cost']
+      let sortList = ["cost", "convert", "convert_cost"];
       let columns = state.columns.map((r) => {
         if (r.dataIndex === "ad_name") {
           r.children = [
@@ -464,11 +508,11 @@ const PutAdPlan = defineComponent({
               title: "总计",
               dataIndex: "ad_name",
               slots: {
-                customRender: "ad_name",
+                customRender: "ad_name"
               },
               width: r.width,
-              ellipsis: true,
-            },
+              ellipsis: true
+            }
           ];
         }
         if (Object.keys(taotals).includes(r.dataIndex)) {
@@ -479,13 +523,13 @@ const PutAdPlan = defineComponent({
               width: r.width,
               ellipsis: true,
               sorter: sortList.includes(r.dataIndex) ? true : false,
-              sortDirections:['descend', 'ascend',false]
-            },
+              sortDirections: ["descend", "ascend", false]
+            }
           ];
         }
         return r;
       });
-     state.showTable = true;
+      state.showTable = true;
       state.columns = columns;
       state.list = newList;
       meta.value = data.meta;
@@ -503,7 +547,7 @@ const PutAdPlan = defineComponent({
         "ad_name",
         "account_name",
         "ad_id",
-        "delivery_platform",
+        "delivery_platform"
       ];
       let extendList = [
         "campaign_name",
@@ -515,7 +559,7 @@ const PutAdPlan = defineComponent({
         "inventory_type",
         "convert_id",
         "external_actions",
-        "ad_create_time",
+        "ad_create_time"
       ];
       res.data.map(
         (item: { desc: string; name: string; width?: number | string }) => {
@@ -530,8 +574,8 @@ const PutAdPlan = defineComponent({
           } = {
             title: item.desc,
             dataIndex: item.name,
-            width: item.width?item.width : 95,
-            ellipsis: true,
+            width: item.width ? item.width : 95,
+            ellipsis: true
           };
 
           if (item.name == "external_url") {
@@ -564,14 +608,14 @@ const PutAdPlan = defineComponent({
         title: "操作记录",
         dataIndex: "opertate",
         slots: { customRender: "opertate" },
-        width: 100,
+        width: 100
       });
       state.columns.push({
         title: "日志",
         dataIndex: "opertate",
         fixed: "right",
         slots: { customRender: "dayt" },
-        width: 100,
+        width: 100
       });
     });
 
@@ -596,40 +640,49 @@ const PutAdPlan = defineComponent({
       filters: any,
       sorter: any
     ) => {
-
       if (sorter.columnKey == "cost") {
         setSateSwitch(sorter.order, "cost_order");
       }
-      if(sorter.columnKey == "convert"){
+      if (sorter.columnKey == "convert") {
         setSateSwitch(sorter.order, "convert_order");
       }
-      if(sorter.columnKey == "convert_cost"){
+      if (sorter.columnKey == "convert_cost") {
         setSateSwitch(sorter.order, "convert_cost_order");
       }
 
       const { current, pageSize, total } = pagination;
-      getData({ campaign_id: route.query?.campaign_id ?? "",channel_id:route.query?.channel_id ?? "",book_id:route.query?.book_id?? "",page: current });
+      getData({
+        campaign_id: route.query?.campaign_id ?? "",
+        channel_id: route.query?.channel_id ?? "",
+        book_id: route.query?.book_id ?? "",
+        page: current
+      });
     };
 
     onMounted(() => {
-      setTimeout(()=>{
+      setTimeout(() => {
         getData({
-        campaign_id: route.query?.campaign_id ?? "",
-        channel_id:route.query?.channel_id ?? "",
-        book_id:route.query?.book_id ?? "",
-        current: 1,
-      });
-      },200)
-
+          campaign_id: route.query?.campaign_id ?? "",
+          channel_id: route.query?.channel_id ?? "",
+          book_id: route.query?.book_id ?? "",
+          current: 1
+        });
+      }, 200);
     });
 
-    return { ...toRefs(state), handleTableChange, onSearch, switchDate };
+    return {
+      ...toRefs(state),
+      is_admin,
+      available_uids,
+      handleTableChange,
+      onSearch,
+      switchDate
+    };
   },
   mounted() {
     let winHeight =
       document.documentElement.clientHeight || document.body.clientHeight;
     this.scrollY = winHeight - 352;
-
   },
   methods: {
     moment,
@@ -671,7 +724,7 @@ const PutAdPlan = defineComponent({
         rate,
         condition,
         price,
-        float_rate,
+        float_rate
       };
 
       setBackConfig(data).then((res) => {
@@ -712,7 +765,7 @@ const PutAdPlan = defineComponent({
       let ad_id = record.ad_id;
       statusChange({
         ad_id,
-        status: record.enable ? "disable" : "enable",
+        status: record.enable ? "disable" : "enable"
       }).then((res) => {
         this.$message.success("修改广告状态成功!");
       });
@@ -734,7 +787,7 @@ const PutAdPlan = defineComponent({
     getBackData(record: any) {
       getAdBackPlan({
         ad_lid: record.id,
-        back_platform: record.delivery_platform,
+        back_platform: record.delivery_platform
       }).then((res) => {
         let list = res.data.map((r: PlanBack) => {
           r.price = r.extra?.price;
@@ -755,8 +808,8 @@ const PutAdPlan = defineComponent({
       setTimeout(() => {
         location.reload();
       }, 1500);
-    },
-  },
+    }
+  }
 });
 
 export default PutAdPlan;

+ 58 - 20
src/views/put/put-data.vue

@@ -16,6 +16,25 @@
           @change="changeTime"
         />
       </template>
+      <template v-if="!!is_admin">
+        <div class="tool-bar-item">
+          <p class="label">推广员</p>
+          <a-select
+            mode="multiple"
+            v-model:value="uids"
+            placeholder="请选择推广员"
+            style="width: 300px"
+          >
+            <a-select-option
+              v-for="user in available_uids"
+              :key="user.id"
+              :value="user.id"
+            >
+              {{ user.nickname }}
+            </a-select-option>
+          </a-select>
+        </div>
+      </template>
     </tool-bar>
 
     <div class="table-filter">
@@ -49,32 +68,41 @@
 </template>
 
 <script lang="ts">
-import { computed,defineComponent, reactive, toRefs, ref, onMounted } from "vue";
+import {
+  computed,
+  defineComponent,
+  reactive,
+  toRefs,
+  ref,
+  onMounted
+} from "vue";
 import { picker } from "@/helper/config/range";
 import ToolBar from "@/components/tool-bar/index.vue";
 import moment from "moment";
 import router from "@/router";
 import {
   TableColumnOfPutData,
-  TableColumnOfMoreStat,
+  TableColumnOfMoreStat
 } from "../_pageOptions/table-put";
 import { MutationType } from "@/store/modules/app/_type";
 import {
   getDeliveryStatList,
   getDeliveryMoreStatList,
-  getDesignList,
+  getDesignList
 } from "@/api";
 import usePagination from "@/hooks/usePagination";
 
 import { deliveryPlanItem, PageOptions, moreStatPlanItem } from "@/types/api";
 import useApp from "@/hooks/useApp";
+import useAuthUser from "@/hooks/composable/useAuthUser";
 
 const PutData = defineComponent({
   components: {
-    ToolBar,
+    ToolBar
   },
   setup() {
-    const { router, route,store } = useApp();
+    const { router, route, store } = useApp();
+    const { is_admin, available_uids } = useAuthUser();
     let { loading, meta, tablePageOptions } = usePagination();
     let listed: any = [];
     const state = reactive({
@@ -83,7 +111,10 @@ const PutData = defineComponent({
       drawerlist: ref<moreStatPlanItem[]>([]),
       pickered: computed(() =>
         store.getters.selectTime.length > 0
-          ? [moment(store.getters.selectTime[0]),moment(store.getters.selectTime[1])]
+          ? [
+              moment(store.getters.selectTime[0]),
+              moment(store.getters.selectTime[1])
+            ]
           : [moment().subtract(30, "d"), moment()]
       ),
       columns: listed,
@@ -97,20 +128,25 @@ const PutData = defineComponent({
       drawermeta: {},
       filterNumber: 7,
       show: false,
+      uids: ref<number[]>([])
     });
     if (route.query && route.query.official_name) {
       state.defaultToolvalue = {
-        official_name: route.query.official_name,
+        official_name: route.query.official_name
       };
       state.fields = {
-        official_name: route.query.official_name,
+        official_name: route.query.official_name
       };
     }
     const getList = (query: any) => {
       let [begin_dates, end_dates] = state.pickered;
       let start_time = moment(begin_dates).format("YYYY-MM-DD");
       let end_time = moment(end_dates).format("YYYY-MM-DD");
-      let data = Object.assign({ start_time, end_time }, state.fields, query);
+      let data = Object.assign(
+        { start_time, end_time, uids: state.uids.toString() },
+        state.fields,
+        query
+      );
       getDeliveryStatList(data).then((res) => {
         state.list = res.data.list;
         meta.value = res.data.meta;
@@ -150,7 +186,7 @@ const PutData = defineComponent({
             title: item.desc,
             dataIndex: item.name,
             ellipsis: true,
-            width: 120,
+            width: 120
           };
           if (whiteList.includes(item.name)) {
             lolumnItem.fixed = "left";
@@ -164,7 +200,7 @@ const PutData = defineComponent({
           ellipsis: true,
           width: 120,
           fixed: "right",
-          slots: { customRender: "opertate" },
+          slots: { customRender: "opertate" }
         };
         columns.push(column);
         state.columns = columns;
@@ -174,29 +210,31 @@ const PutData = defineComponent({
       const { current, pageSize, total } = pagination;
       let data = Object.assign(state.fields, {
         page: current,
-        day_num: state.filterNumber,
+        day_num: state.filterNumber
       });
       getList(data);
     };
-    const changeTime = (monent:any,string:string[]) => {
-        store.commit(MutationType.setSelectTime, string);
-    }
+    const changeTime = (monent: any, string: string[]) => {
+      store.commit(MutationType.setSelectTime, string);
+    };
 
     onMounted(() => {
       getCloums();
       getList({
         page: 1,
         day_num: state.filterNumber,
-        official_name: route.query?.official_name ?? "",
+        official_name: route.query?.official_name ?? ""
       });
     });
     return {
       ...toRefs(state),
+      is_admin,
+      available_uids,
       onSearch,
       meta,
       handleTableChange,
       changeNumber,
-      changeTime,
+      changeTime
     };
   },
   methods: {
@@ -205,10 +243,10 @@ const PutData = defineComponent({
       const { date, channel_id, book_id } = record;
       router.push({
         path: "/put/datas/ad-plan",
-        query: { channel_id, begin_date: date, end_date: date, book_id },
+        query: { channel_id, begin_date: date, end_date: date, book_id }
       });
-    },
-  },
+    }
+  }
 });
 
 export default PutData;

+ 14 - 14
vue.config.js

@@ -8,28 +8,28 @@ module.exports = {
     // * 接口跨域处理
     proxy: {
       "/api": {
-        target: process.env.PROXY_API_URL,
-        changeOrigin: true,
-      },
+        target: process.env.MAIN_API_URL,
+        changeOrigin: true
+      }
     },
-    disableHostCheck: true,
+    disableHostCheck: true
   },
   css: {
     sourceMap: false,
     loaderOptions: {
       scss: {
-        prependData: `@import "~@/scss/variables.scss";`,
+        prependData: `@import "~@/scss/variables.scss";`
       },
       less: {
         lessOptions: {
           modifyVars: {
             "primary-color": "#39a4ff",
-            "link-color": "#39a4ff",
+            "link-color": "#39a4ff"
           },
-          javascriptEnabled: true,
-        },
-      },
-    },
+          javascriptEnabled: true
+        }
+      }
+    }
   },
   configureWebpack: {
     devtool: "source-map",
@@ -37,11 +37,11 @@ module.exports = {
     optimization: prodConfig.optimization,
     plugins: prodConfig.plugins,
     resolve: {
-      extensions: [".js", ".vue", ".json", ".ts"],
+      extensions: [".js", ".vue", ".json", ".ts"]
     },
     performance: {
-      hints: false,
-    },
+      hints: false
+    }
   },
   chainWebpack: (config) => {
     // * 移除prefetch和preload
@@ -59,5 +59,5 @@ module.exports = {
         return args;
       });
     }
-  },
+  }
 };