123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- 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 }) : ''
- }
|