revert: remove deploy UI, controller, actions, tasks, and routes

- Remove Deploy/Index.vue, DeployController, DeploySiteAction, DeployTask
- Remove deploy routes from web.php
- Remove deploy menu item from menuConfig
- Remove deploy button and methods from Main.vue
- Remove deploy logging channel from logging.php
- Keep _deploy/ folder for future CI/CD setup
This commit is contained in:
F4ilji
2026-07-02 12:00:48 +05:00
parent cc98d509e5
commit 8bc5c367d6
8 changed files with 0 additions and 752 deletions
-115
View File
@@ -6,43 +6,6 @@
<!-- Flash Messages (shared component) -->
<FlashMessages />
<!-- Deploy Button -->
<div v-if="isProduction" class="mb-6 bg-gradient-to-r from-primary/10 to-info/10 border border-primary/20 rounded-lg p-4">
<div class="flex items-center justify-between">
<div class="flex items-center gap-3">
<div class="w-10 h-10 rounded-lg bg-primary/20 flex items-center justify-center">
<DashboardIcon name="arrow-path" size="5" class="text-primary" />
</div>
<div>
<h3 class="text-sm font-semibold text-foreground">Обновление сайта</h3>
<p class="text-xs text-muted-foreground-1">Запуск скрипта деплоя и пересборка сервера</p>
</div>
</div>
<button
type="button"
@click="deploySite"
:disabled="deploying"
class="inline-flex items-center gap-2 px-5 py-2.5 bg-amber-500 text-white text-sm font-medium rounded-lg hover:bg-amber-600 transition-all disabled:opacity-50 disabled:cursor-not-allowed shadow-sm hover:shadow-md"
>
<svg v-if="deploying" class="animate-spin w-4 h-4" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
<DashboardIcon v-else name="rocket-launch" size="4" />
{{ deploying ? 'Обновление...' : 'Обновить сайт' }}
</button>
</div>
<!-- Deploy Output -->
<div v-if="deployOutput" class="mt-4 p-3 bg-surface border border-layer-line rounded-lg">
<div class="flex items-start gap-2 mb-2">
<DashboardIcon :name="deploySuccess ? 'check-circle' : 'exclamation-circle'" size="4" :class="deploySuccess ? 'text-success' : 'text-rose-500'" />
<span class="text-sm font-medium" :class="deploySuccess ? 'text-success' : 'text-rose-500'">{{ deployMessage }}</span>
</div>
<pre v-if="deployOutput" class="mt-2 p-2 bg-muted/30 rounded text-xs text-foreground overflow-auto max-h-48">{{ deployOutput }}</pre>
</div>
</div>
<!-- Stats Overview -->
<StatsOverview :stats="stats" class="mb-6" />
@@ -124,11 +87,6 @@ export default {
},
data() {
return {
deploying: false,
deployOutput: null,
deploySuccess: false,
deployStatus: null,
deployPolling: null,
domainSections: [
{
title: 'Контент сайта',
@@ -167,80 +125,7 @@ export default {
mounted() {
this.SET_DOCUMENT_TITLE('Главная');
},
beforeUnmount() {
if (this.deployPolling) {
clearInterval(this.deployPolling);
}
},
computed: {
isProduction() {
return this.$page.props.app?.env === 'production';
},
},
methods: {
async deploySite() {
if (!confirm('Вы уверены, что хотите обновить сайт? Это запустит скрипт деплоя.')) {
return;
}
this.deploying = true;
this.deployOutput = null;
this.deploySuccess = false;
try {
const response = await fetch(route('dashboard.deploy'), {
method: 'POST',
headers: {
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
'Accept': 'application/json',
},
});
const result = await response.json();
this.deploySuccess = result.success;
this.deployOutput = result.message;
// Если деплой запущен — начинаем polling статуса
if (result.success) {
this.startDeployPolling();
}
} catch (error) {
this.deploySuccess = false;
this.deployOutput = 'Ошибка при выполнении запроса: ' + error.message;
} finally {
this.deploying = false;
}
},
startDeployPolling() {
// Проверяем статус каждые 3 секунды
this.deployPolling = setInterval(async () => {
try {
const response = await fetch(route('dashboard.deploy.status'));
const status = await response.json();
this.deployStatus = status;
if (status.status === 'completed' || status.status === 'failed' || status.status === 'idle') {
clearInterval(this.deployPolling);
this.deployPolling = null;
this.deployOutput = status.message || 'Деплой завершён';
this.deploySuccess = status.status === 'completed';
if (status.log) {
this.deployOutput += '\n\n' + status.log;
}
}
} catch (error) {
console.error('Error polling deploy status:', error);
}
}, 3000);
},
get deployMessage() {
if (!this.deployOutput) return '';
return this.deploySuccess ? 'Сайт успешно обновлён!' : 'Ошибка при обновлении сайта';
},
getBgClass(color) {
const map = {
primary: 'bg-primary/10',