朱鑫波 3 anni fa
parent
commit
1091ef77e2

+ 21 - 0
src/filters.js

@@ -309,6 +309,27 @@ const filters = {
             less: '<',//小于
             greater_equal: '≥',//大于等于
             less_equal: '≤',//小于等于
+            between:'介于'
+        }
+
+        return data[val]
+    },
+    //预警计算符号
+    cindicatorName(val) {
+        var data = {
+            charge: '金额',//'等于',
+            dayBudget: '预算',//不等于,
+            bid: '出价',//大于
+            cost: '成本',//小于
+        }
+
+        return data[val]
+    },
+    operationType(val) {
+        var data = {
+            up: '提高',//'等于',
+            down: '降低',//不等于,
+            to: '调整至',//大于
         }
 
         return data[val]

+ 1 - 1
src/views/modules/earlyWarningRules/accountClear/createClear.vue

@@ -211,7 +211,7 @@ li.chouzhen.first:before {
                                 <a-col :span="16">
                                     <a-form-item label="模板名称">
                                         <a-input
-                                            :disabled="$route.query.id"
+                                            :disabled="$route.query.preview == 'true'"
                                             v-decorator="[
                                                 'templateName',
                                                 {

+ 217 - 100
src/views/modules/earlyWarningRules/configRules.vue

@@ -21,7 +21,7 @@
                         </div>
                         <div class="input-item"> 
                              <a-form-model-item ref="eventRuleLevel"  prop="eventRuleLevel">
-                                <a-radio-group v-model="form.mediaType" :disabled="form.templateId!=null" @change="mediaTypeChange">
+                                <a-radio-group v-model="form.mediaType" :disabled="form.templateId!=null">
                                     <a-radio-button :value="3" >头条</a-radio-button>
                                     <a-radio-button :value="2">快手</a-radio-button>
                                     <!-- <a-radio-button :value="3">头条内广</a-radio-button>
@@ -118,10 +118,24 @@
                                             </a-form-model-item>   
                                         </div>
                                     </div>
-                                    
                                     <div class="row-item" >
                                         <div class="hint-item"></div>
                                         <div class="label-item">
+                                            <div class="text-item">执行操作</div>
+                                            <div class="required-item"></div>
+                                        </div>
+                                        <div class="input-item"> 
+                                             <a-form-model-item ref="ruleType"  prop="ruleType">
+                                                <a-radio-group v-model="item.operation"  @change="mediaTypeChange($event,item)">
+                                                    <a-radio-button :value="1">开启</a-radio-button>
+                                                    <a-radio-button :value="0">关闭</a-radio-button>
+                                                </a-radio-group>
+                                            </a-form-model-item>  
+                                        </div>
+                                    </div>
+                                    <div class="row-item" v-if="item.operation == 0">
+                                        <div class="hint-item"></div>
+                                        <div class="label-item">
                                             <div class="text-item">规则类型</div>
                                             <div class="required-item"></div>
                                         </div>
@@ -134,7 +148,7 @@
                                             </a-form-model-item>  
                                         </div>
                                     </div>
-                                    <div class="row-item" >
+                                    <div class="row-item"  v-if="item.operation == 0">
                                         <div class="hint-item"></div>
                                         <div class="label-item">
                                             <div class="text-item">规则必填</div>
@@ -142,14 +156,14 @@
                                         </div>
                                         <div class="input-item"> 
                                              <a-form-model-item ref="isRequired"  prop="isRequired">
-                                                <a-radio-group v-model="item.isRequired" >
+                                                <a-radio-group v-model="item.isRequired" @change="">
                                                     <a-radio-button :value="1">是</a-radio-button>
                                                     <a-radio-button :value="0">否</a-radio-button>
                                                 </a-radio-group>
                                             </a-form-model-item>  
                                         </div>
                                     </div>
-                                    <div class="row-item" v-if="item.ruleType=='group'">
+                                    <div class="row-item" v-if="item.ruleType=='group'&& item.operation == 0">
                                         <div class="hint-item"></div>
                                         <div class="label-item">
                                             <div class="text-item">规则复建</div>
@@ -157,7 +171,7 @@
                                         </div>
                                         <div class="input-item"> 
                                              <a-form-model-item ref="isCopy"  prop="isCopy">
-                                                <a-radio-group v-model="item.isCopy" >
+                                                <a-radio-group v-model="item.isCopy">
                                                     <a-radio-button :value="1">是</a-radio-button>
                                                     <a-radio-button :value="0">否</a-radio-button>
                                                 </a-radio-group>
@@ -167,7 +181,7 @@
                                     <div class="toolbox-automate-rules-create-content_rules-and-condition_rules">
                                         <div class="title">                                            
                                             <a-form-model-item ref="ruleRelationship"  prop="ruleRelationship">
-                                                <span class="condition-title">如果</span>
+                                                <span class="condition-title">{{item.operation==1?'触发机制':'如果'}}</span>
                                                 <a-select  style="width: 300px" v-model="item.ruleRelationship" :disabled="!!item.groupId">
                                                     <a-select-option  value='and'>满足以下所有条件</a-select-option>
                                                     <a-select-option  value='or'>满足以下任意条件</a-select-option>
@@ -186,9 +200,9 @@
                                                             ]">
                                                                 <a-cascader
                                                                     v-model="ele.baseIndex"
-                                                                    :options="rulesFieldList"
+                                                                    :options="item.rulesFieldList"
                                                                     placeholder="选择指标"
-                                                                    @change="baseIndexChange(ele)"
+                                                                    @change="baseIndexChange(ele,item)"
                                                                     expand-trigger="hover"
                                                                     :disabled="!!ele.ruleId"
                                                                     :fieldNames="{ label:'name', value: 'code',children: 'children'}"
@@ -208,9 +222,32 @@
                                                             </a-form-model-item>  
 
                                                         </div>
-                                                        
                                                         <div class="rules-list-item-subject" >
                                                             <a-form-model-item ref="variableType"  prop="variableType">
+                                                                <a-select   default-value="0"  :disabled="!!ele.ruleId">
+                                                                    <a-select-option  value='0'>当天数据</a-select-option>
+                                                                    <!-- <a-select-option  :value='1'>变量</a-select-option> -->
+                                                                </a-select>
+                                                            </a-form-model-item>                                                             
+                                                        </div>
+                                                        <div class="rules-list-item-subject" v-if="item.operation==1&&ele.baseIndex&&ele.baseIndex[ele.baseIndex.length-1]=='cost'">
+                                                            <a-form-model-item ref="variableType"  prop="variableType">
+                                                                <a-select   v-model="ele.cindicatorCode" :disabled="!!ele.ruleId">
+                                                                    <a-select-option  value='charge'>金额</a-select-option>
+                                                                    <a-select-option  value='dayBudget'>预算</a-select-option>
+                                                                </a-select>
+                                                            </a-form-model-item>                                                             
+                                                        </div>
+                                                        <div class="rules-list-item-subject" v-if="item.operation==1&&ele.baseIndex&&ele.baseIndex[ele.baseIndex.length-1]=='convertCost'">
+                                                            <a-form-model-item ref="variableType"  prop="variableType">
+                                                                <a-select   v-model="ele.cindicatorCode" :disabled="!!ele.ruleId">
+                                                                    <a-select-option  value='bid'>出价</a-select-option>
+                                                                    <a-select-option  value='cost'>成本</a-select-option>
+                                                                </a-select>
+                                                            </a-form-model-item>                                                             
+                                                        </div>
+                                                        <!-- <div class="rules-list-item-subject" >
+                                                            <a-form-model-item ref="variableType"  prop="variableType">
                                                                 <a-select   v-model="ele.variableType" :disabled="!!ele.ruleId">
                                                                     <a-select-option  :value='0'>常量</a-select-option>
                                                                     <a-select-option  :value='1'>变量</a-select-option>
@@ -226,11 +263,6 @@
                                                             </a-form-model-item>                                                             
                                                         </div>
 
-
-                                                        <!-- <div class="rules-list-item-subject" v-if="ele.dataType=='number'">
-                                                            <a-input-number :min="0" style="width:100%" :max="9999999.99" :step="1" v-model="ele.threshold" placeholder="请输入" :disabled="!!ele.ruleId" />
-                                                            <span style="margin-left:8px;line-height:32px">{{ele.dataUnit }}</span>
-                                                        </div> -->
                                                         <div class="rules-list-item-subject" >
                                                             <a-form-model-item ref="isUnlimited"  prop="isUnlimited">
                                                                 <a-select   v-model="ele.isUnlimited" placeholder="是否必填" :disabled="!!ele.ruleId">
@@ -238,7 +270,7 @@
                                                                     <a-select-option  :value='0'>不必填</a-select-option>
                                                                 </a-select>
                                                             </a-form-model-item>                                                             
-                                                        </div>
+                                                        </div> -->
                                                        
                                                         </template>
                                                         <div class="rules-list-item-delete" @click="deleteRulesListItem(index,ind)" v-if="ind!=0">
@@ -248,14 +280,14 @@
                                                     
                                             </div>
                                                
-                                            <div class="add-rule" @click="addCondition(item,index)" v-show="item.ruleType=='group'"> 添加条件</div>
+                                            <div class="add-rule" @click="addCondition(item,index)" v-show="item.ruleType=='group'||item.operation==1"> 添加条件</div>
                                         </div>
                                     </div>
                                     <div class="toolbox-automate-rules-create-content_rules-and-condition_rules">
                                         <div class="title">
                                             <span class="condition-title">则依次执行以下操作</span>
                                         </div>
-                                        <div class="content">
+                                        <div class="content"  v-if="item.operation==0">
                                                 <div class="rules-list">                                        
                                                     <div class="rules-list-item">
                                                         <div class="rules-list-item-subject" >
@@ -281,6 +313,40 @@
                                                 </div>
                                             
                                         </div>
+                                        <div class="content" v-else>
+                                                <div class="rules-list">                                        
+                                                    <div class="rules-list-item">
+                                                        <div class="rules-list-item-subject" >
+                                                            <a-form-model-item ref="processMethod"  prop="processMethod">
+                                                                <a-select   v-model="item.operate" :disabled="!!item.groupId">
+                                                                    <a-select-option  value='BUDGET'>修改预算</a-select-option>
+                                                                    <a-select-option  value='BID' >出价</a-select-option>
+                                                                    <a-select-option  value='TIME' >投放时间</a-select-option>
+                                                                    
+                                                                </a-select>
+                                                            </a-form-model-item>
+                                                        </div>
+                                                        <div class="rules-list-item-subject" v-if="item.operate!='TIME'">
+                                                            <a-form-model-item ref="processMethod"  prop="processMethod">
+                                                                <a-select   v-model="item.operationType" :disabled="!!item.groupId">
+                                                                    <a-select-option  value='up'>提高</a-select-option>
+                                                                    <a-select-option  value='down'>降低</a-select-option>
+                                                                    <a-select-option  value='to'>调整至</a-select-option>
+                                                                </a-select>
+                                                            </a-form-model-item>
+                                                        </div>
+                                                        <div class="rules-list-item-subject" v-if="item.operate!='TIME'">
+                                                            <a-form-model-item ref="processMethod"  prop="processMethod">
+                                                                <a-select   v-model="item.operationValue" :disabled="!!item.groupId">
+                                                                    <a-select-option  value='price'>金额</a-select-option>
+                                                                    <a-select-option  value='percent'>百分比</a-select-option>
+                                                                </a-select>
+                                                            </a-form-model-item>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            
+                                        </div>
                                     </div>
                                 </a-collapse-panel>
                                 </template>
@@ -351,13 +417,16 @@ export default {
                         groupName:'默认规则',
                         ruleRelationship:"and",
                         ruleType:'base',
+                        operation:1,
                         remark:'',
                         isRequired:1,
                         isCopy:0,
+                        rulesFieldList:[],
                         ruleDetail:[
                             {
                                 ruleName:'',
                                 baseIndex:[],
+                                
                                 indicatorCode:undefined,
                                 ruleDimension:'',
                                 dataRange:'CURRENT_DAY_DATA',
@@ -369,10 +438,13 @@ export default {
                                 dataType:'',
                                 judgeFormat:0,
                                 isUnlimited:1,
+                                cindicatorCode:'charge'
                             },
                         ],
-                        operate:'SEND',//预警方式
+                        operate:'BUDGET',//预警方式
                         sendType:'Wechat',//通知方式
+                        operationType:'up',
+                        operationValue:'price'
                     },
                    
                 ],
@@ -396,7 +468,6 @@ export default {
     },
     watch: {
         'form.templateName':function(n,o){
-            console.log(n,o)
             if(n!=o){
                 this.templateNameTrue = true
             }else{
@@ -428,7 +499,6 @@ export default {
     },
     methods: {
         blurTemplateName(){
-            console.log(this.form)
             if(this.currentRuleId){
                 if(this.templateNameTrue){
                     if(this.form.templateName!=''){
@@ -463,17 +533,14 @@ export default {
             
         },
         ruleTypeChange(item){
-            console.log(item)
             if(item.ruleType=='base'){
                 item.isCopy=0;
                 item.ruleDetail=item.ruleDetail.filter((item,index)=>{
                     return index==0
                 })
             }
-            console.log(item)
         },
         inputCheck(val){
-            console.log(val)
         },
 
 
@@ -488,12 +555,11 @@ export default {
             
         },
 
-        baseIndexChange(ele) {
-            console.log(ele,'========================执行了');         
+        baseIndexChange(ele,item) {     
             ele.indicatorCode=ele.baseIndex[1];
             ele.ruleDimension=ele.baseIndex[0];
 
-            this.rulesFieldList.forEach(element => {
+            item.rulesFieldList.forEach(element => {
                 if(element.code==ele.baseIndex[0]){
                     element.children.forEach(item=>{
                         if(item.code==ele.baseIndex[1]){
@@ -505,7 +571,7 @@ export default {
                                 ele.threshold=''
                             }
                             getAction(this.url.ruleCondition,{
-                                dataType:item.dataType
+                                dataType:item.conditionType
                             }).then(res=>{
                                 // console.log(res);
                                 ele.conditionList=[];
@@ -530,9 +596,7 @@ export default {
         onSubmit() {
             this.$refs.ruleForm.validate(valid => {
                 if (valid) {
-                    console.log('submit!',valid);
-                } else {s
-                    console.log('error submit!!');
+                } else {
                     return false;
                 }
             });
@@ -557,25 +621,30 @@ export default {
                     conditionList:[],     
                     dataType:'',  
                     judgeFormat:0,
-                    isUnlimited:1,               
+                    isUnlimited:1,      
+                    cindicatorCode:'charge'         
                 })
             }
             
         },
         collapseChange(key){
-            console.log(key)
         },
         addRule(){
+
             this.form.ruleList.push(
                 {
                     groupName:'默认规则',
                     ruleRelationship:"and",
                     ruleType:'base',
                     remark:'',
-                    operate:'SEND',//预警方式
+                    operate:'BUDGET',//预警方式
                     sendType:'Wechat',//通知方式
+                    operationType:'up',
+                    operationValue:'price',
                     isRequired:1,
+                    operation:1,
                     isCopy:0,
+                    rulesFieldList:[],
                     ruleDetail:[
                         {
                             ruleName:'',
@@ -590,19 +659,18 @@ export default {
                             conditionList:[],   
                             dataType:'', 
                             judgeFormat:0,
-                            isUnlimited:1,                     
+                            isUnlimited:1,   
+                            cindicatorCode:'charge'                  
                         },
                     ]
                 },
             )
-            console.log(this.$refs.collapse)
-            
+            this.getMediaTypeRuleField(1,this.form.ruleList[this.form.ruleList.length-1])
             this.activeKey=(this.form.ruleList.length-1)+'';
            
             
         },
         deleteRulesListItem(index,ind){
-            console.log(index,ind)
             this.form.ruleList[index].ruleDetail=this.form.ruleList[index].ruleDetail.filter((ele,i)=>{
                 return i!=ind
             })
@@ -613,12 +681,10 @@ export default {
         },
         deleteRule(event,item,index){
             event.stopPropagation();
-            console.log(item,index)
             if(item.groupId){
                 deleteAction(this.url.ruleGroupDelete,{
                     id:item.groupId
                 }).then(res=>{
-                    console.log(res);
                     if(res.success){
                         this.$message.success(res.message);
                         this.form.ruleList=this.form.ruleList.filter((ele,ind)=>{
@@ -641,7 +707,6 @@ export default {
             return labels[labels.length - 1];
         },
         ruleConditionChange(item){
-            console.log(item)
             if(item.metricValueName[1]=='COST'){
                 item.judgeType='MONEY';
             }else{
@@ -661,7 +726,6 @@ export default {
              this.$refs.ruleForm.validate(valid=> {
                 if (valid) {
                     // this.form.rulesList=this.rulesList;
-                    console.log(valid,this.form);
                     
                     this.saveLoading=true;
 
@@ -670,13 +734,11 @@ export default {
                                 let ruleList=this.form.ruleList.filter(item=>{
                                     return !item.groupId
                                 })
-                                console.log(ruleList)
                                 if(ruleList.length>0){
                                     postAction(this.url.createRuleGroup,{
                                         templateId:this.currentRuleId,
                                         ruleList
                                     }).then(res=>{
-                                        console.log(res);
                                         this.saveLoading=false;
                                         if(res.success){
                                             
@@ -699,7 +761,6 @@ export default {
                             
                         }else{
                             postAction(this.url.creativeTemplate,this.form).then(res=>{
-                                console.log(res);
                                 this.saveLoading=false;
                                 if(res.success){
                                     this.$router.push('/earlyWarningRules/index')
@@ -715,7 +776,6 @@ export default {
                     
                     
                 } else {
-                    console.log('error submit!!');
                     this.$message.error('请按提示填写必填项目!')
                     return false;
                 }
@@ -742,41 +802,53 @@ export default {
                 getAction(this.url.queryDetailById,{
                     id:this.$route.query.id
                 }).then(res=>{
-                    console.log(res);
                     // this.spinning=false;
                     if(res.success){
+                       
                         // this.spinning=false;
                         new Promise((resolve,reject)=>{
-                             getAction(this.url.fieldList,{   
-                                mediaType:res.result.mediaType,
-                                pageNo:1,
-                                pageSize:500,
-                            }).then(result=>{
-                                console.log(result);
-                                if(result.success){ 
-                                    this.rulesFieldList=result.result.map(item=>{
-                                        return {
-                                            name:item.dimensionName,
-                                            code:item.dimension,
-                                            children:item.dimensionList
-                                        }
-                                    }) 
-                                    resolve('success')
-                                }            
-                            })
+                            // this.getMediaTypeRuleField(1,this.form.ruleList[0])
+                            //  getAction(this.url.fieldList,{   
+                            //     mediaType:res.result.mediaType,
+                            //     pageNo:1,
+                            //     pageSize:500,
+                            // }).then(result=>{
+                            //     console.log(result);
+                            //     if(result.success){ 
+                            //         this.rulesFieldList=result.result.map(item=>{
+                            //             return {
+                            //                 name:item.dimensionName,
+                            //                 code:item.dimension,
+                            //                 children:item.dimensionList
+                            //             }
+                            //         }) 
+                            //         resolve('success')
+                            //     }            
+                            // })
+                            this.form = res.result
+                            this.form.ruleList=res.result.ruleList.map(b=>{
+                                return {
+                                    ...b,
+                                    rulesFieldList: []
+                                }
+                                
+                            });
+                            resolve('success')
                         }).then(data=>{
-                            if(res.result.ruleList){
-                                res.result.ruleList.map((item,index)=>{
+                            if(this.form.ruleList){
+                                this.form.ruleList.map((item,index)=>{
+                                    this.getMediaTypeRuleField(item.operation,item)
                                     item.ruleDetail.forEach((ele,ind)=>{
 
-                                        ele.baseIndex=[ele.ruleDimension,ele.indicatorCode];
+                                       
                                         getAction(this.url.ruleCondition,{
                                             dataType:ele.dataType
                                         }).then(result=>{
-                                            console.log(result)
                                             if(result.success){
                                                 ele.conditionList=result.result
-                                                console.log(this.form);
+                                                 this.$nextTick(()=>{
+                                                    ele.baseIndex=[ele.ruleDimension,ele.indicatorCode];
+                                                })
                                                 this.form={};
                                                 this.form=res.result
                                             }
@@ -784,7 +856,7 @@ export default {
                                     })
                                 })
 
-                                this.form=res.result;
+                                // this.form=res.result;
                                 this.spinning=false
                             }else{
                                 
@@ -811,28 +883,68 @@ export default {
 
         },
 
-        mediaTypeChange(e){
-            console.log(e);
-            this.getMediaTypeRuleField()
+        mediaTypeChange(e,item){
+           
+            if(e.target.value == 0){
+                item.operate = 'SEND'
+            }else if(e.target.value==1){
+                item.operate = 'BUDGET'
+            }
+            item.ruleDetail = {
+                ruleName:'',
+                baseIndex:[],
+                
+                indicatorCode:undefined,
+                ruleDimension:'',
+                dataRange:'CURRENT_DAY_DATA',
+                ruleCondition:undefined,                                
+                threshold:0,
+                variableType:1,  
+                dataUnit:'',
+                conditionList:[],
+                dataType:'',
+                judgeFormat:0,
+                isUnlimited:1,
+                cindicatorCode:'charge'
+            }
+            this.$nextTick(()=>{
+                this.getMediaTypeRuleField(e.target.value,item)
+            })
+            
         },
 
-        getMediaTypeRuleField(){
+        getMediaTypeRuleField(data,itemDetail){
             this.rulesFieldList=[];
+            // console.log(itemDetail.ruleDetail)
             getAction(this.url.fieldList,{   
                 mediaType:this.form.mediaType,
+                operation:data,
                 pageNo:1,
                 pageSize:500,
             }).then(res=>{
-                console.log(res);
                 if(res.success){ 
-                    this.rulesFieldList=[];
-                    this.rulesFieldList=res.result.map(item=>{
-                        return {
-                            name:item.dimensionName,
-                            code:item.dimension,
-                            children:item.dimensionList
-                        }
-                    }) 
+                    itemDetail.rulesFieldList=[];
+                    this.$nextTick(()=>{
+                        itemDetail.ruleDetail.map(c=>{
+                            return {
+                                ...c,
+                                baseIndex:undefined,
+                                conditionList:[],
+                                ruleCondition:''
+
+                            }
+                        })
+                    })
+                    this.$nextTick(()=>{
+                        itemDetail.rulesFieldList=res.result.map(item=>{
+                            return {
+                                name:item.dimensionName,
+                                code:item.dimension,
+                                children:item.dimensionList
+                            }
+                        }) 
+                    })
+                   
                    
                 }            
             })
@@ -880,23 +992,28 @@ export default {
         // this.spinning=true;
         this.currentRuleId=this.$route.query.id
         if(!this.$route.query.id){
-            getAction(this.url.fieldList,{   
-                mediaType:this.form.mediaType,
-                pageNo:1,
-                pageSize:500,
-            }).then(res=>{
-                console.log(res);
-                if(res.success){ 
-                    this.rulesFieldList=res.result.map(item=>{
-                        return {
-                            name:item.dimensionName,
-                            code:item.dimension,
-                            children:item.dimensionList
-                        }
-                    }) 
-                    this.getTempletDetail()   
-                }            
-            })
+
+            this.getMediaTypeRuleField(1,this.form.ruleList[0])
+            // getAction(this.url.fieldList,{   
+            //     mediaType:this.form.mediaType,
+            //     pageNo:1,
+            //     pageSize:500,
+            // }).then(res=>{
+            //     console.log(res);
+            //     if(res.success){ 
+
+
+
+            //         this.rulesFieldList=res.result.map(item=>{
+            //             return {
+            //                 name:item.dimensionName,
+            //                 code:item.dimension,
+            //                 children:item.dimensionList
+            //             }
+            //         }) 
+            //         this.getTempletDetail()   
+            //     }            
+            // })
         }else{
             this.getTempletDetail()   
         }

+ 2 - 2
src/views/modules/earlyWarningRules/pushTreeSelect.vue

@@ -106,11 +106,11 @@ export default {
                     return {
                       id: i.accountId,
                       label:
-                        (i.userName.length == 2
+                        (i.userName?i.userName.length == 2
                           ? i.userName + '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0'
                           : i.userName.length == 3
                           ? i.userName + '\xa0\xa0\xa0\xa0'
-                          : i.userName) +
+                          : i.userName:'') +
                         '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0' +
                         i.accountId +
                         '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0' +

File diff suppressed because it is too large
+ 626 - 414
src/views/modules/earlyWarningRules/ruleModule.vue