Browse Source

新版智能投放-备注

朱鑫波 3 năm trước cách đây
mục cha
commit
72b72b7dad

+ 5 - 0
src/config/router.config.js

@@ -90,6 +90,11 @@ export const constantRouterMap = [
     component: () => import(/* webpackChunkName: "fail" */ '@/views/modules/autoLaunch/material-test/creatMaterialTest')
   },
   {
+    path: '/create-launch',
+    name: 'createLaunch',
+    component: () => import(/* webpackChunkName: "fail" */ '@/views/modules/autoLaunchRevision/createLaunch')
+  },
+  {
     path: '/test',
     component: BlankLayout,
     redirect: '/test/home',

+ 1 - 1
src/permission.js

@@ -11,7 +11,7 @@ import { mapGetters, mapMutations, mapActions } from 'vuex'
 NProgress.configure({ showSpinner: false }) // NProgress Configuration
 
 
-const whiteList = ['/user/login', '/user/register', '/user/register-result', '/user/alteration', '/user/transfer-local', '/errorPage', '/user/new-batch', '/user/lookPreview', 'http://192.168.0.111:8088/jeecg-boot/sys/feishu/url', '/user/FStransfer','/creat-config'] // no redirect whitelist
+const whiteList = ['/user/login', '/user/register', '/user/register-result', '/user/alteration', '/user/transfer-local', '/errorPage', '/user/new-batch', '/user/lookPreview', 'http://192.168.0.111:8088/jeecg-boot/sys/feishu/url', '/user/FStransfer','/creat-config','/create-launch'] // no redirect whitelist
 
 router.beforeEach((to, from, next) => {
   NProgress.start() // start progress bar

+ 838 - 0
src/views/modules/autoLaunchRevision/autoLaunchList.vue

@@ -0,0 +1,838 @@
+<style scoped lang="scss">
+/deep/ .ant-drawer-header {
+    border-bottom: 0px;
+}
+</style>
+<template>
+    <div class="toutiaoBatch">
+        <div class="toolbox-automate-rules-create-content_title">
+            <h3>账户配置信息</h3>
+            <a-button type="primary" @click="goNewConfigInfo(null)" class="goNewConfigInfo">新建配置信息</a-button>
+        </div>
+        <div class="directional-content">
+            <div class="table-page-search-wrapper">
+                <a-form layout="inline" :form="form" hide-required-mark :selfUpdate="true" @submit="search">
+                    <a-row :gutter="24">
+                        <!-- v-decorator="[
+                                        'dateValue',
+                                        { initialValue: [moment().subtract(7, 'days'), moment().subtract(1, 'days')] }
+                                    ]" -->
+                        <a-col :md="10" :sm="10" :xxl="10">
+                            <a-form-item label="账户名称">
+                                <Treeselect
+                                    :appId.sync="accountId"
+                                    :multiple="false"
+                                    request="2,4"
+                                    ref="treeSelect"
+                                    style="width:100%"
+                                />
+                            </a-form-item>
+                        </a-col>
+                        <a-col :md="8" :sm="8" :xxl="6">
+                            <a-form-item label="投放状态">
+                                <a-select v-model="status" placeholder="请选择投放状态" allowClear>
+                                    <a-select-option :value="1">开启</a-select-option>
+                                    <a-select-option :value="0">关闭</a-select-option>
+                                </a-select>
+                            </a-form-item>
+                        </a-col>
+                        <a-col :md="6" :sm="6" :xxl="8" style="display: flex;justify-content: flex-end;">
+                            <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
+                                <a-button type="primary" icon="search" @click="search">查询</a-button>
+                                <a-button  @click="handleResetForm" icon="reload" style="margin-left:10px"
+                                    >重置</a-button
+                                >
+                            </span>
+                        </a-col>
+                    </a-row>
+                </a-form>
+            </div>
+        </div>
+        <!-- <div class="topOptions">
+            <div></div>
+            <span class="optionBtn">
+                <a-button type="primary" @click="search" class="searchBtn">查询</a-button>
+            </span>
+        </div> -->
+        <div class="tableArea">
+            <!-- <div class="tableOption" v-if="selectedRowKeys.length">
+                
+                
+               :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
+            </div> -->
+            <div class="table">
+                <a-table
+                    :columns="columns"
+                    :data-source="data"
+                    bordered
+                    :pagination="ipagination"
+                    :loading="loading"
+                    @change="sort"
+                >
+                    <span slot="status" slot-scope="text, record">
+                        <a-spin :spinning="record.spin" size="small">
+                            <div class="spin-content">
+                                <a-switch size="default" :checked="text == 1" @change="switchChange(text, record)" />
+                            </div>
+                        </a-spin>
+                    </span>
+                    <span slot="openProgramCreate" slot-scope="text, record">
+                        <a-spin :spinning="record.openProgramCreateSpin" size="small">
+                            <div class="spin-content">
+                                <a-switch
+                                    size="default"
+                                    :checked="text == 1"
+                                    @change="openProgramCreateSwitchChange(text, record)"
+                                />
+                            </div>
+                        </a-spin>
+                    </span>
+                    <span slot="cpaType" slot-scope="text, record">
+                        {{
+                            ('' + record.cpaBid).includes('/')
+                                ? '阶梯出价'
+                                : ('' + record.cpaBid).includes('-')
+                                ? '随机出价'
+                                : '统一出价'
+                        }}
+                    </span>
+                    <div slot="cpaBid" slot-scope="text, record">
+                        <!-- {{
+                          text==0?record.roiRatio:
+                          text.includes('/')? text.split 
+                        }} -->
+                        <span v-if="text === 0">{{ record.roiRatio }}</span>
+                        <span v-else-if="('' + text).includes('/')">
+                            <!-- {{text.split('/')}} -->
+                            <span v-for="(item, index) in ('' + text).split('/')">
+                                {{ item / 1000 + (index === ('' + text).split('/').length - 1 ? '' : '/') }}
+                            </span>
+                        </span>
+                        <span v-else-if="('' + text).includes('-')">
+                            <!-- {{text.split('/')}} -->
+                            <span v-for="(item, index) in ('' + text).split('-')">
+                                {{ item / 1000 + (index === ('' + text).split('-').length - 1 ? '' : '-') }}
+                            </span>
+                        </span>
+                        <span v-else>{{ text / 1000 }}</span>
+                    </div>
+                    <span slot="ocpxActionType" slot-scope="text">
+                        {{ text | ocpxActionType }}
+                    </span>
+                    <span slot="authName" slot-scope="text">
+                        <!-- <a href="javascript:;" >{{text}}</a> -->
+                        {{ text || '-' }}
+                    </span>
+                    <span slot="time" slot-scope="text, record"> {{ record.startTime }}至{{ record.endTime }} </span>
+                    <span slot="operator" slot-scope="text, record">
+                        <a href="javascript:;" @click="goPlanList(record)">编辑</a>
+                        <a-divider type="vertical" />
+                        <!-- <a href="javascript:;"  @click="deleteRecord(record)">删除</a>
+                        <a-divider type="vertical" /> -->
+                        <a-popover
+                            v-model="record.visible"
+                            trigger="click"
+                            placement="topLeft"
+                            @visibleChange="visibleChange"
+                        >
+                            <span slot="title">出价</span>
+                            <template slot="content" style="width:300px;">
+                                <div style="margin:5px 0 0">
+                                    <span
+                                        ><a-input-number
+                                            :min="0"
+                                            v-model="newBid"
+                                            :step="0.1"
+                                            placeholder="请输入出价"
+                                            size="small"
+                                            style="margin-right:20px;width:120px"
+                                    /></span>
+                                    <p style="color:red;font-size:12px;height:16px;padding:5px 0">
+                                        {{ bidErrorMessage }}
+                                    </p>
+                                </div>
+
+                                <div>
+                                    <a-button
+                                        type="default"
+                                        @click="bidChangeCancel(record)"
+                                        size="small"
+                                        style="margin-right:10px"
+                                        >取消</a-button
+                                    >
+                                    <a-button type="primary" @click="bidChangeOk(record)" size="small" class="ok"
+                                        >修改</a-button
+                                    >
+                                </div>
+                            </template>
+                            <a
+                                href="javascript:;"
+                                type="primary"
+                                @click="
+                                    () => {
+                                        record.visible = true
+                                    }
+                                "
+                                >修改出价</a
+                            >
+                        </a-popover>
+
+                        <!-- <a-divider type="vertical" />
+                        -->
+                        <a-divider type="vertical" />
+
+                        <a-dropdown>
+                            <a class="ant-dropdown-link" @click="e => e.preventDefault()">
+                                更多
+                            </a>
+                            <a-menu slot="overlay">
+                                <a-menu-item>
+                                    <a @click="goExplore(record)">加速探索</a>
+                                </a-menu-item>
+                                <a-menu-item>
+                                    <a-popover
+                                        v-model="record.show"
+                                        trigger="click"
+                                        placement="topRight"
+                                        @visibleChange="visibleChange"
+                                    >
+                                        <div slot="content">
+                                            <span style="font-weight:700;margin-right:15px;font-size:15px"
+                                                >修改后重提</span
+                                            >
+                                            <a-radio-group v-model="examineAgainType">
+                                                <a-radio :value="1">修改广告语</a-radio>
+                                                <a-radio :value="0">修改封面</a-radio>
+                                            </a-radio-group>
+                                            <a-button
+                                                type="default"
+                                                @click="examineAgainCancel(record)"
+                                                size="small"
+                                                style="margin-right:10px"
+                                                >取消</a-button
+                                            >
+                                            <a-button
+                                                type="primary"
+                                                @click="examineAgainOk(record)"
+                                                size="small"
+                                                class="ok"
+                                                >重提</a-button
+                                            >
+                                        </div>
+                                        <a
+                                            href="javascript:;"
+                                            type="primary"
+                                            @click="
+                                                () => {
+                                                    record.show = true
+                                                }
+                                            "
+                                            >一键重提</a
+                                        >
+                                    </a-popover>
+                                </a-menu-item>
+                                <a-menu-item>
+                                    <a href="javascript:;" @click="deleteRecord(record)">删除</a>
+                                </a-menu-item>
+                            </a-menu>
+                        </a-dropdown>
+                    </span>
+                    <!-- <span slot="action" slot-scope="text,record">
+                        <a  @click="goExplore(record)">加速探索</a>
+                    </span> -->
+                </a-table>
+            </div>
+        </div>
+        <configLaunchExploreDrawer
+            :exploreVisible.sync="exploreVisible"
+            :exploreKey.sync="exploreKey"
+            ref="exploreDrawer"
+        />
+    </div>
+</template>
+
+<script>
+import moment from 'moment'
+import { getAction, postAction, downFile, downFilePost, deleteAction } from '@/api/manage'
+// import { JeecgListMixin } from '@/mixins/ipagination'
+// import editableCell from './editableCell'
+import Treeselect from '@/views/modules/Statistics/components/Treeselect.vue'
+import configLaunchExploreDrawer from './components/configLaunchExploreDrawer.vue'
+import qs from 'qs'
+import { mapActions, mapGetters } from 'vuex'
+let typeValue = '预算'
+
+const strategyColumns = [
+    {
+        title: '开关',
+        dataIndex: 'status',
+        key: 'status',
+        align: 'center',
+        scopedSlots: { customRender: 'status' },
+        width: 110
+    },
+    {
+        title: '所属账户名称',
+        dataIndex: 'authName',
+        key: 'authName',
+        align: 'center',
+        scopedSlots: { customRender: 'authName' },
+        width: 200
+    },
+    {
+        title: '所属账户ID',
+        dataIndex: 'accountId',
+        key: 'accountId',
+        align: 'center',
+        scopedSlots: { customRender: 'accountId' }
+    },
+
+    {
+        title: '创建时间',
+        dataIndex: 'createTime',
+        key: 'createTime',
+        align: 'center',
+        scopedSlots: { customRender: 'createTime' }
+    },
+    {
+        title: '转化目标',
+        dataIndex: 'ocpxActionType',
+        align: 'center',
+        scopedSlots: { customRender: 'ocpxActionType' }
+        // sorter:() => {}
+    },
+    {
+        title: '出价类型',
+        dataIndex: 'cpaType',
+        align: 'center',
+        scopedSlots: { customRender: 'cpaType' }
+        // sorter:() => {}
+    },
+    {
+        title: '出价',
+        dataIndex: 'cpaBid',
+        align: 'center',
+        scopedSlots: { customRender: 'cpaBid' }
+        // sorter:() => {}
+    },
+    //   {
+    //         title: '是否开启程序化创建',
+    //         dataIndex: 'openProgramCreate',
+    //         align: 'center',
+    //         scopedSlots: { customRender: 'openProgramCreate' },
+    //         sorter:() => {},
+    //         width:180,
+    //     },
+    {
+        title: '操作',
+        dataIndex: 'operator',
+        key: 'operator',
+        align: 'center',
+        scopedSlots: { customRender: 'operator' }
+    }
+    //   {
+    //     title: '探索工具',
+    //     dataIndex: 'action',
+    //     key: 'action',
+    //     align: 'center',
+    //     scopedSlots: { customRender: 'action' },
+    //     fixed:'right',
+    //     width:150,
+
+    //   },
+]
+
+const publicColumns = []
+
+export default {
+    name: 'strategy-list',
+    components: {
+        // editableCell,
+        Treeselect,
+        configLaunchExploreDrawer
+    },
+    // mixins: [JeecgListMixin],
+    data() {
+        return {
+            form: this.$form.createForm(this),
+            exploreAccountId: '',
+            exploreVisible: false,
+            exploreKey: '',
+            targetVisible: false,
+            selectedRecord: {},
+            bidErrorMessage: '',
+            examineAgainType: 1,
+            newBid: undefined,
+            examineAgain: false,
+            accountId: [],
+            status: undefined,
+            accountList: [],
+            strategyState: undefined,
+            strategyName: '',
+            strategyId: undefined,
+            scrollX: 1400,
+            ipagination: {
+                current: 1,
+                pageSize: 10,
+                //   pageSizeOptions: ['10', '20', '30'],
+                showTotal: (total, range) => {
+                    return range[0] + '-' + range[1] + ' 共' + total + '条'
+                },
+                showQuickJumper: true,
+                showSizeChanger: true,
+                pageSizeOptions: ['10', '30', '50'],
+                total: 0,
+                onChange: (current, pageSize) => {
+                    // 切换分页时的回调,
+                    // 当在页面定义change事件时,切记要把此处的事件清除,因为这两个事件重叠了,可能到时候会导致一些莫名的bug
+                    this.ipagination.current = current
+                    this.ipagination.pageSize = pageSize
+                }
+            },
+
+            spinning: false,
+            moment,
+
+            optionId: '', //input输入的id或关键词
+
+            selectDisable: true,
+            optValue: undefined, //操作设置的值 删除 暂停 开启
+            visible: false, //出价里的弹出框
+
+            //主页的表格
+            data: [],
+            columns: [...strategyColumns, ...publicColumns],
+            selectedRowKeys: [],
+
+            loading: false,
+            editID: 0,
+
+            url: {
+                list: '/auto/aiKuaishouAccountAutoStrategy/list',
+                delete: '/auto/aiKuaishouAccountAutoStrategy/delete'
+            },
+
+            xiugaiData: [] //存分别修改时候的数组
+        }
+    },
+    computed: {
+        hasSelected() {
+            return this.selectedRowKeys.length > 0
+        }
+    },
+    methods: {
+        ...mapGetters(['userInfo']),
+        goExplore(item) {
+            this.exploreVisible = true
+            this.exploreKey = '1'
+            this.exploreAccountId = item.accountId
+            this.$refs.exploreDrawer.getData(item.accountId)
+        },
+        //状态改变
+        switchChange(text, record) {
+            // this.spinning=true;
+            console.log(text, record)
+            record.spin = true
+
+            let status = text == 1 ? 0 : 1
+            getAction(`/ctop/aiKuaishouAdvertiserStrategy/oprateStatus`, {
+                id: record.id,
+                status
+            }).then(res => {
+                record.spin = false
+                if (res.success) {
+                    this.getStrategyList()
+                    this.$message.success(res.message)
+                } else {
+                    this.$message.error(res.message)
+                }
+            })
+        },
+        //是否开启程序化创意状态改变
+        openProgramCreateSwitchChange(text, record) {
+            // this.spinning=true;
+            console.log(text, record)
+            record.openProgramCreateSpin = true
+
+            let status = text == 1 ? 0 : 1
+            getAction(`/ctop/aiKuaishouAdvertiserStrategy/oprateCreativeStatus`, {
+                id: record.id,
+                status
+            }).then(res => {
+                record.openProgramCreateSpin = false
+                if (res.success) {
+                    this.getStrategyList()
+                    this.$message.success(res.message)
+                } else {
+                    this.$message.error(res.message)
+                }
+            })
+        },
+        examineAgainMethod(record) {
+            console.log(record)
+            this.examineAgain = true
+            this.selectedRecord = record
+        },
+        visibleChange() {
+            this.bidErrorMessage = ''
+            this.examineAgainType = 1
+            this.newBid = undefined
+        },
+        bidChangeCancel(record) {
+            record.visible = false
+            this.newBid = undefined
+            this.bidErrorMessage = ''
+        },
+        bidChangeOk(record) {
+            if (this.newBid) {
+                record.visible = false
+                postAction('/ai/batchUpdate/updateGroupBid', {
+                    accountId: record.accountId,
+                    bid: this.newBid * 1000
+                }).then(res => {
+                    console.log(res)
+                    if (res.code == 0) {
+                        this.$message.success(res.message)
+                        this.newBid = undefined
+                        this.getStrategyList()
+                    }
+                })
+            } else {
+                this.bidErrorMessage = '请正确填写出价'
+                // this.$message.error('请正确填写出价')
+            }
+        },
+
+        examineAgainCancel(record) {
+            record.show = false
+            this.examineAgainType = 1
+        },
+        examineAgainOk(record) {
+            record.show = false
+            postAction('/kuaishou/creative/again', {
+                accountId: record.accountId,
+                updateType: this.examineAgainType
+            }).then(res => {
+                console.log(res)
+                if (res.code == 0) {
+                    this.$message.success('正在重提中,您可稍后查看结果')
+                } else {
+                    this.$message.success(res.message)
+                }
+                this.examineAgainType = 1
+            })
+        },
+        onSelectChange(selectedRowKeys) {
+            console.log('selectedRowKeys changed: ', selectedRowKeys)
+            this.selectedRowKeys = selectedRowKeys
+        },
+        goNewConfigInfo(id) {
+            // this.$router.push('/autoLaunch/configLaunchInfo')
+            
+            if (id) {
+                window.open('/create-launch?id=' + id, '_blank')
+            } else {
+                window.open('/create-launch', '_blank')
+            }
+        },
+        goPlanList(record) {
+            console.log(record)
+            this.$parent.currentStrategyId = record.id
+            this.$router.push(`/autoLaunch/configLaunchInfo?id=${record.id}`)
+        },
+        deleteRecord(record) {
+            let that = this
+            this.$confirm({
+                title: '删除提示',
+                content: '是否删除该账户配置信息?',
+                onOk() {
+                    that.loading = true
+                    getAction(that.url.delete, {
+                        id: record.id
+                    }).then(res => {
+                        that.loading = false
+                        if (res.success) {
+                            that.$message.success(res.message)
+                            that.getStrategyList()
+                        } else {
+                            that.$message.success(res.message)
+                        }
+                    })
+                }
+            })
+        },
+        filterOption(input, option) {
+            return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+        },
+
+        //查询按钮事件
+        search() {
+            this.ipagination.current = 1
+            this.getStrategyList()
+        },
+        handleResetForm(){
+            this.accountId = ''
+            this.status = null
+            this.ipagination.current = 1
+            this.getStrategyList()
+        },
+        //点击分页
+        sort(pagination, filters, sorter, { currentDataSource }) {
+            console.log(pagination)
+            this.ipagination.current = pagination.current
+
+            this.ipagination.pageSize = pagination.pageSize
+            this.getStrategyList()
+        },
+
+        getStrategyList() {
+            this.loading = true
+            getAction(this.url.list, {
+                strategyId: this.strategyId == undefined ? null : this.strategyId,
+
+                accountId: this.accountId,
+                pageNo: this.ipagination.current,
+                pageSize: this.ipagination.pageSize,
+                userId: this.userInfo().id,
+                status: this.status
+            }).then(res => {
+                this.data = []
+                console.log(res)
+                this.loading = false
+                if (res.success) {
+                    this.ipagination.total = res.result.total
+
+                    res.result.list.forEach(item => {
+                        item.key = item.id
+                        item.show = false
+                        item.visible = false
+                        item.spin = false
+                        item.openProgramCreateSpin = false
+                    })
+
+                    this.data = res.result.list
+                    this.selectedRowKeys = []
+                }
+            })
+        }
+    },
+    mounted() {
+        this.getStrategyList()
+    },
+
+    activated() {
+        this.getStrategyList()
+    },
+    beforeDestroy() {},
+    filters: {
+        toPercentage(val) {
+            if (val) {
+                if (typeof val != 'string') {
+                    return (val * 100).toFixed(2) + '%'
+                } else {
+                    return val
+                }
+            } else if (typeof val == 'string') {
+                return val
+            } else {
+                return 0
+            }
+        },
+        //保留两位小数并且变成货币格式
+        decimalsHandle(val) {
+            if (val && typeof val != 'string') {
+                if (val >= 0) {
+                    val = parseFloat(val).toFixed(2)
+                    let numberStr = val.toString()
+                    let str = numberStr.split('.')
+
+                    let str0 = str[0].split('').reverse()
+                    for (let i = 0; i < str0.length; i++) {
+                        if ((i + 1) % 4 === 0) {
+                            str0.splice(i, 0, ',')
+                        }
+                    }
+                    str0.reverse()
+                    let handleResult = ''
+                    for (let j = 0; j < str0.length; j++) {
+                        handleResult += str0[j]
+                    }
+
+                    return handleResult + '.' + str[1]
+                } else {
+                    val = parseFloat(val).toFixed(2)
+                    let numberStr = val.toString()
+                    let str = numberStr.split('.')
+
+                    let str0 = str[0]
+                        .substr(1)
+                        .split('')
+                        .reverse()
+                    for (let i = 0; i < str0.length; i++) {
+                        if ((i + 1) % 4 === 0) {
+                            str0.splice(i, 0, ',')
+                        }
+                    }
+                    str0.reverse()
+                    let handleResult = ''
+                    for (let j = 0; j < str0.length; j++) {
+                        handleResult += str0[j]
+                    }
+
+                    return '-' + handleResult + '.' + str[1]
+                }
+            } else if (typeof val == 'string') {
+                return val
+            } else {
+                return 0
+            }
+        },
+        //变成货币格式
+        formatCurrency(val) {
+            if ((val || val == 0) && typeof val != 'string') {
+                let numberStr = val.toString()
+                let str = numberStr.split('').reverse()
+                for (let i = 0; i < str.length; i++) {
+                    if ((i + 1) % 4 === 0) {
+                        str.splice(i, 0, ',')
+                    }
+                }
+                str.reverse()
+                let handleResult = ''
+                for (let j = 0; j < str.length; j++) {
+                    handleResult += str[j]
+                }
+                return handleResult
+            } else if (typeof val == 'string') {
+                return val
+            } else {
+                return '-'
+            }
+        }
+    }
+}
+</script>
+<style lang="scss">
+#closeIcon {
+    color: #0e74d2;
+}
+.toutiaoBatch {
+    .ant-tag .anticon-close {
+        color: #1890ff;
+    }
+    .ant-tag .anticon-close:hover {
+        color: rgba(0, 0, 0, 0.85);
+    }
+}
+
+#batchModal {
+    .rules,
+    .totalPrice {
+        font-weight: 600;
+    }
+
+    .selectePlan {
+        font-size: 14px;
+        font-weight: 700;
+        color: #333;
+        padding: 20px 0;
+    }
+    .totalPrice {
+        margin-left: 20px;
+    }
+    .modifyTable {
+        margin-top: 20px;
+        width: 100%;
+        height: 400px;
+        overflow: auto;
+        font-weight: 600;
+    }
+}
+#copyModal {
+    .ant-modal-header {
+        text-align: center;
+    }
+    .copyTip {
+        font-size: 12px;
+        color: #999;
+    }
+    .copyName {
+        width: 118px;
+        display: inline-block;
+        text-align: right;
+        .copyKeyStart {
+            color: red;
+        }
+    }
+    // font-weight: 600;
+}
+</style>
+<style lang="scss" scoped>
+.toutiaoBatch {
+    .breadcrumb {
+        height: 22px;
+        font-size: 12px;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #000000;
+        line-height: 22px;
+    }
+    background-color: #fff;
+    padding: 10px 20px;
+    position: relative;
+    width: 100%;
+    .OptinItem {
+        display: inline-block;
+        margin-right: 15px;
+        margin-top: 15px;
+        .ok {
+            margin-right: 15px;
+        }
+    }
+    .OptinItem:first-child {
+        margin-right: 10px;
+    }
+    .topOptions {
+        padding: 15px 0;
+        display: flex;
+        justify-content: space-between;
+        .topOpt {
+            width: 100%;
+            margin-bottom: 10px;
+        }
+    }
+    .optionBtn {
+        // display: inline-block;
+        float: right;
+        // .searchBtn{
+        // margin-right: 10px;
+        // }
+    }
+    .tableArea {
+        .tableOption {
+            padding: 20px 0;
+        }
+    }
+    .toolbox-automate-rules-create-content_title {
+        background-color: #fff;
+        display: flex;
+        flex-flow: row nowrap;
+        justify-content: flex-start;
+        align-items: center;
+        margin-bottom: 28px;
+        position: relative;
+        h3 {
+            font-size: 22px;
+            margin: 0;
+            font-weight: 400;
+            height: 30px;
+            line-height: 30px;
+        }
+        .goNewConfigInfo {
+            position: absolute;
+            right: 0;
+            top: 4px;
+        }
+    }
+}
+</style>

+ 633 - 0
src/views/modules/autoLaunchRevision/components/configLaunchExploreDrawer.vue

@@ -0,0 +1,633 @@
+<style scoped lang="scss">
+/deep/ .ant-drawer-header {
+    border-bottom: 0px;
+    padding: 0;
+}
+/deep/.ant-drawer-body {
+    padding-top: 0;
+}
+/deep/.ant-tooltip-inner {
+    color: #fff !important;
+    background-color: rgba(0, 0, 0, 0.75) !important;
+}
+/deep/.ant-tooltip-arrow::before {
+    color: #fff !important;
+    background-color: rgba(0, 0, 0, 0.75) !important;
+}
+</style>
+<template>
+    <a-drawer width="50%" :visible="exploreVisible" @close="closeDrawer" id="explore">
+        <a-tabs v-model="exploreKey" slot="title">
+            <a-tab-pane key="1" tab="加速探索"> </a-tab-pane>
+            <a-tab-pane key="2" tab="辅助探索" disabled> </a-tab-pane>
+        </a-tabs>
+        <div v-if="exploreKey == '1'" style="padding-bottom:30px">
+            <a-tabs v-model="exploreHistory" @change="checkTab">
+                <a-tab-pane key="1" tab="批量加速探索"> </a-tab-pane>
+                <a-tab-pane key="2" tab="加速探索历史"> </a-tab-pane>
+            </a-tabs>
+            <div v-if="exploreHistory == '1'">
+                <a-form :form="form">
+                    <p style="font-size:16px">
+                        加速探索开启后预算会在6小时内消耗完成,给单元提供更多的曝光机会,使系统对当前单元的判断更加精准,加速探索不一定能使单元探索成功。
+                    </p>
+                    <p style="font-size:16px">
+                        当前预算:<span v-if="nowBudget == 0" style="font-weight:700"> 不限 </span
+                        ><span v-else style="font-weight:700">{{ nowBudget | decimalsHandle }}</span>
+                    </p>
+                    <p style="font-size:16px;">
+                        探索预算
+                        <a-tooltip>
+                            <template slot="title">
+                                注意:此处的预算为单组预算,总预算为:选择广告组数*单组预算 ,总预算不能超过当前账户预算
+                            </template>
+                            <a-icon type="question-circle" /> </a-tooltip
+                        >:
+                        <a-form-item style="display:inline-block;position:relative;top:-5px;margin-bottom:0">
+                            <a-input-number
+                                style="width:200px"
+                                v-decorator="[
+                                    'exploreDudget',
+                                    { rules: [{ required: true, message: '您还未设置加速探索预算,请先设置预算。' }] }
+                                ]"
+                                :min="100"
+                                :max="nowBudget == 0 ? 99999999999999 : nowBudget"
+                                :step="0.01"
+                            />
+                            <span style="margin: 0 10px" v-if="getFormData('exploreDudget')">
+                                可选:{{
+                                    nowBudget == 0 ? '不限' : Math.floor(nowBudget / getFormData('exploreDudget'))
+                                }}
+                            </span>
+                            <span style="margin: 0 10px"> 已选:{{ selectedRowKeys.length }} </span>
+                        </a-form-item>
+                    </p>
+                    <p>
+                        批量选择需要使用探索工具的广告组
+                        <a style="margin-left:15px" @click="allOpen">一键全部开启</a>
+                    </p>
+                </a-form>
+            </div>
+            <div v-else>
+                <a-form layout="inline" :form="formSearch" hide-required-mark :selfUpdate="true">
+                    <a-row :gutter="24" style="margin-bottom:15px">
+                        <a-col :md="8" :sm="8" :xxl="8">
+                            <a-form-item label="广告组ID">
+                                <a-input allow-clear v-decorator="['unitId']" type="text" placeholder="请输入需要搜索的广告组ID" />
+                            </a-form-item>
+                        </a-col>
+                        <!--  -->
+                        <a-col :md="8" :sm="8" :xxl="8">
+                            <a-form-item label="广告组名称" style="    display: flex;">
+                                <a-input
+                                    allow-clear
+                                    v-decorator="['unitName']"
+                                    type="text"
+                                    placeholder="请输入需要搜索的广告组名称"
+
+                                />
+                            </a-form-item>
+                        </a-col>
+                        <a-col :md="8" :sm="8" :xxl="8">
+                            <a-form-item label="状态">
+                                <a-select
+                                    v-decorator="['exploreStatus', { initialValue: 'null' }]"
+                                    placeholder="请选择"
+                                    style="width:200px"
+                                    allow-clear
+                                >
+                                    <a-select-option key="null">
+                                        全选
+                                    </a-select-option>
+                                    <a-select-option :key="1">
+                                        加速探索
+                                    </a-select-option>
+                                    <a-select-option :key="2">
+                                        加速探索手动暂停
+                                    </a-select-option>
+                                    <a-select-option :key="3">
+                                        探索金额完成
+                                    </a-select-option>
+                                    <a-select-option :key="4">
+                                        时间到达截止时间
+                                    </a-select-option>
+                                </a-select>
+                            </a-form-item>
+                        </a-col>
+                    </a-row>
+                    <a-row :gutter="24">
+                        <a-col :md="16" :sm="16" :xxl="16">
+                            <a-form-item label="时间维度">
+                                <a-radio-group v-decorator="['timeRange', { initialValue: 'lastWeek' }]">
+                                    <a-radio-button value="today">
+                                        今天
+                                    </a-radio-button>
+                                    <a-radio-button value="yesterday">
+                                        昨天
+                                    </a-radio-button>
+                                    <a-radio-button value="lastWeek">
+                                        最近七天
+                                    </a-radio-button>
+                                    <a-radio-button value="lastMonth">
+                                        最近一月
+                                    </a-radio-button>
+                                </a-radio-group>
+                            </a-form-item>
+                        </a-col>
+                        <a-col :md="8" :sm="8" :xxl="8">
+                            <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
+                                <a-button type="primary" icon="search" @click="handleQueryList">查询</a-button>
+                                <a-button type="primary" @click="handleResetForm" icon="reload" style="margin-left:10px"
+                                    >重置</a-button
+                                >
+                            </span>
+                        </a-col>
+                    </a-row>
+                </a-form>
+            </div>
+            <!-- :scroll="{ x: scrollX }" -->
+            <div class="table">
+                <a-table
+                    :columns="exploreColumns"
+                    :data-source="exploreList"
+                    bordered
+                    :pagination="ipagination"
+                    :loading="loading"
+                    :scroll="{ x: changeNum }"
+                    :rowSelection="
+                        exploreHistory == '1' ? { selectedRowKeys: selectedRowKeys, onChange: onSelectChange } : null
+                    "
+                    @change="sort"
+                    rowKey="unit_id"
+                >
+                    <span slot="ocpxActionType" slot-scope="text, record">
+                        {{ text | ocpxActionType }}
+                    </span>
+                </a-table>
+            </div>
+        </div>
+        <div v-else></div>
+        <div
+            v-if="exploreHistory == '1'"
+            :style="{
+                position: 'absolute',
+                right: 0,
+                bottom: 0,
+                width: '100%',
+                borderTop: '1px solid #e9e9e9',
+                padding: '10px 16px',
+                background: '#fff',
+                textAlign: 'right',
+                zIndex: 1
+            }"
+        >
+            <a-button :style="{ marginRight: '8px' }" @click="closeDrawer">
+                取消
+            </a-button>
+            <a-button type="primary" @click="batchOpen" :disabled="selectedRowKeys.length == 0">
+                批量开启
+            </a-button>
+        </div>
+    </a-drawer>
+</template>
+
+<script>
+import moment from 'moment'
+import { getAction, postAction, downFile, downFilePost, deleteAction } from '@/api/manage'
+import qs from 'qs'
+let typeValue = '预算'
+const exploreColumns = [
+    {
+        title: '组名称',
+        dataIndex: 'unit_name',
+        key: 'unit_name',
+        align: 'center',
+        scopedSlots: { customRender: 'unit_name' },
+        width: 200,
+        fixed: 'left'
+    },
+    {
+        title: '消耗',
+        dataIndex: 'charge',
+        key: 'charge',
+        align: 'center',
+        scopedSlots: { customRender: 'charge' },
+        sorter: () => {}
+    },
+    {
+        title: '激活数',
+        dataIndex: 'activation',
+        key: 'activation',
+        align: 'center',
+        scopedSlots: { customRender: 'activation' },
+        sorter: () => {}
+    },
+    {
+        title: '激活成本',
+        dataIndex: 'activationCost',
+        key: 'activationCost',
+        align: 'center',
+        scopedSlots: { customRender: 'activationCost' },
+        sorter: () => {}
+    },
+    {
+        title: '新增付费人数',
+        dataIndex: 'eventPay',
+        key: 'eventPay',
+        align: 'center',
+        scopedSlots: { customRender: 'eventPay' },
+        sorter: () => {}
+    },
+    {
+        title: '新增付费人数成本',
+        dataIndex: 'eventPayCost',
+        key: 'eventPayCost',
+        align: 'center',
+        scopedSlots: { customRender: 'eventPayCost' },
+        sorter: () => {}
+    },
+    {
+        title: '注册数',
+        dataIndex: 'eventRegister',
+        key: 'eventRegister',
+        align: 'center',
+        scopedSlots: { customRender: 'eventRegister' },
+        sorter: () => {}
+    },
+    {
+        title: '注册成本',
+        dataIndex: 'eventRegisterCost',
+        key: 'eventRegisterCost',
+        align: 'center',
+        scopedSlots: { customRender: 'eventRegisterCost' },
+        sorter: () => {}
+    },
+    {
+        title: '曝光数',
+        dataIndex: 'aclick',
+        key: 'aclick',
+        align: 'center',
+        scopedSlots: { customRender: 'aclick' },
+        sorter: () => {}
+    }
+]
+const exploreHistoryColumns = [
+    {
+        title: '广告组ID',
+        dataIndex: 'unitId',
+        key: 'unitId',
+        align: 'center',
+        scopedSlots: { customRender: 'unitId' },
+        fixed: 'left',
+        width: 120
+    },
+    {
+        title: '组名称',
+        dataIndex: 'unitName',
+        key: 'unitName',
+        align: 'center',
+        scopedSlots: { customRender: 'unitName' },
+        fixed: 'left',
+        width: 200
+    },
+    {
+        title: '总消耗',
+        dataIndex: 'totalCharge',
+        key: 'totalCharge',
+        align: 'center',
+        scopedSlots: { customRender: 'totalCharge' },
+        fixed: 'left',
+        width: 100
+    },
+    {
+        title: '探索预算',
+        dataIndex: 'exploreBudget',
+        key: 'exploreBudget',
+        align: 'center',
+        scopedSlots: { customRender: 'exploreBudget' }
+    },
+    {
+        title: '优化目标',
+        dataIndex: 'ocpxActionType',
+        key: 'ocpxActionType',
+        align: 'center',
+        scopedSlots: { customRender: 'ocpxActionType' }
+    },
+    {
+        title: '封面曝光数',
+        dataIndex: 'impression',
+        key: 'impression',
+        align: 'center',
+        scopedSlots: { customRender: 'impression' }
+    },
+    {
+        title: '素材曝光数',
+        dataIndex: 'click',
+        key: 'click',
+        align: 'center',
+        scopedSlots: { customRender: 'click' }
+    },
+    {
+        title: '封面点击数',
+        dataIndex: 'photoClick',
+        key: 'photoClick',
+        align: 'center',
+        scopedSlots: { customRender: 'photoClick' }
+    },
+    {
+        title: '转化数',
+        dataIndex: 'unifiedConversion',
+        key: 'unifiedConversion',
+        align: 'center',
+        scopedSlots: { customRender: 'unifiedConversion' }
+    },
+    {
+        title: '转化成本',
+        dataIndex: 'unitfiedConversionCost',
+        key: 'unitfiedConversionCost',
+        align: 'center',
+        scopedSlots: { customRender: 'unitfiedConversionCost' }
+    },
+    {
+        title: '状态',
+        dataIndex: 'exploreStatus',
+        key: 'exploreStatus',
+        align: 'center',
+        customRender: function(text) {
+            if (text == 0) {
+                return '默认'
+            } else if (text == 1) {
+                return '加速探索'
+            } else if (text == 2) {
+                return '加速探索手动暂停'
+            } else if (text == 3) {
+                return '探索金额完成'
+            } else if (text == 4) {
+                return '时间到达截止时间'
+            }
+        }
+    }
+]
+export default {
+    name: 'strategy-list',
+    components: {},
+    props: {
+        exploreVisible: {
+            type: Boolean,
+            default() {
+                return false
+            }
+        },
+        exploreKey: {
+            type: String,
+            default() {
+                return '1'
+            }
+        }
+    },
+    // mixins: [JeecgListMixin],
+    data() {
+        return {
+            accountId: '',
+            exploreHistory: '1',
+            nowBudget: 0,
+            changeNum: 1500,
+            target: 'charge',
+            order: 'descend',
+            exploreList: [],
+            exploreDudget: null,
+            loading: false,
+            exploreColumns: [...exploreColumns],
+            selectedRowKeys: [],
+            selectedRows: [],
+            form: this.$form.createForm(this),
+            formSearch: this.$form.createForm(this),
+            exploreUrl: '/explore/todaylist',
+            ipagination: {
+                current: 1,
+                pageSize: 10,
+                //   pageSizeOptions: ['10', '20', '30'],
+                showTotal: (total, range) => {
+                    return range[0] + '-' + range[1] + ' 共' + total + '条'
+                },
+                showQuickJumper: true,
+                showSizeChanger: true,
+                pageSizeOptions: ['10', '30', '50'],
+                total: 0,
+                onChange: (current, pageSize) => {
+                    // 切换分页时的回调,
+                    // 当在页面定义change事件时,切记要把此处的事件清除,因为这两个事件重叠了,可能到时候会导致一些莫名的bug
+                    this.ipagination.current = current
+                    this.ipagination.pageSize = pageSize
+                }
+            }
+        }
+    },
+
+    methods: {
+        closeDrawer() {
+            this.exploreList = []
+            this.selectedRowKeys = []
+            this.exploreKey = '1'
+            this.exploreHistory = '1'
+            this.exploreUrl = '/explore/todaylist'
+            this.exploreColumns = [...exploreColumns]
+            this.form.resetFields()
+            this.$emit('update:exploreVisible', false)
+            this.$emit('update:exploreKey', '1')
+            this.$emit('update:accountId', '')
+        },
+        allOpen() {
+            this.form.validateFields((err, values) => {
+                if (!err) {
+                    if (this.nowBudget == 0) {
+                    } else {
+                        if (this.ipagination.total > Math.floor(this.nowBudget / values.exploreDudget)) {
+                            this.$message.error('预算不足,请重新选择广告组!')
+                            return
+                        }
+                    }
+                    let params = {}
+                    params.accountId = this.accountId
+                    params.exploreBudget = values.exploreDudget
+                    let that = this
+                    this.$confirm({
+                        title: '该操作有数倍超预算风险,你还要继续吗?',
+                        onOk() {
+                            that.postDataAction('/explore/openBudgets', params).then(res => {
+                                if (res.success) {
+                                    that.closeDrawer()
+                                    that.$message.success(res.result)
+                                } else {
+                                }
+                            })
+                        },
+                        onCancel() {}
+                    })
+                }
+            })
+        },
+        batchOpen() {
+            this.form.validateFields((err, values) => {
+                if (!err) {
+                    if (this.selectedRowKeys.length == 0) {
+                        this.$message.error('请选择广告组')
+                        return
+                    }
+                    if (this.nowBudget == 0) {
+                    } else {
+                        if (this.selectedRowKeys.length > Math.floor(this.nowBudget / values.exploreDudget)) {
+                            this.$message.error('预算不足,请重新选择广告组!')
+                            return
+                        }
+                    }
+                    let params = {}
+                    params.accountId = this.accountId
+                    params.unitIds = this.selectedRowKeys
+                    params.exploreBudget = values.exploreDudget
+                    let that = this
+                    this.$confirm({
+                        title: '该操作有数倍超预算风险,你还要继续吗?',
+                        onOk() {
+                            that.postDataAction('/explore/openBudgets', params).then(res => {
+                                if (res.success) {
+                                    that.closeDrawer()
+                                    that.$message.success(res.result)
+                                } else {
+                                }
+                            })
+                        },
+                        onCancel() {}
+                    })
+                }
+            })
+        },
+        onSelectChange(selectedRowKeys, selectionRows) {
+            this.selectedRowKeys = selectedRowKeys
+            this.selectionRows = selectionRows
+        },
+        sort(pagination, filters, sorter, { currentDataSource }) {
+            this.ipagination.current = pagination.current
+            this.ipagination.pageSize = pagination.pageSize
+
+            if (sorter.order) {
+                this.order = sorter.order ? sorter.order : 'descend'
+                this.target = sorter.columnKey
+                this.getData(this.accountId, {
+                    target: sorter.columnKey,
+                    order: sorter.order ? sorter.order : 'descend'
+                })
+            } else {
+                if (this.exploreHistory == '2') {
+                    const paramsData = this.formSearch.getFieldsValue()
+                    this.getData(this.accountId, paramsData)
+                } else {
+                    this.getData(this.accountId, null)
+                }
+            }
+        },
+        checkTab(key) {
+            if (key == '1') {
+                this.exploreUrl = '/explore/todaylist'
+                this.changeNum = 1500
+                this.exploreColumns = [...exploreColumns]
+                this.getData(this.accountId, null)
+            } else if (key == '2') {
+                this.exploreUrl = '/explore/historyList'
+                this.cancel()
+                this.ipagination.current = 1
+                this.exploreColumns = [...exploreHistoryColumns]
+                const paramsData = this.formSearch.getFieldsValue()
+                this.getData(this.accountId, paramsData)
+            }
+        },
+        handleQueryList() {
+            this.ipagination.current = 1
+            const paramsData = this.formSearch.getFieldsValue()
+            this.getData(this.accountId, paramsData)
+        },
+        handleResetForm() {
+            this.ipagination.current = 1
+            this.formSearch.resetFields()
+            const paramsData = this.formSearch.getFieldsValue()
+            this.getData(this.accountId, paramsData)
+        },
+        getData(accountId, data) {
+            this.exploreList = []
+            this.loading = true
+            this.accountId = accountId
+            let params = {}
+            params.accountId = accountId
+            params.pageSize = this.ipagination.pageSize
+            params.pageNo = this.ipagination.current
+            if (data && data.target) {
+                params.sortCode = data.target
+                if (data.order == 'descend') {
+                    params.sortType = 'DESC'
+                } else {
+                    params.sortType = 'ASC'
+                }
+            } else {
+                if (this.exploreHistory == '2') {
+                    params.unitId = data.unitId ? data.unitId : null
+                    params.unitName = data.unitName ? data.unitName : null
+                    params.exploreStatus = data.exploreStatus == 'null' ? null : data.exploreStatus
+                    switch (data.timeRange) {
+                        case 'today':
+                            params.startTime = moment().format('YYYY-MM-DD')
+                            params.endTime = moment().format('YYYY-MM-DD')
+                            break
+                        case 'yesterday':
+                            params.startTime = moment()
+                                .subtract(1, 'days')
+                                .format('YYYY-MM-DD')
+                            params.endTime = moment()
+                                .subtract(1, 'days')
+                                .format('YYYY-MM-DD')
+                            break
+                        case 'lastWeek':
+                            params.startTime = moment()
+                                .subtract(6, 'days')
+                                .format('YYYY-MM-DD')
+                            params.endTime = moment().format('YYYY-MM-DD')
+                            break
+                        case 'lastMonth':
+                            params.startTime = moment()
+                                .subtract(1, 'months')
+                                .format('YYYY-MM-DD')
+                            params.endTime = moment().format('YYYY-MM-DD')
+                            break
+                        default:
+                            params.startTime = moment()
+                                .subtract(6, 'days')
+                                .format('YYYY-MM-DD')
+                            params.endTime = moment().format('YYYY-MM-DD')
+                            break
+                    }
+                } else {
+                    params.sortCode = this.target
+                    params.sortType = this.order == 'descend' ? 'DESC' : 'ASC'
+                }
+            }
+            this.postDataAction(this.exploreUrl, params)
+                .then(res => {
+                    this.loading = false
+                    if (res.success) {
+                        this.nowBudget = res.result.dayBudget ? res.result.dayBudget : 0
+                        this.exploreList = res.result.pageInfo.list
+                        this.ipagination.total = res.result.pageInfo.total
+                    }
+                })
+                .catch(err => {
+                    // 3、调用取消 注意:要写在catch回调函数里
+                })
+        },
+        getFormData(className) {
+            return this.form.getFieldValue(className)
+        }
+    },
+    mounted() {},
+
+    filters: {}
+}
+</script>

+ 96 - 0
src/views/modules/autoLaunchRevision/components/editablCell.vue

@@ -0,0 +1,96 @@
+<template>
+    <div class="editable-cell">
+        <div v-if="editable" class="editable-cell-input-wrapper">
+            <a-input :value="value" @change="handleChange" @pressEnter="check" /><a-icon
+                type="check"
+                class="editable-cell-icon-check"
+                @click="check"
+            />
+        </div>
+        <div v-else class="editable-cell-text-wrapper">
+            <div
+                style="width:90%;
+                overflow:hidden;
+                text-overflow:ellipsis;
+                white-space:nowrap;"
+                :title="value"
+            >
+                {{ value || '' }}
+            </div>
+
+            <a-icon type="edit" class="editable-cell-icon" :style="{ top: value ? '10px' : '0px' }" @click="edit" />
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+    props: {
+        text: String
+    },
+    data() {
+        return {
+            value: this.text,
+            editable: false
+        }
+    },
+    methods: {
+        handleChange(e) {
+            const value = e.target.value
+            this.value = value
+        },
+        check() {
+            this.editable = false
+            this.$emit('change', this.value)
+        },
+        edit() {
+            this.editable = true
+        }
+    }
+}
+</script>
+<style lang="scss" scoped>
+.editable-cell {
+    position: relative;
+}
+
+.editable-cell-input-wrapper,
+.editable-cell-text-wrapper {
+    padding-right: 24px;
+}
+
+.editable-cell-text-wrapper {
+    padding: 5px 24px 5px 5px;
+}
+
+.editable-cell-icon,
+.editable-cell-icon-check {
+    position: absolute;
+    right: 0;
+    width: 20px;
+    top: 10px;
+    cursor: pointer;
+}
+
+.editable-cell-icon {
+    line-height: 18px;
+    display: none;
+}
+
+.editable-cell-icon-check {
+    line-height: 28px;
+}
+
+.editable-cell:hover .editable-cell-icon {
+    display: inline-block;
+}
+
+.editable-cell-icon:hover,
+.editable-cell-icon-check:hover {
+    color: #108ee9;
+}
+
+.editable-add-btn {
+    margin-bottom: 8px;
+}
+</style>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 3942 - 0
src/views/modules/autoLaunchRevision/createLaunch.vue


+ 2 - 2
vue.config.js

@@ -105,7 +105,7 @@ module.exports = {
         // target: 'http://192.168.1.43:8088', //请求本地 需要jeecg-boot后台项目  毕洁泉
         // target: 'http://192.168.1.43:8806', //请求本地 需要jeecg-boot后台项目  毕洁泉
         // target: 'http://192.168.0.252:8098', //请求本地 需要jeecg-boot后台项目  毕洁泉
-        // target: 'http://192.168.1.219:7701', //请求本地 需要jeecg-boot后台项目  赵西安
+        target: 'http://192.168.1.59:7701', //请求本地 需要jeecg-boot后台项目  赵西安
         // target: 'http://192.168.1.193:8080', //请求本地 需要jeecg-boot后台项目  李煜一
         // target: 'http://192.168.1.193:31012', //请求本地 需要jeecg-boot后台项目  李煜一
         // target: 'http://api.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目
@@ -118,7 +118,7 @@ module.exports = {
         // target: 'http://192.168.1.8:9999', // 学超
         // target:'http://gateway.tjyourong.com.cn', //测试
         // target:'http://apipre.tjyourong.com.cn', //预生产
-        target: 'http://192.168.1.134:7001', //请求本地 需要jeecg-boot后台项目  周泽宇
+        // target: 'http://192.168.1.134:7001', //请求本地 需要jeecg-boot后台项目  周泽宇
 
         // target:'http://gateway.tjyourong.com.cn/',//测试