From 063ddafdfb6f145c7d796996eaec3b577dae496a Mon Sep 17 00:00:00 2001 From: brusnitsyn Date: Mon, 1 Dec 2025 17:38:11 +0900 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B8=D1=81=D0=BA,=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BD=D0=B0=D0=B4=20query=20=D0=B2?= =?UTF-8?q?=20js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/IndexController.php | 8 ++- app/Models/SI/SttMedicalHistory.php | 14 +++++ package-lock.json | 52 +++++++++++++++++++ package.json | 2 + resources/js/Composables/useMedicalHistory.js | 28 ++++++++++ .../Pages/Home/ArchiveHistoryModal/Index.vue | 16 ++++++ resources/js/Pages/Home/DataTable/Index.vue | 28 +++++++++- resources/js/Pages/Home/Index.vue | 18 +++++-- 8 files changed, 160 insertions(+), 6 deletions(-) create mode 100644 resources/js/Composables/useMedicalHistory.js create mode 100644 resources/js/Pages/Home/ArchiveHistoryModal/Index.vue diff --git a/app/Http/Controllers/IndexController.php b/app/Http/Controllers/IndexController.php index c20c67a..c422837 100644 --- a/app/Http/Controllers/IndexController.php +++ b/app/Http/Controllers/IndexController.php @@ -11,9 +11,15 @@ class IndexController extends Controller { public function index(Request $request) { - $pageSize = $request->get('pageSize', 15); + $pageSize = $request->get('page_size', 15); + $searchText = $request->get('search', null); $cards = SttMedicalHistory::query(); + + if (!empty($searchText)) { + $cards = $cards->search($searchText); + } + $cards = SttMedicalHistoryResource::collection($cards->paginate($pageSize)); return Inertia::render('Home/Index', [ diff --git a/app/Models/SI/SttMedicalHistory.php b/app/Models/SI/SttMedicalHistory.php index 683b911..22f4add 100644 --- a/app/Models/SI/SttMedicalHistory.php +++ b/app/Models/SI/SttMedicalHistory.php @@ -32,4 +32,18 @@ class SttMedicalHistory extends Model { return $this->morphMany(ArchiveHistory::class, 'historyable'); } + + public function scopeSearch($query, $searchText) + { + return $query->where(function($q) use ($searchText) { + if (is_numeric($searchText)) { + $q->where('nkarta', 'LIKE', "$searchText%"); + } else { + // Ищем по всем частям ФИО + $q->where('fam', 'LIKE', "%$searchText%") + ->orWhere('im', 'LIKE', "%$searchText%") + ->orWhere('ot', 'LIKE', "%$searchText%"); + } + }); + } } diff --git a/package-lock.json b/package-lock.json index 7945b64..a0de4e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,9 @@ "@arco-design/color": "^0.4.0", "@inertiajs/vue3": "^2.2.19", "@vitejs/plugin-vue": "^6.0.2", + "@vueuse/core": "^14.1.0", "pinia": "^3.0.4", + "ufo": "^1.6.1", "vue": "^3.5.25" }, "devDependencies": { @@ -1193,6 +1195,12 @@ "@types/lodash": "*" } }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, "node_modules/@vitejs/plugin-vue": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.2.tgz", @@ -1342,6 +1350,44 @@ "integrity": "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==", "license": "MIT" }, + "node_modules/@vueuse/core": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.1.0.tgz", + "integrity": "sha512-rgBinKs07hAYyPF834mDTigH7BtPqvZ3Pryuzt1SD/lg5wEcWqvwzXXYGEDb2/cP0Sj5zSvHl3WkmMELr5kfWw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.1.0", + "@vueuse/shared": "14.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.1.0.tgz", + "integrity": "sha512-7hK4g015rWn2PhKcZ99NyT+ZD9sbwm7SGvp7k+k+rKGWnLjS/oQozoIZzWfCewSUeBmnJkIb+CNr7Zc/EyRnnA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.1.0.tgz", + "integrity": "sha512-EcKxtYvn6gx1F8z9J5/rsg3+lTQnvOruQd8fUecW99DCK04BkWD7z5KQ/wTAx+DazyoEE9dJt/zV8OIEQbM6kw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -2832,6 +2878,12 @@ "dev": true, "license": "0BSD" }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "license": "MIT" + }, "node_modules/vdirs": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/vdirs/-/vdirs-0.1.8.tgz", diff --git a/package.json b/package.json index d95f2d4..f4131de 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,9 @@ "@arco-design/color": "^0.4.0", "@inertiajs/vue3": "^2.2.19", "@vitejs/plugin-vue": "^6.0.2", + "@vueuse/core": "^14.1.0", "pinia": "^3.0.4", + "ufo": "^1.6.1", "vue": "^3.5.25" } } diff --git a/resources/js/Composables/useMedicalHistory.js b/resources/js/Composables/useMedicalHistory.js new file mode 100644 index 0000000..e250d96 --- /dev/null +++ b/resources/js/Composables/useMedicalHistory.js @@ -0,0 +1,28 @@ +import {router, usePage} from "@inertiajs/vue3"; +import {ref} from "vue"; +import {encodeQueryValue, stringifyQuery} from "ufo"; + +export const useMedicalHistory = (url) => { + const meta = ref(usePage().props.cards.meta) + + const navigate = (search, page, page_size) => { + const params = { + search, + page, + page_size + } + if (typeof params.page_size === 'undefined') { + params.page_size = meta.value.per_page + } + const query = stringifyQuery(params) + + router.visit(`${url}?${query}`, { + preserveState: true + }) + } + + return { + meta, + navigate + } +} diff --git a/resources/js/Pages/Home/ArchiveHistoryModal/Index.vue b/resources/js/Pages/Home/ArchiveHistoryModal/Index.vue new file mode 100644 index 0000000..4a4aff2 --- /dev/null +++ b/resources/js/Pages/Home/ArchiveHistoryModal/Index.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/resources/js/Pages/Home/DataTable/Index.vue b/resources/js/Pages/Home/DataTable/Index.vue index baa2f3a..c1366e2 100644 --- a/resources/js/Pages/Home/DataTable/Index.vue +++ b/resources/js/Pages/Home/DataTable/Index.vue @@ -1,12 +1,18 @@