├── .eslintrc.js ├── .postcssrc.js ├── README.md ├── build ├── build.js ├── check-versions.js ├── logo.png ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.pro.conf.js ├── config ├── dev.env.js ├── index.js ├── pro.env.js └── sit.env.js ├── index.html ├── package-lock.json ├── package.json ├── src ├── App.vue ├── components │ ├── audit │ │ └── ItemAudit.vue │ ├── checkbox │ │ ├── ColorCheckbox.vue │ │ └── ImgCheckbox.vue │ ├── datetime │ │ └── RangeDate.vue │ ├── editor │ │ └── Editor.vue │ ├── exception │ │ ├── ExceptionPage.vue │ │ └── typeConfig.js │ ├── import │ │ └── ImportExcel.vue │ ├── menu │ │ ├── Contextmenu.vue │ │ ├── SiderMenu.vue │ │ └── menu.js │ ├── setting │ │ ├── Setting.vue │ │ ├── SettingItem.vue │ │ └── StyleItem.vue │ ├── sketch │ │ └── ItemSketch.vue │ ├── tag │ │ └── ItemTag.vue │ ├── tool │ │ └── Drawer.vue │ └── upload-item │ │ └── UploadItem.vue ├── main.js ├── store │ ├── index.js │ └── modules │ │ ├── account.js │ │ └── setting.js ├── utils │ ├── auditItem.js │ ├── baseUtils.js │ ├── chartColor.js │ ├── color.js │ ├── common.js │ ├── commonConstants.js │ ├── corpMap.js │ ├── device.js │ ├── install.js │ ├── localstorage.js │ ├── permissionDirect.js │ ├── quizUtils.js │ ├── request.js │ ├── utils.less │ └── validator.js └── views │ ├── accident-record │ ├── ItemAdd.vue │ ├── ItemEdit.vue │ ├── ItemFactor.vue │ ├── ItemList.vue │ └── ItemParticulars.vue │ ├── bed-sketch │ ├── AllotBed.vue │ ├── BedAllotList.vue │ ├── ItemAdd.vue │ ├── ItemEdit.vue │ ├── ItemFactor.vue │ ├── ItemList.vue │ └── ItemParticulars.vue │ ├── chart │ ├── ChartPage.vue │ └── chart-item │ │ ├── CorpBaseDataBarChart.vue │ │ ├── CorpBaseDataPieChart.vue │ │ ├── CorpLeagueBarChart.vue │ │ ├── CorpPartyBarChart.vue │ │ └── CorpReportBarChart.vue │ ├── common │ ├── EmptyPageView.vue │ ├── GlobalFooter.vue │ ├── GlobalHeader.vue │ ├── GlobalLayout.vue │ ├── HeadInfo.vue │ ├── HeaderAvatar.vue │ ├── MenuView.vue │ ├── PageContent.vue │ ├── PageLayout.vue │ └── PageView.vue │ ├── error │ ├── 403.vue │ ├── 404.vue │ └── 500.vue │ ├── main │ └── MainPage.vue │ ├── nursing-salary │ ├── ItemAdd.vue │ ├── ItemEdit.vue │ ├── ItemFactor.vue │ ├── ItemList.vue │ └── ItemParticulars.vue │ ├── nursing-time-off │ ├── ItemAdd.vue │ ├── ItemEdit.vue │ ├── ItemFactor.vue │ ├── ItemList.vue │ └── ItemParticulars.vue │ ├── old-sketch │ ├── ItemAdd.vue │ ├── ItemEdit.vue │ ├── ItemFactor.vue │ ├── ItemList.vue │ └── ItemParticulars.vue │ ├── others │ ├── Excel.vue │ └── ImportResult.vue │ ├── personal │ ├── Profile.vue │ ├── UpdateAvatar.vue │ ├── UpdatePassword.vue │ └── UpdateProfile.vue │ ├── service-template-config │ ├── ItemAdd.vue │ ├── ItemEdit.vue │ ├── ItemFactor.vue │ └── ItemList.vue │ └── system │ ├── auth-menu │ ├── ButtonAdd.vue │ ├── ButtonEdit.vue │ ├── Icon.less │ ├── Icons.vue │ ├── ItemList.vue │ ├── MenuAdd.vue │ └── MenuEdit.vue │ ├── auth-role │ ├── ItemAdd.vue │ ├── ItemEdit.vue │ └── ItemList.vue │ └── auth-user │ ├── ItemAdd.vue │ ├── ItemEdit.vue │ ├── ItemList.vue │ └── ItemParticulars.vue └── static ├── avatar ├── 17e420c250804efe904a09a33796d5a10.jpg ├── 17e420c250804efe904a09a33796d5a16.jpg ├── 19034103295190235.jpg ├── 1d22f3e41d284f50b2c8fc32e0788698.jpeg ├── 20180414165754.jpg ├── 20180414165815.jpg ├── 20180414165821.jpg ├── 20180414165827.jpg ├── 20180414165834.jpg ├── 20180414165840.jpg ├── 20180414165846.jpg ├── 20180414165855.jpg ├── 20180414165909.jpg ├── 20180414165914.jpg ├── 20180414165920.jpg ├── 20180414165927.jpg ├── 20180414165936.jpg ├── 20180414165942.jpg ├── 20180414165947.jpg ├── 20180414165955.jpg ├── 20180414170003.jpg ├── 2dd7a2d09fa94bf8b5c52e5318868b4d9.jpg ├── 2dd7a2d09fa94bf8b5c52e5318868b4df.jpg ├── 496b3ace787342f7954b7045b8b06804.jpeg ├── 595ba7b05f2e485eb50565a50cb6cc3c.jpeg ├── 5997fedcc7bd4cffbd350b40d1b5b9824.jpg ├── 5997fedcc7bd4cffbd350b40d1b5b987.jpg ├── 87d8194bc9834e9f8f0228e9e530beb1.jpeg ├── 8f5b60ef00714a399ee544d331231820.jpeg ├── 964e40b005724165b8cf772355796c8c.jpeg ├── BiazfanxmamNRoxxVxka.png ├── WhxKECPNujWoWEFNdnJE.png ├── a3b10296862e40edb811418d64455d00.jpeg ├── a43456282d684e0b9319cf332f8ac468.jpeg ├── bba284ac05b041a8b8b0d1927868d5c9x.jpg ├── c7c4ee7be3eb4e73a19887dc713505145.jpg ├── cnrhVkzwxjPwAaCfPbdc.png ├── default.jpg ├── ff698bb2d25c4d218b3256b46c706ece.jpeg ├── gaOngJwsRYRaVAuXXcmB.png ├── jZUIxmJycoymBprLOUbT.png └── ubnKSIfAJTxIgXOKlciN.png ├── file └── city.json ├── img ├── favicon.ico ├── logo-blue.png ├── logo.png ├── map-mark-sign.png ├── map-mark.png ├── party-building-logo.png ├── side-bar-dark.svg ├── side-bar-left.svg ├── side-bar-light.svg └── side-bar-top.svg └── less ├── Chart.less ├── Color.less ├── Common.less ├── ItemParticulars.less └── MapView.less /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parserOptions: { 6 | parser: 'babel-eslint' 7 | }, 8 | env: { 9 | browser: true, 10 | }, 11 | extends: [ 12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 14 | 'plugin:vue/essential', 15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 16 | 'standard' 17 | ], 18 | // required to lint *.vue files 19 | plugins: [ 20 | 'vue' 21 | ], 22 | // add your custom rules here 23 | rules: { 24 | // allow async-await 25 | 'generator-star-spacing': 'off', 26 | // allow debugger during development 27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SpringBootVueYangLaoZhiYuanZhe 2 | 基于java SpringBoot和Vue养老服务管理志愿者管理系统设计 3 | 4 | 养老服务系统演示视频链接:https://live.csdn.net/v/290332 5 | 6 | 志愿者管理系统演示视频链接:https://live.csdn.net/v/357072 7 | 8 | 以上两个演示视频仅系统名字不一样,功能是一样的。 9 | 10 | 实现的功能: 11 | 12 | 管理员、志愿者、老人亲属三种角色 13 | 14 | 老人信息管理、个性化服务管理、志愿者管理、活动管理、系统管理等 15 | 16 | 用到的技术: 17 | 18 | 后端:java语言,SpringBoot框架,MySQL数据库,Maven依赖管理等 19 | 20 | 前端:vue等 21 | 22 | 详询 微信1:egvh56ufy7hh ,微信2:dabocode 。承接商业项目、课设、毕设和论文,包括但不限于Web、APP、小程序等,课设、毕设提供远程部署和不限次数代码解答! 23 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | const ora = require('ora') 7 | const rm = require('rimraf') 8 | const path = require('path') 9 | const chalk = require('chalk') 10 | const webpack = require('webpack') 11 | const config = require('../config') 12 | const webpackConfig = require('./webpack.pro.conf') 13 | 14 | const spinner = ora('>>>>>>>>>>>>>>>>>>>>>buildingApp<<<<<<<<<<<<<<<<<<<<<<<') 15 | spinner.start() 16 | 17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 18 | if (err) throw err 19 | webpack(webpackConfig, (err, stats) => { 20 | spinner.stop() 21 | if (err) throw err 22 | process.stdout.write(stats.toString({ 23 | colors: true, 24 | modules: false, 25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 26 | chunks: false, 27 | chunkModules: false 28 | }) + '\n\n') 29 | 30 | if (stats.hasErrors()) { 31 | console.log(chalk.red(' Build failed with errors.\n')) 32 | process.exit(1) 33 | } 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const chalk = require('chalk') 3 | const semver = require('semver') 4 | const packageConfig = require('../package.json') 5 | const shell = require('shelljs') 6 | 7 | function exec (cmd) { 8 | return require('child_process').execSync(cmd).toString().trim() 9 | } 10 | 11 | const versionRequirements = [ 12 | { 13 | name: 'node', 14 | currentVersion: semver.clean(process.version), 15 | versionRequirement: packageConfig.engines.node 16 | } 17 | ] 18 | 19 | if (shell.which('npm')) { 20 | versionRequirements.push({ 21 | name: 'npm', 22 | currentVersion: exec('npm --version'), 23 | versionRequirement: packageConfig.engines.npm 24 | }) 25 | } 26 | 27 | module.exports = function () { 28 | const warnings = [] 29 | 30 | for (let i = 0; i < versionRequirements.length; i++) { 31 | const mod = versionRequirements[i] 32 | 33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 34 | warnings.push(mod.name + ': ' + 35 | chalk.red(mod.currentVersion) + ' should be ' + 36 | chalk.green(mod.versionRequirement) 37 | ) 38 | } 39 | } 40 | 41 | if (warnings.length) { 42 | console.log('') 43 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 44 | console.log() 45 | 46 | for (let i = 0; i < warnings.length; i++) { 47 | const warning = warnings[i] 48 | console.log(' ' + warning) 49 | } 50 | 51 | console.log() 52 | process.exit(1) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KakarottoCui/SpringBootVueYangLaoZhiYuanZhe/6e2466442f6dbd4dd24425b5dc2f0dfefe2565c4/build/logo.png -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const config = require('../config') 4 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 5 | //import ExtractTextPlugin from 'extract-text-webpack-plugin' 6 | //VUE.use(ExtractTextPlugin); 7 | const packageConfig = require('../package.json') 8 | 9 | exports.assetsPath = function (_path) { 10 | const assetsSubDirectory = process.env.NODE_ENV === 'production' 11 | ? config.build.assetsSubDirectory 12 | : config.dev.assetsSubDirectory 13 | 14 | return path.posix.join(assetsSubDirectory, _path) 15 | } 16 | 17 | exports.cssLoaders = function (options) { 18 | options = options || {} 19 | 20 | const cssLoader = { 21 | loader: 'css-loader', 22 | options: { 23 | sourceMap: options.sourceMap 24 | } 25 | } 26 | 27 | const postcssLoader = { 28 | loader: 'postcss-loader', 29 | options: { 30 | sourceMap: options.sourceMap 31 | } 32 | } 33 | 34 | // generate loader string to be used with extract text plugin 35 | function generateLoaders (loader, loaderOptions) { 36 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] 37 | 38 | if (loader) { 39 | loaders.push({ 40 | loader: loader + '-loader', 41 | options: Object.assign({}, loaderOptions, { 42 | sourceMap: options.sourceMap 43 | }) 44 | }) 45 | } 46 | 47 | // Extract CSS when that option is specified 48 | // (which is the case during production build) 49 | if (options.extract) { 50 | return ExtractTextPlugin.extract({ 51 | use: loaders, 52 | fallback: 'vue-style-loader' 53 | }) 54 | } else { 55 | return ['vue-style-loader'].concat(loaders) 56 | } 57 | } 58 | 59 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 60 | return { 61 | css: generateLoaders(), 62 | postcss: generateLoaders(), 63 | less: generateLoaders('less'), 64 | sass: generateLoaders('sass', { indentedSyntax: true }), 65 | scss: generateLoaders('sass'), 66 | stylus: generateLoaders('stylus'), 67 | styl: generateLoaders('stylus') 68 | } 69 | } 70 | 71 | // Generate loaders for standalone style files (outside of .vue) 72 | exports.styleLoaders = function (options) { 73 | const output = [] 74 | const loaders = exports.cssLoaders(options) 75 | 76 | for (const extension in loaders) { 77 | const loader = loaders[extension] 78 | output.push({ 79 | test: new RegExp('\\.' + extension + '$'), 80 | use: loader 81 | }) 82 | } 83 | 84 | return output 85 | } 86 | 87 | exports.createNotifierCallback = () => { 88 | const notifier = require('node-notifier') 89 | 90 | return (severity, errors) => { 91 | if (severity !== 'error') return 92 | 93 | const error = errors[0] 94 | const filename = error.file && error.file.split('!').pop() 95 | 96 | notifier.notify({ 97 | title: packageConfig.name, 98 | message: severity + ': ' + error.name, 99 | subtitle: filename || '', 100 | icon: path.join(__dirname, 'logo.png') 101 | }) 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction 6 | ? config.build.productionSourceMap 7 | : config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const config = require('../config') 5 | const vueLoaderConfig = require('./vue-loader.conf') 6 | const webpack = require('webpack'); 7 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin') 8 | 9 | function resolve (dir) { 10 | return path.join(__dirname, '..', dir) 11 | } 12 | 13 | const createLintingRule = () => ({ 14 | test: /\.(js|vue)$/, 15 | loader: 'eslint-loader', 16 | enforce: 'pre', 17 | include: [resolve('src'), resolve('test')], 18 | options: { 19 | formatter: require('eslint-friendly-formatter'), 20 | emitWarning: !config.dev.showEslintErrorsInOverlay 21 | } 22 | }) 23 | 24 | module.exports = { 25 | context: path.resolve(__dirname, '../'), 26 | entry: { 27 | app: ['babel-polyfill', './src/main.js'] 28 | }, 29 | output: { 30 | path: config.build.assetsRoot, 31 | filename: '[name].js', 32 | publicPath: process.env.NODE_ENV === 'production' 33 | ? config.build.assetsPublicPath 34 | : config.dev.assetsPublicPath 35 | }, 36 | externals: { //注册index.html中通过 16 | 17 | 18 | 19 | 20 |