import { ElMessage } from "element-plus"; import { basicInfoJson, scheduleBid } from './information' import { specificPositionAll } from './other' import { scene } from './scene' import { number, time } from "echarts"; import { getDay } from "@/common/common"; import { JsonInfo } from "../../originalityBasic/ts/information"; import _ from "lodash"; const specificPosition = specificPositionAll() /**格式化为文字 */ export const formatTime = (data) => { interface ITimeSlots { startTime: string, endTime: string } const timeSlots: ITimeSlots[] = []; let startTime = ''; let endTime = ''; for (let i = 0; i < data.length; i += 1) { if (data[i] == 1 && startTime == '') { let timeNum = (Math.floor(i / 2)).toString(); timeNum = Number(timeNum) < 10 ? '0' + timeNum : timeNum startTime = `${timeNum}:${i % 2 == 0 ? '00' : '30'}`; } if (data[i] == 1 && (data[i + 1] == 0 || data[i + 1] === undefined)) { let timeNum = (Math.floor((i + 1) / 2)).toString(); timeNum = Number(timeNum) < 10 ? '0' + timeNum : timeNum endTime = `${timeNum}:${(i + 1) % 2 == 0 ? '00' : '30'}`; timeSlots.push({ startTime, endTime }) startTime = ''; endTime = ''; } } return timeSlots } export const switchEvent = (v: number) => { switch (v) { case 0: return '星期一'; case 1: return '星期二'; case 2: return '星期三'; case 3: return '星期四'; case 4: return '星期五'; case 5: return '星期六'; case 6: return '星期日'; default: return '星期'; } } /**检验最大值-最小值 是否符合规则 */ const inspectMaxMin = (info, label) => { let range = info?.split('-') let arr_min = range && range[0]?.split('.') let arr_max = range && range[1]?.split('.') if ((range && isNaN(Number(range[0]))) || (range && isNaN(Number(range[1]))) || (arr_min.length > 1 && arr_min[1].length > 2) || (arr_max.length > 1 && arr_max[1].length > 2)) { ElMessage.error(`${label}请填写数字,最多支持小数点后2位`) return false } else if (Number(arr_min) < 0.01 || Number(arr_max) < 0.01 || Number(arr_min) > 20000000 || Number(arr_max) > 20000000) { ElMessage.error(`${label}超出范围0.01~20000000元`) return false } else if (!arr_min && arr_min != 0) { ElMessage.error(`请填写${label}最小值`) return false } else if (!arr_max && arr_max != 0) { ElMessage.error(`请填写${label}最大值`) return false } else { return true } } /**检验单个输入框 */ const inspectNumber = (info, label, min = 200, max = 10000000) => { let arr = String(info).split('.') if (isNaN(Number(info)) || (arr.length > 1 && arr[1].length > 2)) { ElMessage.error(`${label}请填写数字,最多支持小数点后2位`) return false } else if (Number(info) < min || Number(info) > max) { ElMessage.error(`${label}超出范围${min}~${max}元`) return false } else { return true } } /**判断一个日期是周几 */ const dayOfWeek = (day) => { // 创建一个表示特定日期的Date对象 let date = new Date(day); // 这里的日期可以根据你的需求更改 // 使用getDay()方法获取星期几 let dayOfWeek = date.getDay(); return dayOfWeek; } /** * 回显文案 * me自己的 api接口回显的 */ interface IFillBackData { data: any, type: 'me' | 'api', cb?: Function, updateScene?: any, } export const FillBackData = ({ data, type, updateScene = {}, cb }: IFillBackData) => { let copywriting: string[] = []; let site_ids: string[] = [];//广告版位 let params: any = {} let time_series_writ: [][] = []; if (data) { if (data.time_series_type == '2') { time_series_writ = (data.time_series?.split(','))?.map((v) => { let a = v.split('') return formatTime(a) }) || [] } time_series_writ = time_series_writ.filter((v) => { return v.length > 0 }) if (type == 'me') { params = { 'promoted_object_type': 'PROMOTED_OBJECT_TYPE_LEAD_AD', 'ad_form': data.ad_form, 'attribution_type': data.attribution_type, 'automatic_site': data.automatic_site, 'site_ids': data.automatic_site == '2' ? data.site_ids : '', 'display_scene': updateScene['display_scene'] ? data.display_scene : '', 'union_position_enabled': updateScene['union_position_enabled'] ? data.union_position_enabled : '', 'exclude_union_position_enabled': updateScene['exclude_union_position_enabled'] ? data.exclude_union_position_enabled : '', 'flow_optimization_enabled': updateScene['flow_optimization_enabled'] ? data.flow_optimization_enabled : '', 'search_expand_targeting_switch': data.search_scene_expand == 1 ? data.search_expand_targeting_switch : '', 'search_scene_expand': updateScene['search_scene_expand'] ? data.search_scene_expand : '', 'wechat_position': updateScene['wechat_position'] ? data.wechat_position ? data.wechat_position : null : '', 'wechat_scene': updateScene['wechat_scene'] ? data.wechat_scene : '', 'wechat_scene_official_category': updateScene['wechat_scene'] && data.wechat_scene == '1' ? data.wechat_scene_official_category : '', 'wechat_scene_mini_program': updateScene['wechat_scene'] && data.wechat_scene == '1' ? data.wechat_scene_mini_program : '', 'wechat_scene_pay_scene': updateScene['wechat_scene'] && data.wechat_scene == '1' ? data.wechat_scene_pay_scene : '', 'site_expand': updateScene['site_expand'] ? data.site_expand : '', 'auto_audience': data.auto_audience, 'excluded_converted_audience': data.excluded_converted_audience, 'expand_enabled': data.expand_enabled, 'expand_targeting': data.expand_enabled == 1 ? data.expand_targeting : '', 'smart_targeting_switch': data.smart_targeting_switch, 'unbreakable_targeting': data.unbreakable_targeting, 'wechat_ad_behaviors': data.wechat_ad_behaviors == '' ? '0' : data.wechat_ad_behaviors, 'wechat_ad_behavior_actions': data.wechat_ad_behaviors != '' ? data.wechat_ad_behavior_actions : '', 'wechat_ad_behavior_excluded_actions': data.wechat_ad_behaviors != '' ? data.wechat_ad_behavior_excluded_actions : '', 'date_model': data.date_model, 'begin_date': data.begin_date, 'end_date': data.date_model == '2' ? data.end_date : '', 'first_day_begin_time': data.first_day_begin_time, 'time_series_type': data.time_series_type, 'time_series': data.time_series_type == '2' ? data.time_series : '', 'daily_budget': data.daily_budget_radio == '1' ? 0 : Number(data.daily_budget), 'bid_mode': data.bid_mode, 'bid_way': data.smart_bid_type == 'SMART_BID_TYPE_CUSTOM' ? data.bid_way : '', 'smart_bid_type': data.bid_scene == 'BID_SCENE_UNKNOWN' ? data.smart_bid_type : '', 'bid_amount': data.bid_way == '1' ? data.bid_amount : '', 'bid_range': data.bid_way != '1' ? data.bid_range : '', 'ad_name': data.ad_name, 'dynamic_num': data.dynamic_num, 'bid_site_wechat_enabled': data.automatic_site == '1' ? data.bid_site_wechat_enabled : '' }; if (data.bid_mode == 'BID_MODE_OCPM' || data.bid_mode == 'BID_MODE_OCPC') { // bid_mode为oCPM 或者oCPC params['bid_scene'] = data.bid_scene params['bid_site'] = data.bid_site params['bid_site_details'] = data.bid_site_details params['conversion_tracking_enabled'] = data.conversion_tracking_enabled params['conversion_tracking_report_type'] = data.conversion_tracking_enabled == 1 ? data.conversion_tracking_report_type : '' params['conversion_tracking_way'] = data.conversion_tracking_enabled == 1 ? data.conversion_tracking_way : '' params['conversion_tracking_scene'] = data.conversion_tracking_enabled == 1 ? data.conversion_tracking_scene : '' params['auto_acquisition_enabled'] = data.auto_acquisition_enabled params['auto_acquisition_amount'] = data.auto_acquisition_amount params['optimization_goal'] = data.optimization_goal params['optimization_goal_name'] = data.optimization_goal_name params['forward_link_assist_enabled'] = data.forward_link_assist_enabled params['forward_link_assist'] = data.forward_link_assist_enabled == 1 ? data.forward_link_assist : '' params['bid_strategy'] = data.bid_strategy params['deep_optimize_type'] = data.deep_optimize_type params['deep_conversion_type'] = data.deep_conversion_type params['deep_conversion_behavior_spec'] = data.deep_conversion_behavior_spec params['deep_conversion_worth_spec'] = data.deep_conversion_worth_spec params['deep_bid_site'] = data.deep_bid_site params['deep_bid_site_details'] = data.deep_bid_site_details params['deep_roi_site'] = data.deep_roi_site params['deep_roi_site_details'] = data.deep_roi_site_details } else { params['bid_scene'] = 'BID_SCENE_UNKNOWN' } // console.log('params', params) // 预存时 - 报错 if (params.automatic_site == '2' && (params.site_ids == '' || !params.site_ids)) { ElMessage.error('请选择广告版位') return } if (params.begin_date == '' || !params.begin_date) { ElMessage.error('请选择投放开始日期') return } if(new Date(params.begin_date).getTime() < new Date(getDay(0,false) as string).getTime()) { ElMessage.error('开始投放日期应该不小于今日!') return } if (params.date_model == '2') { if((params.end_date == '' || !params.end_date)){ ElMessage.error('请选择投放结束日期') return } if(new Date(params.begin_date).getTime() > new Date(params.end_date).getTime()) { ElMessage.error('结束投放日期应不小于开始投放日期!') return } } if (params.time_series_type == '2' && time_series_writ.length == 0) { ElMessage.error('请选择投放时段') return } if(params.first_day_begin_time && params.first_day_begin_time != ''){ let daysOfWeek = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']; let time_series = _.cloneDeep(params.time_series)?.split(',') for(let i = 0; i < time_series.length; i++){ time_series[i] = time_series[i].split('') } let hour = _.cloneDeep(params.first_day_begin_time).split(':')[0] let week = dayOfWeek(params.begin_date) if( time_series[week == 0 ? 6 : (week - 1)][Number(hour) * 2] != 1) { ElMessage.error(`当前投放开始日期为:${params.begin_date},${daysOfWeek[week]}, 投放时间段中应包含${daysOfWeek[week]}的${params.first_day_begin_time.slice(0,5)}`) return } } if (data.daily_budget_radio == '2') { if (!inspectNumber(params.daily_budget, '日预算', 50, 20000000)) return } if (params.bid_mode == 'BID_MODE_OCPM' || params.bid_mode == 'BID_MODE_OCPC') { // bid_mode为oCPM 或者oCPC if (!params.optimization_goal || params.optimization_goal == '') { ElMessage.error('请选择优化目标') return } if (params.forward_link_assist_enabled == 1 && (!params.forward_link_assist || params.forward_link_assist == '')) { ElMessage.error('请选择助攻行为') return } if (params.deep_optimize_type != 0) { let obj = ''; let name = '' if (params.deep_conversion_type == 'DEEP_CONVERSION_BEHAVIOR') { obj = params.deep_conversion_behavior_spec name = '深度优化出价' } else { obj = params.deep_conversion_worth_spec name = '期望ROI' } if (!obj || obj == '' || JSON.parse(obj).target == '') { ElMessage.error('请选择深度优化目标') return } if (obj && obj != '') { let objInfo = JSON.parse(obj) if (params.bid_way == '1') { if (!inspectNumber(params.deep_conversion_type == 'DEEP_CONVERSION_BEHAVIOR' ? objInfo.price : objInfo.roi, name, 0.01, 20000000)) return } if (params.bid_way != '1') { if (!inspectMaxMin(`${objInfo.min}-${objInfo.max}`, `${name}范围`)) return } } } if (data.auto_acquisition_enabled == 1) { if (!inspectNumber(params.auto_acquisition_amount, '起量预算')) return } } if (params.bid_way == '1') { if (params.bid_mode == 'BID_MODE_OCPM' || params.bid_mode == 'BID_MODE_OCPC') { if (!inspectNumber(params.bid_amount, '出价', 0.01, 5000)) return } if (params.bid_mode == 'BID_MODE_CPA') { if (!inspectNumber(params.bid_amount, '出价', 1, 500)) return } if (params.bid_mode == 'BID_MODE_CPM') { if (!inspectNumber(params.bid_amount, '出价', 1.5, 999)) return } if (params.bid_mode == 'BID_MODE_CPC') { if (!inspectNumber(params.bid_amount, '出价', 0.1, 100)) return } } if (params.bid_way != '1') { if (!inspectMaxMin(params.bid_range, '出价范围')) return; } } else { params = data } if (type == 'api') { // 从后端获取数据回显时,把number变为string for (let i in params) { let typesOf = typeof params[i] if (typesOf == 'number') { params[i] = String(params[i]) } } } //对应展示文案 copywriting.push(`广告形式:${basicInfoJson['广告形式']['ad_form'].data.list.filter((v) => { return v.value == data.ad_form })[0]?.label}`) copywriting.push(`转化归因:${basicInfoJson['目标详情']['attribution_type'].data.list.filter((v) => { return v.value == data.attribution_type })[0]?.label}`) if (data.automatic_site == '1') { site_ids = ['自动版位'] } else { site_ids = [] data.site_ids.split(',').forEach((item, index) => { site_ids.push(specificPosition[item].label) }) } copywriting.push(`广告版位:${site_ids.join(',')}`) if ((updateScene['search_scene_expand'] || type == 'api') && data.search_scene_expand == 1 && data.search_expand_targeting_switch == 'SEARCH_EXPAND_TARGETING_SWITCH_OPEN') { copywriting.push(`搜索场景扩展 - 定向拓展:开启`) } if (updateScene['display_scene'] || (type == 'api' && data.display_scene)) { let arr = data.display_scene == '' ? [] : data.display_scene.split(',').map((item) => { return scene['display_scene'].data.list.filter((v) => { return v.value == item })[0]?.label }) copywriting.push(`优量汇广告展示场景:${arr.length > 0 ? arr.join(',') : '不限'}`) } copywriting.push(`行为兴趣系统优选:${basicInfoJson['定向扩展']['auto_audience'].data.list.filter((v) => { return v.value == data.auto_audience })[0]?.label}`) copywriting.push(`排除优化目标用户:${basicInfoJson['定向扩展']['excluded_converted_audience'].data.list.filter((v) => { return v.value == data.excluded_converted_audience })[0]?.label}`) // copywriting.push(`自动扩量:${basicInfoJson['定向扩展']['expand_enabled'].data.list.filter((v) => { return v.value == data.expand_enabled })[0]?.label}`) copywriting.push(`智能定向:${basicInfoJson['定向扩展']['smart_targeting_switch'].data.list.filter((v) => { return v.value == data.smart_targeting_switch })[0]?.label}`) copywriting.push(`微信再营销:${data.wechat_ad_behaviors == '' || ((!data.wechat_ad_behavior_actions || data.wechat_ad_behavior_actions == '') && (!data.wechat_ad_behavior_excluded_actions || data.wechat_ad_behavior_excluded_actions == '')) ? '关闭' : '开启'}`) copywriting.push(`投放日期:${data.date_model == '1' ? `长期投放(开始日期:${data.begin_date})` : `指定日期(开始日期:${data.begin_date} - 结束日期:${data.end_date})`}`) copywriting.push(`投放时段:${data.time_series_type == '1' ? `不限` : ''}`) if (data.time_series_type == '2' && time_series_writ.length != 0) { time_series_writ.forEach((v, idx) => { copywriting.push(`${switchEvent(idx)}:${v.map((item: { startTime: string, endTime: string }) => `${item.startTime}~${item.endTime}`)?.join('、')}`) }) } if (data.first_day_begin_time != '' && data.first_day_begin_time) { copywriting.push(`投放首日开始时间:${data.first_day_begin_time}`) } copywriting.push(`日预算:${data.daily_budget_radio == '1' ? '不限' : `${params.daily_budget}元`}`) copywriting.push(`出价方式:${scheduleBid.bid_mode.data.otherList.one.filter((v: any) => { return v.value == data.bid_mode })[0]?.label}`) let bid_scene_writ = '' if (params.bid_scene == 'BID_SCENE_UNKNOWN') { bid_scene_writ = '关闭' } else if (params.bid_scene == 'BID_SCENE_NORMAL_MAX') { bid_scene_writ = '最大转化量投放' } else if (params.bid_scene == 'BID_SCENE_NORMAL_TARGET') { bid_scene_writ = '常规投放-放量投放' } else if (params.bid_scene == 'BID_SCENE_NORMAL_AVERAGE') { bid_scene_writ = '常规投放-稳定投放' } copywriting.push(`投放场景:${bid_scene_writ}`) if (data.bid_scene == 'BID_SCENE_UNKNOWN') { copywriting.push(`出价类型:${scheduleBid.smart_bid_type.data.list.filter((v: any) => { return v.value == data.smart_bid_type })[0]?.label}`) } if (data.bid_mode == 'BID_MODE_OCPM' || data.bid_mode == 'BID_MODE_OCPC') { copywriting.push(`优化目标:${data.optimization_goal_name}`) if (data.forward_link_assist_enabled == 1) { // copywriting.push(`助攻行为:${optimizationGoal_1.filter((v: any) => { return v.value == data.forward_link_assist })[0]?.label}`) } copywriting.push(`出价策略:${scheduleBid.bid_strategy.data.list.filter((v: any) => { return v.value == data.bid_strategy })[0]?.label}`) copywriting.push(`深度转化优化:${scheduleBid.deep_optimize_type.data.list.filter((v: any) => { return v.value == data.deep_optimize_type })[0]?.label}`) if (data.deep_optimize_type != 0) { copywriting.push(`深度转化类型:${scheduleBid.deep_conversion_type.data.list.filter((v: any) => { return v.value == data.deep_conversion_type })[0]?.label}`) if (data.deep_conversion_type == 'DEEP_CONVERSION_BEHAVIOR' && data.deep_conversion_behavior_spec && data.deep_conversion_behavior_spec != '') { let obj = JSON.parse(data.deep_conversion_behavior_spec) // copywriting.push(`深度优化目标:${optimizationGoal_2.filter((v: any) => { return v.value == obj.target })[0]?.label}`) if (data.bid_way == '1') { copywriting.push(`深度优化出价:${obj.price}元`) } else { copywriting.push(`深度优化出价范围:${obj.min}元-${obj.max}元`) } } if (data.deep_conversion_type == 'DEEP_CONVERSION_WORTH' && data.deep_conversion_worth_spec && data.deep_conversion_worth_spec != '') { let obj = JSON.parse(data.deep_conversion_worth_spec) // copywriting.push(`深度优化目标:${optimizationGoal_2.filter((v: any) => { return v.value == obj.target })[0]?.label}`) if (data.bid_way == '1') { copywriting.push(`期望ROI:${obj.roi}元`) } else { copywriting.push(`期望ROI范围:${obj.min}元-${obj.max}元`) } } } copywriting.push(`一键起量:${scheduleBid.auto_acquisition_enabled.data.list.filter((v: any) => { return v.value == data.auto_acquisition_enabled })[0]?.label}`) if (data.auto_acquisition_enabled == 1) { copywriting.push(`起量预算:${data.auto_acquisition_amount}元`) } } if (data.smart_bid_type == 'SMART_BID_TYPE_CUSTOM') {//手动出价 if (data.bid_way == '1') { copywriting.push(`出价:${params.bid_amount}元`) } else { let arr = data.bid_range && data.bid_range.split('-') || [] let bid_range_min = '' let bid_range_max = '' if (arr.length > 0) bid_range_min = arr[0] if (arr.length > 1) bid_range_max = arr[1] copywriting.push(`出价范围:${bid_range_min}元-${bid_range_max}元`) } } copywriting.push(`一方数据跑量加强:${data.ecom_pkam_switch == '1' ? '开启' : '关闭'}`) copywriting.push(`广告名称:${data.ad_name}`) copywriting.push(`动态标号起始值:${data.dynamic_num}`) } cb ? cb({ 'copywriting': copywriting, 'params': params }) : '' }