From ac9eae8b5c32a018ce9564c85ab009fbe6e85d5b Mon Sep 17 00:00:00 2001 From: Fayyazi Date: Sat, 9 Nov 2019 14:13:52 +0330 Subject: [PATCH] update label show --- app/Http/Controllers/BarCodeController.php | 6 + app/Http/Controllers/LabelController.php | 11 +- app/Http/Requests/StoreCycleRequest.php | 4 +- app/Http/Requests/StoreLabelRequest.php | 6 - app/Label.php | 2 +- resources/js/show/App.vue | 37 ++++ resources/js/show/config/urls.js | 8 + resources/js/show/config/utils.js | 6 + resources/js/show/main.js | 55 ++++++ resources/js/show/router/index.js | 96 ++++++++++ resources/js/show/router/paths.js | 18 ++ .../js/show/view/Package/ShowPackage.vue | 175 +++++++++++++++++ resources/js/vue/App.vue | 2 +- .../js/vue/components/modal/cycle/Show.vue | 40 +++- .../js/vue/components/modal/label/Show.vue | 135 +++++++++++--- .../js/vue/components/modal/package/Show.vue | 71 +++---- resources/js/vue/config/urls.js | 3 + resources/js/vue/router/paths.js | 5 + resources/js/vue/views/Cycle/AddEdit.vue | 12 +- resources/js/vue/views/Label/AddEdit.vue | 34 +--- resources/js/vue/views/Label/List.vue | 20 +- resources/js/vue/views/Package/List.vue | 6 + .../js/vue/views/Package/ShowPackage.vue | 176 ++++++++++++++++++ resources/views/showMaster.blade.php | 70 +++++++ routes/api.php | 1 + routes/web.php | 3 + webpack.mix.js | 6 +- 27 files changed, 867 insertions(+), 141 deletions(-) create mode 100644 resources/js/show/App.vue create mode 100644 resources/js/show/config/urls.js create mode 100644 resources/js/show/config/utils.js create mode 100644 resources/js/show/main.js create mode 100644 resources/js/show/router/index.js create mode 100644 resources/js/show/router/paths.js create mode 100644 resources/js/show/view/Package/ShowPackage.vue create mode 100644 resources/js/vue/views/Package/ShowPackage.vue create mode 100644 resources/views/showMaster.blade.php diff --git a/app/Http/Controllers/BarCodeController.php b/app/Http/Controllers/BarCodeController.php index 5907c9b7..79f5c961 100644 --- a/app/Http/Controllers/BarCodeController.php +++ b/app/Http/Controllers/BarCodeController.php @@ -39,4 +39,10 @@ class BarCodeController extends Controller return \MessageResponse::data(['Barcode' => $Barcode, 'QRCode' => $QRCode]); } } + public function generatePackageQRCode(Package $Package) + { + $URL = 'https://www.cssd-doc.com/ShowPackage/'.$Package->id; + $QRCode = DNS2D::getBarcodePNG($URL, "QRCODE"); + return \MessageResponse::data(['QRCode' => 'data:image/png;base64,' .$QRCode]); + } } diff --git a/app/Http/Controllers/LabelController.php b/app/Http/Controllers/LabelController.php index cd90c9f5..19464d05 100644 --- a/app/Http/Controllers/LabelController.php +++ b/app/Http/Controllers/LabelController.php @@ -28,10 +28,6 @@ class LabelController extends Controller $query->where('user_id', $user->id); } }) - - ->when($request->has('name') && $request->name != '', function($query) use($request){ - $query->where('name', 'LIKE', '%'.$request->name.'%'); - }) ->when($request->has('sterilizer_id') && $request->sterilizer_id != '', function($query) use($request){ $query->where('sterilizer_id', $request->sterilizer_id); }) @@ -41,9 +37,6 @@ class LabelController extends Controller ->when($request->has('lot_number') && $request->lot_number != '', function($query) use($request){ $query->where('lot_number', $request->lot_number); }) - ->when($request->has('department') && $request->department != '', function($query) use($request){ - $query->where('department', 'LIKE', '%'.$request->department.'%'); - }) ->when($medical_center_id, function($query) use($request){ $query->whereHas('user', function($query) use($request){ $query->where('medical_center_id', $request->medical_center_id); @@ -59,19 +52,17 @@ class LabelController extends Controller public function show(Label $Label) { $Label->load('user', 'package', 'package.items', 'user.medical_center'); + return \MessageResponse::data($Label); } public function store(StoreLabelRequest $request) { $LabelData = [ - 'name' => $request->name, 'sterile_date' => $request->sterile_date, 'expire_date' => $request->expire_date, 'sterilizer_id' => $request->sterilizer_id, 'cycle_number' => $request->cycle_number, 'lot_number' => $request->lot_number, - 'department' => $request->department, - 'note' => $request->note, 'user_id' => auth('api')->user()->id, 'package_id' => $request->package_id ]; diff --git a/app/Http/Requests/StoreCycleRequest.php b/app/Http/Requests/StoreCycleRequest.php index 1a4751f3..646ea6a7 100644 --- a/app/Http/Requests/StoreCycleRequest.php +++ b/app/Http/Requests/StoreCycleRequest.php @@ -30,7 +30,7 @@ class StoreCycleRequest extends FormRequest 'sterilizer_id' => 'required', 'cycle_number' => 'required', 'note' => 'nullable', - 'labels' => 'required', + 'labels.*.id' => 'required|numeric|exists:labels,id', ]; break; } @@ -43,7 +43,7 @@ class StoreCycleRequest extends FormRequest 'sterilizer_id' => 'required', 'cycle_number' => 'required', 'note' => 'nullable', - 'labels' => 'required', + 'labels.*.id' => 'required|numeric|exists:labels,id', ]; break; diff --git a/app/Http/Requests/StoreLabelRequest.php b/app/Http/Requests/StoreLabelRequest.php index d214036c..248808bd 100644 --- a/app/Http/Requests/StoreLabelRequest.php +++ b/app/Http/Requests/StoreLabelRequest.php @@ -25,14 +25,11 @@ class StoreLabelRequest extends FormRequest switch ($this->method()) { case 'POST': { return [ - 'name' => 'required|max:100|unique:labels', 'sterile_date' => 'required', 'expire_date' => 'required', 'sterilizer_id' => 'required', 'cycle_number' => 'required', 'lot_number' => 'required', - 'department' => 'required', - 'note' => 'nullable', 'package_id' => 'required', ]; break; @@ -41,14 +38,11 @@ class StoreLabelRequest extends FormRequest case 'PATCH': { $Label = $this->route('Label'); return [ - 'name' => 'required|max:100|unique:labels,id,'.$Label->id, 'sterile_date' => 'required', 'expire_date' => 'required', 'sterilizer_id' => 'required', 'cycle_number' => 'required', 'lot_number' => 'required', - 'department' => 'required', - 'note' => 'nullable', 'package_id' => 'required', ]; break; diff --git a/app/Label.php b/app/Label.php index f34d22d3..4af546c2 100644 --- a/app/Label.php +++ b/app/Label.php @@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model; class Label extends Model { - public $fillable = ['name', 'sterile_date', 'expire_date', 'sterilizer_id', 'cycle_number', 'lot_number', 'department', 'user_id', 'note', 'package_id']; + public $fillable = ['sterile_date', 'expire_date', 'sterilizer_id', 'cycle_number', 'lot_number', 'user_id', 'package_id']; public function user() { return $this->belongsTo('App\User'); diff --git a/resources/js/show/App.vue b/resources/js/show/App.vue new file mode 100644 index 00000000..a7c6bad3 --- /dev/null +++ b/resources/js/show/App.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/resources/js/show/config/urls.js b/resources/js/show/config/urls.js new file mode 100644 index 00000000..88f62e62 --- /dev/null +++ b/resources/js/show/config/urls.js @@ -0,0 +1,8 @@ +const urls = { + + showPackage: function(id) { + return `/Packages/${id}`; + }, + +}; +export { urls }; diff --git a/resources/js/show/config/utils.js b/resources/js/show/config/utils.js new file mode 100644 index 00000000..7d79d18c --- /dev/null +++ b/resources/js/show/config/utils.js @@ -0,0 +1,6 @@ +const roles = [ + 'Admin', + 'User', + 'Supervisor', +]; +export { roles }; \ No newline at end of file diff --git a/resources/js/show/main.js b/resources/js/show/main.js new file mode 100644 index 00000000..fc6577e3 --- /dev/null +++ b/resources/js/show/main.js @@ -0,0 +1,55 @@ +import 'font-awesome/css/font-awesome.min.css' +import Vue from 'vue' +// Components +import '@/components' + +// Plugins +// import './plugins' +import '@/plugins/vuetify' +// Material FontIcon +import 'material-design-icons-iconfont/dist/material-design-icons.css' +// Fortawesome +import '@fortawesome/fontawesome-free/css/all.css' +// Sync router with store +// import { sync } from 'vuex-router-sync' +// Application imports +import App from './App.vue' +// import i18n from '@/i18n' +import router from './router' +// import store from '@/store' + + +// import { ApiService, TokenService } from '@/services' +// Sync store with router +// sync(store, router) + +// Vue.config.productionTip = false +// ApiService.setHeader(); +// Set the base URL of the API +// ApiService.init(process.env.MIX_APP_ROOT_API) + +// require('./services/global/errorHandler.service'); +// If token exists set Authorizion header +// if (TokenService.getToken()) { +// ApiService.setAuthHeader(); +// +// // If info exists set info in Store +// if(TokenService.getInfo()) { +// let info = TokenService.getInfo(); +// store.commit('setInfo', info); +// } else { +// store.dispatch('info'); +// } +// } + +// import hasRole from '@/services/mixin/hasRole' +// Vue.mixin(hasRole) + +/* eslint-disable no-new */ +new Vue({ + // i18n, + router, + // store, + render: h => h(App), + iconfont: 'fa4' +}).$mount('#app'); diff --git a/resources/js/show/router/index.js b/resources/js/show/router/index.js new file mode 100644 index 00000000..f0235c3a --- /dev/null +++ b/resources/js/show/router/index.js @@ -0,0 +1,96 @@ +/** + * Vue Router + * + * @library + * + * https://router.vuejs.org/en/ + */ + +// Lib imports +import Vue from 'vue' +// import VueAnalytics from 'vue-analytics' +import Router from 'vue-router' +// import Meta from 'vue-meta' +// import { TokenService } from '@/services' + +// Routes +import paths from './paths' + +function route (options) { + let path = options.path; + let view = options.view; + let name = options.name; + let meta = (options.meta) ? options.meta : ''; + return { + name: name || view, + path, + meta, + component: (resovle) => import( + `@show/views/${view}.vue` + ).then(resovle) + } +} + +Vue.use(Router) + +// Create a new router +const router = new Router({ + mode: 'history', + routes: paths.map(path => route(path)).concat([ + { path: '*', redirect: '/' } + ]), + // scrollBehavior (to, from, savedPosition) { + // if (savedPosition) { + // return savedPosition + // } + // if (to.hash) { + // return { selector: to.hash } + // } + // return { x: 0, y: 0 } + // } +}) + +// Vue.use(Meta) + +// import {$hasRole} from '@/services/acl/role'; + +// router.beforeEach((to, from, next) => { +// const isPublic = to.matched.some(record => record.meta.public); +// const onlyWhenLoggedOut = to.matched.some(record => record.meta.onlyWhenLoggedOut); +// const loggedIn = !!TokenService.getToken(); +// const roles = (to.meta && to.meta.roles) ? to.meta.roles : null; +// +// if (!isPublic && !loggedIn) { +// return next({ +// path:'/login', +// query: {redirect: to.fullPath} // Store the full path to redirect the user to after login +// }); +// } +// +// // Do not allow user to visit login page or register page if they are logged in +// if (loggedIn && onlyWhenLoggedOut && policy) { +// return next('/') +// } +// +// // Do not allow user to visit Pages then not access roles +// if (roles && !$hasRole(roles)) { +// return next('/') +// } +// +// next(); +// }); + +// Bootstrap Analytics +// Set in .env +// https://github.com/MatteoGabriele/vue-analytics +// if (process.env.GOOGLE_ANALYTICS) { +// Vue.use(VueAnalytics, { +// id: process.env.GOOGLE_ANALYTICS, +// router, +// autoTracking: { +// page: process.env.NODE_ENV !== 'development' +// } +// }) +// } + +export default router diff --git a/resources/js/show/router/paths.js b/resources/js/show/router/paths.js new file mode 100644 index 00000000..f9573954 --- /dev/null +++ b/resources/js/show/router/paths.js @@ -0,0 +1,18 @@ +/** + * Define all of your application routes here + * for more information on routes, see the + * official documentation https://router.vuejs.org/en/ + */ +export default [ + + { + path: '/', + name: 'home', + view: 'Package/ShowPackage' + }, + { + path: '/Show/Package/:package', + name: 'ShowPackage', + view: 'Package/ShowPackage' + }, +] diff --git a/resources/js/show/view/Package/ShowPackage.vue b/resources/js/show/view/Package/ShowPackage.vue new file mode 100644 index 00000000..8e48440d --- /dev/null +++ b/resources/js/show/view/Package/ShowPackage.vue @@ -0,0 +1,175 @@ + + + + diff --git a/resources/js/vue/App.vue b/resources/js/vue/App.vue index 0193e59f..d6ef55aa 100644 --- a/resources/js/vue/App.vue +++ b/resources/js/vue/App.vue @@ -33,6 +33,6 @@ /* Remove in 1.2 */ .v-datatable thead th.column.sortable i { - vertical-align: unset; + vertical-align: unset; } diff --git a/resources/js/vue/components/modal/cycle/Show.vue b/resources/js/vue/components/modal/cycle/Show.vue index 56bcf88a..b888c2a1 100644 --- a/resources/js/vue/components/modal/cycle/Show.vue +++ b/resources/js/vue/components/modal/cycle/Show.vue @@ -45,6 +45,24 @@ + +

Barcode And QRCode Image

+ +
+
+ + +
+ {{data.unique_id}} +
+
+ + + + + +
+

Labels

@@ -57,16 +75,14 @@ - count : {{ label.pivot.count }} - note : {{ label.note }} Package : note : {{ label.package.note }} @@ -75,10 +91,9 @@ - count : {{ item.pivot.count }} note : {{ item.note }} @@ -112,14 +127,23 @@ import { ApiService } from "@/services"; import { urls } from "@/config/urls"; export default { data: () => ({ - data : {} + data : {}, + barcodeimg : '', + QRCodeimg : '' }), methods: { ...mapMutations("modal", ["closeModal", "setResultModal"]), + async generateBarcode(packageId) { + const result = await ApiService.post(urls.Barcode(packageId)); + if (result && result.status == 200) { + this.QRCodeimg = result.data.data.QRCode ? result.data.data.QRCode : null; + this.barcodeimg = result.data.data.Barcode ? result.data.data.Barcode : null; + } + }, }, created() { this.data = this.getModalProperties.result.data.data; - + this.generateBarcode(this.data.unique_id); }, computed: { ...mapGetters("modal", ["getModalProperties"]) diff --git a/resources/js/vue/components/modal/label/Show.vue b/resources/js/vue/components/modal/label/Show.vue index 3359fc65..25a63bc3 100644 --- a/resources/js/vue/components/modal/label/Show.vue +++ b/resources/js/vue/components/modal/label/Show.vue @@ -2,16 +2,22 @@ @@ -110,21 +136,70 @@ import { ApiService } from "@/services"; import { urls } from "@/config/urls"; export default { data: () => ({ - data : {} + data : {}, + QRCodeimg : '', + barcodeimg : '' + }), methods: { ...mapMutations("modal", ["closeModal", "setResultModal"]), - async verify(id) { - const result = await ApiService.post(urls.verifyPackage(id)); + // async verify(id) { + // const result = await ApiService.post(urls.verifyPackage(id)); + // if (result && result.status == 200) { + // this.setResultModal(result.data.data); + // this.closeModal(); + // } + // }, + async generateQRcodePackage(packageId) { + const result = await ApiService.post(urls.packageQRCode(packageId)); if (result && result.status == 200) { - this.setResultModal(result.data.data); - this.closeModal(); + this.QRCodeimg = result.data.data.QRCode ? result.data.data.QRCode : null; } + }, + async generateBarcode(labelId) { + const result = await ApiService.post(urls.Barcode(labelId)); + if (result && result.status == 200) { + this.barcodeimg = result.data.data.Barcode ? result.data.data.Barcode : null; + } + }, + print() { + const prtHtml = document.getElementById("printMe").innerHTML; + + // Get all stylesheets HTML + let stylesHtml = ""; + for (const node of [ + ...document.querySelectorAll('link[rel="stylesheet"], style') + ]) { + stylesHtml += node.outerHTML; + } + + // Open the print window + const WinPrint = window.open( + "", + "", + "left=0,top=0,width=800,height=900,toolbar=0,scrollbars=0,status=0" + ); + + WinPrint.document.write(` + + + ${stylesHtml} + + + ${prtHtml} + + `); + + WinPrint.document.close(); + WinPrint.focus(); + WinPrint.print(); + WinPrint.close(); } }, created() { this.data = this.getModalProperties.result.data.data; - + this.generateQRcodePackage(this.data.package.id); + this.generateBarcode(this.data.id); }, computed: { ...mapGetters("modal", ["getModalProperties"]) diff --git a/resources/js/vue/components/modal/package/Show.vue b/resources/js/vue/components/modal/package/Show.vue index d150e14a..b5bd07ce 100644 --- a/resources/js/vue/components/modal/package/Show.vue +++ b/resources/js/vue/components/modal/package/Show.vue @@ -1,19 +1,20 @@ - + diff --git a/resources/views/showMaster.blade.php b/resources/views/showMaster.blade.php new file mode 100644 index 00000000..44486d04 --- /dev/null +++ b/resources/views/showMaster.blade.php @@ -0,0 +1,70 @@ + + + + + + + CSSD-DOC + + + + + + + + +
+ + + diff --git a/routes/api.php b/routes/api.php index 19ec0a6e..7acbd967 100644 --- a/routes/api.php +++ b/routes/api.php @@ -63,6 +63,7 @@ Route::middleware('auth:api')->group(function () { Route::resource('Cycles', 'CycleController'); Route::post('Package/Barcode/{Code}', 'BarCodeController@generatePackageBarcode'); + Route::post('Package/QRCode/{Package}', 'BarCodeController@generatePackageQRCode'); }); Route::get('TestResults/{id}', 'TestResultController@show'); diff --git a/routes/web.php b/routes/web.php index 4dc5d3e6..7bf4a2cf 100644 --- a/routes/web.php +++ b/routes/web.php @@ -55,6 +55,9 @@ Route::get('/test',function(){ return view('home'); +}); +Route::get('/Show/{any?}/{any2?}',function(){ + return view('showMaster'); }); Route::any('{all}', function(){ return view('welcome'); diff --git a/webpack.mix.js b/webpack.mix.js index 277a6b02..68e2c743 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -16,6 +16,7 @@ const mix = require('laravel-mix'); extensions: ['.js', '.vue', '.json'], alias: { '@': path.resolve(__dirname, 'resources/js/vue'), + '@show': path.resolve(__dirname, 'resources/js/show'), }, }, output: { @@ -23,7 +24,8 @@ const mix = require('laravel-mix'); } }); -mix.js('resources/js/vue/main.js', 'public/js/vue/app.js'); +mix.js('resources/js/vue/main.js', 'public/js/vue/app.js') +.js('resources/js/show/main.js', 'public/js/show/app.js'); -mix.version(); \ No newline at end of file +mix.version();