Joywork/tuning_funnel.php

1225 lines
85 KiB
PHP
Raw Normal View History

2026-05-22 20:21:54 +02:00
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
if(!$_SESSION['id']) { header("location:index.php"); die("Доступ запрещён!");}
require($_SERVER['DOCUMENT_ROOT']."/templates/new-header.php");
$user = new User();
$user->get($_SESSION['id']);
$agenciesHaveAccessToNewComplexes = [4,12028,12061, 17328, 11325, 13735, 19093, 16378, 19467, 20197, 19909, 19646];
$menuPermissions = $user->checkMenuPermissions();
?>
<script type="text/javascript" src="/js/vue-multiselect.min.js"></script>
<script type="text/javascript" src="/js/vue-simple-progress.min.js"></script>
<link rel="stylesheet" href="/css/vue-multiselect.min.css">
<link rel="stylesheet" href="/css/funnel.css?v=<?=filemtime($_SERVER['DOCUMENT_ROOT'].'/css/funnel.css')?>">
<link rel="stylesheet" href="/css/all.min.css">
<style>
.is_changing_status-enter-active {
overflow: hidden;
animation: allow_changing_status 0.25s;
}
.is_changing_status-leave-active {
overflow: hidden;
animation: allow_changing_status 0.25s reverse;
}
@keyframes allow_changing_status {
from {
height: 0;
}
to {
height: 36px;
}
}
.modal-submit button:disabled {
opacity: 0.8;
cursor: not-allowed;
}
.new-client__modal .crm__small-stagebar {
height: 8px !important;
}
.new-client__modal .crm__small-stagebar table td{
height: 8px !important;
}
</style>
<div id="app" class="hidden">
<div class="content-right">
<div class="inner" style="padding: 0px 0px 0px 110px;">
<div class="main-title">
<input type="hidden" value="<?=$user->agencyId?>" id="agency_id"/>
<input type="hidden" value="<?=$_SESSION['users_admin']?>" id="session_user_admin"/>
<input type="hidden" value="<?=$_SESSION['to_send']?>" id="session_to_send"/>
<h1>Настройка воронок продаж</h1>
</div>
<div class="crm new">
<div class="crm__filters">
<div class="crm__filters-inner">
<div class="crm__new-client" style="height: 55px">
<button class="jw__g-button add_funnel_new" @click="openAddFunnel();">Добавить воронку</button>
</div>
<div class="crm__new-client" style="height: 55px">
<button class="jw__g-button add_funnel_new" @click="openFunelmodalTemplate();">Добавить воронку по шаблону JoyWork</button>
</div>
</div>
</div>
<div id="funnel_list">
<div class="clients">
<div class="client" v-for='(funnel,index) in funnels' >
<div class="client-inner" :id="'idFunnelBlock'+funnel.id">
<svg style="position: absolute;" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
<defs>
<marker :id="'arrowhead'+funnel.id" viewBox="0 0 10 10" refX="3" refY="5"
markerWidth="6" markerHeight="6" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" />
</marker>
</defs>
<g :id="'svg_path'+funnel.id" fill="none" stroke="black" stroke-width="1" :marker-end="'url(#arrowhead'+funnel.id+')'">
<path v-for="(line, lineId) in svgPath[funnel.id]" :id="line.id" />
</g>
</svg>
<div class="additional-info">
<div v-if="funnel.id>0" class="date" >{{ funnel.date }}</div>
<div class="type">{{ funnel.name }}</div>
<div v-if="funnel.id == 0" class="stagebar">
<div class="crm__small-stagebar">
<table>
<tbody>
<tr>
<td class="stage stage-new active" title="Новый клиент">
<div data-stage="1" class="crm__small-stage"></div>
<span class="next-stage">Новый</span>
</td>
<td class="stage stage-work active" title="В работе">
<div data-stage="2" class="crm__small-stage"></div>
<span class="next-stage">В работе</span>
</td>
<td class="stage stage-offer active" title="Презентация">
<div data-stage="3" class="crm__small-stage"></div>
<span class="next-stage">Презентация</span>
</td>
<td class="stage stage-showing active" title="Показ">
<div data-stage="4" class="crm__small-stage"></div>
<span class="next-stage">Показ</span>
</td>
<td class="stage stage-reservation active" title="Бронь">
<div data-stage="5" class="crm__small-stage"></div>
<span class="next-stage">Бронь</span>
</td>
<td class="stage stage-meet active" title="Подаем на ипотеку">
<div data-stage="6" class="crm__small-stage"></div>
<span class="next-stage">Подаем на ипотеку</span>
</td>
<td class="stage stage-deal active" title="Сделка">
<div data-stage="7" class="crm__small-stage"></div>
<span class="next-stage">Сделка</span>
</td>
<td class="stage stage-end active" title="Клиент закрыт">
<div data-stage="8" class="crm__small-stage"></div>
<span class="next-stage">Закрыт</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div v-else-if="funnel.id > 0" class="stagebar">
<div class="crm__small-stagebar">
<table>
<tbody>
<tr>
<td v-for="(step, stepId) in funnel.steps" class="stage stage-new active" :title="step.name">
<div data-stage="1" class="crm__small-stage"></div>
<span class="next-stage">{{ step.name }}</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="stagebar-title"></div>
<div v-if="funnel.id > 0" class="type"><span v-for="(roleuser, index) in JSON.parse(funnel.role)">{{ roleuser.name }} </span></div>
<div v-if="funnel.id > 0" class="type"><span v-for="(client_typeuser, index) in JSON.parse(funnel.client_type)">{{ client_typeuser.name }} </span></div>
<div class="actions">
<a href="javascript:{};" class="no-border" @click="updateFunnel(index, funnel.id)" title="Редактировать">
<span class="simple-button settings"><i class="jw-action-icon-settings"></i></span>
</a>
<a href="javascript:{};" v-if="funnel.id > 0" @click="deleteFunnel(index, funnel.id)" class="no-border" title="Удалить">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
</div>
</div>
<div class="main-info additional-info">
<div>
<span style="margin-right: 15px;" v-if="funnel.is_client == 1">Для клиентов</span>
<span style="margin-right: 15px;" v-if="funnel.is_req == 1">Для заявок</span>
<span style="margin-right: 15px;" v-html="'Номер в очереди: '+funnel.order_number"></span>
<template v-show="funnel.id == 0">
<span style="margin-right: 15px;" v-if="funnel.is_stage == 1">Показывать шкалу</span>
<span style="margin-right: 15px;" v-else-if="funnel.is_stage == 0">Не показывать шкалу</span>
<span style="margin-right: 15px;" v-if="funnel.is_show_funnels == 1">Показывать воронки</span>
<span style="margin-right: 15px;" v-else-if="funnel.is_show_funnels == 0">Не показывать воронки</span>
</template>
<div class="clear"></div>
</div>
</div>
<div v-if="funnel.id > 0" class="main-info">
<div v-if="funnel.mainsteps" class="first_step">
<div class="stagebar-title">Первый этап</div>
<multiselect v-model="funnel.mainstep" @select="changeFirstStep" tag-placeholder="Добавьте значение" track-by="name" label="name" placeholder="" select-label="Добавить" deselect-label="Удалить" selected-label="Выбрано" :options="funnel.mainsteps" :searchable="false" :show-labels="false">
<template slot="singleLabel" slot-scope="{ option }"><strong>{{ option.name }}</strong></template>
</multiselect>
</div>
<div class="clear"></div>
<div class="stagebar-title">Схема этапов</div>
<div class="clear"></div>
<div v-for="(branch, branchId) in funnel.branchs" class="row_step_block">
<div class="step_block" v-for="(step, stepId) in branch">
<div :id="'step'+stepId">
<a @click="onUpdateStepFunnel(stepId, index, funnel.id)" href="javascript:{}" v-html="step.name_number"></a>
<a @click="deleteStep(stepId)" class="fatrash" title="Удалить" href="javascript:{}"><i class="fas fa-trash"></i></a>
</div>
</div>
</div>
<div class="clear"></div>
</div>
<div v-if="funnel.id > 0" class="main-info">
<div class="col">
<div class="jw__action-button">
<div class="jw__g-button client-events-new" @click="onUpdateStepFunnel(-1, index, funnel.id)">Новый этап</div>
</div>
</div>
<div class="clear"></div>
</div>
<!-- <div class="client-added">
<div class="client-added__by">Добавил Агентство Тестовая учетка Ирина <span>06.04.2019</span></div>
<div class="client-added__work">В работе у менеджер ва <span> c 21.06.2019 13:59</span></div>
</div>-->
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="full_modal-bg" v-if="addFunelmodalTemplate" id="addFunnelTemplateNew">
<span class="pseudo-link closer"><i class="ti-close" @click="addFunelmodalTemplate = false"></i></span>
<div class="full_modal edit-modal new-client__modal" id="addFunnelTemplate">
<form class="form-validate" method="post">
<div class="modal-inner">
<h2>Выберите воронку</h2>
<div class="jv-tabs">
<template v-if="funnelTemplateLoad">
<div style="text-align: center;">
<img src="../images/rocket-spinner.svg" width="150px">
</div>
</template>
<template v-else>
<div class="clients">
<div class="client" v-for='(funnel,index) in templateFunnels' >
<div class="client-inner">
<svg style="position: absolute;" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
<defs>
<marker :id="'arrowhead'+funnel.id" viewBox="0 0 10 10" refX="3" refY="5"
markerWidth="6" markerHeight="6" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" />
</marker>
</defs>
<g :id="'svg_path'+funnel.id" fill="none" stroke="black" stroke-width="1" :marker-end="'url(#arrowhead'+funnel.id+')'">
<path v-for="(line, lineId) in svgPath[funnel.id]" :id="line.id" />
</g>
</svg>
<div class="additional-info">
<div class="type">{{ funnel.name }}</div>
<div v-if="!isEmpty(funnel.steps)" class="stagebar">
<div class="crm__small-stagebar">
<table>
<tbody>
<tr>
<td v-for="(step, stepId) in funnel.steps" class="stage stage-new active" :title="step.name">
<div data-stage="1" class="crm__small-stage"></div>
<span class="next-stage">{{ step.name }}</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="stagebar-title"></div>
<div v-if="funnel.id > 0" class="type"><span v-for="(roleuser, index) in JSON.parse(funnel.role)">{{ roleuser.name }} </span></div>
<div v-if="funnel.id > 0" class="type"><span v-for="(client_typeuser, index) in JSON.parse(funnel.client_type)">{{ client_typeuser.name }} </span></div>
<div class="actions" style="margin-right: 100px;">
<div class="checkbox small" style="margin-bottom:0px;">
<input type="checkbox" :id="'funnel-is_change'+ funnel.id" v-model="funnel.is_change" @change="changeFunnel" :checked="Boolean(funnel.is_change)" true-value="1">
<label :for="'funnel-is_change'+funnel.id">Выбрать</label>
</div>
<div class="clear"></div>
</div>
</div>
<div class="main-info additional-info">
<div>
<span style="margin-right: 15px;" v-if="funnel.is_client == 1">Для клиентов</span>
<span style="margin-right: 15px;" v-if="funnel.is_req == 1">Для заявок</span>
<span style="margin-right: 15px;" v-html="'Номер в очереди: '+funnel.order_number"></span>
<div class="clear"></div>
</div>
</div>
</div>
</div>
</div>
</template>
</div>
</div>
<div class="modal-submit">
<button type="button" @click='addFunnelTemplate();' :disabled="isDisabled" class="action_call">Добавить</button>
</div>
</form>
</div>
</div>
<div class="full_modal-bg" v-if="addFunelmodal" id="addFunnelNew">
<span class="pseudo-link closer"><i class="ti-close" @click="addFunelmodal = false"></i></span>
<div class="full_modal edit-modal new-client__modal" id="addFunnel">
<form class="form-validate" method="post" id="addEditFunnel">
<div class="modal-inner">
<div v-if="mes_error" class="error_msg">{{ error }}</div>
<h2>Новая воронка</h2>
<div class="jv-tabs">
<div>
<div class="tabs__content">
<div class="form-block">
<div class="label">Наименование</div>
<div class="inputs">
<input v-model.trim="name" @input="mes_error = false" type="text" class="text" name="name" style="width:400px;" value="">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Тип клиента</div>
<div id="ms-funnel-type" class="inputs">
<multiselect v-model="ctype" tag-placeholder="Добавьте значение" select-label="Добавить" deselect-label="Удалить" selected-label="Выбрано" no-result="Не найдено" placeholder="" label="name" track-by="code" :options="clientstypes" :multiple="true" :close-on-select="false" :clear-on-select="false" :searchable="false">
<span slot="noResult">Ничего не найдено</span>
</multiselect>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Роль клиента</div>
<div class="inputs">
<multiselect v-model="role" tag-placeholder="Добавьте значение" select-label="Добавить" deselect-label="Удалить" selected-label="Выбрано" placeholder="" label="name" track-by="code" :options="options_role" :multiple="true" :close-on-select="false" :clear-on-select="false" :searchable="false">
<span slot="noResult">Ничего не найдено</span>
</multiselect>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="checkbox small" style="margin-bottom:0px;">
<input type="checkbox" id="funnel-is_client" v-model="is_client" :checked="Boolean(is_client)" true-value="1">
<label for="funnel-is_client">Для клиентов</label>
<input type="checkbox" id="funnel-is_req" v-model="is_req" :checked="Boolean(is_req)" true-value="1">
<label style="margin-left: 160px;" style="marning-" for="funnel-is_req">Для заявок</label>
</div>
<div class="clear"></div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-submit">
<button type="button" @click='addFunnel();' class="action_call">Добавить</button>
</div>
</form>
</div>
</div>
<div class="full_modal-bg" v-if="updateFunnelmodal">
<span class="pseudo-link closer"><i class="ti-close" @click="updateFunnelmodal = false"></i></span>
<div class="full_modal edit-modal new-client__modal" style="max-width: 650px">
<form class="form-validate" method="post">
<div class="modal-inner">
<div v-if="mes_error_update" class="error_msg" v-html="errorUpdate"></div>
<h2>{{ nameUpdate }}</h2>
<div class="jv-tabs">
<div>
<div class="tabs__content">
<div class="form-block">
<div class="label">Наименование</div>
<div class="inputs">
<input v-model.trim="name_update" @input="mes_error_update = false" type="text" class="text" style="width:400px;">
</div>
<div class="clear"></div>
</div>
<div v-if="funnelId > 0" class="form-block">
<div class="label">Тип клиента</div>
<div id="ms-funnel-type" class="inputs">
<multiselect v-model="ctype_update" tag-placeholder="Добавьте значение" select-label="Добавить" deselect-label="Удалить" selected-label="Выбрано" no-result="Не найдено" placeholder="" label="name" track-by="code" :options="clientstypes" :multiple="true" :close-on-select="false" :clear-on-select="false" :searchable="false">
<span slot="noResult">Ничего не найдено</span>
</multiselect>
</div>
<div class="clear"></div>
</div>
<div v-if="funnelId > 0" class="form-block">
<div class="label">Роль клиента</div>
<div class="inputs">
<multiselect v-model="role_update" tag-placeholder="Добавьте значение" select-label="Добавить" deselect-label="Удалить" selected-label="Выбрано" placeholder="" label="name" track-by="code" :options="options_role" :multiple="true" :close-on-select="false" :clear-on-select="false" :searchable="false">
<span slot="noResult">Ничего не найдено</span>
</multiselect>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="checkbox small" style="margin-bottom:0px;">
<input type="checkbox" id="funnel-is_client" v-model="is_client" :checked="Boolean(is_client)" true-value="1">
<label for="funnel-is_client">Для клиентов</label>
<input type="checkbox" id="funnel-is_req" v-model="is_req" :checked="Boolean(is_req)" true-value="1">
<label style="margin-left: 160px;" style="marning-" for="funnel-is_req">Для заявок</label>
</div>
<div class="clear"></div>
</div>
<div v-if="funnelId == 0" class="form-block">
<div class="checkbox small" style="margin-bottom:0px;">
<input type="checkbox" id="funnel-is_stage" v-model="is_stage" :checked="Boolean(is_stage)" true-value="1">
<label for="funnel-is_stage">Показывать шкалу</label>
</div>
</div>
<div v-if="funnelId == 0" class="form-block">
<div class="checkbox small" style="margin-bottom:0px;">
<input type="checkbox" id="funnel-is_show_funnels" v-model="is_show_funnels" :checked="Boolean(is_show_funnels)" true-value="1">
<label for="funnel-is_show_funnels">Показывать воронки</label>
</div>
</div>
<div class="form-block">
<div class="label">Номер в очереди</div>
<div class="inputs">
<input v-model.trim="order_number_funnel" type="number" class="text" style="width:400px;">
</div>
<div class="clear"></div>
</div>
<div v-if="funnelId > 0" class="form-block">
<div class="checkbox small" style="margin-bottom:0px;">
<input type="checkbox" id="funnel-is_no_see" v-model="is_no_see" false-value="0" true-value="1">
<label for="funnel-is_no_see">Не показывать воронку всем</label>
</div>
</div>
<div class="form-block" v-show="funnelId > 0 && is_no_see == 1">
<div class="label">...кроме сотрудников</div>
<div class="inputs">
<v-select class="vue_select" :components="{OpenIndicator}" style="width: 400px; border: none;" multiple :options="users_see" :reduce="name => name.code" label="name" v-model="selected_users_see_no"/>
<template #option="{ name, type }">
<span v-if="type=='otdel'" style="margin: 0; color:#000; font-size: 17px">{{ name }}</span>
<span v-else style="margin-left:10px;">{{ name }}</span>
</template>
<v-select>
</div>
<div class="clear"></div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-submit">
<button type="button" @click='updateRowFunnel();' class="action_call">Изменить</button>
</div>
</form>
</div>
</div>
<div class="full_modal-bg" v-if="transmitFunnelmodal">
<span class="pseudo-link closer"><i class="ti-close" @click="transmitFunnelmodal = false"></i></span>
<div class="full_modal edit-modal new-client__modal" style="max-width: 650px">
<div class="form-validate">
<div class="modal-inner">
<div v-if="errorTransmite" class="error_msg" v-html="mesErrorTransmite"></div>
<h2>Передать {{type_trasmite}} в воронку</h2>
<div v-show="process_trasmited" style="display: inline;">
<div style="text-align:center; margin-top: 25px; position: unset;" class="object-content__preloader">
<img src="../images/rocket-spinner.svg" width="96px">
</div>
<div class="clear"></div>
</div>
<div v-show="!process_trasmited" class="jv-tabs">
<div>
<div class="tabs__content">
<div class="form-block">
<div class="label">Воронка</div>
<div id="ms-funnel-type" class="inputs">
<v-select :components="{OpenIndicator}" transition="" class="vue_select" :class="{invalid: errorTransmite}" style="width: 400px; border: none;" :options="funnel_transmite" :reduce="name => name.id" label="name" v-model="funnelTrasmiteId"/>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-submit">
<button type="button" @click="transmite" class="action_call">Передать</button></button>
</div>
</div>
</div>
</div>
<div class="full_modal-bg" v-if="updateStepFunnel">
<span class="pseudo-link closer"><i class="ti-close" @click="updateStepFunnel = false"></i></span>
<div class="full_modal edit-modal new-client__modal">
<form class="form-validate" method="post">
<div class="modal-inner">
<div v-if="mes_error_step" class="error_msg"></div>
<div v-if="errorPole" class="error_msg" v-html="textError"></div>
<h2>Настройка этапа</h2>
<div class="jw-tabs">
<ul class="tabs__caption">
<li :class="{'active':tab_close }" @click="open_tab('tab_close')">
<i class="tabs-li__icon">1</i>
<span>Настройки для закрытия этапа</span>
</li>
<li :class="{'active':tab_prev_close }" @click="open_tab('tab_prev_close')">
<i class="tabs-li__icon">2</i>
<span>Настройки перед переходом на этап</span>
</li>
<!-- <li :class="{'active':tab_dop_close }" @click="open_tab('tab_dop_close')" v-if="userId == 5238 || userId == 4">
<i class="tabs-li__icon">3</i>
<span>Дополнительные настройки</span>
</li>-->
</ul>
<div>
<div class="tabs__content" v-show="tab_close">
<div class="form-block">
<div class="label">Наименование</div>
<div class="inputs">
<input v-model.trim="name_step" @input="mes_error_step = false" class="text" type="text" style="width:400px;">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Номер в очереди</div>
<div class="inputs">
<input v-if="mainStep>0" v-model.number="order_number" disabled="disabled" title="Нельзя изменить в первом этапе" class="text" type="number" value="" placeholder="Определяет место в шкале этапов" style="width:100px;">
<input v-else v-model.number="order_number" class="text" type="number" value="" placeholder="Определяет место в шкале этапов" style="width:100px;">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Цвет</div>
<div class="inputs">
<input v-model.trim="color_step" @input="mes_error_step = false" class="text" type="color" value="#43A047" style="width:40px;height:40px;">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Дней на этап</div>
<div class="inputs">
<input v-model.number="days_step" @input="mes_error_step = false" class="text" type="number" value="0" style="width:400px;">
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Перенести в Общие, если срок будет исчерпан</div>
<div class="inputs">
<div class="checkbox">
<input id="is_move_end_srok" v-model="is_move_end_srok" true-value="1" false-value="0" type="checkbox">
<label for="is_move_end_srok" class="label"></label>
</div>
</div>
</div>
<div class="form-block" v-show="is_move_end_srok > 0">
<div class="label">Условия переноса в общие</div>
<div class="inputs">
<div class="checkbox">
<input id="task_is_move" v-model="tasks_move.is_move" true-value="1" false-value="0" @change="selet_task_move" type="checkbox">
<label for="task_is_move" style="width:400px;" class="label">Просрочили срок действия Этапа</label>
</div>
<div class="checkbox">
<input id="task_is_task" v-model="tasks_move.is_task" true-value="1" false-value="0" @change="selet_task_task" type="checkbox">
<label for="task_is_task" style="width:400px;" class="label">Не поставлено ни одной задачи на будущее</label>
</div>
</div>
</div>
<div class="form-block">
<div class="label">При переходе на этап сменить статус на</div>
<div class="inputs">
<multiselect v-model="stage" tag-placeholder="Добавьте значение" placeholder="" select-label="Добавить" deselect-label="Удалить" selected-label="Выбрано" :options="stages" :searchable="false" :show-labels="false">
</multiselect>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Уведомлять о закрытии</div>
<div class="checkbox">
<input id="mes_close" v-model="is_mes" @input="selectMes" type="checkbox" value="">
<label for="mes_close" class="label"></label>
</div>
</div>
<div class="form-block" v-show="is_mes">
<div class="label">Кому отправлять уведомления</div>
<div class="inputs">
<v-select multiple class="vue_select" :components="{OpenIndicator}" style="width: 400px; border: none;" :options="list_users" :reduce="date_employe => date_employe.code" label="date_employe" v-model="list_users_select"/>
</div>
</div>
<div class="form-block" v-if="selectedFiles.length > 0">
<div class="label">Список файлов</div>
<div class="inputs">
<div class="list_files" v-for="(file, infile) in selectedFiles">
<label class="label_file"><i v-bind:class=" [ file.classFile, {active: progressUoload[infile].isUpload} ]"></i>{{ file.name }}</label>
<a title="Загрузить" v-bind:class="{ hidden : progressUoload[infile].isUpload}" @click="onUpload(infile, file)" class="no-border faupload"><i class="fas fa-upload"></i></a>
<a title="Удалить" @click="onDeleteFile(infile,file)" class="no-border fatrash"><i class="fas fa-trash"></i></a>
<vue-simple-progress v-if="progressUoload[infile].uploads" bar-color="#e2574c" :val="progressUoload[infile].progress" :text="progressUoload[infile].progress + '%'"></vue-simple-progress>
</div>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Файлы для скачивания</div>
<div class="inputs">
<div class="dropbox">
<input type="file" @change="onFileSelected" multiple="" class="input-file" style="width:400px;">
<p>
Выберите файл(ы)
</p>
</div>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Исполнитель</div>
<div class="inputs">
<ul class="doer_funnel">
<template v-for = "(doer, doerId) in doers">
<li><a @click="seeDoer(doerId)" href="javascript:{}"><i class="fas fa-users"></i></a></li>
<li v-if="doer.isSee"><a title="Весь отдел" @click="selectDoer(doerId, doer.manager.id, 'all')" href="javascript:{}"><i class="far fa-building"></i></a></li>
<li v-if="doer.isSee"><a :title="doer.manager.role + ' ' + doer.manager.fio" @click="selectDoer(doerId, doer.manager.id, 'manager')" href="javascript:{}"><i class="fas fa-user-tie"></i></a></li>
<li v-if="doer.agents.length > 0 && doer.isSee" v-for="(agent, agentId) in doer.agents"><a :title="agent.role + ' ' + agent.fio" @click="selectDoer(doerId, agentId, 'agent')" href="javascript:{}"><i class="fas fa-user"></i></a></li>
</template>
</ul>
</div>
</div>
<div v-if="listDoers.length>0" class="form-block">
<div class="label">Список исполнитель</div>
<ul class="list_doer_funnel">
<li v-for="(listDoer, listDoerId) in listDoers">{{ listDoer.fio }}<i @click="deleteDoer(listDoerId)" title="Удалить исполнителя" class="fas fa-user-minus"></i></li>
</ul>
</div>
<?php
if (
(
!empty($menuPermissions) && $menuPermissions['menu_complexes'] == 1
)
||
(
(
$_SESSION['agency'] || $_SESSION['users_admin'] || (!empty($menuPermissions) && $menuPermissions['menu_complexes'] == 1)
)
&& (
in_array($_SESSION['agency_id'] , $agenciesHaveAccessToNewComplexes)
)
)
) {
?>
<div class="form-block">
<div class="label">Выбрать объект из комплексов</div>
<div class="checkbox">
<input id="is_select_room" v-model="is_select_room" type="checkbox">
<label for="is_select_room" class="label"></label>
</div>
</div>
<?php } ?>
<div class="form-block">
<div class="label">Поля для заполнения в заявке или клиенте</div>
<div class="inputs" style="padding-top:15px;">
<a class="green_button" onclick="linking_client_req.open(app.stepId, app.list_next_poles)" type="button" href="javascript:{}">Выбрать поля</a>
</div>
</div>
<?php
if (
(
!empty($menuPermissions) && $menuPermissions['menu_complexes'] == 1
)
||
(
(
$_SESSION['agency'] || $_SESSION['users_admin'] || (!empty($menuPermissions) && $menuPermissions['menu_complexes'] == 1)
)
&& (
in_array($_SESSION['agency_id'] , $agenciesHaveAccessToNewComplexes)
)
)
) {
?>
<div class="form-block" style="display: flex;">
<div class="label">Сменить статус объекта</div>
<div>
<div class="checkbox">
<input id="is_changing_status" name="is_changing_status" v-model="is_changing_status" type="checkbox">
<label for="is_changing_status" class="label"></label>
</div>
<Transition name="is_changing_status">
<div v-show="is_changing_status" id="status" class="changing_status_block">
<div class="inputs" id="ms-req-status-input">
<img src="../images/rocket-spinner.svg" width="45px">
</div>
</div>
</Transition>
</div>
</div>
<?php } ?>
<div class="form-block">
<div class="label">Поля для заполнения при завершении этапа</div>
<div class="inputs" style="padding-top:15px;">
<a class="green_button" @click="addPole" type="button" href="javascript:{}">Добавить поле</a>
</div>
</div>
<div class="form-block" v-if="poleEndlist.length > 0" style="display: flex;flex-wrap: nowrap;flex-direction: row;">
<div class="label">Список полей</div>
<div class="inputs">
<ul class="pole_end_etap">
<li class="pole_li" v-for="(poleEnd, poleEndId) in poleEndlist" style="width: 700px">
<div class="divLiLeft">
<label>Название</label>
<input style="width: 100px; margin-right: 10px;" v-model="poleEnd.name" type="text" value=""/>
</div>
<div class="divLiLeft">
<label>Тип</label>
<multiselect :id="poleEndId" v-model="poleEnd.type" @select="chengePoleSelect" tag-placeholder="Добавьте значение" placeholder="" select-label="Добавить" deselect-label="Удалить" selected-label="Выбрано" :options="poleType" :searchable="false" :show-labels="false">
</multiselect>
</div>
<div class="pole_checkbox divLiLeft">
<label title="Обязательное заполнение"><i class="fab fa-diaspora"></i></label>
<div class="checkbox">
<input v-model="poleEnd.binding" :id="'binding_pole'+poleEndId" type="checkbox" value="">
<label :for="'binding_pole'+poleEndId" class="label"></label>
</div>
</div>
<div class="divLiLeft" v-if="poleEnd.dopSettings.radio">
<label>Переключатель 1</label>
<input v-model="poleEnd.dopSettings.radio.pole1" type="text" value="">
</div>
<div class="divLiLeft" v-if="poleEnd.dopSettings.radio">
<label>Переключатель 2</label>
<input v-model="poleEnd.dopSettings.radio.pole2" type="text" value="">
</div>
<div class="divLiLeft" v-if="!onePole && poleEnd.type != 'Выпадающий список' && poleEnd.type != 'Ветвление этапов'">
<label>Показывать при переходе на этап:</label>
<v-select :components="{OpenIndicator}" transition="" placeholder="Все этапы" class="vue_select" multiple style="width: 270px; border: none;" label="name" :reduce="name => name.code" :options="list_next_poles" v-model="poleEnd.view_next"/>
</div>
<div class="divLiLeft" style="margin-left: 10px">
<a title="Удалить" @click="deletePole(poleEndId)" class="no-border fatrash"><i class="fas fa-trash"></i></a>
</div>
<div class="clear"></div>
<div v-if="poleEnd.dopSettings.select" class="dop_settings divLiLeft">
<div>
<label style="width:350px">Значения списка
</label>
</div>
<div class="clear"></div>
<ul class="pole_select_value">
<template v-if="polesOptionsSetting.length > 0 && poleEndlist.length > 0" v-for="(option, optionId) in poleEnd.dopSettings.select.options">
<li v-if="polesOptionsSetting[optionId].isDiv">
<div>{{ option }}</div>
<a title="Изменить значение" @click="editOption(optionId)" class="faplus" href="javascript:{}"><i class="fas fa-pencil-alt"></i></a>
<a @click="deleteOption(poleEndId, optionId)" class="fatrash"><i title="Удалить значение" class="fas fa-trash"></i></a>
</li>
<li v-if="polesOptionsSetting[optionId].isEdit">
<input :value="option" @input="validPole($event.target.value, optionId)" :id="'pole_select_value_'+optionId" type="text"/>
<a @click="saveEditOption(poleEndId, optionId)" class="faplus" href="javascript:{}" title="Сохранить"><i class="fas fa-check"></i></a>
</li>
</template>
<li v-if="isInput">
<input v-model="pole_select_value" type="text"/>
<a @click="setOption(poleEndId)" class="faplus" href="javascript:{}" title="Сохранить"><i class="fas fa-check"></i></a>
</li>
<li class="liPlus"><a class="faplus" href="javascript:{}" title="Добавить значение" @click="isInput = true"><i class="fas fa-plus"></i></a></li>
</ul>
</div>
</li>
<div class="clear"></div>
</ul>
</div>
</div>
<div class="form-block">
<div class="label">Следующий этап</div>
<div class="inputs">
<div class="selects_next_step">
<multiselect v-bind:class="[onePole ? '' : 'activeOne']" v-model="nextStepChange" @select="changeNextStep" :allow-empty="false" tag-placeholder="Добавьте значение" placeholder="" select-label="Добавить" deselect-label="Удалить" selected-label="Выбрано" :options="next_step" :searchable="false" :show-labels="false">
</multiselect>
<multiselect v-if="onePole" v-model="nextStep" tag-placeholder="Добавьте значение" track-by="name" label="name" placeholder="" select-label="Добавить" deselect-label="Удалить" selected-label="Выбрано" :options="listSteps" :searchable="false" :show-labels="false">
<template slot="singleLabel" slot-scope="{ option }"><strong>{{ option.name }}</strong></template>
</multiselect>
<a title="Сбросить" @click="resetNextStep" class="no-border fatrash"><i class="fas fa-undo-alt"></i></a>
<div class="clear"></div>
<ul class="optionsNextStep">
<li v-for="(nextOption, nextOptionId) in arrNextSteps">
<label>{{ poleEndlist[poleListIndex].name }} &laquo;{{ nextOption.name }}&raquo;</label>
<multiselect v-model="nextOption.id" @select="nextOptionUpdate" tag-placeholder="Добавьте значение" track-by="name" label="name" placeholder="" select-label="Добавить" deselect-label="Удалить" selected-label="Выбрано" :options="listSteps" :searchable="false" :show-labels="false">
<template slot="singleLabel" slot-scope="{ option }"><strong>{{ option.name }}</strong></template>
</multiselect>
<div class="clear"></div>
</li>
</ul>
<div class="clear"></div>
</div>
</div>
</div>
<h2>Дополнительные действия при закрытии этапа</h2>
<div class="form-block">
<div class="label">Cнять объект с рекламы</div>
<div class="checkbox" style="margin-bottom:0px;">
<input id="req_object_advert_close" true-value="1" false-value="0" type="checkbox" v-model="pole_dop.advert_close">
<label for="req_object_advert_close" class="label"></label>
</div>
<div class="settings-block area-label-right" style="margin-top:0px;margin-left:0px;margin-right:0px;margin-bottom:0px;">
<p style="font-size:13px;"><i style="margin-right:5px;" class="ti-info-alt"></i>Только для заявок Реализация объекта</p>
</div>
<div class="clear"></div>
</div>
<div class="form-block" style="display:none">
<div class="label">Действия с автопоиском</div>
<div class="checkbox" style="margin-bottom:0px;">
<input id="req_object_avtopoisk_close" true-value="1" false-value="0" type="checkbox" v-model="pole_dop.avtopoisk_close">
<label for="req_object_avtopoisk_close" class="label"></label>
</div>
<div class="settings-block area-label-right" style="margin-top:0px;margin-left:0px;margin-right:0px;margin-bottom:0px;">
<p style="font-size:13px;"><i style="margin-right:5px;" class="ti-info-alt"></i>Только для заявок с объектами</p>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Добавить договор</div>
<div class="checkbox" style="margin-bottom:0px;">
<input id="add_contract_close_step" true-value="1" false-value="0" type="checkbox" v-model="pole_dop.add_contract_close_step">
<label for="add_contract_close_step" class="label"></label>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Добавить тег</div>
<div class="checkbox" style="margin-bottom:0px;">
<input id="add_activity_close_step" true-value="1" false-value="0" type="checkbox" v-model="pole_dop.add_activity_close_step">
<label for="add_activity_close_step" class="label"></label>
</div>
<div class="clear"></div>
</div>
</div>
<div class="tabs__content" v-show="tab_prev_close">
<div class="form-block">
<div class="label">Поставить автоматическую задачу(и) на ответственного</div>
<div class="inputs" style="padding-top: 15px;">
<a type="button" @click="add_pole_prev" href="javascript:{}" class="green_button">Добавить задачу</a>
</div>
<div class="clear"></div>
</div>
<div v-show="pole_prev.tasks.length > 0" class="form-block">
<div class="label">Список задач</div>
<div class="inputs">
<ul class="pole_end_etap">
<li v-for="(pole, pi) in pole_prev.tasks" class="pole_li">
<div class="divLiLeft">
<label>Название</label>
<input type="text" v-model="pole.name">
</div>
<div class="divLiLeft" style="margin-right: 10px">
<label>Тип</label>
<v-select :components="{OpenIndicator}" transition="" class="vue_select" style="width: 250px; border: none;" :options="types_task" :reduce="name => name.code" label="name" v-model="pole.type"/>
</div>
<div class="divLiLeft">
<a title="Удалить" @click="del_pole_prev(pi)" class="no-border fatrash">
<i class="fas fa-trash"></i>
</a>
</div>
<div class="divLiLeft" style="margin-right: 10px">
<label title="Время простановки задачи от наступления этапа">Время простановки</label>
<v-select :components="{OpenIndicator}" transition="" class="vue_select" style="width: 175px; border: none;" :options="time_task" :reduce="name => name.code" label="name" v-model="pole.time"/>
</div>
<div class="divLiLeft" style="margin-right: 10px">
<label>Комментарий к задаче</label>
<textarea rows="4" style="width: 250px;" v-model="pole.comment"></textarea>
</div>
</li>
</ul>
</div>
</div>
<div class="form-block">
<div class="label">Поставить автоматическую задачу(и) на ВСЕХ ответственных</div>
<div class="inputs" style="padding-top: 15px;">
<a type="button" @click="add_pole_prev('all')" href="javascript:{}" class="green_button">Добавить задачу</a>
</div>
<div class="clear"></div>
</div>
<div v-show="pole_prev.tasks_all.length > 0" class="form-block">
<div class="label">Список задач</div>
<div class="inputs">
<ul class="pole_end_etap">
<li v-for="(pole, pi) in pole_prev.tasks_all" class="pole_li">
<div class="divLiLeft">
<label>Название</label>
<input type="text" v-model="pole.name">
</div>
<div class="divLiLeft" style="margin-right: 10px">
<label>Тип</label>
<v-select :components="{OpenIndicator}" transition="" class="vue_select" style="width: 250px; border: none;" :options="types_task" :reduce="name => name.code" label="name" v-model="pole.type"/>
</div>
<div class="divLiLeft">
<a title="Удалить" @click="del_pole_prev(pi, 'all')" class="no-border fatrash">
<i class="fas fa-trash"></i>
</a>
</div>
<div class="divLiLeft" style="margin-right: 10px">
<label title="Время простановки задачи от наступления этапа">Время простановки</label>
<v-select :components="{OpenIndicator}" transition="" class="vue_select" style="width: 175px; border: none;" :options="time_task" :reduce="name => name.code" label="name" v-model="pole.time"/>
</div>
<div class="divLiLeft" style="margin-right: 10px">
<label>Комментарий к задаче</label>
<textarea rows="4" style="width: 250px;" v-model="pole.comment"></textarea>
</div>
</li>
</ul>
</div>
</div>
<div class="form-block">
<div class="label">Ввести комментарий</div>
<div class="inputs" style="padding-top: 15px;">
<textarea rows="5" style="width: 350px;" v-model="pole_prev.comment"></textarea>
</div>
<div class="clear"></div>
</div>
<div class="form-block">
<div class="label">Сменить ответственного</div>
<div class="checkbox">
<input id="new_who_work" true-value="1" false-value="0" type="checkbox" v-model="pole_prev.is_new_who_work">
<label for="new_who_work" class="label"></label>
</div>
</div>
<div v-show="pole_prev.is_new_who_work > 0" class="form-block">
<div class="label">Новый ответственный</div>
<div class="inputs">
<v-select :components="{OpenIndicator}" transition="" class="vue_select" style="width: 400px; border: none;" :options="list_users_prev_pole" :reduce="date_employe => date_employe.code" label="date_employe" v-model="pole_prev.new_who_work"/>
</div>
<div class="clear"></div>
</div>
<div v-show="pole_prev.is_new_who_work > 0" class="form-block">
<div class="label">Передавать объект с заявкой (для заявки Реализация объекта)</div>
<div class="checkbox">
<input id="new_who_work_object" true-value="1" false-value="0" type="checkbox" v-model="pole_prev.is_new_who_work_object">
<label for="new_who_work_object" class="label"></label>
</div>
</div>
<div class="form-block">
<div class="label">Добавить партнеров</div>
<div class="checkbox">
<input id="new_doers" true-value="1" false-value="0" type="checkbox" v-model="pole_prev.is_new_doers">
<label for="new_doers" class="label"></label>
</div>
</div>
<div v-show="pole_prev.is_new_doers > 0" class="form-block">
<div class="label">Выбрать партнеров</div>
<div class="inputs">
<v-select :components="{OpenIndicator}" multiple transition="" class="vue_select" style="width: 400px; border: none;" :options="list_users_prev_pole" :reduce="date_employe => date_employe.code" label="date_employe" v-model="pole_prev.new_doers"/>
</div>
<div class="clear"></div>
</div>
<!-- смежные воронки -->
<template>
<div class="form-block">
<div class="label">Переключить на смежную воронку</div>
<div class="checkbox">
<input id="adjacent_funnel" true-value="1" false-value="0" type="checkbox" @click="change_adjacent_funnels" v-model="pole_prev.is_adjacent_funnels">
<label for="adjacent_funnel" class="label"></label>
</div>
</div>
<div class="form-block" v-show="pole_prev.is_adjacent_funnels > 0">
<div class="label">Выбрать воронки</div>
<div v-if="!isEmpty(adjacent_funnels)" class="inputs">
<v-select :components="{OpenIndicator}" multiple transition="" class="vue_select" style="width: 400px; border: none;" :options="adjacent_funnels" :reduce="name => name.code" label="name" v-model="pole_prev.adjacent_funnels"/>
</div>
<div v-else class="inputs" style="padding-top: 7px;">
<label>Воронок не найдено</label>
</div>
<div class="clear"></div>
</div>
<div class="form-block" v-show="!isEmpty(pole_prev.adjacent_funnels)">
<div class="label">Разрешить переходить при закрытом этапе смежной воронки:</div>
<div v-for="funnel_aj in pole_prev.adjacent_funnels" class="inputs">
<template v-if="!isEmpty(adjacent_funnels_steps) && adjacent_funnels_steps[funnel_aj]">
Воронка: "{{ adjacent_funnels_steps[funnel_aj].name }}"
<v-select :components="{OpenIndicator}" transition="" class="vue_select" style="width: 400px; border: none;" :options="adjacent_funnels_steps[funnel_aj].steps" :reduce="name => name.code" label="name" v-model="adjacent_funnels_steps[funnel_aj].value"/>
</template>
</div>
<div class="clear"></div>
</div>
</template>
<div class="form-block">
<div class="label">Уведомлять о переходе на этап</div>
<div class="checkbox">
<input id="prev_mes_close" v-model="pole_prev.is_mes" @input="check_prev_is_mes" true-value="1" false-value="0" type="checkbox" >
<label for="prev_mes_close" class="label"></label>
</div>
</div>
<div class="form-block" v-show="pole_prev.is_mes>0">
<div class="label">Кому отправлять уведомления</div>
<div class="inputs">
<v-select multiple class="vue_select" :components="{OpenIndicator}" style="width: 400px; border: none;" :options="list_users" :reduce="date_employe => date_employe.code" label="date_employe" v-model="pole_prev.list_users_select"/>
</div>
</div>
<div class="form-block">
<div class="label">Прикрепить документ</div>
<div class="inputs">
<div class="dropbox">
<input type="file" multiple="multiple" @change="onFileSelectedPrev" class="input-file" style="width: 400px;"> <p>
Выберите файл(ы)
</p>
</div>
</div>
<div class="clear"></div>
</div>
<div class="form-block" v-if="selectedFilesPrev.length > 0">
<div class="label">Список файлов</div>
<div class="inputs">
<ul class="pole_end_etap">
<li v-for="(file, infile) in selectedFilesPrev" class="pole_li">
<div class="divLiLeft" style="margin-right: 10px">
<label>Название файла</label>
<input style="width: 400px;" type="text" v-model="pole_prev.files_attach[infile].name">
</div>
<div class="divLiLeft" style="margin-right: 10px">
<label>Комментарий к файлу</label>
<textarea rows="4" style="width: 400px;" v-model='pole_prev.files_attach[infile].comment'></textarea>
</div>
<div class="list_files">
<label style="display:inline-block;" class="label_file"><i v-bind:class=" [ file.classFile, {active: progressUoloadPrev[infile].isUpload} ]"></i>{{ file.name }}</label>
<a style="display:inline-block;" title="Удалить" @click="onDeleteFilePrev(infile,file)" class="no-border fatrash"><i style="margin-top:0px" class="fas fa-trash"></i></a>
<vue-simple-progress v-if="progressUoloadPrev[infile].uploads" bar-color="#e2574c" :val="progressUoloadPrev[infile].progress" :text="progressUoloadPrev[infile].progress + '%'"></vue-simple-progress>
</div>
</li>
</ul>
</div>
<div class="clear"></div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-submit">
<button type="button" @click='saveStep' class="action_call">Сохранить</button>
</div>
</form>
</div>
</div>
<div class="full_modal-bg" v-if="updateClientStep">
<span class="pseudo-link closer"><i class="ti-close" @click="updateClientStep = false"></i></span>
<div class="full_modal edit-modal new-client__modal" style="max-width: 650px">
<form class="form-validate" method="post">
<div class="modal-inner">
<h2>Перенос клиентов</h2>
<div class="jv-tabs">
<div>
<div class="tabs__content">
<div class="form-block">
<div style="width: 100%" class="label">Чтобы удалить данный этап необходимо перенести клиентов на предыдущий.<br><br> {{ clientsSteps }}</div>
<div class="clear"></div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-submit">
<button type="button" @click="updateStepClients" class="action_call">Перенести</button>
</div>
</form>
</div>
</div>
<div class="full_modal-bg" v-if="mesUpdateClientStep">
<span class="pseudo-link closer"><i class="ti-close" @click="mesUpdateClientStep = false"></i></span>
<div class="full_modal edit-modal new-client__modal" style="max-width: 650px">
<form class="form-validate" method="post">
<div class="modal-inner">
<h2>ВНИМАНИЕ!!!</h2>
<div class="jv-tabs">
<div>
<div class="tabs__content">
<div class="form-block">
<div style="width: 100%" class="label">После удаления этапов обязательно обновите связи этапов всей воронки</div>
<div class="clear"></div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-submit">
<button type="button" @click="mesUpdateClientStep = false" class="action_call">Закрыть</button>
</div>
</form>
</div>
</div>
</div>
<div class="content-right fr__settings">
<div class="inner">
<div class="mail-settings-form" style="margin: 50px 0 0 0;">
</div>
</div>
<div class="content-bottom" style="padding: 0 35px 60px 145px;">
<div class="copyrights" style="border-top: 0;">
<div class="text-logo">
<span>Joy<span class="green">Work</span>, 2025</span>
</div>
<p title="Текущая версия">v. 3.1.1</p>
</div>
</div>
</div>
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/templates/linking_client_req/linking_client_req.php");
?>
<script type="text/javascript" src="/js/funnel_vue.js?v=<?=filemtime($_SERVER['DOCUMENT_ROOT'].'/js/funnel_vue.js')?>"></script>
<script type="text/javascript" src="/js/funnel.js?v=<?=filemtime($_SERVER['DOCUMENT_ROOT'].'/js/funnel.js')?>"></script>
<script src="/js/locale/translations/ru.js"></script>
<script type="text/javascript" src="/js/vue_scripts/linking_client_req/linking_client_req_vue.js?<?=filemtime($_SERVER['DOCUMENT_ROOT'].'/js/vue_scripts/linking_client_req/linking_client_req_vue.js')?>"></script>
<?php require($_SERVER['DOCUMENT_ROOT']."/templates/footer.php"); ?>