Explorar el Código

设计人员报表

朱鑫波 hace 4 años
padre
commit
35405842ce

+ 1 - 0
src/components/formComponents/checkBoxGroup.vue

@@ -129,6 +129,7 @@
     <a-checkbox-group v-model="selectedVal" :disabled="disabled" style="width: 100%">
       <a-checkbox
         v-for="item of selectOption"
+        :disabled="item.disabled"
         :label="item.label"
         :key="item.value"
         :value="item.value"

+ 2 - 2
src/utils/request.js

@@ -15,9 +15,9 @@ else if (process.env.NODE_ENV == 'debug') {
 } 
 else if (process.env.NODE_ENV == 'production') { 
   
-  // axios.defaults.baseURL = 'http://apipre.tjyourong.com.cn/jeecg-boot';//预生产
+  axios.defaults.baseURL = 'http://apipre.tjyourong.com.cn/jeecg-boot';//预生产
   // axios.defaults.baseURL = 'http://139.186.165.84:8806/jeecg-boot';     
-  axios.defaults.baseURL = 'http://api.tjyourong.com.cn/jeecg-boot';//生产环境
+  // axios.defaults.baseURL = 'http://api.tjyourong.com.cn/jeecg-boot';//生产环境
 }
 const service = axios.create({
 //   baseURL: '/jeecg-boot', // api base_url

+ 244 - 0
src/views/modules/Statistics/designerReport/designerReport.vue

@@ -0,0 +1,244 @@
+<template>
+  <div class="directional-content">
+    <a-card style="width: 100%"> 
+        <div class="table-page-search-wrapper">
+            <a-form layout="inline"  :form="form"
+                hide-required-mark :selfUpdate="true" 
+                @submit="handleQueryList">
+                <a-row :gutter="24">
+                    <a-col :md="8" :sm="8" :xxl="6">
+                       <a-form-item label="人员名称">
+                            <a-input
+                                v-decorator="['realname']" type="text"
+                                placeholder="请输入想要搜索的人员名称"
+                            />
+                        </a-form-item>
+                    </a-col>
+                    <a-col :md="8" :sm="8" :xxl="6">
+                        <a-form-item label="岗位">
+                            <a-select
+                                v-decorator="['roleCode',{initialValue:''}]"
+                                placeholder="请选择"
+                                allow-clear
+                            >
+                                <a-select-option :value="''">不限</a-select-option>
+                                <a-select-option value="clip">剪辑</a-select-option>
+                                <a-select-option value="shot">拍摄</a-select-option>
+                                <a-select-option value="plan">策划</a-select-option>
+                            </a-select>
+                        </a-form-item>
+                    </a-col>
+                     <!--  -->
+                    <a-col :md="8" :sm="8" :xxl="6">
+                        <a-form-item label="时间">
+                            <a-range-picker
+                                :disabled-date="disabledDate"
+                                format="YYYY-MM-DD" 
+                                v-model="timeRange"
+                            />
+                        </a-form-item>
+                    </a-col>
+                    <a-col :md="8" :sm="8" :xxl="6">
+                        <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" class="middle-button">重置</a-button>
+                        </span>
+                        
+                    </a-col>
+                </a-row>
+            </a-form>
+        </div>
+    </a-card>
+    <a-card  class="material-main">
+        <a-table
+            ref="table"
+            size="middle"
+            bordered
+            :columns="columns"
+            :dataSource="dataSource"
+            :pagination="false"
+            :loading="dataLoading"
+        >
+        </a-table>
+        <a-pagination
+        size="small"
+        :showTotal="ipagination.showTotal"
+        style="float: right;margin-top:10px"
+        v-if="dataSource.length > 0"
+        showQuickJumper
+        :pageSize.sync="ipagination.pageSize"
+        :total="ipagination.total"
+        v-model="ipagination.current"
+        @change="getDataSource"
+        />
+    </a-card>
+    
+  </div>
+</template>
+
+<script>
+import moment from 'moment';
+import selectTable from '@/views/modules/Statistics/components/selectPagination.vue';
+import ChartCard from '@/components/ChartCard';
+import Trend from '@/components/Trend';
+import { stopOtherVideo, closeAllVideoFun } from '@/utils/videoControl'; // 停止除当前外的其他视频播放,及停止所有视频播放的方法
+export default {
+    components: {
+        selectTable,
+        ChartCard,
+        Trend
+    },
+    data() {
+        return {
+            timeRange: [moment(), moment()],
+            visibleVideo: false,
+            videoUrlShow: null,
+            spinning: false,
+            form: this.$form.createForm(this),
+            projectId: '',
+            dataSource: [],
+            dataLoading: false,
+            columns: [ {
+                    title: '设计人员',
+                    dataIndex: 'realname',
+                    align: 'center',
+                    scopedSlots: { customRender: 'realname' },
+                },
+                {
+                    title: '岗位',
+                    dataIndex: 'roleName',
+                    align: 'center',
+                    scopedSlots: { customRender: 'roleName' },
+                },
+                {
+                    title: '视频数量(真人)',
+                    dataIndex: 'zhenrenNumber',
+                    align: 'center',
+                    scopedSlots: { customRender: 'zhenrenNumber' },
+                },
+                {
+                    title: '消耗(真人)',
+                    dataIndex: 'zhenrenCharge',
+                    align: 'center',
+                    scopedSlots: { customRender: 'zhenrenCharge' },
+                },
+                {
+                    title: '消耗/视频数量(真人)',
+                    dataIndex: 'zhenrenCost',
+                    align: 'center',
+                    scopedSlots: { customRender: 'zhenrenCost' },
+                },
+                {
+                    title: '视频数量(制作)',
+                    dataIndex: 'zhizuoNumber',
+                    align: 'center',
+                    scopedSlots: { customRender: 'zhizuoNumber' },
+                },
+                {
+                    title: '消耗(制作)',
+                    dataIndex: 'zhizuoCharge',
+                    align: 'center',
+                    scopedSlots: { customRender: 'zhizuoCharge' },
+                },
+                {
+                    title: '消耗/视频数量(制作)',
+                    dataIndex: 'zhizuoCost',
+                    align: 'center',
+                    scopedSlots: { customRender: 'zhizuoCost' },
+                },
+            ],
+            ipagination: {
+                current: 1,
+                pageSize: 10,
+                //   pageSizeOptions: ['10', '20', '30'],
+                showTotal: (total, range) => {
+                    return range[0] + "-" + range[1] + " 共" + total + "条"
+                },
+                showQuickJumper: true,
+                showSizeChanger:false,
+                pageSizeOptions: ['10', '30', '50'],
+                total: 0,
+                onChange: (current, pageSize) => {
+                    // 切换分页时的回调,
+                    // 当在页面定义change事件时,切记要把此处的事件清除,因为这两个事件重叠了,可能到时候会导致一些莫名的bug
+                    this.ipagination.current = current;
+                    this.ipagination.pageSize= pageSize;
+                    this.handleGetTableList({})
+                }
+            },
+            totalData: null
+        }
+    },
+    watch: {
+        visibleVideo(n, o) {
+            if (!n) {
+                closeAllVideoFun()
+            }
+        },
+    },
+    methods: {
+        disabledDate(current) {
+            // Can not select days before today and today
+            return current && current > moment().endOf('day');
+        },
+        getDataSource(current, pageSize) {
+            // 切换分页时的回调,
+            // 当在页面定义change事件时,切记要把此处的事件清除,因为这两个事件重叠了,可能到时候会导致一些莫名的bug
+            this.ipagination.current = current;
+            this.ipagination.pageSize= pageSize;
+            this.handleGetTableList({})
+        },
+        handleQueryList() {
+            this.ipagination.current = 1;
+            event.preventDefault();
+            const paramsData = this.form.getFieldsValue();
+            this.handleGetTableList(paramsData);
+        },
+        handleResetForm() {
+            this.totalData = null;
+            this.ipagination.current = 1;
+            this.form.resetFields();
+            this.timeRange = [moment(), moment()];
+            this.handleGetTableList({});
+        },
+        handleGetTableList(data) {
+            this.spinning = true;
+            const paramsData = {
+                realname: data.realname,
+                roleCode: data.roleCode ? data.roleCode === '' ? null : data.roleCode : null,
+                startTime: this.timeRange&&this.timeRange.length === 2 ?  moment(this.timeRange[0]).format('YYYY-MM-DD') : null,
+                endTime: this.timeRange&&this.timeRange.length === 2 ?  moment(this.timeRange[1]).format('YYYY-MM-DD') : null,
+                pageNo:  this.ipagination.current,
+                pageSize: this.ipagination.pageSize
+            };
+            this.dataSource = []
+            this.dataLoading = true;
+            this.getAction('/kuaishou/kuaiShouVideoGet/labelMaterialList', paramsData).then(result => {
+                this.dataLoading = false;
+                this.spinning = false;
+                if (result.code === 200) {
+                    this.dataSource = result.result.pageInfo.list || [];
+                    if(result.result.total) {
+                        this.dataSource.unshift(result.result.total);
+                    }
+                    
+                    this.ipagination.total = result.result.pageInfo.total || 0;
+                }
+                else {
+                    this.$message.error(result.message);
+                }
+            }).catch(error => {
+                this.spinning = false;
+                this.dataLoading = false;
+                console.log(error, 'eeee');
+            });
+        },
+    },
+    mounted() {
+        this.handleGetTableList({});
+    },
+}
+</script>
+<style lang="less" scoped>
+    @import "material";
+</style>

+ 213 - 0
src/views/modules/Statistics/designerReport/material-service.js

@@ -0,0 +1,213 @@
+/**
+ * @file 人群包管理基础服务
+ * @author jiayufei(jiayufei@c-top.com.cn)
+ */
+
+ class AppMarketService {
+    constructor() {}
+
+    // 相关账户的table列表
+    setAcountColumns() {
+        return [
+            {
+                title: '账户名称',
+                dataIndex: 'authName',
+                width: '50%',
+                align: 'center'
+            },
+            {
+                title: '编辑',
+                dataIndex: 'action',
+                scopedSlots: {customRender: 'action'},
+                width: '50%',
+                align: 'center'
+            }
+        ]
+    }
+
+    // 原因的table列表
+    setCauseColumns() {
+        return [
+            {
+                title: '账户名称',
+                dataIndex: 'authName',
+                width: '25%',
+                align: 'center'
+            },
+            {
+                title: '推送结果',
+                dataIndex: 'result',
+                width: '25%',
+                align: 'center'
+            },
+            {
+                title: '失败原因',
+                dataIndex: 'message',
+                width: '25%',
+                align: 'center',
+                customRender(t) {
+                    if(t === 'OK') {
+                        return '-';
+                    }
+                    else {
+                        return t;
+                    }
+                }
+            },
+            {
+                title: '操作',
+                dataIndex: 'action',
+                scopedSlots: {customRender: 'action'},
+                width: '25%',
+                align: 'center'
+            }
+        ]
+    }
+
+    // 相关项目的table列表
+    setDepColumns() {
+        return [
+            {
+                title: '广告组名称',
+                dataIndex: 'unitName',
+                width: '50%',
+                align: 'center'
+            },
+            {
+                title: '所属账户',
+                dataIndex: 'authName',
+                width: '50%',
+                align: 'center'
+            }
+        ]
+    }
+
+    // 状态枚举
+    setPlatform() {
+        return [
+            {
+                label: 0,
+                value: '不限'
+            },
+            {
+                label: 1,
+                value: 'Android'
+            },
+            {
+                label: 2,
+                value: 'IOS'
+            }
+        ]
+    }
+
+    // 上传人去报的校验规则
+    setPersonRules() {
+        return {
+            name: [
+                {required: true, message: '人群包名称不能为空', trigger: 'blur'},
+                {min: 1, max: 20, message: '人群包名称不能超过20个字符', trigger: 'blur'}
+            ],
+            resource: [
+                {required: true, message: '请选择匹配类型', trigger: 'change'}
+            ]
+        }
+    }
+
+    // 人群包类型枚举值
+    setPopulationTypeTasks() {
+        return [
+            {
+                label: 1,
+                value: '上传人群'
+            }, {
+                label: 2,
+                value: '广告人群'
+            }, {
+                label: 3,
+                value: '主题专区'
+            }, {
+                label: 4,
+                value: '逻辑规则'
+            }, {
+                label: 5,
+                value: '人群扩展'
+            }, {
+                label: 6,
+                value: '平台制定'
+            }, {
+                label: 7,
+                value: '定制付费'
+            }, {
+                label: 8,
+                value: '网红粉丝类别'
+            }, {
+                label: 9,
+                value: '内容付费行为'
+            }, {
+                label: 10,
+                value: '移动应用安装'
+            }, {
+                label: 11,
+                value: '快手使用活跃度'
+            }, {
+                label: 12,
+                value: '行业分类'
+            }, {
+                label: 13,
+                value: '商业兴趣'
+            }, {
+                label: 14,
+                value: '固话标签'
+            }, {
+                label: 15,
+                value: '行业偏好'
+            }, {
+                label: 16,
+                value: '第三方标签'
+            }, {
+                label: 17,
+                value: '产品关键词'
+            }, {
+                label: 19,
+                value: '应用渗透率'
+            }, {
+                label: 22,
+                value: '指定网红'
+            }, {
+                label: 23,
+                value: '行业分类'
+            }
+        ]
+    }
+
+    // 匹配类型枚举值
+    setMateTypeTasks() {
+        return [
+            {
+                label: 1,
+                value: 'IMEI'
+            }, {
+                label: 2,
+                value: 'IDFA'
+            }, {
+                label: 3,
+                value: 'IMEI_MD5'
+            }, {
+                label: 4,
+                value: 'IDFA_MD5'
+            }, {
+                label: 5,
+                value: '手机号-MD5'
+            }, {
+                label: 7,
+                value: 'OAID'
+            }, {
+                label: 8,
+                value: 'OAID_MD5'
+            }
+        ]
+    }
+
+}
+
+export default new AppMarketService();

+ 225 - 0
src/views/modules/Statistics/designerReport/material.less

@@ -0,0 +1,225 @@
+.directional-content {
+    // background: #fff;
+    // height: calc(100vh - 137px);
+    // padding: 20px;
+    overflow: hidden;
+    /deep/.chart-card-content {
+        height: 0;
+    }
+    .middle-button {
+        margin: 0 8px;
+    }
+    .control-con-header {
+        margin-bottom: 20px;
+        position: relative;
+        /deep/ .ant-form-inline .ant-form-item > .ant-form-item-control-wrapper, .ant-form-inline .ant-form-item > .ant-form-item-label {
+            width: 200px !important;
+        }
+        .reset-class {
+            margin-right: 10px !important;
+        }
+        .upload-person {
+            position: absolute;
+            right: 10px;
+            top: 0;
+        }
+    }
+    .cause-text-class {
+        cursor: pointer;
+    }
+    .pagin-table-class {
+        display: flex;
+        justify-content: flex-end;
+        margin-top: 20px;
+    }
+    .acount-search-class {
+        width: 200% !important;
+    }
+    .grid-form-type {
+        margin-left: 210px;
+    }
+}
+/deep/ .push-modal {
+    width: 600px !important;
+    .acount-title {
+        display: flex;
+        font-size: 14px;
+        height: 40px;
+        line-height: 40px;
+        .acount-title-left {
+            margin-right: 20px;
+            width: 100px;
+        }
+    }
+    .push-plate {
+        margin-bottom: 20px;
+    }
+}
+.person-modal {
+    width: 500px;
+    /deep/ .ant-form-item {
+        display: flex;
+    }
+    /deep/ .ant-form-item-label {
+        width: 20%;
+    }
+    /deep/ .ant-form-item-control-wrapper {
+        width: 80%;
+    }
+    .acount-search-class {
+        width: 100% !important;
+    }
+    .upload-txt-rules {
+        margin-top: 10px;
+        margin-bottom: 10px;
+        line-height: 1.5;
+    }
+    /deep/ .ant-radio-group {
+        line-height: 30px;
+    }
+}
+/deep/ .cause-modal {
+    width: 600px !important;
+    .cause-modal-table-class {
+        height: 500px;
+        overflow-y: auto;
+    }
+    .pagin-table-class {
+        display: flex;
+        justify-content: flex-end;
+        margin-top: 20px;
+    }
+}
+/deep/ .relax-modal {
+    width: 600px !important;
+    .acount-title {
+        display: flex;
+        font-size: 14px;
+        height: 40px;
+        line-height: 40px;
+        .acount-title-left {
+            margin-right: 20px;
+            width: 100px;
+        }
+    }
+    .push-plate {
+        margin-bottom: 20px;
+    }
+}
+
+.grid-form-item-account {
+    /deep/ .ant-form-item-control {
+        line-height: inherit;
+    }
+}
+.material-total {
+    width: 100%;
+    min-height:100px;
+    margin-top:15px;
+    /deep/ .ant-card-body {
+        padding: 0;
+    }
+}
+.material-main {
+    width: 100%;
+    min-height:300px;
+    margin-top:15px;
+    .home-card {
+        width: 100%;
+        overflow: hidden;
+        padding: 10px 0px;
+        display: flex;
+        flex-wrap: wrap;
+        margin-left: 25px;
+        min-height: 300px;
+        .home-right {
+            width: 100%;
+        }
+      
+        .bg:after {
+            content: '';
+            width: 110%;
+            height: 110%;
+            position: absolute;
+            left: -5%;
+            top: -5%;
+            background: inherit;
+            filter: blur(10px);
+            z-index: 2;
+        }
+    }
+    .home-item {
+        overflow: hidden;
+        position: relative;
+        img {
+            width: 100%;
+            height: auto;
+        }
+        .bottom-details {
+            width: 100%;
+            height: 37%;
+            background: rgba(0, 0, 0, .7);
+            position: absolute;
+            bottom: 0;
+            left: 0;
+            z-index: 10;
+            padding: 10px;
+            .bottom-title {
+                display: flex;
+                justify-content: space-between;
+            }
+            h3 {
+                color: whitesmoke;
+                line-height: 25px;
+                width: 60%;
+                overflow: hidden; //超出的文本隐藏
+                text-overflow: ellipsis; //溢出用省略号显示
+                white-space: nowrap; //溢出不换行  
+            }
+            p {
+                color: whitesmoke;
+                line-height: 1;
+                width: 100%;
+                overflow: hidden; //超出的文本隐藏
+                text-overflow: ellipsis; //溢出用省略号显示
+                white-space: nowrap; //溢出不换行
+            }
+        }
+    }
+      
+    @media only screen and (min-width: 1200px) {
+        .home-item {
+            border-style: solid;
+            border-width: 1px;
+            border-color: #e4e4e4;
+            width: calc(25% - 50px);
+            padding: 10px;
+            margin-right: 50px;
+            margin-bottom: 10px;
+            display: flex;
+            align-items: center;
+            background: #fff;
+            position: relative;
+            z-index: 99;
+        }
+    }
+      
+    @media only screen and (min-width: 1530px) {
+        .home-item {
+            border-style: solid;
+            border-width: 1px;
+            border-color: #e4e4e4;
+            width: calc(20% - 50px);
+            padding: 10px;
+            margin-right: 50px;
+            margin-bottom: 10px;
+            display: flex;
+            align-items: center;
+            background: #fff;
+            position: relative;
+            z-index: 99;
+        }
+    }
+}
+
+

+ 25 - 7
src/views/modules/Statistics/imageStatics/imageCostReport.vue

@@ -8,10 +8,10 @@
             </a-tab-pane>
         </a-tabs>
       </div>
-    <div class="xiangmuxuanze">
+    <div class="xiangmuxuanze" style="display:flex;margin-top:20px" >
       <span>项目选择:</span>
        
-        <a-tree-select
+        <!-- <a-tree-select
             v-model="accountIds"
             show-search
             style="width: 600px;height:30px"
@@ -29,7 +29,8 @@
             :filterOption='filterOption'
         >
         
-        </a-tree-select>
+        </a-tree-select> -->
+        <Treeselect v-if="forceUpdate" :appId.sync="accountIds" :request.sync="medioId" ref="treeSelect" style="width: 600px;height:30px;position: relative;top: -10px;"/>
         
     </div>
     <div class="timeDiv">
@@ -142,9 +143,10 @@ import moment from 'moment'
 // import { JeecgListMixin } from '@/mixins/ipagination'
 import { getAction, postAction, downFile, downFilePost } from '@/api/manage'
 
-import { TreeSelect } from 'ant-design-vue';
-const SHOW_PARENT = TreeSelect.SHOW_PARENT;
+// import { TreeSelect } from 'ant-design-vue';
+// const SHOW_PARENT = TreeSelect.SHOW_PARENT;
 import DatePicker from '@/components/DatePicker'
+import Treeselect from '@/views/modules/Statistics/components/Treeselect.vue'
 // import selectComponent from './selectComponent'
 // import Treeselect from '../components/Treeselect'
 const TTcolumns = [
@@ -418,6 +420,8 @@ let show = 0
 export default {
   data() {
     return {
+        medioId: '1,3',
+        forceUpdate:true,
         type:0,
         dateValue:[moment().subtract(1,'days'),moment().subtract(1,'days')],
         openOptions:false,
@@ -428,7 +432,7 @@ export default {
         
         accountIds:[],
         treeData:[],
-        SHOW_PARENT,
+        // SHOW_PARENT,
         KSaccountList:[],
         TTaccountList:[],
         accountID:undefined,
@@ -514,7 +518,7 @@ export default {
   // mixins: [JeecgListMixin],
   components: {
     // selectComponent,
-    // Treeselect
+    Treeselect,
     DatePicker,
   },
     methods: {
@@ -523,18 +527,32 @@ export default {
           this.data=[]
           this.ipagination.current=1;
           this.totalCost={}
+          this.forceUpdate = false
           if(this.tabKeys==1){
+                
                 this.treeData=this.TTaccountList;
                 this.columns=this.TTcolumns;
                 this.target='cost';
                 this.scrollX=0;
                 this.getTableData(this.bytedanceUrl)
+                setTimeout(()=>{
+                  this.forceUpdate = true
+                  this.medioId = '1,3'
+                  this.$refs.treeSelect.getParticipateList()
+                },100)
+               
             }else if (this.tabKeys==2){
+              
                 this.treeData=this.KSaccountList;
                 this.columns=this.KScolumns
                 this.target='cost'
                 this.scrollX=2500
                 this.getTableData(this.kuaishouUrl)
+                 setTimeout(()=>{
+                  this.forceUpdate = true
+                  this.medioId = '2,4'
+                  this.$refs.treeSelect.getParticipateList()
+                },100)
             } 
         },
         treeChange(val) {

+ 1 - 1
src/views/modules/Statistics/newPlanStatic/newPlanStatic.vue

@@ -954,7 +954,7 @@ export default {
       return moment().endOf('day');
     },
     filterOption(input, option){
-      console.log(input, option)
+
       return (
           option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
         );

+ 33 - 0
src/views/modules/advertiser/ProjectList.vue

@@ -152,6 +152,10 @@
           <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
             <a>删除</a>
           </a-popconfirm>
+          <!-- /ctop/project/edit -->
+        </span>
+        <span slot="materialShare" slot-scope="text, record">
+            <a-switch :checked='text==0' @change="onChange(text,record)" :loading="spinning"/>
         </span>
       </a-table>
     </div>
@@ -251,6 +255,14 @@ export default {
           },
         },
         {
+          title: '是否共享素材',
+          align: 'center',
+          dataIndex: 'materialShare',
+          scopedSlots: {
+            customRender: 'materialShare',
+          },
+        },
+        {
           title: '操作',
           dataIndex: 'action',
           align: 'center',
@@ -268,6 +280,7 @@ export default {
       },
       list: [],
       options: [],
+      spinning: false
     }
   },
   filters: {
@@ -313,6 +326,26 @@ export default {
     },
   },
   methods: {
+    onChange(text,record) {
+      this.spinning=true;
+      console.log(text,record)
+      let materialShare=text==1?0:1;
+      httpAction(`/ctop/project/edit`,{
+          id:record.id,
+          materialShare
+      },'put').then((res)=>{
+        
+        if(res.success) {
+          this.spinning=false;
+          this.$message.success('修改成功')
+          this.modalFormOk()
+        }else {
+          this.spinning=false;
+          this.$message.success(res.message)
+          this.modalFormOk()
+        }
+      })
+    },
     getList() {
       var params = {}
       // params.userId = this.userInfo().id

+ 108 - 44
src/views/modules/advertiser/ProjectMemberList.vue

@@ -17,7 +17,7 @@
     :bordered="false"
     :tabList="tabListNoTitle"
     :activeTabKey="noTitleKey"
-    @tabChange="key => onTabChange(key, 'noTitleKey')"
+    @tabChange="(key) => onTabChange(key, 'noTitleKey')"
     class="my-project"
   >
     <!-- 查询区域 -->
@@ -30,14 +30,9 @@
             </a-form-item>
           </a-col>
           <a-col :md="6" :sm="8">
-            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+            <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
               <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
-              <a-button
-                type="primary"
-                @click="searchReset"
-                icon="reload"
-                style="margin-left: 8px"
-              >重置</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
             </span>
           </a-col>
         </a-row>
@@ -57,10 +52,9 @@
         :loading="loading"
       >
         <span slot="maxBid" slot-scope="maxBid">{{ maxBid / 1000 }}</span>
-        <span
-          slot="mediaId"
-          slot-scope="mediaId"
-        >{{ mediaId == 1 ? '头条' :mediaId == 2? '快手':mediaId == 3?'头条内广':'快手内广' }}</span>
+        <span slot="mediaId" slot-scope="mediaId">{{
+          mediaId == 1 ? '头条' : mediaId == 2 ? '快手' : mediaId == 3 ? '头条内广' : '快手内广'
+        }}</span>
         <span slot="action" slot-scope="text, record">
           <a @click="handleEdit(record)">{{ noTitleKey == 'myProject' ? '查看成员' : '账号绑定' }}</a>
           <a-divider type="vertical" />
@@ -70,8 +64,9 @@
             <a
               @click="projectLook(record)"
               v-if="noTitleKey == 'myProject'"
-              :disabled="record.needExamine == 0||record.needExamine == null"
-            >待办事项</a>
+              :disabled="record.needExamine == 0 || record.needExamine == null"
+              >待办事项</a
+            >
           </a-badge>
         </span>
       </a-table>
@@ -87,8 +82,8 @@
       width="800px"
       class="close-account-my-project"
     >
-      <div style="display:flex;line-height:50px;flex-wrap: wrap;">
-        <div style="width:25%;text-align:center;" v-for="(item, index) of memberList" :key="index">
+      <div style="display: flex; line-height: 50px; flex-wrap: wrap">
+        <div style="width: 25%; text-align: center" v-for="(item, index) of memberList" :key="index">
           <a-tag color="#2db7f5" @close="log(item.id)" closable>
             {{ item.userName }}
             <a-divider type="vertical" />
@@ -139,11 +134,12 @@
       title="账号绑定"
       v-model="visibleBind"
       @ok="handleSubmit"
+      @cancel="handleCancel"
       :width="800"
       :okButtonProps="{ props: { disabled: false } }"
       :cancelButtonProps="{ props: { disabled: false } }"
     >
-      <a-form :form="form">
+      <a-form :form="formEdit">
         <a-form-item
           label="选择方式"
           :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
@@ -154,7 +150,7 @@
             <a-radio-button value="login">登录</a-radio-button>
           </a-radio-group>
         </a-form-item>
-        <div v-if="mode=='authorization'">
+        <div v-if="mode == 'authorization'">
           <a-form-item
             label="媒体:"
             :label-col="{ xs: { span: 24 }, sm: { span: 5 } }"
@@ -165,7 +161,9 @@
               <a-radio-button value="bytedance">头条</a-radio-button>
             </a-radio-group>
             <br />
-            <span style="color:red;" v-if="loginType == 'bytedance'">*重要:如存在一户多开情况,请勾选所有子账号进行授权!!!</span>
+            <span style="color: red" v-if="loginType == 'bytedance'"
+              >*重要:如存在一户多开情况,请勾选所有子账号进行授权!!!</span
+            >
           </a-form-item>
           <a-form-item
             label="开户代理商:"
@@ -176,7 +174,9 @@
             <a-radio-group buttonStyle="outline" v-model="id">
               <!-- <a-radio-button value="0">否</a-radio-button>
               <a-radio-button value="1">是</a-radio-button> -->
-              <a-radio-button v-for="item in authConfigList" :key="item.id" :value='item.id'>{{item.agentName}}</a-radio-button>
+              <a-radio-button v-for="item in authConfigList" :key="item.id" :value="item.id">{{
+                item.agentName
+              }}</a-radio-button>
             </a-radio-group>
           </a-form-item>
           <a-form-item
@@ -199,11 +199,11 @@
           >
             <!-- <a-input v-decorator="['warningAmount', { rules: [{ required: true, message: '请输入预警金额' }] }]" /> -->
             <a-input-number
-              style="width:50%"
+              style="width: 50%"
               v-decorator="[
-              'warningAmount',
-              { rules: [{ required: true, message: '请输入预警金额' }], initialValue: 5000 }
-            ]"
+                'warningAmount',
+                { rules: [{ required: true, message: '请输入预警金额' }], initialValue: 5000 },
+              ]"
             />
           </a-form-item>
           <a-form-item
@@ -213,11 +213,11 @@
           >
             <a-input-number
               :step="0.1"
-              style="width:50%"
+              style="width: 50%"
               v-decorator="[
-              'warningProportion',
-              { rules: [{ required: true, message: '请输入预警比例' }], initialValue: 1.5 }
-            ]"
+                'warningProportion',
+                { rules: [{ required: true, message: '请输入预警比例' }], initialValue: 1.5 },
+              ]"
             />
           </a-form-item>
         </div>
@@ -248,6 +248,47 @@
             <a-input type="password" v-model="password" placeholder="请输入密码" />
           </a-form-item>
         </div>
+        <a-form-item
+          label="自动投放"
+          :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
+          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }"
+        >
+          <a-radio-group
+            buttonStyle="outline"
+            v-decorator="[
+              'autoDelivery',
+              { rules: [{ required: true, message: '请选择是否自动投放' }], initialValue: 1 },
+            ]"
+          >
+            <a-radio-button :value="1">开启</a-radio-button>
+            <a-radio-button :value="0">关闭</a-radio-button>
+          </a-radio-group>
+        </a-form-item>
+        <a-form-item
+          label="物料同步"
+          :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
+          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }"
+        >
+          <!-- <a-input v-decorator="['warningAmount', { rules: [{ required: true, message: '请输入预警金额' }] }]" /> -->
+          <!-- <a-radio-group
+            v-decorator="['materialType', { rules: [{ required: true, message: '请选择同步物料' }], initialValue: 0 }]"
+          >
+            <a-radio :value="0">不同步</a-radio>
+            <a-radio :value="1">应用包</a-radio>
+            <a-radio :value="2" disabled>人群包</a-radio>
+            <a-radio :value="3" disabled>定向包</a-radio>
+          </a-radio-group> -->
+          <checkBoxGroup
+                :options="[
+                  { label: '不同步', value: 0 },
+                  { label: '应用包', value: 1 },
+                  { label: '人群包', value: 2, disabled:true},
+                  { label: '定向包', value: 3, disabled:true },
+                ]"
+                v-decorator="['materialType', { rules: [{ required: true, message: '请选择同步物料' }], initialValue: [0] }]"
+                @change="changeData"
+              />
+        </a-form-item>
       </a-form>
     </a-modal>
 
@@ -312,7 +353,7 @@ import { mapGetters } from 'vuex'
 import JSelectUserByDep from '@/components/jeecgbiz/JSelectUserByDep'
 
 import { JeecgListMixin } from '@/mixins/ipagination'
-
+import checkBoxGroup from '@/components/formComponents/checkBoxGroup'
 const myProjectColumns = [
   {
     title: '项目名称',
@@ -420,11 +461,12 @@ export default {
   name: 'ProjectMemberList',
   components: {
     JSelectUserByDep,
+    checkBoxGroup
   },
   mixins: [JeecgListMixin],
   data() {
     return {
-      authConfigList:[],
+      authConfigList: [],
       title: '',
       titleAccount: '',
       description: '我的项目',
@@ -437,7 +479,7 @@ export default {
       password: '',
       loginType: 'kuaishou',
       id: undefined,
-      form: this.$form.createForm(this),
+      formEdit: this.$form.createForm(this),
       record: '',
       systemType: '不限',
       systemTypeName: '',
@@ -605,6 +647,21 @@ export default {
     },
   },
   methods: {
+    changeData(data) {
+      if (data.length > 1 && data.findIndex((item) => item == 1) == 0) {
+        data.splice(
+          data.findIndex((item) => item == 1),
+          1
+        )
+      } else if (data.length > 1 && data.findIndex((item) => item == 1) == data.length - 1) {
+        data.splice(0, data.length - 1)
+      } else if (data.length == 0) {
+        data.push(1)
+      }
+    },
+    getFormFieldValue(field) {
+      return this.formEdit.getFieldValue(field)
+    },
     //   /ctop/userAllocation/getAccountsByProjectId    projectId  userId
     projectLook(item) {
       var params = {}
@@ -796,6 +853,10 @@ export default {
         this.systemType = '不限'
       }
     },
+    handleCancel() {
+      this.visibleBind = false
+      this.formEdit.resetFields();
+    },
     handleSubmit() {
       let params = {}
       params.advertiserId = this.record.advertiserId
@@ -805,10 +866,12 @@ export default {
       params.projectId = this.record.projectId
       params.projectName = this.record.projectName
       params.systemType = this.systemType == '4' ? this.systemTypeName : this.systemType
-      
+
       // 触发表单验证
-      this.form.validateFields((err, values) => {
+      this.formEdit.validateFields((err, values) => {
         if (!err) {
+          params.materialType = values.materialType
+          params.autoDelivery = values.autoDelivery
           if (this.mode == 'login') {
             params.accountName = this.accountName
             params.password = this.password
@@ -836,10 +899,12 @@ export default {
             }
             params.warningAmount = values.warningAmount
             params.warningProportion = values.warningProportion
+
             httpAction(this.bindAuthorizationUrl, params, 'post').then((res) => {
               if (res.success) {
                 window.open(res.message, '_blank')
                 this.visibleBind = false
+                this.formEdit.resetFields();
               } else {
                 alert('绑定失败')
               }
@@ -859,7 +924,7 @@ export default {
       }
     },
     searchQuery() {
-      this.ipagination.current=1
+      this.ipagination.current = 1
       if (this.noTitleKey == 'participation') {
         this.getParticipateList()
       } else {
@@ -891,19 +956,18 @@ export default {
         this.getAllUserList()
       }
     },
-    getauthConfigList(){
-      getAction('/auth/oauthConfig/list',{
-        status:0,
-        mediaId:2
-      }).then(res=>{
+    getauthConfigList() {
+      getAction('/auth/oauthConfig/list', {
+        status: 0,
+        mediaId: 2,
+      }).then((res) => {
         console.log(res)
-        this.authConfigList=res.result;
-        if(res.result.length>0){
-          this.id=res.result[0].id
+        this.authConfigList = res.result
+        if (res.result.length > 0) {
+          this.id = res.result[0].id
         }
-        
       })
-    }
+    },
   },
   mounted() {
     this.$nextTick(() => {

+ 3 - 3
vue.config.js

@@ -68,8 +68,8 @@ module.exports = {
     open : true,
     proxy: {
       '/jeecg-boot': {
-          // target: 'http://192.168.1.8:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
-          // target: 'http://192.168.1.3:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
+          // target: 'http://129.28.197.250:8804', //请求本地 需要jeecg-boot后台项目  蒙蒙
+          target: 'http://192.168.1.3:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
         // target: 'http://192.168.0.59:8088', //请求本地 需要jeecg-boot后台项目  英豪
         // target: 'http://192.168.1.62:8088', //请求本地 需要jeecg-boot后台项目  英豪
         // target: 'http://192.168.6.162:9806', //请求本地 需要jeecg-boot后台项目  祚云
@@ -80,7 +80,7 @@ module.exports = {
         // target: 'http://192.168.1.219:8081', //请求本地 需要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后台项目
+        //  target: 'http://api.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目
         // target: 'https://trac.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目
         // target: 'http://39.106.184.70:8088/', //请求本地 需要jeecg-boot后台项目
         //  target: 'http://adsp.tjyourong.com.cn/', //请求本地 需要jeecg-boot后台项目