Ver Fonte

merge 文案库

jiayufei há 4 anos atrás
pai
commit
ce19f981d9

+ 2 - 9
src/views/modules/copy-library/copy-library.vue

@@ -301,7 +301,6 @@
                             </a-checkbox>
                             <img :src="item.coverUrl"/>
                             <div class="checkbox-select-time">时间:{{ item.createTime }}</div>
-                            <!-- <div class="checkbox-select-show"><a>查看视频</a></div> -->
                         </li>
                     </a-checkbox-group>
                     <a-pagination
@@ -328,12 +327,6 @@ import {getAction, postFileAction, postAction} from '@/api/manage';
 import {mapGetters} from 'vuex';
 import {urlAcount} from './copy-library-server.js';
 
-// let COS = require('cos-js-sdk-v5');
-// let cos = new COS({
-//     SecretId: 'AKIDE6IpMi8fJQRCg1iuWzFajjRs43kbbets',
-//     SecretKey: 'tXzuwMfplTTK3c9GFUyETilasvQfePu9'
-// });
-
 export default {
     name: 'copy-library',
     components: {
@@ -930,7 +923,7 @@ export default {
                 let updateFinallyResult = this.adNameTags.filter(item => finallyLenList.includes(item.name)).map(val => val.name);
                 let resultSelectSize = 0;
                 if (updateFinallyResult.length) {
-                    const inputDefaultLen = this.handleExportRules(value.length);
+                    const inputDefaultLen = this.handleExportRules(value);
                     let tagsLen = updateFinallyResult.length * 2;
                     let tagsSureLen = 0;
                     this.adNameTags.forEach(item => {
@@ -946,7 +939,7 @@ export default {
                     resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen + updateFinallyResult.length;
                 }
                 else {
-                    resultSelectSize = this.handleExportRules(value.length);
+                    resultSelectSize = this.handleExportRules(value);
                 }
                 if (resultSelectSize === 0) {
                     callback(new Error('请输入'));

+ 11 - 0
src/views/modules/creative-copywrit/creative-copywrit.less

@@ -99,6 +99,17 @@
             text-overflow: ellipsis;
         }
         .solgan-form-model {
+            /deep/ .ant-form-item-children {
+                display: contents !important;
+            }
+            .solgan-tags-change {
+                width: 430px;
+                display: flex;
+                justify-content: space-between;
+            }
+            .solgan-icon-type {
+                width: 100px;
+            }
             .examin-form-num {
                 margin-left: 10px;
                 margin-right: 5px;

+ 239 - 65
src/views/modules/creative-copywrit/creative-copywrit.vue

@@ -1222,33 +1222,53 @@
                                 :wrapper-col="wrapperCol"
                                 label=""
                             >
-                                <template v-if="item.name === defaultSolganTitle">
-                                    <a-input
-                                        v-decorator="[
-                                            item.name,
-                                            {
-                                                rules: [
-                                                    {
-                                                        required: true, message: '请输入'
-                                                    },
-                                                    {
-                                                        validator: compareToFirstPassword
-                                                    }
-                                                ],
-                                                initialValue: item.slogan
-                                            }
-                                        ]"
-                                        class="examin-form-input"
-                                        placeholder="请输入"
-                                    />
-                                    <span class="examin-form-num">{{ handleFilterSlogan(item.name) }}/30</span>
-                                    <a-icon class="examin-form-icon" type="check" @click="handleSolganCheck(item)"/>
-                                </template>
-                                <template v-else>
-                                    <span class="default-value-class">{{ item.slogan }}</span>
-                                    <a-icon class="examin-form-icon" type="edit" @click="handleSolganEdit(item)"/>
-                                </template>
-                                <a-icon class="examin-form-icon icon-delete" type="delete" @click="handleDelSolgan(item)"/>
+                                <div style="width: 500px;">
+                                    <template v-if="item.name === defaultSolganTitle">
+                                        <a-input
+                                            v-decorator="[
+                                                item.name,
+                                                {
+                                                    rules: [{validator: validatePass, trigger: 'blur'}],
+                                                    initialValue: item.value
+                                                }
+                                            ]"
+                                            class="examin-form-input"
+                                            placeholder="请输入"
+                                            @change="handleSloganSearchChange($event, item.name, item.id)"
+                                        />
+                                        <span class="examin-form-num">{{ item.lenSize }}/30</span>
+                                        <a-icon class="examin-form-icon" type="check" @click="handleSolganCheck(item)"/>
+                                    </template>
+                                    <template v-else>
+                                        <span class="default-value-class">{{ item.slogan }}</span>
+                                        <a-icon class="examin-form-icon" type="edit" @click="handleSolganEdit(item)"/>
+                                    </template>
+                                    <a-icon class="examin-form-icon icon-delete" type="delete" @click="handleDelSolgan(item)"/>
+                                </div>
+                                <div v-if="item.name === defaultSolganTitle" class="ad-name-tags-class solgan-tags-change">
+                                    <div v-if="item.tabStatus === 'alone'" class="name-tags-left">
+                                        <a-tag
+                                            v-for="val in item.updateTagsList"
+                                            :key="val.id"
+                                            color="#1890ff"
+                                            @click="handleSloganAddTags(val.name, item.name, item.id)"
+                                        >
+                                            + {{ val.name }}
+                                        </a-tag>
+                                    </div>
+                                    <div v-if="item.tabStatus === 'all'" class="name-tags-left">
+                                        <a-tag
+                                            v-for="val in item.defaultTagsList"
+                                            :key="val.id"
+                                            color="#1890ff"
+                                            @click="handleSloganAddTags(val.name, item.name, item.id)"
+                                        >
+                                            + {{ val.name }}
+                                        </a-tag>
+                                    </div>
+                                    <div v-if="item.tabStatus === 'alone'" class="solgan-icon-type"><a @click="handleExaminMoreList(item.id, 'more')">更多</a></div>
+                                    <div v-if="item.tabStatus === 'all'" class="solgan-icon-type"><a @click="handleExaminMoreList(item.id, 'little')">收起</a></div>
+                                </div>
                             </a-form-item>
                         </a-form>
                         <span v-else class="solgan-title-header">暂无</span>
@@ -2003,6 +2023,22 @@ export default {
             this.searchQuery();
             this.checkArr = [];
         },
+        handleExaminMoreList(val, type) {
+            if (type === 'more') {
+                this.slogansDetail.forEach(item => {
+                    if (item.id === val) {
+                        item.tabStatus = 'all';
+                    }
+                });
+            }
+            else if (type === 'little') {
+                this.slogansDetail.forEach(item => {
+                    if (item.id === val) {
+                        item.tabStatus = 'alone';
+                    }
+                });
+            }
+        },
         handleMoreTagsShow(val, type) {
             if (type === 'more') {
                 this.defaultFormList.forEach(item => {
@@ -2034,28 +2070,26 @@ export default {
         validatePass(rule, value, callback) {
             this.$nextTick(() => {
                 let finallyLenList = this.handleJudgeExec(value);
-                console.log(finallyLenList, 'finallyLenList---finallyLenList--finallyLenList');
                 let updateFinallyResult = this.adNameTags.filter(item => finallyLenList.includes(item.name)).map(val => val.name);
-                console.log(updateFinallyResult, '000000000000');
                 let resultSelectSize = 0;
-                if (finallyLenList.length) {
-                    const inputDefaultLen = value.length;
-                    let tagsLen = finallyLenList.length * 4;
+                if (updateFinallyResult.length) {
+                    const inputDefaultLen = this.handleExportRules(value);
+                    let tagsLen = updateFinallyResult.length * 2;
                     let tagsSureLen = 0;
                     this.adNameTags.forEach(item => {
-                        finallyLenList.forEach(val => {
+                        updateFinallyResult.forEach(val => {
                             if (item.name === val) {
                                 tagsSureLen += item.maxWordLen;
                             }
                         });
                     });
-                    finallyLenList.forEach(item => {
+                    updateFinallyResult.forEach(item => {
                         tagsLen += item.length;
                     });
-                    resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen;
+                    resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen + updateFinallyResult.length;
                 }
                 else {
-                    resultSelectSize = value.length;
+                    resultSelectSize = this.handleExportRules(value);
                 }
                 if (resultSelectSize === 0) {
                     callback(new Error('请输入'));
@@ -2072,7 +2106,7 @@ export default {
             });
         },
         handleJudgeExec(item) {
-            let re = /\{\{(.+?)\}\}/g;
+            let re = /\{(.+?)\}/g;
             let array = [];
             let temp;
             while ((temp = re.exec(item))) {
@@ -2080,6 +2114,59 @@ export default {
             };
             return array;
         },
+        handleSloganAddTags(item, field, formId) {
+            let node = document.getElementById(field);
+            let startPos = node.selectionStart; // input 第0个字符到选中的字符
+            let endPos = node.selectionEnd; // 选中的字符到最后的字符
+            let txt = node.value;
+            this.$nextTick(() => {
+                let finallyLenList = this.handleJudgeExec(txt);
+                let updateFinallyResult = this.adNameTags.filter(item => finallyLenList.includes(item.name)).map(val => val.name);
+                if (updateFinallyResult.length >= 2) {
+                    this.$message.error('最多选择两个词包');
+                    return;
+                }
+                if (startPos === 0 || endPos === 0) {
+                    txt += '{' + item + '}';
+                    this.solganForm.setFieldsValue({[field]: txt});
+                }
+                else {
+                    this.solganForm.setFieldsValue({[field]: txt.substring(0, startPos) + '{' + item + '}' + txt.substring(endPos)});
+                    node.selectionStart = startPos + item.length + 6;
+                    node.selectionEnd = startPos + item.length + 6;
+                }
+                node.focus();
+                node.blur();
+            });
+            this.$nextTick(() => {
+                const dynamicWordPackIds = [];
+                let changeData = this.handleJudgeExec(this.solganForm.getFieldsValue()[field]);
+                let updateChangeData = this.adNameTags.filter(item => changeData.includes(item.name)).map(val => val.name);
+                const inputDefaultLen = this.handleExportRules(this.solganForm.getFieldsValue()[field]);
+                let tagsLen = updateChangeData.length * 2;
+                let tagsSureLen = 0;
+                let resultSelectSize = 0;
+                this.adNameTags.forEach(item => {
+                    updateChangeData.forEach(val => {
+                        if (item.name === val) {
+                            tagsSureLen += item.maxWordLen;
+                            dynamicWordPackIds.push(item.creativeWordId);
+                        }
+                    });
+                });
+                updateChangeData.forEach(item => {
+                    tagsLen += item.length;
+                });
+                resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen + updateChangeData.length;
+                this.slogansDetail.forEach(item => {
+                    if (item.id === formId) {
+                        item.lenSize = resultSelectSize;
+                        item.value = this.solganForm.getFieldsValue()[field];
+                        item.wordPackId = dynamicWordPackIds;
+                    }
+                });
+            });
+        },
         // 点击获取光标位置进行字段插入
         handleGetChangeAll(item, field, formId) {
             let node = document.getElementById(field);
@@ -2094,11 +2181,11 @@ export default {
                     return;
                 }
                 if (startPos === 0 || endPos === 0) {
-                    txt += '{{' + item + '}}';
+                    txt += '{' + item + '}';
                     this.examinForm.setFieldsValue({[field]: txt});
                 }
                 else {
-                    this.examinForm.setFieldsValue({[field]: txt.substring(0, startPos) + '{{' + item + '}}' + txt.substring(endPos)});
+                    this.examinForm.setFieldsValue({[field]: txt.substring(0, startPos) + '{' + item + '}' + txt.substring(endPos)});
                     node.selectionStart = startPos + item.length + 6;
                     node.selectionEnd = startPos + item.length + 6;
                 }
@@ -2109,8 +2196,8 @@ export default {
                 const dynamicWordPackIds = [];
                 let changeData = this.handleJudgeExec(this.examinForm.getFieldsValue()[field]);
                 let updateChangeData = this.adNameTags.filter(item => changeData.includes(item.name)).map(val => val.name);
-                const inputDefaultLen = this.examinForm.getFieldsValue()[field].length;
-                let tagsLen = updateChangeData.length * 4;
+                const inputDefaultLen = this.handleExportRules(this.examinForm.getFieldsValue()[field]);
+                let tagsLen = updateChangeData.length * 2;
                 let tagsSureLen = 0;
                 let resultSelectSize = 0;
                 this.adNameTags.forEach(item => {
@@ -2124,7 +2211,7 @@ export default {
                 updateChangeData.forEach(item => {
                     tagsLen += item.length;
                 });
-                resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen;
+                resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen + updateChangeData.length;
                 this.defaultFormList.forEach(item => {
                     if (item.id === formId) {
                         item.lenSize = resultSelectSize;
@@ -2247,6 +2334,20 @@ export default {
                 callback();
             }
         },
+        handleExportRules(value) {
+            let cnReg = /([\u4e00-\u9fa5]|[\u3000-\u303F]|[\uFF00-\uFF60])/;
+            let length = 0;
+            let strArr = value.split('');
+            strArr.forEach(item => {
+                if (cnReg.test(item)) {
+                    length += 1;
+                }
+                else {
+                    length += 0.5;
+                }
+            });
+            return Math.ceil(length);
+        },
         handleGetQueryById() {
             getAction('/ctop/materialInfo/queryById', {
                 id: this.id
@@ -2256,14 +2357,35 @@ export default {
                     this.name = res.result.watermarkCode;
                     this.materialName = res.result.materialName;
                     res.result.slogans.forEach(item => {
+                        let finallyLenList = this.handleJudgeExec(item.slogan);
+                        let resultSelectSize = 0;
+                        if (finallyLenList.length) {
+                            const inputDefaultLen = this.handleExportRules(item.slogan);
+                            let tagsLen = finallyLenList.length * 2;
+                            let tagsSureLen = 0;
+                            this.adNameTags.forEach(item => {
+                                finallyLenList.forEach(val => {
+                                    if (item.name === val) {
+                                        tagsSureLen += item.maxWordLen;
+                                    }
+                                });
+                            });
+                            finallyLenList.forEach(item => {
+                                tagsLen += item.length;
+                            });
+                            resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen + finallyLenList.length;
+                        }
+                        else {
+                            resultSelectSize = this.handleExportRules(item.slogan);
+                        }
                         item.name = 'username' + item.id;
+                        item.value = item.slogan;
+                        item.lenSize = resultSelectSize;
+                        item.tabStatus = 'alone';
+                        item.defaultTagsList = this.adNameTags;
+                        item.updateTagsList = this.adNameTags.slice(0, 4);
                     });
                     this.slogansDetail = res.result.slogans;
-                    this.$nextTick(() => {
-                        this.slogansDetail.forEach(item => {
-                            this.solganForm.setFieldsValue({[item.name]: item.slogan});
-                        });
-                    });
                 }
                 else {
                     this.showUrlWater = null;
@@ -2286,14 +2408,19 @@ export default {
             });
         },
         handleSolganCheck(data) {
+            let changeSlogan = this.slogansDetail;
+            changeSlogan.forEach(item => {
+                item.title = item.value;
+                item.creative_word_ids = item.wordPackId;
+            });
             this.solganForm.validateFields(err => {
                 if (!err) {
-                    const paramsData = this.solganForm.getFieldsValue();
                     this.defaultSolganStatus = 'input';
                     this.defaultSolganTitle = 'test';
                     postAction('/ctop/bytedanceVideoSlogenInfo/edit', {
                         id: data.id,
-                        slogan: paramsData[data.name]
+                        slogan: changeSlogan.filter(item => item.id === data.id)[0].title,
+                        creativeWordIds: changeSlogan.filter(item => item.id === data.id)[0].creative_word_ids.join(',')
                     }).then(res => {
                         if (res.success) {
                             this.$message.success('修改成功');
@@ -2304,6 +2431,7 @@ export default {
             });
         },
         handleSolganEdit(data) {
+            console.log(data, 'data---修改');
             if (this.defaultSolganStatus === 'edit') {
                 this.$message.error('请先完成上一次的修改');
                 return;
@@ -2314,6 +2442,36 @@ export default {
                 this.solganForm.setFieldsValue({[data.name]: data.slogan});
             });
         },
+        handleSloganSearchChange(e, field, formId) {
+            this.$nextTick(() => {
+                const dynamicWordPackIds = [];
+                let finallyLenList = this.handleJudgeExec(e.target.value);
+                let updateFinallyResult = this.adNameTags.filter(item => finallyLenList.includes(item.name)).map(val => val.name);
+                const inputDefaultLen = this.handleExportRules(e.target.value);
+                let tagsLen = updateFinallyResult.length * 2;
+                let tagsSureLen = 0;
+                let resultSelectSize = 0;
+                this.adNameTags.forEach(item => {
+                    updateFinallyResult.forEach(val => {
+                        if (item.name === val) {
+                            tagsSureLen += item.maxWordLen;
+                            dynamicWordPackIds.push(item.creativeWordId);
+                        }
+                    });
+                });
+                updateFinallyResult.forEach(item => {
+                    tagsLen += item.length;
+                });
+                resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen + updateFinallyResult.length;
+                this.slogansDetail.forEach(item => {
+                    if (item.id === formId) {
+                        item.lenSize = resultSelectSize;
+                        item.wordPackId = dynamicWordPackIds;
+                        item.value = e.target.value;
+                    }
+                });
+            });
+        },
         handleFormInputChang(e, field, formId) {
             const changeFiled = [];
             this.defaultFormList.forEach(item => {
@@ -2330,8 +2488,8 @@ export default {
                 const dynamicWordPackIds = [];
                 let finallyLenList = this.handleJudgeExec(this.examinForm.getFieldsValue()[field]);
                 let updateFinallyResult = this.adNameTags.filter(item => finallyLenList.includes(item.name)).map(val => val.name);
-                const inputDefaultLen = this.defaultFormList.filter(item => item.id === formId)[0].value.length;
-                let tagsLen = updateFinallyResult.length * 4;
+                const inputDefaultLen = this.handleExportRules(this.defaultFormList.filter(item => item.id === formId)[0].value);
+                let tagsLen = updateFinallyResult.length * 2;
                 let tagsSureLen = 0;
                 let resultSelectSize = 0;
                 this.adNameTags.forEach(item => {
@@ -2345,7 +2503,7 @@ export default {
                 updateFinallyResult.forEach(item => {
                     tagsLen += item.length;
                 });
-                resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen;
+                resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen + updateFinallyResult.length;
                 this.defaultFormList.forEach(item => {
                     if (item.id === formId) {
                         item.lenSize = resultSelectSize;
@@ -2459,8 +2617,8 @@ export default {
                             let finallyLenList = this.handleJudgeExec(item.slogan);
                             let resultSelectSize = 0;
                             if (finallyLenList.length) {
-                                const inputDefaultLen = item.slogan.length;
-                                let tagsLen = finallyLenList.length * 4;
+                                const inputDefaultLen = this.handleExportRules(item.slogan);
+                                let tagsLen = finallyLenList.length * 2;
                                 let tagsSureLen = 0;
                                 this.adNameTags.forEach(item => {
                                     finallyLenList.forEach(val => {
@@ -2472,7 +2630,7 @@ export default {
                                 finallyLenList.forEach(item => {
                                     tagsLen += item.length;
                                 });
-                                resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen;
+                                resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen + finallyLenList.length;
                             }
                             else {
                                 resultSelectSize = item.slogan.length;
@@ -2485,11 +2643,6 @@ export default {
                             item.updateTagsList = this.adNameTags.slice(0, 4);
                         });
                         this.defaultFormList = res.result.slogans;
-                        // this.$nextTick(() => {
-                        //     this.defaultFormList.forEach(item => {
-                        //         this.defaultFormList.setFieldsValue({[item.name]: item.slogan});
-                        //     });
-                        // });
                     }
                     else {
                         for (let i = 0; i < 3; i++) {
@@ -2984,14 +3137,35 @@ export default {
                     this.name = res.result.watermarkCode;
                     this.materialName = res.result.materialName;
                     res.result.slogans.forEach(item => {
+                        let finallyLenList = this.handleJudgeExec(item.slogan);
+                        let resultSelectSize = 0;
+                        if (finallyLenList.length) {
+                            const inputDefaultLen = this.handleExportRules(item.slogan);
+                            let tagsLen = finallyLenList.length * 2;
+                            let tagsSureLen = 0;
+                            this.adNameTags.forEach(item => {
+                                finallyLenList.forEach(val => {
+                                    if (item.name === val) {
+                                        tagsSureLen += item.maxWordLen;
+                                    }
+                                });
+                            });
+                            finallyLenList.forEach(item => {
+                                tagsLen += item.length;
+                            });
+                            resultSelectSize = inputDefaultLen - tagsLen + tagsSureLen + finallyLenList.length;
+                        }
+                        else {
+                            resultSelectSize = this.handleExportRules(item.slogan);
+                        }
                         item.name = 'username' + item.id;
+                        item.value = item.slogan;
+                        item.lenSize = resultSelectSize;
+                        item.tabStatus = 'alone';
+                        item.defaultTagsList = this.adNameTags;
+                        item.updateTagsList = this.adNameTags.slice(0, 4);
                     });
                     this.slogansDetail = res.result.slogans;
-                    this.$nextTick(() => {
-                        this.slogansDetail.forEach(item => {
-                            this.solganForm.setFieldsValue({[item.name]: item.slogan});
-                        });
-                    });
                 }
                 else {
                     this.showUrlWater = null;

+ 28 - 15
src/views/modules/headline-view/headline-view.vue

@@ -2,7 +2,7 @@
     <div class="accountPage">
         <div class="bodyBox accountBody">
             <div class="accountBodyLeft">
-                <div class="accountBodyLeftCost">
+                <div class="accountBodyLeftCost" @click.capture="handleAccountBodyCost">
                     <div class="accountBodyLeftCostLeft">
                         <div class="top">
                             <div class="title">花费</div>
@@ -66,25 +66,26 @@
                     <div class="top">                       
                         <div class="item" v-for="item in throwColumns" :key="item.dataIndex">
                             <div class="todyCost">
-                                <span v-if="item.type === 'spend'">{{ Number(item.today) | decimalsHandle }}</span>
-                                <span v-else-if="item.type === 'double'">{{ Number(item.today) | decimalsHandle }}</span>
-                                <span v-else-if="item.type === 'string'">{{ Number(item.today) | decimalsHandle }}</span>
-                                <span v-else-if="item.type === 'int'">{{ item.today !== 0 ? item.today + '%' : 0 }}</span>
-                                <span v-else-if="item.type === 'average'">{{ Number(item.today) | decimalsHandle }}</span>
-                                <span class="sign">
+                                <!-- <span v-if="item.type === 'spend'">{{ Number(item.today) | decimalsHandle }}</span> -->
+                                <span v-if="item.type === 'double'">{{ Number(item.today) | decimalsHandle }}</span>
+                                <span v-if="item.type === 'string'">{{ Number(item.today) | decimalsHandle }}</span>
+                                <span v-if="item.type === 'int'">{{ item.today !== 0 ? item.today + '%' : 0 }}</span>
+                                <span v-if="item.type === 'average'">{{ Number(item.today) | decimalsHandle }}</span>
+                                <span v-if="item.type !== 'spend'" class="sign">
                                     <a-icon type="rise" class="rise" v-show="item.today - item.yesterday > 0"/>
                                     <a-icon type="fall" class="fall" v-show="item.today - item.yesterday < 0" />
                                 </span>
                             </div>
                             <div class="yesterdayCost">
-                                <span>/ 昨日: </span>
-                                <span v-if="item.type === 'spend'">{{ Number(item.yesterday) | decimalsHandle }}</span>
-                                <span v-else-if="item.type === 'double'">{{ Number(item.yesterday) | decimalsHandle }}</span>
-                                <span v-else-if="item.type === 'string'">{{ Number(item.yesterday) | decimalsHandle }}</span>
-                                <span v-else-if="item.type === 'int'">{{ item.yesterday !== 0 ? item.yesterday + '%' : 0 }}</span>
-                                <span v-else-if="item.type === 'average'">{{ Number(item.yesterday) | decimalsHandle }}</span>
+                                <span v-if="item.type !== 'spend'">/ 昨日: </span>
+                                <!-- <span v-if="item.type === 'spend'">{{ Number(item.yesterday) | decimalsHandle }}</span> -->
+                                <span v-if="item.type === 'double'">{{ Number(item.yesterday) | decimalsHandle }}</span>
+                                <span v-if="item.type === 'string'">{{ Number(item.yesterday) | decimalsHandle }}</span>
+                                <span v-if="item.type === 'int'">{{ item.yesterday !== 0 ? item.yesterday + '%' : 0 }}</span>
+                                <span v-if="item.type === 'average'">{{ Number(item.yesterday) | decimalsHandle }}</span>
                             </div>
                             <span
+                                v-if="item.type !== 'spend'"
                                 class="IndexName"
                                 :class="{'IndexNameActive': isActive === item.dataIndex}"
                                 @click="handleGetActiveIndexName(item)"
@@ -165,6 +166,10 @@
                         :pagination="false"
                         :scroll="{x: 1500}"
                     >
+                    <span slot="conver" slot-scope="text, record">
+                        <span v-if="record.cpaBid < text" style="color: #f00;">{{ text }}</span>
+                        <span v-else>{{ text }}</span>
+                    </span>
                     <span slot="optStatus" slot-scope="text, record">
                         <a-switch :checked="text === 'AD_STATUS_ENABLE'" @change="handleSwitchChang($event, record)"/>
                     </span>
@@ -431,8 +436,8 @@ export default {
                 },
                 {
                     title: '花费',
-                    dataIndex: 'cost',
-                    key: 'cost',
+                    dataIndex: 'costStr',
+                    key: 'costStr',
                     align: 'center',
                     width: 180,
                     sorter: (a, b) => a.cost - b.cost
@@ -507,6 +512,7 @@ export default {
                     key: 'conver',
                     align: 'center',
                     width: 180,
+                    scopedSlots: {customRender: 'conver'},
                     sorter: (a, b) => a.conver - b.conver
                 },
                 {
@@ -663,6 +669,10 @@ export default {
     },
     methods: {
         ...mapGetters(['userInfo']),
+        handleAccountBodyCost() {
+            this.isActive = 'spendCost';
+            this.initEchart('accountIndexEchart', this.initAccountIndexEchart(this.yearCostReportList, 'spendCost'));
+        },
         // 获取所有的定向包的列表
         handleGetAdAudiencePackage(account) {
             getAction(urlAcount + '/bytedance-api/advertiser/aiBytedanceAdvertiserStrategy/getAdAudiencePackage', {accountId: account})
@@ -1566,6 +1576,9 @@ export default {
             .item {
                 width: 25%;
             }
+            .item:nth-child(1) {
+                width: 0;
+            }
             .todyCost {
                 font-size: 1.2rem;
                 font-weight: 700;

+ 1 - 1
vue.config.js

@@ -77,7 +77,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:8081', //请求本地 需要jeecg-boot后台项目  赵西安
+        // 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后台项目