diff --git a/build/webpack.dev.conf.js b/build/webpack.dev.conf.js index d710d7e08179685c958312a24612ffe819329809..f77ba504a0d4f42e039efdf98df0dd3fbd865502 100644 --- a/build/webpack.dev.conf.js +++ b/build/webpack.dev.conf.js @@ -10,6 +10,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin') const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') const portfinder = require('portfinder') const { VueLoaderPlugin } = require('vue-loader') +const VueAutoRoutingPlugin = require('vue-auto-routing/lib/webpack-plugin') const HOST = process.env.HOST const PORT = process.env.PORT && Number(process.env.PORT) @@ -66,7 +67,14 @@ const devWebpackConfig = merge(baseWebpackConfig, { ignore: ['.*'] } ]), - new VueLoaderPlugin() + new VueLoaderPlugin(), + new VueAutoRoutingPlugin({ + // Path to the directory that contains your page components. + pages: 'src/components', + + // A string that will be added to importing component path (default @/pages/). + importPrefix: '@/components/' + }) ] }) diff --git a/package-lock.json b/package-lock.json index 7ed6dc734f41a989d8e7803d257876b92a6eb6fc..cacebe7f8d84f385e5ca37ca75d00a7632b7c018 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "openpharma", + "name": "openPharma-ui", "version": "0.1.1", "lockfileVersion": 1, "requires": true, @@ -166,6 +166,32 @@ } } }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, "@types/glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", @@ -5860,6 +5886,89 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -5878,6 +5987,15 @@ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "dev": true }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", @@ -9298,6 +9416,12 @@ "readable-stream": "^2.0.1" } }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -10471,8 +10595,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true, - "optional": true + "dev": true }, "pify": { "version": "2.3.0", @@ -13503,6 +13626,12 @@ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", @@ -13546,6 +13675,12 @@ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -15836,6 +15971,15 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz", "integrity": "sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==" }, + "vue-auto-routing": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/vue-auto-routing/-/vue-auto-routing-0.5.0.tgz", + "integrity": "sha512-b6QTZ/GZTFZt4qAt5KGmkUvCRHxtueIGbcOSGiFAkgcUxDAMgSDSbv5zEqnV2DYs35Q1jEGBAmC1Ox/wXbQQZQ==", + "dev": true, + "requires": { + "vue-route-generator": "^0.5.0" + } + }, "vue-eslint-parser": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", @@ -15929,6 +16073,24 @@ } } }, + "vue-route-generator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/vue-route-generator/-/vue-route-generator-0.5.0.tgz", + "integrity": "sha512-RYMurrQZsXi94QJ9RwPPrKXg8cAlPWSt3eLM2haieTOxjpQG8tMhIKIFo2rmCeA0lNEJfHE4+HRzK9eji7BTtw==", + "dev": true, + "requires": { + "fast-glob": "^3.0.4", + "prettier": "2.0.5" + }, + "dependencies": { + "prettier": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", + "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", + "dev": true + } + } + }, "vue-router": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.3.4.tgz", diff --git a/package.json b/package.json index 15a6a2235bb75a51fd07f91752ecf1f9a525e80d..45f65ba94b2d16e56168d1008c1e5c039c1e9bf3 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "shelljs": "^0.7.6", "uglifyjs-webpack-plugin": "^1.1.1", "url-loader": "^0.5.8", + "vue-auto-routing": "^0.5.0", "vue-jest": "^1.0.2", "vue-loader": "^15.9.3", "vue-style-loader": "^3.0.1", diff --git a/src/App.vue b/src/App.vue index e14ec8b8dadb70e7aba2bc25586fb875709bedca..497eaec2be84ac62509804712fee840a4356f3cb 100644 --- a/src/App.vue +++ b/src/App.vue @@ -2,7 +2,7 @@ <div id="app"> <nav class="navbar navbar-expand navbar-dark bg-dark"> <!-- <a href="#" class="navbar-brand">{{ $t('global.openPharma') }}</a> --> - <a href="/" class="navbar-brand" style="font-family:'Ubuntu Medium"><img src="@/assets/logo.png" style="margin-right: 8px; width:41px">{{ $t('global.openPharma') }}</a> + <a href="/Home" class="navbar-brand" style="font-family:'Ubuntu Medium"><img src="@/assets/logo.png" style="margin-right: 8px; width:41px">{{ $t('global.openPharma') }}</a> <div class="navbar-nav mr-auto"> <li class="nav-item"> <a href="/Clients" class="nav-link">{{ $t('global.viewsHome.clients.title') }}</a> diff --git a/src/components/Client.vue b/src/components/Client.vue index 7c0438877ef770dc7611d17915a45e945fe78390..7f489d067e2652de5a447c6b8341928768ce66e4 100644 --- a/src/components/Client.vue +++ b/src/components/Client.vue @@ -73,22 +73,22 @@ export default { return { uuid: '', client: { - // uuid: undefined, - // numSS: '', - // cleSS: '', - // lastName: '', - // firstName: '', - // birthDate: '', - // address: '', - // address2: '', - // city: '', - // zipcode: '', - // cellphone: '', - // phone: '', - // center: '', - // viewAt: '', - // active: false, - // isEdit: false + uuid: undefined, + numSS: '', + cleSS: '', + lastName: '', + firstName: '', + birthDate: '', + address: '', + address2: '', + city: '', + zipcode: '', + cellphone: '', + phone: '', + center: '', + viewAt: '', + active: false, + isEdit: false } } }, @@ -103,45 +103,43 @@ export default { methods: { getClient (uuid) { var url = '/api/clients/' + uuid - axios.get(url) + + axios.get(url) // Call API GET .then(result => { this.mapClient(result.data) - }, - error => { console.error(error) } - ) + }, error => { console.error(error) }) }, mapClient (pClient) { - debugger - console.log(pClient.birthDate) + // debugger + // console.log(pClient.birthDate) this.client = pClient + // this.client.isEdit = true var viewAt = new Date() - this.client.viewAt = viewAt + this.client['viewAt'] = viewAt }, addClient () { this.client.active = true - axios - .post('api/clients', this.client).then(res => { + axios.post('api/clients', this.client) + .then(res => { this.client = {} this.client.isEdit = false - this.getClients() + this.getClient(this.client.uuid) }).catch(err => { console.log(err) }) }, updateClient () { - axios - .put(`/api/clients/${this.client.uuid}`, this.client).then(res => { + axios.put(`/api/clients/${this.client.uuid}`, this.client) + .then(res => { this.client = {} this.client.isEdit = false - this.getTasks() + this.getClient(this.client.uuid) console.log(res) - }) - .catch(err => { console.log(err) }) + }).catch(err => { console.log(err) }) }, deleteClient (uuid) { - axios - .delete(`/api/clients/${uuid}`).then(res => { + axios.delete(`/api/clients/${uuid}`) + .then(res => { this.client = {} - this.getTasks() console.log(res) }).catch(err => { console.log(err) }) } diff --git a/src/router/index.js b/src/router/index.js index 013668f03973df307be41dc268ccc5444c8f14e7..7e7dedfc3b65b2a033e52bdcfd2d83d8b6623432 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,56 +1,83 @@ +import routes from 'vue-auto-routing' + import Vue from 'vue' import Router from 'vue-router' // import upperFirst from 'lodash/upperFirst' // import camelCase from 'lodash/camelCase' -import Home from '@/components/Home' -import Clients from '@/components/Clients' -import Client from '@/components/Client' -import Products from '@/components/Products' -import Updates from '@/components/Updates' +// import Home from '@/components/Home' +// import Clients from '@/components/Clients' +// import Client from '@/components/Client' +// import Products from '@/components/Products' +// import Updates from '@/components/Updates' +// import Settings from '@/components/Settings' Vue.use(Router) +// var requireComponent = function () { +// const components = require.context('@/components', true, /Base[A-Z]\w+\.(vue|js)$/) +// console.log(components) +// const routes = [{ path: '/', name: 'Home', component: Home }] +// components.keys().forEach(key => { +// const matched = key.match(/Base[A-Z]\w+\.(vue|js)$/) +// if (matched && matched.length > 1) { +// console.log(components(key)) +// // const route = matched[1] +// var path = '@/components/' + components(key) +// var Component = require(path) +// routes.push({ path: '/' + components(key), name: components(key), component: Component }) +// // components(key) +// } +// }) +// return routes +// } + +export default new Router({ + mode: 'history', + routes +}) + +// export default new Router({ +// mode: 'history', +// routes: [ +// { path: '/', name: 'Home', component: Home }, +// { path: '/Clients', name: 'Clients', component: Clients }, +// { path: '/Client/:uuid', name: 'Client', component: Client, props: { uuid: '' } }, +// { path: '/Products', name: 'Products', component: Products }, +// { path: '/Updates', name: 'Updates', component: Updates }, +// { path: '/Settings', name: 'Settings', component: Settings } +// ] +// }) + // const requireComponent = require.context( -// // Le chemin relatif du dossier composants -// './components', -// // Suivre ou non les sous-dossiers -// false, -// // L'expression régulière utilisée pour faire concorder les noms de fichiers de composant de base -// /Base[A-Z]\w+\.(vue|js)$/ +// // Le chemin relatif du dossier composants +// './components', +// // Suivre ou non les sous-dossiers +// false, +// // L'expression régulière utilisée pour faire concorder les noms de fichiers de composant de base +// /Base[A-Z]\w+\.(vue|js)$/ // ) // requireComponent.keys().forEach(fileName => { -// // Récupérer la configuration du composant -// const componentConfig = requireComponent(fileName) - -// // Récupérer le nom du composant en PascalCase -// const componentName = upperFirst( -// camelCase( -// // Retrouver le nom du fichier indépendemment de la profondeur de dossier -// fileName -// .split('/') -// .pop() -// .replace(/\.\w+$/, '') -// ) -// ) - -// // Créer un composant global -// Vue.component( -// componentName, -// // Chercher les options du composant dans `.default`, qui -// // existera si le composant a été exporté avec `export default`, -// // sinon revenez à la racine du module. -// componentConfig.default || componentConfig -// ) -// }) +// // // Récupérer la configuration du composant +// // const componentConfig = requireComponent(fileName) -export default new Router({ - mode: 'history', - routes: [ - { path: '/', name: 'Home', component: Home }, - { path: '/Clients', name: 'Clients', component: Clients }, - { path: '/Client/:uuid', name: 'Client', component: Client, props: { uuid: '' } }, - { path: '/Products', name: 'Products', component: Products }, - { path: '/Updates', name: 'Updates', component: Updates } - ] -}) \ No newline at end of file +// // // Récupérer le nom du composant en PascalCase +// // const componentName = upperFirst( +// // camelCase( +// // // Retrouver le nom du fichier indépendemment de la profondeur de dossier +// // fileName +// // .split('/') +// // .pop() +// // .replace(/\.\w+$/, '') +// // ) +// // ) + +// // // Créer un composant global +// // Vue.component( +// // componentName, +// // // Chercher les options du composant dans `.default`, qui +// // // existera si le composant a été exporté avec `export default`, +// // // sinon revenez à la racine du module. +// // componentConfig.default || componentConfig +// // ) +// }) \ No newline at end of file