Files
adsManager/public/static/js/automation/automation.js
T
2025-03-05 14:02:29 +09:00

1245 lines
47 KiB
JavaScript

var selectedCell = [];
//좌측 탭 조건 텍스트
function conditionText($this){
let name = $this.attr('name');
let trId = $this.closest('tr').attr('id');
if(name == 'type'){
value = $this.find('option:selected').text()+" - ";
$("#text-"+trId+" .typeText").html(value);
}
if(name == 'type_value_status'){
$("#text-"+trId+" .typeValueText").text('');
value = $this.find('option:selected').text();
$("#text-"+trId+" .typeValueText").html(value);
}
if(name == 'type_value'){
$("#text-"+trId+" .typeValueText").text('');
value = $this.val();
$("#text-"+trId+" .typeValueText").html(value);
}
if(name == 'compare'){
$("#text-"+trId+" .compareText").text('');
value = $this.find('option:selected').text();
$("#text-"+trId+" .compareText").html(value);
}
}
//조건
function addConditionRow(uniqueId){
var row = `
<tr id="${uniqueId}">
<td>
<div class="form-flex">
<select name="type" class="form-select conditionType">
<option value="">조건 항목</option>
<option value="status">상태</option>
<option value="budget">예산</option>
<option value="dbcost">DB단가</option>
<option value="unique_total">유효DB</option>
<option value="spend">지출액</option>
<option value="margin">수익</option>
<option value="margin_rate">수익률</option>
<option value="sale">매출액</option>
<option value="conversion">DB전환률</option>
</select>
<select name="type_value_status" class="form-select conditionTypeValueStatus" style="display: none;">
<option value="">상태값 선택</option>
<option value="ON">ON</option>
<option value="OFF">OFF</option>
</select>
<input type="text" name="type_value" class="form-control conditionTypeValue" placeholder="조건값" oninput="onlyNumberLeadingDashAndDot(this);">
</div>
</td>
<td>
<div class="form-flex">
<select name="compare" class="form-select conditionCompare">
<option value="">일치여부</option>
<option value="greater">초과</option>
<option value="greater_equal">보다 크거나 같음</option>
<option value="less">미만</option>
<option value="less_equal">보다 작거나 같음</option>
<option value="equal">같음</option>
<option value="not_equal">같지않음</option>
</select>
</div>
</td>
<td>
<button class="deleteBtn" style="width:20px;flex:0">
<i class="fa fa-times"></i>
</button>
</td>
</tr>`;
var rowText = `<p id="text-${uniqueId}"><span class="typeText"></span><span class="typeValueText"></span><span class="compareText"></span></p>`;
$('#conditionTable tbody').append(row);
$('#condition-tab').append(rowText);
}
//매체/분류/ID/제목/상태 table
function getTargetAdvs(targetSearchData){
targetTable = $('#targetTable').DataTable({
"destroy": true,
"autoWidth": true,
"processing" : true,
"serverSide" : true,
"responsive": true,
"searching": false,
"ordering": true,
"deferRender": false,
'lengthChange': false,
'pageLength': 10,
"info": false,
"ajax": {
"url": "/automation/adv",
"data": targetSearchData,
"type": "GET",
"contentType": "application/json",
"dataType": "json",
"dataSrc": function(res){
return res.data;
}
},
"columnDefs": [
{ targets: [5], orderable: false},
],
"columns": [
{ "data": "media", "width": "12%"},
{ "data": "type", "width": "12%"},
{ "data": "id", "width": "26%"},
{ "data": "name", "width": "30%"},
{ "data": "status", "width": "12%",},
{
"data": null,
"width": "8%",
"render": function(){
let button = '<button class="target-btn">적용</button>';
return button;
}
},
],
"createdRow": function(row, data, dataIndex) {
$(row).attr("data-id", data.media+"_"+data.type+"_"+data.id);
},
"language": {
url: '//cdn.datatables.net/plug-ins/1.13.4/i18n/ko.json',
},
"drawCallback": function(settings) {
if($('#targetCheckedTable tbody tr').length > 0){
$selectedTargetRow = $('#targetCheckedTable tbody tr').data('id');
$('#targetTable tbody tr[data-id="'+$selectedTargetRow+'"]').addClass('selected')
}else if ($('#targetTable tbody tr').length === 0) {
addNoDataMessage('targetTable', 6);
}
},
"initComplete": function(settings, json) {
// 열 너비 강제 설정
$('#logTable').find('th, td').css('width', '');
}
});
}
function getExecAdvs(data){
execTable = $('#execTable').DataTable({
"destroy": true,
"autoWidth": true,
"processing" : true,
"serverSide" : true,
"responsive": true,
"searching": false,
"ordering": true,
"deferRender": false,
'lengthChange': false,
'pageLength': 10,
"info": false,
"ajax": {
"url": "/automation/adv",
"data": data,
"type": "GET",
"contentType": "application/json",
"dataType": "json",
"dataSrc": function(res){
return res.data;
}
},
"columns": [
{ "data": "media", "width": "10%"},
{ "data": "type", "width": "10%"},
{ "data": "id", "width": "30%"},
{ "data": "name", "width": "40%"},
{ "data": "status", "width": "10%"},
],
"createdRow": function(row, data, dataIndex) {
$(row).attr("data-id", data.media+"_"+data.type+"_"+data.id);
},
"language": {
url: '//cdn.datatables.net/plug-ins/1.13.4/i18n/ko.json',
},
});
}
//유효성 검사
function validationData(){
let $operation = $('input[name=operation]:checked').length;
let $selectTarget = $('#targetSelectTable tbody tr').length;
let $selectExec = $('#execSelectTable tbody tr').length;
let $target_create_type = $('input[name=target_create_type]:checked').val();
let $subject = $('#detailTable input[name=subject]').val();
let $slack_webhook = $('#slackSendTable input[name="slack_webhook"]').val();
let $slack_msg = $('#slackSendTable input[name="slack_msg"]').val();
if (!selectedCell || Object.keys(selectedCell).length === 0) {
alert('일정을 지정해주세요.');
$('#schedule-tab').trigger('click');
return false;
}
//대상 선택항목이 있을경우
if($selectTarget > 0){
if(!$operation){
alert('일치조건을 선택해주세요.');
$('#condition-tab').trigger('click');
$('input[name=operation]').focus();
return false;
}
var eachValid = true;
$('tr[id^="condition-"]').each(function() {
var $row = $(this);
var $conditionType = $row.find('select[name=type]').val();
var $conditionTypeValueStatus = $row.find('select[name=type_value_status]').val();
var $conditionTypeValue = $row.find('input[name=type_value]').val();
var $conditionCompare = $row.find('select[name=compare]').val();
if(!$conditionType){
alert('조건항목을 선택해주세요.');
$('#condition-tab').trigger('click');
$row.find('select[name=type]').focus();
eachValid = false;
return false;
}
if($conditionType == 'status'){
if(!$conditionTypeValueStatus){
alert('상태값을 선택해주세요.');
$('#condition-tab').trigger('click');
$row.find('select[name=type_value_status]').focus();
eachValid = false;
return false;
}
}else{
if(!$conditionTypeValue){
alert('조건값을 입력해주세요.');
$('#condition-tab').trigger('click');
$row.find('input[name=type_value]').focus();
eachValid = false;
return false;
}
}
if(!$conditionCompare){
alert('일치여부를 선택해주세요.');
$('#condition-tab').trigger('click');
$row.find('select[name=compare]').focus();
eachValid = false;
return false;
}
});
if(!eachValid){
return false;
}
}else{
var hasValue = false;
$('tr[id^="condition-"]').find('input, select').each(function() {
if($(this).val()){
hasValue = true;
return false;
}
});
if(hasValue){
alert('조건을 설정하기 위해서 대상을 적용해주세요.');
$('#condition-tab').trigger('click');
return false;
}
}
if(!$selectExec > 0){
alert('실행항목을 추가해주세요.');
$('#preactice-tab').trigger('click');
$('#showExecAdv').focus();
return false;
}
var execCheck = true;
var execCheckMsg = '';
var focusTarget = null;
$('#execSelectTable tbody tr').each(function() {
let exec_order = $(this).find('td:first input[name=exec_order]');
let exec_condition_type = $(this).find('select[name=exec_condition_type]');
let exec_condition_type_budget = $(this).find('select[name=exec_condition_type_budget]');
let exec_condition_value = '';
if(exec_order.val() == '') {
execCheck = false;
execCheckMsg = '순서를 입력해주세요.';
focusTarget = exec_order;
return false;
}
if(exec_condition_type.val() == 'status'){
exec_condition_value_input = $(this).find('select[name=exec_condition_value_status]');
exec_condition_value = exec_condition_value_input.val();
}else if(exec_condition_type.val() == 'budget'){
exec_condition_value_input = $(this).find('input[name=exec_condition_value]');
exec_condition_value = exec_condition_value_input.val();
}else{
execCheck = false;
execCheckMsg = '실행항목을 선택해주세요.';
focusTarget = exec_condition_type;
return false;
}
if(exec_condition_value == '') {
execCheck = false;
execCheckMsg = '세부항목을 입력해주세요.';
focusTarget = exec_condition_value_input;
return false;
}
if(exec_condition_type.val() == 'budget'){
if(exec_condition_type_budget.val() == ''){
execCheck = false;
execCheckMsg = '단위를 선택해주세요.';
focusTarget = exec_condition_type_budget;
return false;
}
}
});
if(!execCheck){
$('#preactice-tab').trigger('click');
alert(execCheckMsg);
focusTarget.focus();
return false;
}
if($target_create_type == 'target_seperate'){
let isMatchingRows = true;
let targetRows = $('#targetSelectTable tbody tr');
let execRows = $('#execSelectTable tbody tr');
if(targetRows.length === 0 || execRows.length === 0) {
$('#preactice-tab').trigger('click');
alert('대상 또는 실행 항목이 존재하지 않습니다.');
return false;
}
if(targetRows.length !== execRows.length) {
$('#preactice-tab').trigger('click');
alert('개별 적용의 경우 대상과 실행 테이블의 모든 항목이 동일해야 합니다.');
return false;
}
targetRows.each(function() {
let targetId = $(this).data('id').split('_').pop();
let correspondingExecRow = execRows.filter(function() {
return $(this).data('id').split('_').pop() === targetId;
});
if(correspondingExecRow.length === 0) {
isMatchingRows = false;
return false;
}
});
if (!isMatchingRows) {
$('#preactice-tab').trigger('click');
alert('개별 적용의 경우 대상과 실행의 모든 항목이 동일해야합니다.');
return false;
}
}
if (($slack_webhook && !$slack_msg) || (!$slack_webhook && $slack_msg)) {
alert('웹훅 URL과 메세지 둘 다 입력해주세요.');
$('#preactice-tab').trigger('click');
if(!$('#slackSendTable input[name="slack_webhook"]').val()){
$('#slackSendTable input[name="slack_webhook"]').focus();
} else if(!$('#slackSendTable input[name="slack_msg"]').val()){
$('#slackSendTable input[name="slack_msg"]').focus();
}
return false;
}
if(!$subject){
alert('제목을 추가해주세요.');
$('#detailTable input[name=subject]').focus();
return false;
}
return true;
}
function onlyNumberLeadingDashAndDot(inputElement) {
inputElement.value = inputElement.value.replace(/[^0-9.-]/g, '');
}
//실행 로우 DOM
let executionDom = `
<tr>
<td><input type="text" class="form-control" name="exec_order" placeholder="순서" oninput="onlyNumber(this);" maxlength="2"></td>
<td colspan="4"><div class="form-data-box"><ul><li></li><li></li><li></li></ul></div></td>
<td colspan="2">
<div class="form-flex mb5">
<select name="exec_condition_type" class="form-select">
<option value="">실행항목</option>
<option value="status">상태</option>
<option value="budget">예산</option>
</select>
</div>
<select name="exec_condition_type_budget" class="form-select">
<option value="">단위</option>
<option value="won">원</option>
<option value="percent">%</option>
</select>
</td>
<td>
<select name="exec_condition_value_status" class="form-select">
<option value="">상태값</option>
<option value="ON">ON</option>
<option value="OFF">OFF</option>
</select>
<input type="text" name="exec_condition_value" class="form-control" placeholder="예산">
</td>
<td><button class="exec_condition_except_btn"><i class="fa fa-times"></i></button></td>
</tr>`;
//대상 로우 DOM
let targetDom = `
<tr>
<td colspan="4"><div class="form-data-box"><ul><li></li><li></li><li></li></ul></div></td>
<td></td>
<td><button class="set_target_except_btn"><i class="fa fa-times"></i></button></td>
</tr>`;
//모달 수정 세팅
function setModalData(data){
$('#createAutomationBtn').hide();
$('#updateAutomationBtn').show();
$('#automationModal input[name=seq]').val(data.aa_seq);
let schedule = {};
$.each(data.aas_schedule_value, function(index, value){
if(index > 0){
schedule[index] = $.map(value, function(num){
return parseFloat(num, 10);
});
}
});
selectedCell = [];
selectedCell = schedule;
$('#scheduleTable').scheduler('val', schedule);
if(data.aas_exec_once == '1'){
$('input[name=exec_once]').prop('checked', true);
}else{
$('input[name=exec_once]').prop('checked', false);
}
if(data.targets){ //대상 탭 table tbody
data.targets.forEach(function(target, index) {
let targetIndex = index+1;
//대상 table data 입력
let $targetData = $(targetDom).clone();
$targetData.attr('data-id', `${target.media}_${target.type}_${target.id}`).attr('id', `target-${targetIndex}`)
.find('td:eq(0) ul').find('li:eq(0)').text(target.media)
.next('li').text(target.type)
.next('li').text(target.name);
$targetData.find('td:eq(1)').text(target.status);
//자동화 목록 대상 텍스트 입력되는 부분
let newTargetText = '<p id="text-target-'+targetIndex+'">* '+target.type+' - '+target.media+'<br>'+target.name+'</p>';
$('#targetSelectTable tbody tr.nodata').remove();
$('#targetSelectTable tbody').append($targetData);
$('#target-tab').append(newTargetText);
});
}
//조건
if (data.conditions) {
data.conditions.forEach(function(condition, index) {
if(index === 0) {
if(condition.operation == 'and'){
$('input[type="radio"][value="and"]').prop('checked', true);
}else{
$('input[type="radio"][value="or"]').prop('checked', true);
}
$('#condition-1 .conditionOrder').val(condition.order);
$('#condition-1 .conditionOrder').val(condition.order);
$('#condition-1 .conditionType').val(condition.type);
if(condition.type == 'status'){
$('#condition-1 .conditionTypeValue').hide();
$('#condition-1 .conditionTypeValueStatus').val(condition.type_value).show();
var conditionTypeValueText = $('#condition-1 .conditionTypeValueStatus option:selected').text();
}else{
$('#condition-1 .conditionTypeValueStatus').hide();
$('#condition-1 .conditionTypeValue').val(condition.type_value).show();
var conditionTypeValueText = $('#condition-1 .conditionTypeValue').val();
}
$('#condition-1 .conditionTypeValue').val(condition.type_value);
var conditionTypeValueText = $('#condition-1 .conditionTypeValue').val();
$('#condition-1 .conditionCompare').val(condition.compare);
$("#text-condition-1 .typeText").html($('#condition-1 .conditionType option:selected').text());
$("#text-condition-1 .typeValueText").html(conditionTypeValueText);
$("#text-condition-1 .compareText").html($('#condition-1 .conditionCompare option:selected').text());
} else { // 그 외의 항목일 경우
var uniqueId = 'condition-' + (index + 1);
addConditionRow(uniqueId);
//$(`#${uniqueId} .conditionOrder`).val(condition.order);
$(`#${uniqueId} .conditionType`).val(condition.type);
if(condition.type == 'status'){
$(`#${uniqueId} .conditionTypeValue`).hide();
$(`#${uniqueId} .conditionTypeValueStatus`).val(condition.type_value).show();
var conditionTypeValueText = $("#"+uniqueId+" .conditionTypeValueStatus option:selected").text();
}else{
$(`#${uniqueId} .conditionTypeValueStatus`).hide();
$(`#${uniqueId} .conditionTypeValue`).val(condition.type_value).show();
var conditionTypeValueText = $("#"+uniqueId+" .conditionTypeValue").val();
}
$(`#${uniqueId} .conditionTypeValue`).val(condition.type_value);
var conditionTypeValueText = $("#"+uniqueId+" .conditionTypeValue").val();
$(`#${uniqueId} .conditionCompare`).val(condition.compare);
$("#text-"+uniqueId+" .typeText").html($("#"+uniqueId+" .conditionType option:selected").text());
$("#text-"+uniqueId+" .typeValueText").html(conditionTypeValueText);
$("#text-"+uniqueId+" .compareText").html($("#"+uniqueId+" .conditionCompare option:selected").text());
}
});
}
//실행
if (data.executions && Array.isArray(data.executions)) {
data.executions.forEach(function(execution, index) {
var execIndex = index+1;
//실행 table data 입력
var $executionData = $(executionDom).clone();
$executionData
.attr('data-id', `${execution.media}_${execution.type}_${execution.id}`).attr('id', `exec-${execIndex}`)
.find('td:eq(0) input[name="exec_order"]').val(execution.order)
$executionData
.find('td:eq(1)').find('ul').find('li:eq(0)').text(execution.type)
.next('li').text(execution.name)
.next('li').text(execution.media);
// var $executionData = $(executionData); // jQuery 객체로 변환
if(execution.exec_type == 'status'){
$executionData.find('input[name="exec_condition_value"]').hide();
$executionData.find('select[name="exec_condition_type_budget"]').hide();
$executionData.find('select[name="exec_condition_type"]').val(execution.exec_type);
$executionData.find('select[name="exec_condition_value_status"]').val(execution.exec_value).show();
}else{
$executionData.find('select[name="exec_condition_value_status"]').hide();
$executionData.find('select[name="exec_condition_type"]').val(execution.exec_type);
$executionData.find('input[name="exec_condition_value"]').val(execution.exec_value).show();
$executionData.find('select[name="exec_condition_type_budget"]').val(execution.exec_budget_type).show();
}
$('#execSelectTable tbody tr.nodata').remove();
$('#execSelectTable tbody').append($executionData);
var newExecText = '<p id="text-exec-'+execIndex+'">* '+execution.type+' - '+execution.media+'<br>'+execution.name+'</p>';
$('#preactice-tab').append(newExecText);
});
}
if(data.aa_slack_webhook){
$('#slackSendTable input[name=slack_webhook]').val(data.aa_slack_webhook);
}
if(data.aa_slack_msg){
$('#slackSendTable input[name=slack_msg]').val(data.aa_slack_msg);
}
$('#detailTable input[name=subject]').val(data.aa_subject);
if(data.aa_description){
$('#detailTable textarea[name=description]').val(data.aa_description);
}
$('#detailText #subjectText').text(data.aa_subject);
$('#detailText #descriptionText').text(data.aa_description);
conditionStatusHide();
}
//대상/실행 table 데이터가 없을 경우
function addNoDataMessage(tableId, colspanWid) {
let notargetData = `<tr class="nodata"><td colspan="${colspanWid}" class="text-center pd10">데이터가 없습니다.</td></tr>`;
$(`#${tableId} tbody`).append(notargetData);
}
const notargetJs = () => addNoDataMessage('targetSelectTable', 6); //대상table
const noexecJs = () => addNoDataMessage('execSelectTable', 9); //실행table
//모달 초기화
function reset(){
selectedCell = [];
$('.scheduler-reset').trigger('click');
$('input[name=exec_once]').prop('checked', false);
$('#automationModal input[name=seq]').val('');
$('#conditionTable tbody tr:not(#condition-1)').remove()
$('#targetCheckedTable tbody tr, #targetSelectTable tbody tr, #execSelectTable tbody tr').remove();
$('#condition-1 input[name=type_value]').show();
$('#condition-1 select[name=type_value_status]').hide();
$('#myTab li').each(function(index){
let $pTags = $(this).find('p');
if(index === 1 || index === 3){
$pTags.remove();
}else if (index === 2 || index === 4) {
$pTags.first().find('span').text('');
}else{
$pTags.first().text('');
}
$pTags.not(':first').remove();
})
$('#automationModal').find('select').each(function() {
$(this).prop('selectedIndex', 0);
});
$('#automationModal').find('input[type=text], input[type=hidden], textarea').each(function() {
$(this).val('');
});
$('input[name=operation]').prop('checked', false);
$('#searchAll').prop('checked', false);
$('#showTargetAdv').prop('disabled', false);
$('#condition-tab p').show();
if ($.fn.DataTable.isDataTable('#targetTable')) {
targetTable = $('#targetTable').DataTable();
targetTable.destroy();
}
if ($.fn.DataTable.isDataTable('#execTable')) {
execTable = $('#execTable').DataTable();
execTable.destroy();
}
$('#targetTable tbody tr, #execTable tbody tr').remove();
$('#schedule-tab').trigger('click');
}
function setProcData(){
let $onceExecution = $('input[name=exec_once]').prop('checked');
let $target_create_type = $('input[name=target_create_type]:checked').val();
let $operation = $('input[name=operation]:checked').val();
let $targets = [];
let $conditions = [];
let $executions = [];
$('#targetSelectTable tbody tr').each(function(){
let $row = $(this);
let info = $row.data('id').split('_');
let media = info[0];
let type = info[1];
let id = info[2];
$targets.push({
media: media,
type: type,
id: id,
});
});
$('#conditionTable tbody tr[id^="condition-"]').each(function(){
let $row = $(this);
let type = $row.find('select[name=type]').val();
let type_value = '';
if(type == 'status'){
type_value = $row.find('select[name=type_value_status]').val();
}else{
type_value = $row.find('input[name=type_value]').val();
}
let compare = $row.find('select[name=compare]').val();
if(type){
$conditions.push({
type: type,
type_value: type_value,
compare: compare,
operation: $operation
});
}
});
$('#execSelectTable tbody tr').each(function(){
let $row = $(this);
let info = $row.data('id').split('_');
let order = $row.find('input[name=exec_order]').val();
let media = info[0];
let type = info[1];
let id = info[2];
let exec_type = $row.find('select[name=exec_condition_type]').val();
let exec_value = '';
if(exec_type == 'status'){
exec_value = $row.find('select[name=exec_condition_value_status]').val();
}else if(exec_type == 'budget'){
exec_value = $row.find('input[name=exec_condition_value]').val();
}
let exec_budget_type = $row.find('select[name=exec_condition_type_budget]').val();
$executions.push({
order: order,
media: media,
type: type,
id: id,
exec_type: exec_type,
exec_value: exec_value,
exec_budget_type: exec_budget_type
});
});
let $subject = $('#detailTable input[name=subject]').val();
let $description = $('#detailTable textarea[name=description]').val();
let $slack_webhook = $('#slackSendTable input[name=slack_webhook]').val();
let $slack_msg = $('#slackSendTable input[name=slack_msg]').val();
let $data = {
'schedule': {
'exec_once': $onceExecution,
'schedule_value': selectedCell
},
'execution': $executions,
'detail': {
'subject': $subject,
'description': $description,
'slack_webhook': $slack_webhook,
'slack_msg': $slack_msg,
}
};
if ($('#targetSelectTable tbody tr').length > 0) {
$data['target_create_type'] = $target_create_type;
$data['target'] = $targets;
$data['condition'] = $conditions;
}
return $data;
}
function conditionStatusHide(){
let targetCount = $('#targetSelectTable tbody tr').length;
if (targetCount > 1) {
$('#conditionTable select option[value=status]').hide();
}else{
$('#conditionTable select option[value=status]').show();
}
}
function setTargetExec(data)
{
data.forEach(function(target, index) {
let targetIndex = index+1;
//통합광고관리 대상 tab
let $targetData = $(targetDom).clone();
$targetData.attr('data-id', `${target.media}_${target.type}_${target.id}`).attr('id', `target-${targetIndex}`)
.find('td:eq(0) ul').find('li:eq(0)').text(target.media)
.next('li').text(target.type)
.next('li').text(target.name);
$targetData.find('td:eq(1)').text(target.status);
//통합 광고 관리 대상 텍스트 입력되는 부분
let newTargetText = '<p id="text-target-'+targetIndex+'">* '+target.type+' - '+target.media+'<br>'+target.name+'</p>';
$('#targetSelectTable tbody').append($targetData);
$('#target-tab').append(newTargetText);
});
}
function getTargetAdv(data){
$.ajax({
type: "GET",
url: "/advertisements/get-adv",
data: data,
dataType: "json",
contentType: 'application/json; charset=utf-8',
success: function(data){
setTargetExec(data);
},
error: function(error, status, msg){
alert("상태코드 " + status + "에러메시지" + msg );
}
});
}
// 미디어 버튼 클릭 이벤트 수정
$('body').on('click', '.media_btn', function() {
$(this).toggleClass('active');
});
//모달 보기
$('#automationModal').on('show.bs.modal', function(e) {
$('#execSearchWrap').show();
var $btn = $(e.relatedTarget);
if ($btn.hasClass('updateBtn')) {
$('#automationModal #targetCreateType').hide();
var id = $btn.closest('tr').data('id');
$.ajax({
type: "GET",
url: "/automation/get-automation",
data: {'id':id},
dataType: "json",
contentType: 'application/json; charset=utf-8',
success: function(data){
setModalData(data);
},
error: function(error, status, msg){
alert("상태코드 " + status + "에러메시지" + msg );
}
});
}else{
if ($btn.hasClass('advAutomationCreateBtn')) {
let selected = [];
let clickBtn = $($btn).closest('tr').data('id');
selected.push(clickBtn);
let data = {
'check': selected,
'type': $('.tab-link.active').val(),
};
getTargetAdv(data);
}
if ($btn.hasClass('checkAdvAutomationCreateBtn')) {
if($('.dataTable tbody tr.selected').length == 0){
alert('자동화를 등록할 대상을 선택해주세요.');
return false;
}
let selected = $('.dataTable tbody tr.selected').map(function(){return $(this).data('id');}).get();
let data = {
'check': selected,
'type': $('.tab-link.active').val(),
};
getTargetAdv(data);
}
conditionStatusHide();
$('#automationModal #targetCreateType').show();
$('#automationModal input[type="radio"][value="target_sum"]').prop('checked', true);
$('#automationModal input[type="radio"][value="and"]').prop('checked', true);
$('#createAutomationBtn').show();
$('#updateAutomationBtn').hide();
}
})//모달 닫기
.on('hidden.bs.modal', function(e) {
reset();
});
$.fn.scheduler.locales['ko'] = {
AM:'오전',
PM:'오후',
TIME_TITLE:'시간',
WEEK_TITLE:'요일',
WEEK_DAYS: ['월요일','화요일','수요일','목요일','금요일','토요일','일요일'],
DRAG_TIP: '시간을 드래그해주세요.',
RESET: '초기화'
};
$('#scheduleTable').scheduler({
accuracy: 2,
locale: 'ko',
onSelect: function (d) {
selectedCell = d;
}
});
$('form[name="search-target-form"]').bind('submit', function() {
let data = {
'tab': $('#targetTab li.active').data('tab'),
'stx': $('#showTargetAdv').val(),
}
getTargetAdvs(data);
return false;
});
$('form[name="search-exec-form"]').bind('submit', function() {
let searchAll = $('#searchAll').is(':checked');
let targets = $('#targetSelectTable tbody tr').length;
let adv = [];
if (!searchAll && !targets) {
alert('대상이 없을 경우 전체검색을 체크해주세요.');
$('#searchAll').focus();
return false;
}
$('#targetSelectTable tbody tr').each(function() {
let dataId = $(this).data('id');
adv.push(dataId);
});
let data = {
'tab': $('#execTab li.active').data('tab'),
'stx': $('#showExecAdv').val(),
'adv': searchAll ? null : adv,
}
getExecAdvs(data);
return false;
});
$('body').on('click', '.target-btn', function(e){
e.stopPropagation();
let $row = $(this).closest('tr');
let $td = $row.children('td');
let media = $td.eq(0).text();
let type = $td.eq(1).text();
let mediaNumber = $td.eq(2).text();
let mediaTitle = $td.eq(3).text();
let mediaStatus = $td.eq(4).text();
let newRowIdNumber = $('#targetSelectTable tbody tr').length + 1;
if ($('#targetSelectTable tbody td:contains("' + mediaTitle + '")').length > 0) {
alert("중복된 행이 존재합니다.");
return;
}
var $targetData = $(targetDom).clone();
$targetData
.attr('data-id', `${media}_${type}_${mediaNumber}`).attr('id', `target-${newRowIdNumber}`)
$targetData
.find('td:eq(0) ul li:eq(0)').text(media)
.next('li').text(type)
.next('li').text(mediaTitle);
$targetData.find('td:eq(1)').text(mediaStatus);
$('#targetSelectTable tbody tr.nodata').remove();
$targetData.appendTo('#targetSelectTable');
//자동화 목록 대상 텍스트 입력되는 부분
let newTargetText = '<p id="text-target-'+newRowIdNumber+'">* '+type+' - '+media+'<br>'+mediaTitle+'</p>';
$('#target-tab').append(newTargetText);
conditionStatusHide();
});
$('body').on('click', '.callTargetBtn', function(){
let isTargetPresent = false;
$('#targetSelectTable tbody tr').each(function() {
let media = $(this).find('td:eq(0) ul li:eq(1)').text();
if (media === '캠페인' || media === '광고그룹' || media === '광고') {
isTargetPresent = true;
return false;
}
});
if (!isTargetPresent) {
alert('불러올 대상이 존재하지 않습니다.');
return false;
}
$('#targetSelectTable tbody tr').each(function() {
let trId = $(this).data('id');
let existingIds = $('#execSelectTable tbody tr').map(function() {
return $(this).data('id');
}).get();
if (existingIds.includes(trId)) {
alert('중복된 행이 존재합니다.');
return false;
}
let data = trId.split('_');
let media = data[0];
let type = data[1];
let mediaNumber = data[2];
let mediaTitle = $(this).find('td:eq(0) ul li:eq(2)').text();
if (type == '캠페인' || type == '광고그룹' || type == '광고') {
$('#execSelectTable tbody tr.nodata').remove();
let newRowIdNumber = $('#execSelectTable tbody tr').length + 1;
var $executionData = $(executionDom).clone();
$executionData
.attr('data-id', `${media}_${type}_${mediaNumber}`).attr('id', `exec-${newRowIdNumber}`)
.find('td:eq(0) input[name="exec_order"]').val(newRowIdNumber)
$executionData
.find('td:eq(1)').find('ul').find('li:eq(0)').text(type)
.next('li').text(mediaTitle)
.next('li').text(media);
$executionData.find('input[name="exec_condition_value"]').hide();
$executionData.find('select[name="exec_condition_type_budget"]').hide();
if (type === '광고' || (media == '구글' && type == '광고그룹')) {
$executionData.find('select[name="exec_condition_type"] option[value="budget"]').hide();
$executionData.find('select[name="exec_condition_value_status"]').show();
}else{
$executionData.find('select[name="exec_condition_value_status"]').hide();
}
$executionData.appendTo('#execSelectTable tbody');
let newExecText = '<p id="text-exec-'+newRowIdNumber+'">* '+type+' - '+media+'<br>'+mediaTitle+'';
$('#preactice-tab').append(newExecText);
}
});
});
//실행 자동화 table 20240711
$('body').on('click', '#execTable tbody tr', function(){
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
}else {
$(this).addClass('selected');
let trId = $(this).data('id');
$('#execSelectTable tbody tr.nodata').remove();
let newRowIdNumber = $('#execSelectTable tbody tr').length + 1;
let existingIds = $('#execSelectTable tbody tr').map(function() {
return $(this).data('id');
}).get();
if (existingIds.includes(trId)) {
alert('중복된 행이 존재합니다.');
return false;
}
let media = $(this).find('td:eq(0)').text();
let type = $(this).find('td:eq(1)').text();
let mediaNumber = $(this).find('td:eq(2)').text();
let mediaTitle = $(this).find('td:eq(3)').text();
var $executionData = $(executionDom).clone();
$executionData
.attr('data-id', `${media}_${type}_${mediaNumber}`).attr('id', `exec-${newRowIdNumber}`)
.find('td:eq(0) input[name="exec_order"]').val(newRowIdNumber)
$executionData
.find('td:eq(1)').find('ul').find('li:eq(0)').text(type)
.next('li').text(mediaTitle)
.next('li').text(media);
$executionData.find('input[name="exec_condition_value"]').hide();
$executionData.find('select[name="exec_condition_type_budget"]').hide();
if (type === '광고' || (media == '구글' && type == '광고그룹')) {
$executionData.find('select[name="exec_condition_type"] option[value="budget"]').hide();
$executionData.find('select[name="exec_condition_value_status"]').show();
}else{
$executionData.find('select[name="exec_condition_value_status"]').hide();
}
$executionData.appendTo('#execSelectTable tbody');
let selectedMediaTd = $(this).children('td').eq(0).text();
let selectedTypeTd = $(this).children('td').eq(1).text();
let selectedNameTd = $(this).children('td').eq(3).text();
let newExecText = '<p id="text-exec-'+newRowIdNumber+'">* '+selectedTypeTd+' - '+selectedMediaTd+'<br>'+selectedNameTd+'';
$('#preactice-tab').append(newExecText);
}
});
$('body').on('click', '#targetTab li', function(){
$('#targetTab li').removeClass('active');
$(this).addClass('active');
let $selectRow = $('#targetCheckedTable tbody tr').data('id');
let $selectRowCount = $('#targetCheckedTable tbody tr').length;
if($selectRowCount > 0){
let adv = [];
adv.push($selectRow);
let data = {
'tab': $('#targetTab li.active').data('tab'),
'adv': adv
}
getTargetAdvs(data);
}
});
//합산적용, 개별적용
$('body').on('change', '#targetCreateType input[name=target_create_type]', function() {
//상태 선택
let type = $(this).val();
if(type == 'target_seperate'){
$('#execSearchWrap').hide();
}else{
$('#execSearchWrap').show();
}
});
$('body').on('click', '#execTab li', function(){
$('#execTab li').removeClass('active');
$(this).addClass('active');
});
$('body').on('click', '#conditionTable .btn-add', function(){
let currentRowCount = $('#conditionTable tbody tr').length;
let uniqueId = 'condition-' + (currentRowCount + 1);
addConditionRow(uniqueId);
});
$('body').on('change', '#conditionTable select[name=type]', function() {
//상태 선택
let type = $(this).val();
let rowId = $(this).closest('tr').attr('id');
if(type == 'status'){
$('#text-'+rowId+" .typeValueText").text('');
$(this).siblings('input[name=type_value]').val('').hide();
$(this).closest('tr').find('select[name=compare]').children('option:not([value="equal"], [value="not_equal"])').hide();
$(this).siblings('select[name=type_value_status]').show();
}else{
if($('#text-'+rowId+" .typeValueText").text() == 'ON' || $('#text-'+rowId+" .typeValueText").text() == 'OFF'){
$('#text-'+rowId+" .typeValueText").text('');
}
$(this).siblings('select[name=type_value_status]').val('').hide();
$(this).closest('tr').find('select[name=compare]').children('option').show();
$(this).siblings('input[name=type_value]').show();
}
});
$('body').on('change', '#conditionTable input, #conditionTable select', function() {
let $this = $(this);
conditionText($this);
});
$('body').on('change', '#execSelectTable tbody tr select[name=exec_condition_type]', function() {
let value = $(this).val();
if(value == 'status'){
$(this).closest('tr').find('input[name=exec_condition_value]').val('').hide();
$(this).closest('tr').find('select[name=exec_condition_type_budget]').val('').hide();
$(this).closest('tr').find('select[name=exec_condition_value_status]').show();
}else if(value == 'budget'){
$(this).closest('tr').find('select[name=exec_condition_value_status]').val('').hide();
$(this).closest('tr').find('input[name=exec_condition_value]').show();
$(this).closest('tr').find('select[name=exec_condition_type_budget]').show();
}
});
$('body').on('change', '#execSelectTable tfoot select[name=all_exec_condition_type]', function(){
let value = $(this).val();
if(value == 'status'){
$('#execSelectTable tbody select[name=exec_condition_type]').val(value);
$('#execSelectTable tbody select[name=exec_condition_type]').trigger('change');
$(this).closest('tr').find('input[name=all_exec_condition_value]').val('').hide();
$(this).closest('tr').find('select[name=all_exec_condition_type_budget]').val('').hide();
$(this).closest('tr').find('select[name=all_exec_condition_value_status]').show();
}else if(value == 'budget'){
$('#execSelectTable tbody tr').each(function() {
let media = $(this).find('td').eq(1).text();
let type = $(this).find('td').eq(2).text();
if(type == '광고' || (media == '구글' && type == '광고그룹')) {
return;
}else{
$(this).find('select[name=exec_condition_type]').val(value).trigger('change');
}
});
$(this).closest('tr').find('select[name=all_exec_condition_value_status]').val('').hide();
$(this).closest('tr').find('input[name=all_exec_condition_value]').show();
$(this).closest('tr').find('select[name=all_exec_condition_type_budget]').show();
}
});
$('body').on('change', '#execSelectTable tfoot select[name=all_exec_condition_value_status]', function(){
let value = $(this).val();
$('#execSelectTable tbody tr').each(function() {
let $select = $(this).find('select[name=exec_condition_type]');
let selectedOption = $select.find('option:selected').val();
if(selectedOption === 'status') {
$(this).find('select[name=exec_condition_value_status]').val(value);
}
});
});
$('body').on('input', '#execSelectTable tfoot input[name=all_exec_condition_value]', function(){
let value = $(this).val();
$('#execSelectTable tbody tr').each(function() {
let $select = $(this).find('select[name=exec_condition_type]');
let selectedOption = $select.find('option:selected').val();
if(selectedOption === 'budget') {
$(this).find('input[name=exec_condition_value]').val(value);
}
});
});
$('body').on('change', '#execSelectTable tfoot select[name=all_exec_condition_type_budget]', function(){
let value = $(this).val();
$('#execSelectTable tbody tr').each(function() {
let $select = $(this).find('select[name=exec_condition_type]');
let selectedOption = $select.find('option:selected').val();
if(selectedOption === 'budget') {
$(this).find('select[name=exec_condition_type_budget]').val(value);
}
});
});
$('body').on('click', '.set_target_except_btn', function() {
let rowId = $(this).closest('tr').attr('id');
$(this).closest('tr').remove();
$('#target-tab #text-'+rowId).remove();
if($('#targetSelectTable tbody tr').length === 0) {
notargetJs();
}
conditionStatusHide();
});
$('body').on('click', '.exec_condition_except_btn', function() {
$(this).closest('tr').remove();
let rowId = $(this).closest('tr').attr('id');
$('#preactice-tab #text-'+rowId).remove();
if($('#execSelectTable tbody tr').length === 0) {
noexecJs();
}
});
$('body').on('click', '.deleteBtn', function() {
$(this).closest('tr').remove();
let rowId = $(this).closest('tr').attr('id');
$('#condition-tab #text-'+rowId).remove();
});
$('body').on('focusout', '#detailTable input[name=subject]', function() {
let detailTextSubject = $(this).val();
$('#detailText #subjectText').text(detailTextSubject);
});
$('body').on('focusout', '#detailTable textarea[name=description]', function() {
let detailTextDescription = $(this).val();
$('#detailText #descriptionText').text(detailTextDescription);
});
$('body').on('click', '#createAutomationBtn', function() {
if(validationData()){
let procData = setProcData();
$.ajax({
type: "POST",
url: "/automation/create",
data: procData,
dataType: "json",
contentType: 'application/json; charset=utf-8',
success: function(data){
if(data == true){
dataTable.ajax.reload();
$('#automationModal').modal('hide');
}
},
error: function(error, status, msg){
var errorMessages = error.responseJSON.messages.msg;
var firstErrorMessage = Object.values(errorMessages)[0];
alert(firstErrorMessage);
}
});
};
});
$('body').on('click', '#updateAutomationBtn', function() {
if(validationData()){
let procData = setProcData();
procData.seq = $('input[name=seq]').val();
$.ajax({
type: "PUT",
url: "/automation/update",
data: procData,
dataType: "json",
contentType: 'application/json; charset=utf-8',
success: function(data){
if(data == true){
dataTable.ajax.reload();
$('#automationModal').modal('hide');
}
},
error: function(error, status, msg){
var errorMessages = error.responseJSON.messages.msg;
var firstErrorMessage = Object.values(errorMessages)[0];
alert(firstErrorMessage);
}
});
};
});
//등록 부분 끝