Для вставки калькулятора лидов создаём медиаблок типа HTML и вставляем в поле такой код:
<!-- START -->
<link rel="stylesheet" href="/static/prj/dist/css/lead-calc.css">
<div id="omr-lead-calc">
<div class="-block">
<div class="-title">
Сколько у вас подписчиков в соцсетях?
</div>
<in-row label="YouTube" v-model="yt"></in-row>
<in-row label="Инстаграм" v-model="ig"></in-row>
<in-row label="FaceBook" v-model="fb"></in-row>
<in-row label="Pinterest" v-model="pi"></in-row>
<in-row label="Twitter" v-model="tw"></in-row>
<in-row label="Другие" v-model="other"></in-row>
<div class="-in is-total">
<label>Всего</label>
<div class="-sum">
{{ this.total }}
</div>
</div>
</div>
<div class="-block">
<div class="-title">
Всего в соцсетях {{inSN}} млрд. пользователей
</div>
<div class="-in">
<div class="-sum">
У вас {{this.yourPercent}}% от мирового объёма
</div>
</div>
</div>
<div class="-block">
<div class="-title">
Сколько лидов вы можете получить, если
</div>
<in-row label="Конверсия в лиды (%)" v-model="conv" max="100"></in-row>
<div class="-in is-total">
<label>Лидов</label>
<div class="-sum">
{{ this.leads }}
</div>
</div>
</div>
</div>
<script type="text/javascript" src="/static/prj/dist/js/lead-calc.js"></script>
<script>
const internetUsersBillions = 3.94;
const InRow = {
props: ['label', 'modelValue', 'max'],
emits: ['update:modelValue'],
template: `
<div class="-in">
<label>{{ label }}</label>
<input :class="classComputed" type="number" min="0" v-model="value" :max="maxComputed">
</div>`,
data() {
return {
isError: false,
};
},
computed: {
classComputed() {
if (this.isError) {
return 'input is-danger';
}
return 'input';
},
maxComputed() {
if (this.max !== '') {
return this.max;
}
return '';
},
value: {
get() {
return this.modelValue < 1 ? 0 : this.modelValue;
},
set(v) {
if (v === '') {
this.isError = false;
this.$emit('update:modelValue', 0);
return;
}
const iv = parseInt(v);
if (iv === NaN || iv < 0) {
this.isError = true;
return;
}
this.$emit('update:modelValue', iv);
}
},
},
};
const OmrLeadCalc = {
data() {
return {
ig: 0,
yt: 0,
fb: 0,
pi: 0,
tw: 0,
other: 0,
conv: 2,
};
},
computed: {
leads() {
return Math.floor(this.conv / 100 * this.total).toFixed(0);
},
inSN() {
return internetUsersBillions.toFixed(2);
},
yourPercent() {
const rounded = (this.total * 100 / (internetUsersBillions * 1000 * 1000 * 1000));
return rounded < 0.00000001 ? 0 : rounded.toFixed(8);
},
total() {
return this.ig
+ this.yt
+ this.fb
+ this.tw
+ this.pi
+ this.other;
},
}
};
const app = Vue.createApp(OmrLeadCalc);
app.component('in-row', InRow);
app.mount('#omr-lead-calc');
</script>
<!-- END -->