WIP
Some checks failed
Telegram Mini App Shop Builder / Compute version metadata (push) Has been cancelled
Telegram Mini App Shop Builder / Run Frontend tests (push) Has been cancelled
Telegram Mini App Shop Builder / Run Backend tests (push) Has been cancelled
Telegram Mini App Shop Builder / Run PHP_CodeSniffer (push) Has been cancelled
Telegram Mini App Shop Builder / Build module. (push) Has been cancelled
Telegram Mini App Shop Builder / release (push) Has been cancelled

This commit is contained in:
2026-03-11 21:52:01 +03:00
parent 47bffc90b2
commit 87eb66f06b
106 changed files with 572 additions and 581 deletions

View File

@@ -1,9 +0,0 @@
{
"recommendations": [
"Vue.volar",
"dbaeumer.vscode-eslint",
"EditorConfig.EditorConfig",
"oxc.oxc-vscode",
"esbenp.prettier-vscode"
]
}

View File

@@ -58,7 +58,7 @@
<li :class="{active: route.name === 'pulse'}">
<RouterLink :to="{name: 'pulse'}">
<i class="fa fa-heartbeat pulse-icon tw:text-red-200"></i> TeleCart Pulse <span class="pulse-beta-label tw:ml-1 tw:px-1.5 tw:py-0.5 tw:text-xs tw:font-semibold tw:text-white tw:rounded">BETA</span>
<i class="fa fa-heartbeat pulse-icon tw:text-red-200"></i> MegaPay Pulse <span class="pulse-beta-label tw:ml-1 tw:px-1.5 tw:py-0.5 tw:text-xs tw:font-semibold tw:text-white tw:rounded">BETA</span>
</RouterLink>
</li>

View File

@@ -43,7 +43,7 @@ legend.p-fieldset-legend {
margin-bottom: 0;
}
.telecart-admin-app {
.megapay-admin-app {
color: var(--color-slate-700);
}

View File

@@ -67,9 +67,9 @@ const settings = useSettingsStore();
/** Человекочитаемое имя и описание задач (ключ — job.name с бэкенда) */
const JOB_META = {
telecart_pulse_send_events: {
friendlyName: 'Отправка данных в TeleCart Pulse',
description: 'Отправка данных телеметрии о действиях в TeleCart. Требуется для сбора метрик по рассылкам и кампаниям, сделанных через сервис TeleCart Pulse',
megapay_pulse_send_events: {
friendlyName: 'Отправка данных в MegaPay Pulse',
description: 'Отправка данных телеметрии о действиях в MegaPay. Требуется для сбора метрик по рассылкам и кампаниям, сделанных через сервис MegaPay Pulse',
},
};

View File

@@ -94,7 +94,7 @@ onMounted(() => {
$(searchInput.value).autocomplete({
source: function (request, response) {
$.ajax({
url: `/admin/index.php?route=catalog/category/autocomplete&user_token=${window.TeleCart.user_token}&filter_name=${encodeURIComponent(request)}`,
url: `/admin/index.php?route=catalog/category/autocomplete&user_token=${window.MegaPay.user_token}&filter_name=${encodeURIComponent(request)}`,
dataType: 'json',
success: function (json) {
response($.map(json, function (item) {

View File

@@ -94,7 +94,7 @@ onMounted(() => {
$(productsInput.value).autocomplete({
source: function (request, response) {
$.ajax({
url: `/admin/index.php?route=catalog/product/autocomplete&user_token=${window.TeleCart.user_token}&filter_name=${encodeURIComponent(request)}`,
url: `/admin/index.php?route=catalog/product/autocomplete&user_token=${window.MegaPay.user_token}&filter_name=${encodeURIComponent(request)}`,
dataType: 'json',
success: function (json) {
response($.map(json, function (item) {

View File

@@ -40,7 +40,7 @@
<template #help>
Подробная инструкция доступна в
<a href="https://telecart-labs.github.io/docs/telegram/telegram/#%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B1%D0%BE%D1%82%D0%B0" target="_blank">документации
<a href="https://megapay-labs.github.io/docs/telegram/telegram/#%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B1%D0%BE%D1%82%D0%B0" target="_blank">документации
<i class="fa fa-external-link"></i>
</a>.
</template>

View File

@@ -41,7 +41,7 @@
Telegram поддерживает только часть HTML тегов, которые описаны в их
<a href="https://core.telegram.org/bots/api#html-style" target="_blank">документации <i class="fa fa-external-link"></i></a>.
</p>
<p>Дополнительно к этому TeleCart добавляет переменные, которые вы можете использовать, чтобы сделать сообщения динамическими.</p>
<p>Дополнительно к этому MegaPay добавляет переменные, которые вы можете использовать, чтобы сделать сообщения динамическими.</p>
<ul>
<li><code>{store_name}</code> название магазина</li>
<li><code>{order_id}</code> номер заказа</li>

View File

@@ -6,9 +6,9 @@
:modelValue="model"
:allowCopy="true"
>
Ссылка на сайт с TeleCart витриной, которую нужно указывать в настройках MiniApp в @BotFather.<br>
Ссылка на сайт с MegaPay витриной, которую нужно указывать в настройках MiniApp в @BotFather.<br>
Подробная инструкция по настройке в
<a href="https://docs.telecart.pro/telegram/telegram/" target="_blank">
<a href="https://docs.megapay.pro/telegram/telegram/" target="_blank">
документации <i class="fa fa-external-link"></i>
</a>.
</ItemInput>

View File

@@ -30,7 +30,7 @@ onMounted(() => {
}
$.ajax({
url: `index.php?route=catalog/category/autocomplete&user_token=${window.TeleCart.user_token}&filter_name=` + encodeURIComponent(request),
url: `index.php?route=catalog/category/autocomplete&user_token=${window.MegaPay.user_token}&filter_name=` + encodeURIComponent(request),
dataType: 'json',
success: function (json) {
response($.map(json, function (item) {

View File

@@ -29,7 +29,7 @@ onMounted(() => {
}
$.ajax({
url: `index.php?route=catalog/product/autocomplete&user_token=${window.TeleCart.user_token}&filter_name=` + encodeURIComponent(request),
url: `index.php?route=catalog/product/autocomplete&user_token=${window.MegaPay.user_token}&filter_name=` + encodeURIComponent(request),
dataType: 'json',
success: function (json) {
response($.map(json, function (item) {

View File

@@ -18,7 +18,7 @@
<div class="tw:flex tw:items-center tw:flex-wrap tw:gap-8">
<div>
<span
v-tooltip.top="'Общее количество заказов, сделанное через TeleCart за всё время.'"
v-tooltip.top="'Общее количество заказов, сделанное через MegaPay за всё время.'"
class="tw:text-surface-500 tw:dark:text-surface-300"
>
Количество заказов
@@ -31,7 +31,7 @@
</div>
<div>
<span
v-tooltip.top="'Итоговая сумма заказов, сделанных через TeleCart за всё время.'"
v-tooltip.top="'Итоговая сумма заказов, сделанных через MegaPay за всё время.'"
class="tw:text-surface-500 tw:dark:text-surface-300"
>Общая сумма</span>
<div
@@ -101,14 +101,14 @@
/>
<Button
icon="fa fa-book"
v-tooltip.top="'Документация по модулю TeleCart'"
v-tooltip.top="'Документация по модулю MegaPay'"
as="a"
target="_blank"
href="https://telecart-labs.github.io/docs/"
href="https://megapay-labs.github.io/docs/"
/>
<Button
icon="fa fa-group"
v-tooltip.top="'Официальная Telegram группа модуля TeleCart'"
v-tooltip.top="'Официальная Telegram группа модуля MegaPay'"
as="a"
target="_blank"
href="https://t.me/ocstore3"

View File

@@ -8,7 +8,7 @@ import StoreView from "@/views/StoreView.vue";
import MainPageView from "@/views/MainPageView.vue";
import FormBuilderView from "@/views/FormBuilderView.vue";
import CustomersView from "@/views/CustomersView.vue";
import TeleCartPulseView from "@/views/TeleCartPulseView.vue";
import MegaPayPulseView from "@/views/MegaPayPulseView.vue";
import CronView from "@/views/CronView.vue";
const router = createRouter({
@@ -20,7 +20,7 @@ const router = createRouter({
{path: '/mainpage', name: 'mainpage', component: MainPageView},
{path: '/metrics', name: 'metrics', component: MetricsView},
{path: '/orders', name: 'orders', component: OrdersView},
{path: '/pulse', name: 'pulse', component: TeleCartPulseView},
{path: '/pulse', name: 'pulse', component: MegaPayPulseView},
{path: '/store', name: 'store', component: StoreView},
{path: '/telegram', name: 'telegram', component: TelegramView},
{path: '/texts', name: 'texts', component: TextsView},

View File

@@ -1,10 +1,10 @@
export function getThumb(imageUrl) {
const url = new URL(`${window.TeleCart.shop_base_url}/admin/index.php`);
const url = new URL(`${window.MegaPay.shop_base_url}/admin/index.php`);
url.searchParams.set('route', 'extension/module/tgshop/handle');
url.searchParams.set('api_action', 'getImage');
url.searchParams.set('path', imageUrl);
url.searchParams.set('size', '100x100');
url.searchParams.set('user_token', window.TeleCart.user_token);
url.searchParams.set('user_token', window.MegaPay.user_token);
return url.toString();
}

View File

@@ -1,11 +1,11 @@
import axios from 'axios';
/**
* Получает user_token из глобального объекта TeleCart
* Получает user_token из глобального объекта MegaPay
*/
function getUserToken() {
if (typeof window !== 'undefined' && window.TeleCart?.user_token) {
return window.TeleCart.user_token;
if (typeof window !== 'undefined' && window.MegaPay?.user_token) {
return window.MegaPay.user_token;
}
// Fallback: пытаемся получить из URL как запасной вариант

View File

@@ -1,5 +1,5 @@
<template>
<SettingsItem label="Режим работы планировщика" doc-href="https://docs.telecart.pro/features/cron/">
<SettingsItem label="Режим работы планировщика" doc-href="https://docs.megapay.pro/features/cron/">
<template #default>
<SelectButton
v-model="settings.items.cron.mode"

View File

@@ -76,7 +76,7 @@ import ItemSelect from "@/components/Settings/ItemSelect.vue";
import ItemInput from "@/components/Settings/ItemInput.vue";
const settings = useSettingsStore();
const themes = JSON.parse(window.TeleCart.themes);
const themes = JSON.parse(window.MegaPay.themes);
const aspectRatioOptions = {
'1:1': '1:1 - Квадрат (универсально, аксессуары, мелкие товары)',

View File

@@ -26,7 +26,7 @@
<Button
as="a"
href="https://telecart-labs.github.io/docs/analitycs/start/"
href="https://megapay-labs.github.io/docs/analitycs/start/"
target="_blank"
variant="text"
>

View File

@@ -13,5 +13,5 @@ import {useSettingsStore} from "@/stores/settings.js";
import ItemSelect from "@/components/Settings/ItemSelect.vue";
const settings = useSettingsStore();
const orderStatuses = JSON.parse(window.TeleCart.order_statuses);
const orderStatuses = JSON.parse(window.MegaPay.order_statuses);
</script>

View File

@@ -61,5 +61,5 @@ const productInteractionOptions = {
browser: 'Открытие товара на сайте',
};
const userToken = window.TeleCart.user_token;
const userToken = window.MegaPay.user_token;
</script>

View File

@@ -1,27 +1,27 @@
<template>
<div class="tw:space-y-6">
<div class="telecart-pulse-info">
<h3>🚀 Расширьте возможности вашего магазина с <strong><a href="https://telecart.pro/" target="_blank">TeleCart Pulse</a>!</strong></h3>
<div class="megapay-pulse-info">
<h3>🚀 Расширьте возможности вашего магазина с <strong><a href="https://megapay.pro/" target="_blank">MegaPay Pulse</a>!</strong></h3>
<p>
Если вы хотите не только показывать товары в Telegram, но и активно общаться с клиентами,
рассылать новости, акции и уведомления для этого есть <strong>TeleCart Pulse</strong>.
рассылать новости, акции и уведомления для этого есть <strong>MegaPay Pulse</strong>.
Это <strong>SaaS-платформа с месячной подпиской</strong>, которая полностью интегрируется
с вашим OpenCart-магазином и витриной TeleCart.
с вашим OpenCart-магазином и витриной MegaPay.
</p>
<p><strong>С TeleCart Pulse вы сможете:</strong></p>
<p><strong>С MegaPay Pulse вы сможете:</strong></p>
<ul>
<li>📣 Делать массовые рассылки сообщений покупателям прямо в Telegram</li>
<li>📊 Анализировать эффективность сообщений и взаимодействие клиентов</li>
<li>🔗 Легко синхронизироваться с вашей витриной TeleCart все данные остаются в одном месте</li>
<li>🔗 Легко синхронизироваться с вашей витриной MegaPay все данные остаются в одном месте</li>
</ul>
<p>
🧪 Платформа <strong>TeleCart Pulse находится на ранней стадии тестирования</strong>.
🧪 Платформа <strong>MegaPay Pulse находится на ранней стадии тестирования</strong>.
Если вам интересно и вы хотите принять участи в тестировании интересно, свяжитесь со мной через
<a href="https://t.me/ocstore3" target="_blank">официальную группу TeleCart в Telegram</a>.
<a href="https://t.me/ocstore3" target="_blank">официальную группу MegaPay в Telegram</a>.
</p>
</div>
@@ -91,7 +91,7 @@
type="number"
placeholder="50"
>
Определяет, сколько событий отправляется в TeleCart Pulse за один запуск фоновой задачи.
Определяет, сколько событий отправляется в MegaPay Pulse за один запуск фоновой задачи.
При большом значении события обрабатываются быстрее, но увеличивается нагрузка на сервер.
При малом значении нагрузка ниже, но обработка занимает больше времени.
Рекомендуемое значение: 50.
@@ -110,7 +110,7 @@ const settings = useSettingsStore();
const stats = ref(null);
const loadStats = async () => {
const response = await apiGet('getTeleCartPulseStats');
const response = await apiGet('getMegaPayPulseStats');
if (response.success) {
stats.value = response.data;
}
@@ -122,7 +122,7 @@ onMounted(() => {
</script>
<style scoped>
.telecart-pulse-info {
.megapay-pulse-info {
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
border: 1px solid #dee2e6;
border-radius: 8px;
@@ -130,7 +130,7 @@ onMounted(() => {
margin-bottom: 24px;
}
.telecart-pulse-info h3 {
.megapay-pulse-info h3 {
font-size: 1.5rem;
font-weight: 600;
margin-bottom: 16px;
@@ -138,43 +138,43 @@ onMounted(() => {
line-height: 1.4;
}
.telecart-pulse-info h3 a {
.megapay-pulse-info h3 a {
color: #dc3545;
font-weight: 700;
text-decoration: underline;
}
.telecart-pulse-info h3 a:hover {
.megapay-pulse-info h3 a:hover {
text-decoration: none;
}
.telecart-pulse-info p {
.megapay-pulse-info p {
margin-bottom: 16px;
line-height: 1.6;
color: #495057;
}
.telecart-pulse-info p:last-child {
.megapay-pulse-info p:last-child {
margin-bottom: 0;
}
.telecart-pulse-info p strong {
.megapay-pulse-info p strong {
color: #212529;
font-weight: 600;
}
.telecart-pulse-info ul {
.megapay-pulse-info ul {
margin: 16px 0;
padding-left: 24px;
}
.telecart-pulse-info ul li {
.megapay-pulse-info ul li {
color: #495057;
position: relative;
padding-left: 8px;
}
.telecart-pulse-info ul li:last-child {
.megapay-pulse-info ul li:last-child {
margin-bottom: 0;
}
</style>

View File

@@ -21,11 +21,11 @@ export default defineConfig({
build: {
manifest: false,
sourcemap: false,
outDir: '../../module/oc_telegram_shop/upload/admin/view/javascript/telecart',
outDir: '../../module/oc_telegram_shop/upload/admin/view/javascript/megapay',
emptyOutDir: true, // also necessary
rollupOptions: {
input: {
telecart: '/src/main.js',
megapay: '/src/main.js',
},
output: {
entryFileNames: `[name].js`,