123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- <template>
- <div class="page-wrap page-wrap-put-books">
- <tool-bar
- :text="['official_name', 'book_name']"
- :label="['公众号名称', '书名']"
- :defaultVal="defaultToolvalue"
- @confirm="onSearch"
- v-model:loading="inSearching"
- >
- <template #picker>
- <p class="label">日期</p>
- <a-range-picker
- :ranges="rangePick"
- format="YYYY/MM/DD"
- v-model:value="pickered"
- @change="changeTime"
- />
- </template>
- </tool-bar>
- <div class="table-filter">
- <div class="item-right">
- <span class="label">自定义天数</span>
- <a-input-number
- id="inputNumber"
- v-model:value="filterNumber"
- :min="1"
- :max="120"
- />
- </div>
- <a-button type="primary" @click="changeNumber">
- 修改天数
- </a-button>
- </div>
- <a-table
- :columns="columns"
- :data-source="list"
- :pagination="tablePageOptions"
- :scroll="{ x: 1200, y: 600 }"
- @change="handleTableChange"
- bordered
- >
- <template #opertate="{ text, record }">
- <p @click="goPlan(record)"><a>查看广告计划</a></p>
- </template>
- </a-table>
- </div>
- </template>
- <script lang="ts">
- 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,
- } from "../_pageOptions/table-put";
- import { MutationType } from "@/store/modules/app/_type";
- import {
- getDeliveryStatList,
- getDeliveryMoreStatList,
- getDesignList,
- } from "@/api";
- import usePagination from "@/hooks/usePagination";
- import { deliveryPlanItem, PageOptions, moreStatPlanItem } from "@/types/api";
- import useApp from "@/hooks/useApp";
- const PutData = defineComponent({
- components: {
- ToolBar,
- },
- setup() {
- const { router, route,store } = useApp();
- let { loading, meta, tablePageOptions } = usePagination();
- let listed: any = [];
- const state = reactive({
- list: ref<any>([]),
- fields: {},
- drawerlist: ref<moreStatPlanItem[]>([]),
- pickered: computed(() =>
- store.getters.selectTime.length > 0
- ? [moment(store.getters.selectTime[0]),moment(store.getters.selectTime[1])]
- : [moment().subtract(30, "d"), moment()]
- ),
- columns: listed,
- tablePageOptions,
- pickerFilter: [],
- drawercolumns: TableColumnOfMoreStat,
- inSearching: false,
- rangePick: picker,
- defaultToolvalue: {},
- drawerinSearching: false,
- drawermeta: {},
- filterNumber: 7,
- show: false,
- });
- if (route.query && route.query.official_name) {
- state.defaultToolvalue = {
- official_name: route.query.official_name,
- };
- state.fields = {
- 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);
- getDeliveryStatList(data).then((res) => {
- state.list = res.data.list;
- meta.value = res.data.meta;
- });
- };
- const onSearch = async (fields: Record<string, string>) => {
- try {
- const { official_name, book_name } = fields;
- state.fields = fields;
- getList({ page: 1, day_num: state.filterNumber });
- } catch (e) {
- console.log(e);
- } finally {
- console.log(state.inSearching);
- state.inSearching = false;
- }
- };
- const changeNumber = () => {
- getCloums();
- getList({ page: 1, day_num: state.filterNumber });
- };
- const getCloums = () => {
- getDesignList({ day_num: state.filterNumber }).then((res) => {
- let columns: any[] = [];
- let whiteList = ["official_name", "date", "book_name", "cost"];
- res.data.map((item: { desc: string; name: string }) => {
- let lolumnItem: {
- title: string;
- dataIndex: string;
- slots?: any;
- width?: string | number;
- fixed?: string;
- ellipsis?: boolean;
- } = {
- title: item.desc,
- dataIndex: item.name,
- ellipsis: true,
- width: 120,
- };
- if (whiteList.includes(item.name)) {
- lolumnItem.fixed = "left";
- }
- columns.push(lolumnItem);
- });
- let column = {
- title: "操作",
- dataIndex: "operte",
- ellipsis: true,
- width: 120,
- fixed: "right",
- slots: { customRender: "opertate" },
- };
- columns.push(column);
- state.columns = columns;
- });
- };
- const handleTableChange = (pagination: PageOptions) => {
- const { current, pageSize, total } = pagination;
- let data = Object.assign(state.fields, {
- page: current,
- day_num: state.filterNumber,
- });
- getList(data);
- };
- 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 ?? "",
- });
- });
- return {
- ...toRefs(state),
- onSearch,
- meta,
- handleTableChange,
- changeNumber,
- changeTime,
- };
- },
- methods: {
- moment,
- goPlan(record: any) {
- 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 },
- });
- },
- },
- });
- export default PutData;
- </script>
- <style lang="scss">
- .table-filter {
- display: flex;
- justify-content: flex-end;
- padding: 5px 0 15px;
- align-items: center;
- }
- .ant-drawer-content-wrapper {
- width: 80vw !important;
- }
- .item-right {
- margin-right: 10px;
- display: flex;
- align-items: center;
- .ant-select {
- width: 100px;
- }
- .label {
- display: inline-block;
- min-width: 80px;
- }
- }
- .hover-content {
- margin: 8px 0 5px;
- display: flex;
- align-items: center;
- .label {
- padding-right: 15px;
- display: inline-block;
- max-width: 72px;
- width: 72px;
- }
- .ant-switch {
- width: 50px;
- }
- }
- .footer-slot {
- margin-top: 10px;
- button {
- margin-right: 10px;
- }
- }
- </style>
|