diff --git a/app/Modules/Admin/Http/Controllers/AdminCompaniesController.php b/app/Modules/Admin/Http/Controllers/AdminCompaniesController.php index 3881557..23b20c6 100644 --- a/app/Modules/Admin/Http/Controllers/AdminCompaniesController.php +++ b/app/Modules/Admin/Http/Controllers/AdminCompaniesController.php @@ -44,6 +44,16 @@ public function edit(Company $company) public function update(Request $request, Company $company) { + $validated = $request->validate([ + 'name' => 'required', + 'email' => "required|unique:companies,email,{$company->id}", + 'phone' => "required|unique:companies,phone,{$company->id}", + ], + [ + 'email.unique' => 'Указанная электронная почта уже существует', + 'phone.unique' => 'Указанный номер телефона уже существует' + ] + ); $company->update($request->only('name', 'email', 'phone')); if ($request->token) { $company->bitrixy->token = $request->token; diff --git a/app/Modules/Admin/Http/Controllers/AdminComplexesController.php b/app/Modules/Admin/Http/Controllers/AdminComplexesController.php index 38565e6..7ab5b76 100644 --- a/app/Modules/Admin/Http/Controllers/AdminComplexesController.php +++ b/app/Modules/Admin/Http/Controllers/AdminComplexesController.php @@ -28,6 +28,7 @@ public function index(Request $request) $complexes = $complexes->get(); return view('admin::complexes.index', [ 'complexes' => $complexes, + 'cities' => City::orderBy('name')->get(), 'filter' => $request->filter ]); } @@ -48,7 +49,16 @@ public function update(Request $request, Complex $complex) public function create(Request $request) { - $city = Complex::create($request->only('name')); + $validated = $request->validate([ + 'name' => "required", + 'city_id' => "required", + ], + [ + 'name.required' => 'Необходимо указать название жилого комплекса', + 'city_id.required' => 'Необходимо указать город' + ] + ); + $city = Complex::create($request->only('name', 'city_id')); return to_route('admin.complexes'); } diff --git a/app/Modules/Admin/Views/companies/edit.blade.php b/app/Modules/Admin/Views/companies/edit.blade.php index e6d7b40..3893a4a 100644 --- a/app/Modules/Admin/Views/companies/edit.blade.php +++ b/app/Modules/Admin/Views/companies/edit.blade.php @@ -9,7 +9,8 @@ @csrf
- + @error('name')
{{ $message }}
@enderror @@ -18,17 +19,17 @@
+ value="{{ old('email', $company->email) }}"> @error('email') -
{{ $message }}
+
{{ $message }}
@enderror
- + @error('phone') -
{{ $message }}
+
{{ $message }}
@enderror
diff --git a/app/Modules/Admin/Views/complexes/edit.blade.php b/app/Modules/Admin/Views/complexes/edit.blade.php index 853c256..a1ec4a5 100644 --- a/app/Modules/Admin/Views/complexes/edit.blade.php +++ b/app/Modules/Admin/Views/complexes/edit.blade.php @@ -16,7 +16,6 @@
{{ $message }}
@enderror -
- @error('text') -
{{ $message }}
- @enderror + @csrf +
+ + +
+
+ +
@@ -107,4 +113,4 @@ -@endsection +@endsection \ No newline at end of file diff --git a/app/Modules/Admin/Views/users/edit.blade.php b/app/Modules/Admin/Views/users/edit.blade.php index 0b7e1ee..a114a80 100644 --- a/app/Modules/Admin/Views/users/edit.blade.php +++ b/app/Modules/Admin/Views/users/edit.blade.php @@ -22,7 +22,7 @@
- @error('phone')
{{ $message }}
diff --git a/app/Modules/Admin/Views/users/index.blade.php b/app/Modules/Admin/Views/users/index.blade.php index 94c2943..32d80a1 100644 --- a/app/Modules/Admin/Views/users/index.blade.php +++ b/app/Modules/Admin/Views/users/index.blade.php @@ -100,7 +100,7 @@
- + @error('phone')
{{ $message }}
@enderror diff --git a/app/Modules/Main/Views/agent/livewire/create.blade.php b/app/Modules/Main/Views/agent/livewire/create.blade.php index cb06a99..0aff627 100644 --- a/app/Modules/Main/Views/agent/livewire/create.blade.php +++ b/app/Modules/Main/Views/agent/livewire/create.blade.php @@ -46,7 +46,7 @@
- +
diff --git a/app/Modules/Main/Views/company/livewire/createAdmin.blade.php b/app/Modules/Main/Views/company/livewire/createAdmin.blade.php index 3b38599..e98486d 100644 --- a/app/Modules/Main/Views/company/livewire/createAdmin.blade.php +++ b/app/Modules/Main/Views/company/livewire/createAdmin.blade.php @@ -46,7 +46,7 @@
- +
diff --git a/public/pull.php b/public/pull.php index 23a920c..c269028 100644 --- a/public/pull.php +++ b/public/pull.php @@ -24,7 +24,7 @@ if($json['total_commits'] > 0) { - $result = shell_exec("cd /var/www/lk && git reset --hard HEAD && git pull && php artisan migrate"); + $result = shell_exec("cd /var/www/lk && git reset --hard HEAD && git pull && php artisan migrate && npm run build"); echo "

$result

"; } diff --git a/resources/js/phone-format.js b/resources/js/phone-format.js new file mode 100644 index 0000000..3506d39 --- /dev/null +++ b/resources/js/phone-format.js @@ -0,0 +1,81 @@ +function initPhoneMask(selector = 'input[type="tel"]') { + const format = (digits) => { + // Пример маски: +7 (999) 123-45-67 + const d = digits.slice(0, 11); // ограничим 11 цифрами (под РФ) + if (!d.length) return ''; + + // если начали вводить с 8/7 — приведём к +7 + let rest = d; + let prefix = '+7'; + if (d[0] === '8') rest = '7' + d.slice(1); + if (rest[0] === '7') rest = rest.slice(1); + else { + // если первая цифра не 7, считаем что пользователь вводит локально, но всё равно показываем +7 + // (при желании можно тут менять логику) + } + + const a = rest.slice(0, 3); + const b = rest.slice(3, 6); + const c = rest.slice(6, 8); + const e = rest.slice(8, 10); + + let out = prefix; + if (a) out += ` (${a}`; + if (a && a.length === 3) out += `)`; + if (b) out += ` ${b}`; + if (c) out += `-${c}`; + if (e) out += `-${e}`; + return out; + }; + + const applyToInput = (input) => { + if (input.dataset.phoneMasked === '1') return; + input.dataset.phoneMasked = '1'; + + // Подсказки браузеру: tel-поле и события input/change поддерживаются стандартно [web:2] + input.autocomplete = input.autocomplete || 'tel'; + input.inputMode = input.inputMode || 'tel'; // подсказка клавиатуры, особенно на мобилках [web:12] + + const handler = () => { + const digits = input.value.replace(/\D/g, ''); + input.value = format(digits); + }; + + input.addEventListener('input', handler); // события input/change для tel описаны в MDN [web:2] + input.addEventListener('change', handler); // [web:2] + }; + + // 1) применяем ко всем уже существующим + document.querySelectorAll(selector).forEach(applyToInput); + + // 2) применяем к добавляемым динамически + const mo = new MutationObserver((mutations) => { + for (const m of mutations) { + for (const node of m.addedNodes) { + if (!(node instanceof Element)) continue; + if (node.matches?.(selector)) applyToInput(node); + node.querySelectorAll?.(selector).forEach(applyToInput); + } + } + }); + + mo.observe(document.documentElement, { childList: true, subtree: true }); + return () => mo.disconnect(); +} +// запуск +initPhoneMask(); + +function runOnDomUpdate(fn, root = document.documentElement) { + const observer = new MutationObserver((mutations) => { + // если важно “не дергать” лишний раз — фильтруем + if (mutations.some(m => m.type === 'childList' && (m.addedNodes.length || m.removedNodes.length))) { + fn(); + } + }); + + observer.observe(root, { childList: true, subtree: true }); // childList/subtree — ключевые опции [web:16] + return () => observer.disconnect(); +} + +// пример: заново применить маску к новым инпутам +const stop = runOnDomUpdate(() => initPhoneMask()); \ No newline at end of file diff --git a/resources/views/layouts/admin.blade.php b/resources/views/layouts/admin.blade.php index f6eaa2a..a8861aa 100644 --- a/resources/views/layouts/admin.blade.php +++ b/resources/views/layouts/admin.blade.php @@ -59,10 +59,12 @@ class="bi bi-caret-left" viewBox="0 0 16 16">
@@ -129,5 +140,5 @@ class="bi bi-caret-left" viewBox="0 0 16 16">
- +@vite(['resources/js/phone-format.js']) diff --git a/resources/views/livewire/create-client-form.blade.php b/resources/views/livewire/create-client-form.blade.php index f80b651..30e02c4 100644 --- a/resources/views/livewire/create-client-form.blade.php +++ b/resources/views/livewire/create-client-form.blade.php @@ -233,33 +233,7 @@ class="bi bi-emoji-astonished" viewBox="0 0 16 16">
@script @endscript diff --git a/vite.config.js b/vite.config.js index d5dc576..24d4f96 100644 --- a/vite.config.js +++ b/vite.config.js @@ -11,6 +11,7 @@ export default defineConfig({ 'resources/css/app.css', 'resources/css/docs.css', 'resources/css/multiselect.css', + 'resources/js/phone-format.js', ], refresh: true, }),