| | |
| | | <<<<<<< HEAD |
| | | ###################################################################### |
| | | # Build Tools |
| | | |
| | | .gradle |
| | | /build/ |
| | | !gradle/wrapper/gradle-wrapper.jar |
| | | |
| | | target/ |
| | | !.mvn/wrapper/maven-wrapper.jar |
| | | |
| | | ###################################################################### |
| | | # IDE |
| | | |
| | | ### STS ### |
| | | .apt_generated |
| | | .classpath |
| | | .factorypath |
| | | .project |
| | | .settings |
| | | .springBeans |
| | | |
| | | ### IntelliJ IDEA ### |
| | | .idea |
| | | *.iws |
| | | *.iml |
| | | *.ipr |
| | | |
| | | ### JRebel ### |
| | | rebel.xml |
| | | |
| | | ### NetBeans ### |
| | | nbproject/private/ |
| | | build/* |
| | | nbbuild/ |
| | | dist/ |
| | | nbdist/ |
| | | .nb-gradle/ |
| | | |
| | | ###################################################################### |
| | | # Others |
| | | *.log |
| | | *.xml.versionsBackup |
| | | *.swp |
| | | |
| | | !*/build/*.java |
| | | !*/build/*.html |
| | | !*/build/*.xml |
| | | ======= |
| | | .DS_Store |
| | | node_modules/ |
| | | dist/ |
| | | npm-debug.log* |
| | | yarn-debug.log* |
| | | yarn-error.log* |
| | | **/*.log |
| | | |
| | | tests/**/coverage/ |
| | | tests/e2e/reports |
| | | selenium-debug.log |
| | | |
| | | # Editor directories and files |
| | | .idea |
| | | .vscode |
| | | *.suo |
| | | *.ntvs* |
| | | *.njsproj |
| | | *.sln |
| | | *.local |
| | | |
| | | package-lock.json |
| | | yarn.lock |
| | | >>>>>>> 802423e8 (3.30) |
| | |
| | | <<<<<<< HEAD |
| | | <p align="center"> |
| | | <img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png"> |
| | | </p> |
| | | <h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.8.5</h1> |
| | | <h4 align="center">基于SpringBoot+Vue前后端分离的Java快速开发框架</h4> |
| | | <p align="center"> |
| | | <a href="https://gitee.com/y_project/RuoYi-Vue/stargazers"><img src="https://gitee.com/y_project/RuoYi-Vue/badge/star.svg?theme=dark"></a> |
| | | <a href="https://gitee.com/y_project/RuoYi-Vue"><img src="https://img.shields.io/badge/RuoYi-v3.8.5-brightgreen.svg"></a> |
| | | <a href="https://gitee.com/y_project/RuoYi-Vue/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a> |
| | | </p> |
| | | |
| | | ## 平台简介 |
| | | |
| | | 若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。 |
| | | |
| | | * 前端采用Vue、Element UI。 |
| | | * 后端采用Spring Boot、Spring Security、Redis & Jwt。 |
| | | * 权限认证使用Jwt,支持多终端认证系统。 |
| | | * 支持加载动态权限菜单,多方式轻松权限控制。 |
| | | * 高效率开发,使用代码生成器可以一键生成前后端代码。 |
| | | * 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[RuoYi-Vue3](https://github.com/yangzongzhuan/RuoYi-Vue3),保持同步更新。 |
| | | * 提供了单应用版本[RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast),Oracle版本[RuoYi-Vue-Oracle](https://github.com/yangzongzhuan/RuoYi-Vue-Oracle),保持同步更新。 |
| | | * 不分离版本,请移步[RuoYi](https://gitee.com/y_project/RuoYi),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud) |
| | | * 特别鸣谢:[element](https://github.com/ElemeFE/element),[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin),[eladmin-web](https://github.com/elunez/eladmin-web)。 |
| | | * 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip) |
| | | * 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console) |
| | | |
| | | ## 内置功能 |
| | | |
| | | 1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 |
| | | 2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 |
| | | 3. 岗位管理:配置系统用户所属担任职务。 |
| | | 4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 |
| | | 5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 |
| | | 6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 |
| | | 7. 参数管理:对系统动态配置常用参数。 |
| | | 8. 通知公告:系统通知公告信息发布维护。 |
| | | 9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 |
| | | 10. 登录日志:系统登录日志记录查询包含登录异常。 |
| | | 11. 在线用户:当前系统中活跃用户状态监控。 |
| | | 12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 |
| | | 13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 |
| | | 14. 系统接口:根据业务代码自动生成相关的api接口文档。 |
| | | 15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 |
| | | 16. 缓存监控:对系统的缓存信息查询,命令统计等。 |
| | | 17. 在线构建器:拖动表单元素生成相应的HTML代码。 |
| | | 18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 |
| | | |
| | | ## 在线体验 |
| | | |
| | | - admin/admin123 |
| | | - 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。 |
| | | |
| | | 演示地址:http://vue.ruoyi.vip |
| | | 文档地址:http://doc.ruoyi.vip |
| | | |
| | | ## 演示图 |
| | | |
| | | <table> |
| | | <tr> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td> |
| | | </tr> |
| | | <tr> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/up-8074972883b5ba0622e13246738ebba237a.png"/></td> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/up-9f88719cdfca9af2e58b352a20e23d43b12.png"/></td> |
| | | </tr> |
| | | <tr> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/up-39bf2584ec3a529b0d5a3b70d15c9b37646.png"/></td> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/up-936ec82d1f4872e1bc980927654b6007307.png"/></td> |
| | | </tr> |
| | | <tr> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/up-b2d62ceb95d2dd9b3fbe157bb70d26001e9.png"/></td> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/up-d67451d308b7a79ad6819723396f7c3d77a.png"/></td> |
| | | </tr> |
| | | <tr> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td> |
| | | </tr> |
| | | <tr> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/up-8370a0d02977eebf6dbf854c8450293c937.png"/></td> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/up-49003ed83f60f633e7153609a53a2b644f7.png"/></td> |
| | | </tr> |
| | | <tr> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/up-d4fe726319ece268d4746602c39cffc0621.png"/></td> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/up-c195234bbcd30be6927f037a6755e6ab69c.png"/></td> |
| | | </tr> |
| | | <tr> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/b6115bc8c31de52951982e509930b20684a.jpg"/></td> |
| | | <td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td> |
| | | </tr> |
| | | </table> |
| | | |
| | | |
| | | ## 若依前后端分离交流群 |
| | | |
| | | QQ群: [](https://jq.qq.com/?_wv=1027&k=5bVB1og) [](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [](https://jq.qq.com/?_wv=1027&k=51G72yr) [](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [](https://jq.qq.com/?_wv=1027&k=7xw4xUG1) [](https://jq.qq.com/?_wv=1027&k=eCx8eyoJ) 点击按钮入群。 |
| | | ======= |
| | | ## 开发 |
| | | |
| | | ```bash |
| | | # 克隆项目 |
| | | git clone https://gitee.com/y_project/RuoYi-Vue |
| | | |
| | | # 进入项目目录 |
| | | cd ruoyi-ui |
| | | |
| | | # 安装依赖 |
| | | npm install |
| | | |
| | | # 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 |
| | | npm install --registry=https://registry.npmmirror.com |
| | | |
| | | # 启动服务 |
| | | npm run dev |
| | | ``` |
| | | |
| | | 浏览器访问 http://localhost:80 |
| | | |
| | | ## 发布 |
| | | |
| | | ```bash |
| | | # 构建测试环境 |
| | | npm run build:stage |
| | | |
| | | # 构建生产环境 |
| | | npm run build:prod |
| | | ``` |
| | | >>>>>>> 802423e8 (3.30) |
| | | ``` |
| | |
| | | @echo off |
| | | echo. |
| | | <<<<<<< HEAD |
| | | echo [信息] 打包Web工程,生成war/jar包文件。 |
| | | ======= |
| | | echo [信息] 安装Web工程,生成node_modules文件。 |
| | | >>>>>>> 802423e8 (3.30) |
| | | echo. |
| | | |
| | | %~d0 |
| | | cd %~dp0 |
| | | |
| | | cd .. |
| | | <<<<<<< HEAD |
| | | call mvn clean package -Dmaven.test.skip=true |
| | | ======= |
| | | npm install --registry=https://registry.npmmirror.com |
| | | >>>>>>> 802423e8 (3.30) |
| | | |
| | | pause |
New file |
| | |
| | | const { run } = require('runjs') |
| | | const chalk = require('chalk') |
| | | const config = require('../vue.config.js') |
| | | const rawArgv = process.argv.slice(2) |
| | | const args = rawArgv.join(' ') |
| | | |
| | | if (process.env.npm_config_preview || rawArgv.includes('--preview')) { |
| | | const report = rawArgv.includes('--report') |
| | | |
| | | run(`vue-cli-service build ${args}`) |
| | | |
| | | const port = 9526 |
| | | const publicPath = config.publicPath |
| | | |
| | | var connect = require('connect') |
| | | var serveStatic = require('serve-static') |
| | | const app = connect() |
| | | |
| | | app.use( |
| | | publicPath, |
| | | serveStatic('./dist', { |
| | | index: ['index.html', '/'] |
| | | }) |
| | | ) |
| | | |
| | | app.listen(port, function () { |
| | | console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) |
| | | if (report) { |
| | | console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) |
| | | } |
| | | |
| | | }) |
| | | } else { |
| | | run(`vue-cli-service build ${args}`) |
| | | } |
| | |
| | | { |
| | | "name": "ruoyi", |
| | | "version": "3.8.5", |
| | | "description": "张氏APP", |
| | | "author": "若依", |
| | | "license": "MIT", |
| | | "scripts": { |
| | | "dev": "vue-cli-service serve", |
| | | "build:prod": "vue-cli-service build", |
| | | "build:stage": "vue-cli-service build --mode staging", |
| | | "preview": "node build/index.js --preview", |
| | | "lint": "eslint --ext .js,.vue src" |
| | | }, |
| | | "husky": { |
| | | "hooks": { |
| | | "pre-commit": "lint-staged" |
| | | } |
| | | }, |
| | | "lint-staged": { |
| | | "src/**/*.{js,vue}": [ |
| | | "eslint --fix", |
| | | "git add" |
| | | ] |
| | | }, |
| | | "keywords": [ |
| | | "vue", |
| | | "admin", |
| | | "dashboard", |
| | | "element-ui", |
| | | "boilerplate", |
| | | "admin-template", |
| | | "management-system" |
| | | ], |
| | | "repository": { |
| | | "type": "git", |
| | | "url": "https://gitee.com/y_project/RuoYi-Vue.git" |
| | | }, |
| | | "dependencies": { |
| | | "@riophae/vue-treeselect": "0.4.0", |
| | | "axios": "0.24.0", |
| | | "clipboard": "2.0.8", |
| | | "core-js": "3.25.3", |
| | | "echarts": "5.4.0", |
| | | "element-ui": "2.15.12", |
| | | "file-saver": "2.0.5", |
| | | "fuse.js": "6.4.3", |
| | | "highlight.js": "^11.7.0", |
| | | "js-beautify": "1.13.0", |
| | | "js-cookie": "3.0.1", |
| | | "jsencrypt": "3.0.0-rc.1", |
| | | "nprogress": "0.2.0", |
| | | "postcss-px2rem": "^0.3.0", |
| | | "quill": "1.3.7", |
| | | "screenfull": "5.0.2", |
| | | "sortablejs": "1.10.2", |
| | | "vue": "2.6.12", |
| | | "vue-count-to": "1.0.13", |
| | | "vue-cropper": "0.5.5", |
| | | "vue-meta": "2.4.0", |
| | | "vue-router": "3.4.9", |
| | | "vuedraggable": "2.24.3", |
| | | "vuex": "3.6.0" |
| | | }, |
| | | "devDependencies": { |
| | | "@vue/cli-plugin-babel": "^5.0.8", |
| | | "@vue/cli-plugin-eslint": "^5.0.8", |
| | | "@vue/cli-service": "^5.0.8", |
| | | "babel-eslint": "10.1.0", |
| | | "babel-plugin-dynamic-import-node": "2.3.3", |
| | | "chalk": "4.1.0", |
| | | "compression-webpack-plugin": "5.0.2", |
| | | "connect": "3.6.6", |
| | | "eslint": "7.15.0", |
| | | "eslint-plugin-vue": "7.2.0", |
| | | "lint-staged": "10.5.3", |
| | | "runjs": "^4.1.3", |
| | | "sass": "1.32.13", |
| | | "sass-loader": "10.1.1", |
| | | "script-ext-html-webpack-plugin": "2.1.5", |
| | | "svg-sprite-loader": "^5.2.1", |
| | | "vue-template-compiler": "2.6.12" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8.9", |
| | | "npm": ">= 3.0.0" |
| | | }, |
| | | "browserslist": [ |
| | | "> 1%", |
| | | "last 2 versions" |
| | | ] |
| | | } |
New file |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | // Familyevent |
| | | |
| | | // 查询所有家庭大事,分页查询 |
| | | export function listFamilyevent(query) { |
| | | return request({ |
| | | url: '/family/zfEvent/all', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // 根据id查询所有家庭资产详细信息 |
| | | export function getFamilyeventInfo(id) { |
| | | return request({ |
| | | url: '/family/zfEvent/{id}' + id, |
| | | method: 'get', |
| | | |
| | | }) |
| | | } |
| | | |
| | | //增加资产信息 |
| | | export function addFamilyevent(data) |
| | | { |
| | | return request({ |
| | | url: '/family/zfEvent', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // 删除资产信息 |
| | | export function delFamilyevent(Ids) { |
| | | return request({ |
| | | url: '/family/zfEvent/' + Ids, |
| | | method: 'delete' |
| | | }) |
| | | } |
| | | //修改家大事记 |
| | | export function updateFamilyevent(data) { |
| | | return request({ |
| | | url: '/family/zfEvent', |
| | | method: 'put', |
| | | data: data |
| | | }) |
| | | } |
| | | //上传文件 |
| | | export function uploadPic(data) { |
| | | return request({ |
| | | url: '/common/upload', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | //下载文件 |
| | | export function download(data) { |
| | | return request({ |
| | | url: '/common/downLoadFile', |
| | | method: 'get', |
| | | params: data, |
| | | responseType: 'blob' |
| | | }) |
| | | } |
| | | |
| | | // //拿到类别 |
| | | // export function getCategory() |
| | | // { |
| | | // return request({ |
| | | // url: '/zDict/byId', |
| | | // method: 'get', |
| | | // params: {'id':22} |
| | | // }) |
| | | // } |
| | | |
| | | |
| | |
| | | import Vue from 'vue' |
| | | import Router from 'vue-router' |
| | | |
| | | Vue.use(Router) |
| | | |
| | | /* Layout */ |
| | | import Layout from '@/layout' |
| | | |
| | | /** |
| | | * Note: 路由配置项 |
| | | * |
| | | * hidden: true // 当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1 |
| | | * alwaysShow: true // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 |
| | | * // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面 |
| | | * // 若你想不管路由下面的 children 声明的个数都显示你的根路由 |
| | | * // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由 |
| | | * redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 |
| | | * name:'router-name' // 设定路由的名字,一定要填写不然使用<keep-alive>时会出现各种问题 |
| | | * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数 |
| | | * roles: ['admin', 'common'] // 访问路由的角色权限 |
| | | * permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限 |
| | | * meta : { |
| | | noCache: true // 如果设置为true,则不会被 <keep-alive> 缓存(默认 false) |
| | | title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字 |
| | | icon: 'svg-name' // 设置该路由的图标,对应路径src/assets/icons/svg |
| | | breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示 |
| | | activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。 |
| | | } |
| | | */ |
| | | |
| | | // 公共路由 |
| | | export const constantRoutes = [ |
| | | { |
| | | path: '/redirect', |
| | | component: Layout, |
| | | hidden: true, |
| | | children: [ |
| | | { |
| | | path: '/redirect/:path(.*)', |
| | | component: () => import('@/views/redirect') |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/login', |
| | | component: () => import('@/views/login'), |
| | | hidden: true |
| | | }, |
| | | { |
| | | path: '/register', |
| | | component: () => import('@/views/register'), |
| | | hidden: true |
| | | }, |
| | | { |
| | | path: '/404', |
| | | component: () => import('@/views/error/404'), |
| | | hidden: true |
| | | }, |
| | | { |
| | | path: '/tmps', |
| | | component: () => import('@/views/tmp'), |
| | | hidden: true |
| | | }, |
| | | { |
| | | path: '/401', |
| | | component: () => import('@/views/error/401'), |
| | | hidden: true |
| | | }, |
| | | { |
| | | path: '', |
| | | component: Layout, |
| | | redirect: 'index', |
| | | children: [ |
| | | { |
| | | path: 'index', |
| | | component: () => import('@/views/index'), |
| | | name: 'Index', |
| | | meta: { title: '首页', icon: 'dashboard', affix: true } |
| | | } |
| | | |
| | | ] |
| | | }, |
| | | { |
| | | path: '/user', |
| | | component: Layout, |
| | | hidden: true, |
| | | redirect: 'noredirect', |
| | | children: [ |
| | | { |
| | | path: 'profile', |
| | | component: () => import('@/views/system/user/profile/index'), |
| | | name: 'Profile', |
| | | meta: { title: '个人中心', icon: 'user' } |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | |
| | | // 动态路由,基于用户权限动态去加载 |
| | | export const dynamicRoutes = [ |
| | | { |
| | | path: '/system/user-auth', |
| | | component: Layout, |
| | | hidden: true, |
| | | permissions: ['system:user:edit'], |
| | | children: [ |
| | | { |
| | | path: 'role/:userId(\\d+)', |
| | | component: () => import('@/views/system/user/authRole'), |
| | | name: 'AuthRole', |
| | | meta: { title: '分配角色', activeMenu: '/system/user' } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/family/note1', |
| | | component: Layout, |
| | | permissions: ['family:note:list'], |
| | | |
| | | hidden: true, |
| | | children: [ |
| | | { |
| | | path: 'propertyInfo/:id(\\d+)', |
| | | component: () => import('@/views/note/propertyInfo'), |
| | | name: 'propertyInfo', |
| | | meta: { title: '查询详情'} |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/system/role-auth', |
| | | component: Layout, |
| | | hidden: true, |
| | | permissions: ['system:role:edit'], |
| | | children: [ |
| | | { |
| | | path: 'user/:roleId(\\d+)', |
| | | component: () => import('@/views/system/role/authUser'), |
| | | name: 'AuthUser', |
| | | meta: { title: '分配用户', activeMenu: '/system/role' } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/system/dict-data', |
| | | component: Layout, |
| | | hidden: true, |
| | | permissions: ['system:dict:list'], |
| | | children: [ |
| | | { |
| | | path: 'index/:dictId(\\d+)', |
| | | component: () => import('@/views/system/dict/data'), |
| | | name: 'Data', |
| | | meta: { title: '字典数据', activeMenu: '/system/dict' } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/monitor/job-log', |
| | | component: Layout, |
| | | hidden: true, |
| | | permissions: ['monitor:job:list'], |
| | | children: [ |
| | | { |
| | | path: 'index/:jobId(\\d+)', |
| | | component: () => import('@/views/monitor/job/log'), |
| | | name: 'JobLog', |
| | | meta: { title: '调度日志', activeMenu: '/monitor/job' } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/tool/gen-edit', |
| | | component: Layout, |
| | | hidden: true, |
| | | permissions: ['tool:gen:edit'], |
| | | children: [ |
| | | { |
| | | path: 'index/:tableId(\\d+)', |
| | | component: () => import('@/views/tool/gen/editTable'), |
| | | name: 'GenEdit', |
| | | meta: { title: '修改生成配置', activeMenu: '/tool/gen' } |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | |
| | | // 防止连续点击多次路由报错 |
| | | let routerPush = Router.prototype.push; |
| | | Router.prototype.push = function push(location) { |
| | | return routerPush.call(this, location).catch(err => err) |
| | | } |
| | | |
| | | export default new Router({ |
| | | mode: 'history', // 去掉url中的# |
| | | scrollBehavior: () => ({ y: 0 }), |
| | | routes: constantRoutes |
| | | }) |
New file |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="form-header mt"> |
| | | <h4 class="dt h4">资产详细信息 </h4> |
| | | <el-button type="primary" class="pt" icon="el-icon-edit" @click="handleEdit()" :disabled="btn">编辑</el-button> |
| | | </div> |
| | | |
| | | <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="100px"> |
| | | <el-form-item label="id" prop="id"> |
| | | <el-input v-model="formData.id" placeholder="请输入id" :maxlength="11" show-word-limit :disabled="true" |
| | | clearable prefix-icon='el-icon-mobile' :style="{width: '100%'}"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="类别" prop="type"> |
| | | <el-select v-model="formData.type" placeholder="请选择类别" clearable :style="{width: '100%'}" :disabled="dsb" > |
| | | <el-option v-for="(item, index) in typeOptions" :key="index" :label="item.label" :value="item.value" |
| | | :disabled="item.disabled"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="标题" prop="title"> |
| | | <el-input v-model="formData.title" placeholder="请输入标题" clearable :style="{width: '100%'}" :disabled="dsb"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="存储地址" prop="location"> |
| | | <el-input v-model="formData.location" placeholder="请输入存储地址" clearable :style="{width: '100%'}" :disabled="dsb"> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="持有人" prop="holder"> |
| | | <el-input v-model="formData.holder" placeholder="请输入持有人" clearable :style="{width: '100%'}" :disabled="dsb"> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="具体位置" prop="address"> |
| | | <el-input v-model="formData.address" placeholder="请输入具体位置" clearable :style="{width: '100%'}" :disabled="dsb"> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="备注" prop="remark"> |
| | | <el-input v-model="formData.remark" placeholder="请输入备注" clearable :style="{width: '100%'}" :disabled="dsb"></el-input> |
| | | </el-form-item> |
| | | |
| | | <h4 class="form-header">相关图片 </h4> |
| | | <el-upload |
| | | action="#" |
| | | list-type="picture-card" |
| | | multiple |
| | | :http-request="requestUpload" |
| | | :file-list="fileList" |
| | | > |
| | | <i slot="default" class="el-icon-plus"></i> |
| | | <div slot="file" slot-scope="{file}"> |
| | | <img |
| | | class="el-upload-list__item-thumbnail" |
| | | :src="file.url" |
| | | alt="" |
| | | style="width: 147px; height: 147px" |
| | | fit="cover" |
| | | :preview-src-list="[file.url]" |
| | | > |
| | | <span class="el-upload-list__item-actions"> |
| | | <span |
| | | class="el-upload-list__item-preview" |
| | | @click="handlePictureCardPreview(file)" |
| | | > |
| | | <i class="el-icon-zoom-in"></i> |
| | | </span> |
| | | <span |
| | | v-if="!disabled" |
| | | class="el-upload-list__item-delete" |
| | | @click="handleDownload(file.url)" |
| | | > |
| | | <i class="el-icon-download"></i> |
| | | </span> |
| | | <span |
| | | v-if="!disabled" |
| | | class="el-upload-list__item-delete" |
| | | @click="handleRemove(file)" |
| | | > |
| | | <i class="el-icon-delete"></i> |
| | | </span> |
| | | </span> |
| | | |
| | | |
| | | </div> |
| | | </el-upload> |
| | | |
| | | <h4 class="form-header">其他附件 </h4> |
| | | <el-upload |
| | | action="" |
| | | :file-list="fileListOther" |
| | | class="upload-demo" |
| | | multiple |
| | | :on-preview="handlePreview" |
| | | |
| | | :on-remove="handleRemove" |
| | | :http-request="requestUpload" |
| | | :show-file-list="true" |
| | | > |
| | | <el-button type="primary">Click to upload</el-button> |
| | | <template #tip> |
| | | <div class="el-upload__tip"> |
| | | </div> |
| | | </template> |
| | | |
| | | |
| | | </el-upload> |
| | | |
| | | <el-form-item size="large"> |
| | | <el-button type="primary" @click="submitForm" :disabled="dsb">修改</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-dialog :visible.sync="dialogVisible"> |
| | | <img w-full :src="dialogImageUrl" alt="Preview Image" /> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import {getPropertyInfo, updateProperty, uploadPic, download, getCategory} from "@/api/note/index"; |
| | | import {addRole, updateRole} from "@/api/system/role"; |
| | | import {blobValidate} from "@/utils/ruoyi"; |
| | | import errorCode from "@/utils/errorCode"; |
| | | import {Message} from "element-ui"; |
| | | |
| | | export default { |
| | | components: {}, |
| | | props: [], |
| | | data() { |
| | | return { |
| | | cdi:"资产详细信息", |
| | | udi:"资产信息修改", |
| | | fot:[".jpg",".jif"], |
| | | fileList:[ |
| | | ], |
| | | fileListOther:[ |
| | | |
| | | ], |
| | | dsb:true, |
| | | btn:false, |
| | | formData: { |
| | | id: undefined, |
| | | type: undefined, |
| | | title: undefined, |
| | | location: undefined, |
| | | holder: undefined, |
| | | address: undefined, |
| | | remark: undefined, |
| | | url: undefined, |
| | | }, |
| | | dialogImageUrl: '', |
| | | dialogVisible: false, |
| | | disabled: false, |
| | | rules: { |
| | | id: [{ |
| | | required: true, |
| | | message: '请输入id', |
| | | trigger: 'blur' |
| | | }], |
| | | type: [{ |
| | | required: true, |
| | | message: '请选择类别', |
| | | trigger: 'change' |
| | | }], |
| | | title: [{ |
| | | required: true, |
| | | message: '请输入标题', |
| | | trigger: 'blur' |
| | | }], |
| | | location: [{ |
| | | required: true, |
| | | message: '请输入存储地址', |
| | | trigger: 'blur' |
| | | }], |
| | | holder: [{ |
| | | required: true, |
| | | message: '请输入持有人', |
| | | trigger: 'blur' |
| | | }], |
| | | address: [{ |
| | | required: true, |
| | | message: '请输入具体位置', |
| | | trigger: 'blur' |
| | | }], |
| | | remark: [{ |
| | | required: true, |
| | | message: '请输入备注', |
| | | trigger: 'blur' |
| | | }], |
| | | |
| | | }, |
| | | typeOptions: [], |
| | | } |
| | | }, |
| | | computed: {}, |
| | | watch: {}, |
| | | created() { |
| | | const id = this.$route.params && this.$route.params.id; |
| | | let jd; |
| | | if(this.$route.query.detail!=undefined) |
| | | { |
| | | jd = this.$route.query.detail |
| | | this.btn= jd |
| | | this.dsb = !jd |
| | | document.title = "修改资产详细信息"; |
| | | this.$route.meta.title = "修改资产详细信息";//列表的名称 |
| | | } |
| | | else{ |
| | | document.title = "查看资产详细信息"; |
| | | this.$route.meta.title = "查看资产详细信息";//列表的名称 |
| | | } |
| | | |
| | | let _this = this |
| | | if (id) { |
| | | this.loading = true; |
| | | getPropertyInfo(id).then((response) => { |
| | | this.formData = response.data; |
| | | let paths = response.data.url.split(","); |
| | | for(let i = 0; i < paths.length; i++) |
| | | { |
| | | if(paths[i]!="") { |
| | | |
| | | let pth = paths[i].substr(paths[i].length - 4, paths[i].length) |
| | | |
| | | if (_this.fot.includes(pth) === true) |
| | | _this.fileList.push({name:paths[i],url: process.env.VUE_APP_BASE_TRUE_API+paths[i]}) |
| | | else { |
| | | // alert(paths[i]) |
| | | let nms = paths[i].split("\/") |
| | | let nm = nms[nms.length - 1] |
| | | _this.fileListOther.push({name:nm, url: process.env.VUE_APP_BASE_TRUE_API+paths[i]}) |
| | | } |
| | | } |
| | | } |
| | | this.loading = false; |
| | | }); |
| | | this.getCateInfor() |
| | | |
| | | } |
| | | }, |
| | | mounted() {}, |
| | | methods: { |
| | | /** 查询类别信息 */ |
| | | getCateInfor() |
| | | { |
| | | let _this = this |
| | | getCategory().then(response=>{ |
| | | |
| | | response.data.itemValues.replace("{","").replace("}","").split(",").map(elem=>{ |
| | | _this.typeOptions.push({"label":elem.split(":")[0], "value":elem.split(":")[0]}) |
| | | }) |
| | | }) |
| | | }, |
| | | submitForm() { |
| | | let ul = this.fileList.map(function (elem){ |
| | | return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"") |
| | | }).join(",") |
| | | let uls = this.fileListOther.map(function (elem){ |
| | | return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"") |
| | | }).join(",") |
| | | this.formData.url = ul+","+uls |
| | | |
| | | this.$refs['elForm'].validate(valid => { |
| | | |
| | | |
| | | if (valid) { |
| | | if (this.formData.id != undefined) { |
| | | updateProperty(this.formData).then(response => { |
| | | this.$modal.msgSuccess("修改成功"); |
| | | // this.open = false; |
| | | this.btn=false |
| | | }); |
| | | } else { |
| | | this.$modal.msgSuccess("修改失败"); |
| | | |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | resetForm() { |
| | | this.$refs['elForm'].resetFields() |
| | | }, |
| | | handlePreview(file) |
| | | { |
| | | let formData = {'path':"/"+file.url.replace(process.env.VUE_APP_BASE_TRUE_API,"")}; |
| | | let lens = formData.path.split(".") |
| | | let suffix = lens[lens.length-1] |
| | | download(formData).then(async (response) => { |
| | | const isLogin = await blobValidate(response); |
| | | let nt = new Date().getTime() |
| | | let filename = 'property_'+nt+'.'+suffix |
| | | const blob = new Blob([response]) |
| | | saveAs(blob, filename) |
| | | }) |
| | | }, |
| | | handleRemoveFile(file) { |
| | | alert(23) |
| | | }, |
| | | handleRemove(file) { |
| | | alert(323) |
| | | }, |
| | | handlePictureCardPreview(file) { |
| | | this.dialogImageUrl = file.url; |
| | | this.dialogVisible = true; |
| | | }, |
| | | handleDownload(url) { |
| | | var formData = {'path':"/"+url.replace(process.env.VUE_APP_BASE_TRUE_API,"")}; |
| | | |
| | | let lens = formData.path.split(".") |
| | | let suffix = lens[lens.length-1] |
| | | download(formData).then(async (response) => { |
| | | const isLogin = await blobValidate(response); |
| | | let nt = new Date().getTime() |
| | | let filename = 'property_'+nt+'.'+suffix |
| | | const blob = new Blob([response]) |
| | | saveAs(blob, filename) |
| | | }) |
| | | }, |
| | | handleEdit() |
| | | { |
| | | this.dsb = false |
| | | this.btn = true |
| | | }, |
| | | requestUpload(params) |
| | | { |
| | | var file = params.file; |
| | | var formData = new FormData(); |
| | | formData.append('uploadFile', file); |
| | | let _this = this |
| | | |
| | | uploadPic(formData).then(response => { |
| | | let pth = response.data.originalFilename.substr(response.data.originalFilename.length-4, response.data.originalFilename.length) |
| | | |
| | | if(_this.fot.includes(pth) === true) |
| | | { |
| | | _this.fileList.push({name:response.data.fileName, "url":response.data.url}) |
| | | |
| | | } |
| | | |
| | | else{ |
| | | _this.fileListOther.push({name:response.data.fileName, url:response.data.url}) |
| | | |
| | | } |
| | | }) |
| | | |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | </script> |
| | | <style> |
| | | .mt |
| | | { |
| | | position: relative; |
| | | } |
| | | .dt{ |
| | | display: block; |
| | | |
| | | } |
| | | .pt{ |
| | | right: 10px; |
| | | top:-3px; |
| | | display: block; |
| | | position: absolute; |
| | | } |
| | | </style> |
| | | |
New file |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> |
| | | |
| | | <el-form-item label="大事标题" prop="title"> |
| | | <el-input |
| | | v-model="queryParams.title" |
| | | placeholder="请输入标题" |
| | | clearable |
| | | style="width: 240px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="人物" prop="people"> |
| | | <el-input |
| | | v-model="queryParams.people" |
| | | placeholder="请输入人物" |
| | | clearable |
| | | style="width: 240px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="地点" prop="address"> |
| | | <el-input |
| | | v-model="queryParams.address" |
| | | placeholder="请输入地点" |
| | | clearable |
| | | style="width: 240px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | |
| | | </el-form-item> |
| | | <el-form-item label="时间"> |
| | | <el-date-picker |
| | | v-model="dateRange" |
| | | style="width: 240px" |
| | | value-format="yyyy-MM-dd HH-MM" |
| | | type="daterange" |
| | | range-separator="-" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | icon="el-icon-plus" |
| | | size="mini" |
| | | @click="handleAdd" |
| | | v-hasPermi="['system:role:add']" |
| | | >新增</el-button> |
| | | </el-col> |
| | | |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="danger" |
| | | plain |
| | | icon="el-icon-delete" |
| | | size="mini" |
| | | :disabled="multiple" |
| | | @click="handleDelete" |
| | | v-hasPermi="['system:role:remove']" |
| | | >删除</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="warning" |
| | | plain |
| | | icon="el-icon-download" |
| | | size="mini" |
| | | @click="handleExport" |
| | | v-hasPermi="['family:note:export']" |
| | | >导出</el-button> |
| | | </el-col> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| | | </el-row> |
| | | <!-- 序号、时间、人物、地点、大事标题、电子文件、备注 --> |
| | | <!-- 这里有个familyList数组 是在data()中定义的 --> |
| | | <el-table v-loading="loading" :data="familyList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="序号" prop="id" sortable width="120" /> |
| | | |
| | | <el-table-column label="时间" align="center" sortable prop="createTime" width="180"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.createTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="人物" prop="people" sortable width="100" /> |
| | | <el-table-column label="地点" prop="address" sortable width="100" /> |
| | | <el-table-column label="大事标题" prop="title" sortable :show-overflow-tooltip="true" width="150" /> |
| | | |
| | | <el-table-column label="备注" prop="remark" sortable width="100" /> |
| | | <el-table-colum label="电子文件" prop="fujian" sortable width="100"/> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope" v-if="scope.row.roleId !== 1"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleUpdate(scope.row)" |
| | | v-hasPermi="['system:role:edit']" |
| | | >修改</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleDelete(scope.row)" |
| | | v-hasPermi="['system:role:remove']" |
| | | >删除</el-button> |
| | | <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']"> |
| | | <el-button size="mini" type="text" icon="el-icon-d-arrow-right" @click="handleCheck(scope.row)">查看详情</el-button> |
| | | |
| | | </el-dropdown> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | |
| | | <!-- 添加或修改资产信息配置对话框 --> |
| | | <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body> |
| | | <el-form ref="elForm" :model="formDat" :rules="rules" size="medium" label-width="100px"> |
| | | |
| | | |
| | | <el-form-item label="大事标题" prop="title"> |
| | | <el-input v-model="formDat.title" placeholder="请输入大事标题" clearable :style="{width: '100%'}" ></el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="人物" prop="people"> |
| | | <el-input v-model="formDat.holder" placeholder="请输入人物" clearable :style="{width: '100%'}" > |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="地点" prop="address"> |
| | | <el-input v-model="formDat.address" placeholder="请输入地点" clearable :style="{width: '100%'}" > |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="备注" prop="remark"> |
| | | <el-input v-model="formDat.remark" placeholder="请输入备注" clearable :style="{width: '100%'}" ></el-input> |
| | | </el-form-item> |
| | | |
| | | <h4 class="form-header">相关图片 </h4> |
| | | <el-upload |
| | | action="#" |
| | | list-type="picture-card" |
| | | multiple |
| | | :http-request="requestUpload" |
| | | :file-list="fileList" |
| | | > |
| | | <i slot="default" class="el-icon-plus"></i> |
| | | <div slot="file" slot-scope="{file}"> |
| | | <img |
| | | class="el-upload-list__item-thumbnail" |
| | | :src="file.url" |
| | | alt="" |
| | | style="width: 126px; height: 126px" |
| | | fit="cover" |
| | | :preview-src-list="[file.url]" |
| | | > |
| | | <span class="el-upload-list__item-actions"> |
| | | <span |
| | | class="el-upload-list__item-preview" |
| | | @click="handlePictureCardPreview(file)" |
| | | > |
| | | <i class="el-icon-zoom-in"></i> |
| | | </span> |
| | | |
| | | <span |
| | | v-if="!disabled" |
| | | class="el-upload-list__item-delete" |
| | | @click="handleRemove(file)" |
| | | > |
| | | <i class="el-icon-delete"></i> |
| | | </span> |
| | | </span> |
| | | |
| | | |
| | | </div> |
| | | </el-upload> |
| | | <h4 class="form-header">其他附件 </h4> |
| | | <el-upload |
| | | action="" |
| | | :file-list="fileListOther" |
| | | class="upload-demo" |
| | | multiple |
| | | |
| | | :on-remove="handleRemove" |
| | | :http-request="requestUpload" |
| | | :show-file-list="true" |
| | | > |
| | | <el-button type="primary">Click to upload</el-button> |
| | | <template #tip> |
| | | <div class="el-upload__tip"> |
| | | </div> |
| | | </template> |
| | | </el-upload> |
| | | |
| | | </el-form> |
| | | <h4 class="form-header"> </h4> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitDataScope">确 定</el-button> |
| | | <el-button @click="cancelData">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- 分配角色数据权限对话框 --> |
| | | <el-dialog :title="title" :visible.sync="openDataScope" width="500px" append-to-body> |
| | | |
| | | </el-dialog> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from "@/api/system/role"; |
| | | import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu"; |
| | | |
| | | |
| | | |
| | | //在system/note/index.js中导入接口函数 --接好了 |
| | | import {listFamilyevent , getFamilyeventInfo , delFamilyevent , addFamilyevent , uploadPic} from "@/api/bignote/index"; |
| | | export default { |
| | | name: "Role", |
| | | dicts: ['sys_normal_disable'], |
| | | data() { |
| | | return { |
| | | // 遮罩层 |
| | | disabled: false, |
| | | |
| | | loading: true, |
| | | formData:[], |
| | | // 选中数组 |
| | | ids: [], |
| | | // 非单个禁用 |
| | | single: true, |
| | | // 非多个禁用 |
| | | multiple: true, |
| | | // 显示搜索条件 |
| | | showSearch: true, |
| | | // 总条数 |
| | | total: 0, |
| | | // 家大事记表格数据 |
| | | familyList: [], |
| | | // 弹出层标题 |
| | | title: "", |
| | | // 是否显示弹出层 |
| | | open: false, |
| | | // 是否显示弹出层(数据权限) |
| | | openDataScope: false, |
| | | menuExpand: false, |
| | | menuNodeAll: false, |
| | | deptExpand: true, |
| | | deptNodeAll: false, |
| | | // 日期范围 |
| | | dateRange: [], |
| | | // 数据范围选项 |
| | | fot:[".jpg",".jif"], |
| | | fileList:[ |
| | | ], |
| | | fileListOther:[ |
| | | |
| | | ], |
| | | dsb:true, |
| | | btn:false, |
| | | formDat: { |
| | | type: undefined, |
| | | title: undefined, |
| | | location: undefined, |
| | | holder: undefined, |
| | | address: undefined, |
| | | remark: undefined, |
| | | url: undefined, |
| | | }, |
| | | // 菜单列表 |
| | | menuOptions: [], |
| | | // 部门列表 |
| | | deptOptions: [], |
| | | // 查询参数 |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | title:undefined, |
| | | people:undefined, |
| | | address:undefined, |
| | | createTime:undefined |
| | | }, |
| | | // 表单参数 |
| | | form: {}, |
| | | defaultProps: { |
| | | children: "children", |
| | | label: "label" |
| | | }, |
| | | // 表单校验 |
| | | rules: { |
| | | title: [{ |
| | | required: true, |
| | | message: '请输入大事标题', |
| | | trigger: 'blur' |
| | | }], |
| | | |
| | | people: [{ |
| | | required: true, |
| | | message: '请输入人物', |
| | | trigger: 'blur' |
| | | }], |
| | | address: [{ |
| | | required: true, |
| | | message: '请输入地点', |
| | | trigger: 'blur' |
| | | }], |
| | | remark: [{ |
| | | required: true, |
| | | message: '请输入备注', |
| | | trigger: 'blur' |
| | | }], |
| | | createTime: [{ |
| | | required: true, |
| | | message: '请选择日期选择', |
| | | trigger: 'change' |
| | | }], |
| | | }, |
| | | typeOptions: [], |
| | | }; |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | // this.getCateInfor() |
| | | |
| | | }, |
| | | methods: { |
| | | // 取消按钮 |
| | | cancelData() { |
| | | this.open = false; |
| | | this.reset(); |
| | | }, |
| | | /** 查询角色列表 */ //列表显示家大事记 |
| | | getList() { |
| | | this.loading = true; |
| | | // console.log(this.queryParams) |
| | | // listProperty(this.addDateRange(this.queryParams, this.dateRange)).then(response => { |
| | | listFamilyevent(this.queryParams).then(response => { |
| | | // alert(123) |
| | | // console.log(response.data) |
| | | this.familyList = response.data.data; |
| | | |
| | | this.total = response.data.total; |
| | | this.loading = false; |
| | | } |
| | | ); |
| | | }, |
| | | |
| | | // 取消按钮 |
| | | cancel() { |
| | | this.open = false; |
| | | this.reset(); |
| | | }, |
| | | // 取消按钮(数据权限) |
| | | cancelDataScope() { |
| | | this.openDataScope = false; |
| | | this.reset(); |
| | | }, |
| | | // 表单重置 |
| | | reset() { |
| | | if (this.$refs.menu != undefined) { |
| | | this.$refs.menu.setCheckedKeys([]); |
| | | } |
| | | this.menuExpand = false, |
| | | this.menuNodeAll = false, |
| | | this.deptExpand = true, |
| | | this.deptNodeAll = false, |
| | | this.form = { |
| | | roleId: undefined, |
| | | roleName: undefined, |
| | | roleKey: undefined, |
| | | roleSort: 0, |
| | | status: "0", |
| | | menuIds: [], |
| | | deptIds: [], |
| | | menuCheckStrictly: true, |
| | | deptCheckStrictly: true, |
| | | remark: undefined |
| | | }; |
| | | this.resetForm("form"); |
| | | }, |
| | | /** 搜索按钮操作 */ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | /** 重置按钮操作 */ |
| | | resetQuery() { |
| | | this.dateRange = []; |
| | | this.resetForm("queryForm"); |
| | | this.handleQuery(); |
| | | }, |
| | | // 多选框选中数据 |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id) |
| | | console.log(this.ids) |
| | | this.single = selection.length!=1 |
| | | this.multiple = !selection.length |
| | | }, |
| | | |
| | | /** 新增按钮操作 */ |
| | | handleAdd() { |
| | | this.reset(); |
| | | this.open = true; |
| | | this.title = "添加家庭大事记信息"; |
| | | }, |
| | | |
| | | //!!!这个还没改好 |
| | | /** 查看详细信息 */ |
| | | handleCheck(row){ |
| | | const id = row.id; |
| | | this.$router.push("/family/note1/FamilyeventInfo/" + id); |
| | | }, |
| | | /** 修改按钮操作 */ |
| | | handleUpdate(row) { |
| | | const id = row.id; |
| | | let jd = true |
| | | |
| | | this.$router.push({ |
| | | path:"/family/note1/FamilyeventInfo/" + id, |
| | | query:{ |
| | | detail:jd |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | |
| | | handlePictureCardPreview(file) { |
| | | this.dialogImageUrl = file.url; |
| | | this.dialogVisible = true; |
| | | }, |
| | | /** 提交按钮(数据权限) */ |
| | | submitDataScope: function() { |
| | | |
| | | let ul = this.fileList.map(function (elem){ |
| | | return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"") |
| | | }).join(",") |
| | | let uls = this.fileListOther.map(function (elem){ |
| | | return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"") |
| | | }).join(",") |
| | | this.formDat.url = ul+","+uls |
| | | this.$refs["elForm"].validate(valid => { |
| | | if (valid) { |
| | | |
| | | addFamilyevent(this.formDat).then(response => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.open = false; |
| | | this.getList1(); |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | requestUpload(params) |
| | | { |
| | | var file = params.file; |
| | | var formData = new FormData(); |
| | | formData.append('uploadFile', file); |
| | | let _this = this |
| | | |
| | | uploadPic(formData).then(response => { |
| | | let pth = response.data.originalFilename.substr(response.data.originalFilename.length-4, response.data.originalFilename.length) |
| | | |
| | | if(_this.fot.includes(pth) === true) |
| | | { |
| | | _this.fileList.push({name:response.data.fileName, "url":response.data.url}) |
| | | |
| | | } |
| | | |
| | | else{ |
| | | _this.fileListOther.push({name:response.data.fileName, url:response.data.url}) |
| | | |
| | | } |
| | | }) |
| | | |
| | | }, |
| | | /** 删除按钮操作 */ |
| | | handleDelete(row) { |
| | | const Ids = row.id || this.ids; |
| | | this.$modal.confirm('是否确认删除序号为"' + Ids + '"的数据项?').then(function() { |
| | | return delFamilyevent(Ids); |
| | | }).then(() => { |
| | | this.getList1(); |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }).catch(() => {}); |
| | | }, |
| | | /** 导出按钮操作 */ |
| | | handleExport() { |
| | | this.download('/family/zfEvent/export', { |
| | | ...this.queryParams |
| | | }, `Familyevent_${new Date().getTime()}.xlsx`) |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> |
| | | <el-form-item label="类型" prop="type"> |
| | | <el-select |
| | | v-model="queryParams.type" |
| | | placeholder="所有类型" |
| | | clearable |
| | | style="width: 240px" |
| | | > |
| | | <el-option |
| | | v-for="dict in typeOptions" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | <el-form-item label="标题" prop="title"> |
| | | <el-input |
| | | v-model="queryParams.title" |
| | | placeholder="请输入标题" |
| | | clearable |
| | | style="width: 240px"title |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="存储地址" prop="location"> |
| | | <el-input |
| | | v-model="queryParams.location" |
| | | placeholder="请输入存储地址" |
| | | clearable |
| | | style="width: 240px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="持有人" prop="holder"> |
| | | <el-input |
| | | v-model="queryParams.holder" |
| | | placeholder="请输入持有人" |
| | | clearable |
| | | style="width: 240px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="具体位置" prop="address"> |
| | | <el-input |
| | | v-model="queryParams.address" |
| | | placeholder="请输入具体位置" |
| | | clearable |
| | | style="width: 240px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | </el-form-item> |
| | | <el-form-item label="创建时间"> |
| | | <el-date-picker |
| | | v-model="dateRange" |
| | | style="width: 240px" |
| | | value-format="yyyy-MM-dd HH-MM" |
| | | type="daterange" |
| | | range-separator="-" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | icon="el-icon-plus" |
| | | size="mini" |
| | | @click="handleAdd" |
| | | v-hasPermi="['system:role:add']" |
| | | >新增</el-button> |
| | | </el-col> |
| | | |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="danger" |
| | | plain |
| | | icon="el-icon-delete" |
| | | size="mini" |
| | | :disabled="multiple" |
| | | @click="handleDelete" |
| | | v-hasPermi="['system:role:remove']" |
| | | >删除</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="warning" |
| | | plain |
| | | icon="el-icon-download" |
| | | size="mini" |
| | | @click="handleExport" |
| | | v-hasPermi="['family:note:export']" |
| | | >导出</el-button> |
| | | </el-col> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| | | </el-row> |
| | | |
| | | <el-table v-loading="loading" :data="propertyList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="资产编号" prop="id" sortable width="120" /> |
| | | <el-table-column label="类型" prop="type" sortable :show-overflow-tooltip="true" width="150" /> |
| | | <el-table-column label="标题" prop="title" sortable :show-overflow-tooltip="true" width="150" /> |
| | | <el-table-column label="存储地址" prop="location" sortable width="100" /> |
| | | <el-table-column label="持有人" prop="holder" sortable width="100" /> |
| | | <el-table-column label="具体位置" prop="address" sortable width="100" /> |
| | | <el-table-column label="备注信息" prop="remark" sortable width="100" /> |
| | | <el-table-column label="创建时间" align="center" sortable prop="createTime" width="180"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.createTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope" v-if="scope.row.roleId !== 1"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleUpdate(scope.row)" |
| | | v-hasPermi="['system:role:edit']" |
| | | >修改</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleDelete(scope.row)" |
| | | v-hasPermi="['system:role:remove']" |
| | | >删除</el-button> |
| | | <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']"> |
| | | <el-button size="mini" type="text" icon="el-icon-d-arrow-right" @click="handleCheck(scope.row)">查看详情</el-button> |
| | | |
| | | </el-dropdown> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | |
| | | <!-- 添加或修改资产信息配置对话框 --> |
| | | <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body> |
| | | <el-form ref="elForm" :model="formDat" :rules="rules" size="medium" label-width="100px"> |
| | | |
| | | <el-form-item label="类别" prop="type"> |
| | | <el-select v-model="formDat.type" placeholder="请选择类别" clearable :style="{width: '100%'}" > |
| | | <el-option v-for="(item, index) in typeOptions" :key="index" :label="item.label" :value="item.value" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="标题" prop="title"> |
| | | <el-input v-model="formDat.title" placeholder="请输入标题" clearable :style="{width: '100%'}" ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="存储地址" prop="location"> |
| | | <el-input v-model="formDat.location" placeholder="请输入存储地址" clearable :style="{width: '100%'}" > |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="持有人" prop="holder"> |
| | | <el-input v-model="formDat.holder" placeholder="请输入持有人" clearable :style="{width: '100%'}" > |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="具体位置" prop="address"> |
| | | <el-input v-model="formDat.address" placeholder="请输入具体位置" clearable :style="{width: '100%'}" > |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="备注" prop="remark"> |
| | | <el-input v-model="formDat.remark" placeholder="请输入备注" clearable :style="{width: '100%'}" ></el-input> |
| | | </el-form-item> |
| | | |
| | | <h4 class="form-header">相关图片 </h4> |
| | | <el-upload |
| | | action="#" |
| | | list-type="picture-card" |
| | | multiple |
| | | :http-request="requestUpload" |
| | | :file-list="fileList" |
| | | > |
| | | <i slot="default" class="el-icon-plus"></i> |
| | | <div slot="file" slot-scope="{file}"> |
| | | <img |
| | | class="el-upload-list__item-thumbnail" |
| | | :src="file.url" |
| | | alt="" |
| | | style="width: 126px; height: 126px" |
| | | fit="cover" |
| | | :preview-src-list="[file.url]" |
| | | > |
| | | <span class="el-upload-list__item-actions"> |
| | | <span |
| | | class="el-upload-list__item-preview" |
| | | @click="handlePictureCardPreview(file)" |
| | | > |
| | | <i class="el-icon-zoom-in"></i> |
| | | </span> |
| | | |
| | | <span |
| | | v-if="!disabled" |
| | | class="el-upload-list__item-delete" |
| | | @click="handleRemove(file)" |
| | | > |
| | | <i class="el-icon-delete"></i> |
| | | </span> |
| | | </span> |
| | | |
| | | |
| | | </div> |
| | | </el-upload> |
| | | <h4 class="form-header">其他附件 </h4> |
| | | <el-upload |
| | | action="" |
| | | :file-list="fileListOther" |
| | | class="upload-demo" |
| | | multiple |
| | | |
| | | :on-remove="handleRemove" |
| | | :http-request="requestUpload" |
| | | :show-file-list="true" |
| | | > |
| | | <el-button type="primary">Click to upload</el-button> |
| | | <template #tip> |
| | | <div class="el-upload__tip"> |
| | | </div> |
| | | </template> |
| | | </el-upload> |
| | | |
| | | </el-form> |
| | | <h4 class="form-header"> </h4> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitDataScope">确 定</el-button> |
| | | <el-button @click="cancelData">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- 分配角色数据权限对话框 --> |
| | | <el-dialog :title="title" :visible.sync="openDataScope" width="500px" append-to-body> |
| | | |
| | | </el-dialog> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from "@/api/system/role"; |
| | | import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu"; |
| | | |
| | | |
| | | |
| | | //在system/note/index.js中导入接口函数 |
| | | import {listProperty, getPropertyInfo, delProperty, getCategory, addProperty, uploadPic} from "@/api/note/index"; |
| | | export default { |
| | | name: "Role", |
| | | dicts: ['sys_normal_disable'], |
| | | data() { |
| | | return { |
| | | // 遮罩层 |
| | | disabled: false, |
| | | |
| | | loading: true, |
| | | formData:[], |
| | | // 选中数组 |
| | | ids: [], |
| | | // 非单个禁用 |
| | | single: true, |
| | | // 非多个禁用 |
| | | multiple: true, |
| | | // 显示搜索条件 |
| | | showSearch: true, |
| | | // 总条数 |
| | | total: 0, |
| | | // 资产表格数据 |
| | | propertyList: [], |
| | | // 弹出层标题 |
| | | title: "", |
| | | // 是否显示弹出层 |
| | | open: false, |
| | | // 是否显示弹出层(数据权限) |
| | | openDataScope: false, |
| | | menuExpand: false, |
| | | menuNodeAll: false, |
| | | deptExpand: true, |
| | | deptNodeAll: false, |
| | | // 日期范围 |
| | | dateRange: [], |
| | | // 数据范围选项 |
| | | fot:[".jpg",".jif"], |
| | | fileList:[ |
| | | ], |
| | | fileListOther:[ |
| | | |
| | | ], |
| | | dsb:true, |
| | | btn:false, |
| | | formDat: { |
| | | type: undefined, |
| | | title: undefined, |
| | | location: undefined, |
| | | holder: undefined, |
| | | address: undefined, |
| | | remark: undefined, |
| | | url: undefined, |
| | | }, |
| | | // 菜单列表 |
| | | menuOptions: [], |
| | | // 部门列表 |
| | | deptOptions: [], |
| | | // 查询参数 |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | type:undefined, |
| | | title:undefined, |
| | | location:undefined, |
| | | holder:undefined, |
| | | address:undefined, |
| | | createTime:undefined |
| | | }, |
| | | // 表单参数 |
| | | form: {}, |
| | | defaultProps: { |
| | | children: "children", |
| | | label: "label" |
| | | }, |
| | | // 表单校验 |
| | | rules: { |
| | | type: [{ |
| | | required: true, |
| | | message: '请选择类别', |
| | | trigger: 'change' |
| | | }], |
| | | title: [{ |
| | | required: true, |
| | | message: '请输入标题', |
| | | trigger: 'blur' |
| | | }], |
| | | location: [{ |
| | | required: true, |
| | | message: '请输入存储地址', |
| | | trigger: 'blur' |
| | | }], |
| | | holder: [{ |
| | | required: true, |
| | | message: '请输入持有人', |
| | | trigger: 'blur' |
| | | }], |
| | | address: [{ |
| | | required: true, |
| | | message: '请输入具体位置', |
| | | trigger: 'blur' |
| | | }], |
| | | remark: [{ |
| | | required: true, |
| | | message: '请输入备注', |
| | | trigger: 'blur' |
| | | }], |
| | | createTime: [{ |
| | | required: true, |
| | | message: '请选择日期选择', |
| | | trigger: 'change' |
| | | }], |
| | | }, |
| | | typeOptions: [], |
| | | }; |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | this.getCateInfor() |
| | | |
| | | }, |
| | | methods: { |
| | | // 取消按钮 |
| | | cancelData() { |
| | | this.open = false; |
| | | this.reset(); |
| | | }, |
| | | /** 查询角色列表 */ |
| | | getList() { |
| | | this.loading = true; |
| | | // console.log(this.queryParams) |
| | | // listProperty(this.addDateRange(this.queryParams, this.dateRange)).then(response => { |
| | | listProperty(this.queryParams).then(response => { |
| | | // alert(123) |
| | | // console.log(response.data) |
| | | this.propertyList = response.data.data; |
| | | |
| | | this.total = response.data.total; |
| | | this.loading = false; |
| | | } |
| | | ); |
| | | }, |
| | | /** 查询类别信息 */ |
| | | getCateInfor() |
| | | { |
| | | let _this = this |
| | | getCategory().then(response=>{ |
| | | |
| | | response.data.itemValues.replace("{","").replace("}","").split(",").map(elem=>{ |
| | | _this.typeOptions.push({"label":elem.split(":")[0], "value":elem.split(":")[0]}) |
| | | }) |
| | | }) |
| | | }, |
| | | |
| | | handleRemove(file) { |
| | | alert(323) |
| | | }, |
| | | // 取消按钮 |
| | | cancel() { |
| | | this.open = false; |
| | | this.reset(); |
| | | }, |
| | | // 取消按钮(数据权限) |
| | | cancelDataScope() { |
| | | this.openDataScope = false; |
| | | this.reset(); |
| | | }, |
| | | // 表单重置 |
| | | reset() { |
| | | if (this.$refs.menu != undefined) { |
| | | this.$refs.menu.setCheckedKeys([]); |
| | | } |
| | | this.menuExpand = false, |
| | | this.menuNodeAll = false, |
| | | this.deptExpand = true, |
| | | this.deptNodeAll = false, |
| | | this.form = { |
| | | roleId: undefined, |
| | | roleName: undefined, |
| | | roleKey: undefined, |
| | | roleSort: 0, |
| | | status: "0", |
| | | menuIds: [], |
| | | deptIds: [], |
| | | menuCheckStrictly: true, |
| | | deptCheckStrictly: true, |
| | | remark: undefined |
| | | }; |
| | | this.resetForm("form"); |
| | | }, |
| | | /** 搜索按钮操作 */ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | /** 重置按钮操作 */ |
| | | resetQuery() { |
| | | this.dateRange = []; |
| | | this.resetForm("queryForm"); |
| | | this.handleQuery(); |
| | | }, |
| | | // 多选框选中数据 |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id) |
| | | console.log(this.ids) |
| | | this.single = selection.length!=1 |
| | | this.multiple = !selection.length |
| | | }, |
| | | |
| | | /** 新增按钮操作 */ |
| | | handleAdd() { |
| | | this.reset(); |
| | | this.open = true; |
| | | this.title = "添加资产详细信息"; |
| | | }, |
| | | /** 查看详细信息 */ |
| | | handleCheck(row){ |
| | | const id = row.id; |
| | | this.$router.push("/family/note1/propertyInfo/" + id); |
| | | }, |
| | | /** 修改按钮操作 */ |
| | | handleUpdate(row) { |
| | | const id = row.id; |
| | | let jd = true |
| | | |
| | | this.$router.push({ |
| | | path:"/family/note1/propertyInfo/" + id, |
| | | query:{ |
| | | detail:jd |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | |
| | | handlePictureCardPreview(file) { |
| | | this.dialogImageUrl = file.url; |
| | | this.dialogVisible = true; |
| | | }, |
| | | /** 提交按钮(数据权限) */ |
| | | submitDataScope: function() { |
| | | |
| | | let ul = this.fileList.map(function (elem){ |
| | | return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"") |
| | | }).join(",") |
| | | let uls = this.fileListOther.map(function (elem){ |
| | | return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"") |
| | | }).join(",") |
| | | this.formDat.url = ul+","+uls |
| | | this.$refs["elForm"].validate(valid => { |
| | | if (valid) { |
| | | |
| | | addProperty(this.formDat).then(response => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | requestUpload(params) |
| | | { |
| | | var file = params.file; |
| | | var formData = new FormData(); |
| | | formData.append('uploadFile', file); |
| | | let _this = this |
| | | |
| | | uploadPic(formData).then(response => { |
| | | let pth = response.data.originalFilename.substr(response.data.originalFilename.length-4, response.data.originalFilename.length) |
| | | |
| | | if(_this.fot.includes(pth) === true) |
| | | { |
| | | _this.fileList.push({name:response.data.fileName, "url":response.data.url}) |
| | | |
| | | } |
| | | |
| | | else{ |
| | | _this.fileListOther.push({name:response.data.fileName, url:response.data.url}) |
| | | |
| | | } |
| | | }) |
| | | |
| | | }, |
| | | /** 删除按钮操作 */ |
| | | handleDelete(row) { |
| | | const Ids = row.id || this.ids; |
| | | this.$modal.confirm('是否确认删除资产编号为"' + Ids + '"的数据项?').then(function() { |
| | | return delProperty(Ids); |
| | | }).then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }).catch(() => {}); |
| | | }, |
| | | /** 导出按钮操作 */ |
| | | handleExport() { |
| | | this.download('family/property/export', { |
| | | ...this.queryParams |
| | | }, `property_${new Date().getTime()}.xlsx`) |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-col :span="6"> |
| | | <el-input size="medium" v-model="input" placeholder="搜索" clearable> |
| | | <i slot="prefix" class="el-input__icon el-icon-search"></i> |
| | | </el-input> |
| | | </el-col> |
| | | <br> |
| | | <h1 style="font-size:21px">个人简历</h1> |
| | | <el-divider /> |
| | | <h2 style="font-size:16px">基本信息</h2> |
| | | |
| | | <el-container> |
| | | <div style="padding:30px"> |
| | | <el-container> |
| | | <el-col> |
| | | <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="60px" label-position="left"> |
| | | <el-row :span="6"> |
| | | <el-form-item label="姓名" prop="nickName"> |
| | | <el-input v-model="formData.nickName" placeholder="请输入姓名" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-row> |
| | | <el-row :span="6"> |
| | | <el-form-item label="曾用名" prop="oldName"> |
| | | <el-input v-model="formData.oldName" placeholder="请输入曾用名" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-row> |
| | | <el-row :span="8"> |
| | | <el-form-item label="身份证号" prop="field107"> |
| | | <el-input v-model="formData.field107" placeholder="请输入身份证号" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-row> |
| | | </el-form> |
| | | </el-col> |
| | | </el-container> |
| | | </div> |
| | | <div style="padding:30px"> |
| | | <el-container> |
| | | <el-col > |
| | | <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="60px" label-position="left"> |
| | | <el-row :span="6"> |
| | | <el-form-item label="性别" prop="sex"> |
| | | <el-input v-model="formData.sex" placeholder="请输入性别" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-row> |
| | | <el-row :span="6"> |
| | | <el-form-item label="民族" prop="field105"> |
| | | <el-input v-model="formData.field105" placeholder="请输入民族" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-row> |
| | | <el-row :span="8"> |
| | | <el-form-item label="联系方式" prop="field107"> |
| | | <el-input v-model="formData.field107" placeholder="请输入联系方式" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-row> |
| | | </el-form> |
| | | </el-col> |
| | | </el-container> |
| | | </div> |
| | | <div style="padding:30px"> |
| | | <el-container> |
| | | <el-col> |
| | | <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="60px" label-position="left"> |
| | | <el-row :span="6"> |
| | | <el-form-item label="国籍" prop="nationality"> |
| | | <el-input v-model="formData.nationality" placeholder="请输入国籍" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-row> |
| | | <el-row :span="6"> |
| | | <el-form-item label="婚姻状况" prop="maritalStatus"> |
| | | <el-input v-model="formData.maritalStatus" placeholder="请输入婚姻状况" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-row> |
| | | |
| | | </el-form> |
| | | </el-col> |
| | | </el-container> |
| | | </div> |
| | | <div style="padding:30px"> |
| | | <el-row :gutter="6" > |
| | | <el-upload ref="ref1" |
| | | action="" |
| | | :file-list="fileList" |
| | | list-type="picture-card" |
| | | accept="image/*" |
| | | :auto-upload="false" |
| | | :multiple="false" |
| | | :limit="1"> |
| | | <i class="el-icon-plus"></i> |
| | | </el-upload> |
| | | </el-row> |
| | | </div> |
| | | |
| | | <div style="padding:30px" class="button" > |
| | | <el-row :span="2" style="flex-direction: column;"> |
| | | <el-form-item size="large"> |
| | | <el-button type="primary" @click="submitForm">编辑</el-button> |
| | | <br> |
| | | <el-button type="primary" @click="submitForm">导入</el-button> |
| | | </el-form-item> |
| | | </el-row> |
| | | </div> |
| | | </el-container> |
| | | <el-row :gutter="18" > |
| | | <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="99px"> |
| | | |
| | | |
| | | |
| | | |
| | | <el-col :span="8"> |
| | | <el-form-item label="联系方式" prop="field107"> |
| | | <el-input v-model="formData.field107" placeholder="请输入联系方式" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="户籍地址" prop="field108"> |
| | | <el-input v-model="formData.field108" placeholder="请输入户籍地址" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="户籍地公安机关" prop="field109"> |
| | | <el-input v-model="formData.field109" placeholder="请输入户籍地公安机关" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="常住地址" prop="field110"> |
| | | <el-input v-model="formData.field110" placeholder="请输入常住地址" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="常住地公安机关" prop="field111"> |
| | | <el-input v-model="formData.field111" placeholder="请输入常住地公安机关" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="单位及职务职称" prop="field112"> |
| | | <el-input v-model="formData.field112" placeholder="请输入单位及职务职称" clearable :style="{width: '100%'}"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | |
| | | </el-form> |
| | | |
| | | <el-for> |
| | | |
| | | |
| | | </el-for> |
| | | |
| | | </el-row> |
| | | |
| | | <el-container> |
| | | <div style="width:100%"><h2 style="font-size:15px" >主要学习及工作经历</h2></div> |
| | | <el-button type="primary" icon="el-icon-edit" round></el-button> |
| | | <el-button type="primary" icon="el-icon-delete" round></el-button> |
| | | </el-container> |
| | | <el-table v-loading="loading" :data="individualList" @selection-change="handleSelectionChange"> |
| | | <el-table-column label="起止日期" prop="time" sortable width="350" align="center" /> |
| | | <el-table-column label="主要学习经历、工作单位及任职情况" prop="circumstance" sortable width="400" align="center" /> |
| | | <el-table-column label="证明人" prop="witness" sortable width="350" align="center" /> |
| | | <el-table-column label="删除" align="center" class-name="small-padding fixed-width" sortable width="100"> |
| | | <template slot-scope="scope" v-if="scope.row.roleId !== 1"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleUpdate(scope.row)" |
| | | v-hasPermi="['system:role:edit']" |
| | | >修改</el-button> |
| | | |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleDelete(scope.row)" |
| | | v-hasPermi="['system:role:remove']" |
| | | >删除</el-button> |
| | | <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']"> |
| | | <el-button size="mini" type="text" icon="el-icon-d-arrow-right" @click="handleCheck(scope.row)">查看详情</el-button> |
| | | |
| | | </el-dropdown> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | </div> |
| | | |
| | | </template> |
| | | |
| | | <script> |
| | | import {getIndividualInfo, getIndividualRelation, delIndividual, updateIndividual, addIndividual} from "@/api/self/index"; |
| | | |
| | | export default { |
| | | name: 'index', |
| | | components: {}, |
| | | props: [], |
| | | |
| | | data() { |
| | | return { |
| | | input: '', |
| | | filelist: [], |
| | | |
| | | // 遮罩层 |
| | | disabled: false, |
| | | |
| | | loading: true, |
| | | // formData:[], |
| | | // 选中数组 |
| | | ids: [], |
| | | // 非单个禁用 |
| | | single: true, |
| | | // 非多个禁用 |
| | | multiple: true, |
| | | // 显示搜索条件 |
| | | showSearch: true, |
| | | // 总条数 |
| | | total: 0, |
| | | // 资产表格数据 |
| | | individualList: [], |
| | | // 弹出层标题 |
| | | title: "", |
| | | // 是否显示弹出层 |
| | | open: false, |
| | | // 是否显示弹出层(数据权限) |
| | | openDataScope: false, |
| | | menuExpand: false, |
| | | menuNodeAll: false, |
| | | deptExpand: true, |
| | | deptNodeAll: false, |
| | | // 日期范围 |
| | | dateRange: [], |
| | | // 数据范围选项 |
| | | fot:[".jpg",".jif"], |
| | | fileList:[ |
| | | ], |
| | | fileListOther:[ |
| | | |
| | | ], |
| | | dsb:true, |
| | | btn:false, |
| | | |
| | | formData: { |
| | | nickName: undefined, |
| | | sex: undefined, |
| | | nationality: undefined, |
| | | oldName: undefined, |
| | | field105: undefined, |
| | | maritalStatus: undefined, |
| | | field107: undefined, |
| | | field108: undefined, |
| | | field109: undefined, |
| | | field110: undefined, |
| | | field111: undefined, |
| | | field112: undefined, |
| | | }, |
| | | rules: { |
| | | nickName: [{ |
| | | required: true, |
| | | message: '请输入姓名', |
| | | trigger: 'blur' |
| | | }], |
| | | sex: [{ |
| | | required: true, |
| | | message: '请输入性别', |
| | | trigger: 'blur' |
| | | }], |
| | | nationality: [{ |
| | | required: true, |
| | | message: '请输入国籍', |
| | | trigger: 'blur' |
| | | }], |
| | | oldName: [{ |
| | | required: true, |
| | | message: '请输入曾用名', |
| | | trigger: 'blur' |
| | | }], |
| | | field105: [{ |
| | | required: true, |
| | | message: '请输入民族', |
| | | trigger: 'blur' |
| | | }], |
| | | maritalStatus: [{ |
| | | // required: true, |
| | | message: '请输入婚姻状况', |
| | | trigger: 'blur' |
| | | }], |
| | | field107: [{ |
| | | // required: true, |
| | | message: '请输入联系方式', |
| | | trigger: 'blur' |
| | | }], |
| | | field108: [{ |
| | | // required: true, |
| | | message: '请输入户籍地址', |
| | | trigger: 'blur' |
| | | }], |
| | | field109: [{ |
| | | // required: true, |
| | | message: '请输入户籍地公安机关', |
| | | trigger: 'blur' |
| | | }], |
| | | field110: [{ |
| | | // required: true, |
| | | message: '请输入常住地址', |
| | | trigger: 'blur' |
| | | }], |
| | | field111: [{ |
| | | // required: true, |
| | | message: '请输入常住地公安机关', |
| | | trigger: 'blur' |
| | | }], |
| | | field112: [{ |
| | | // required: true, |
| | | message: '请输入单位及职务职称', |
| | | trigger: 'blur' |
| | | }], |
| | | }, |
| | | // 菜单列表 |
| | | menuOptions: [], |
| | | // 部门列表 |
| | | deptOptions: [], |
| | | // 查询参数 |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 5, |
| | | time:undefined, |
| | | circumstance:undefined, |
| | | witness:undefined, |
| | | createTime:undefined |
| | | }, |
| | | } |
| | | }, |
| | | computed: {}, |
| | | watch: {}, |
| | | created() { |
| | | this.getList(); |
| | | // this.getCateInfor() |
| | | }, |
| | | mounted() {}, |
| | | methods: { |
| | | submitForm() { |
| | | this.$refs['elForm'].validate(valid => { |
| | | if (!valid) return |
| | | // TODO 提交表单 |
| | | }) |
| | | }, |
| | | resetForm() { |
| | | this.$refs['elForm'].resetFields() |
| | | }, |
| | | fillFormData(){ |
| | | let formData = new FormData(); |
| | | let photo = this.$refs['ref1'].uploadFiles[0]; |
| | | if(photo===undefined){ |
| | | this.$message.error("请选择照片"); |
| | | return false; |
| | | } |
| | | if(photo!==undefined){ |
| | | formData.append('照片', photo.raw);//根据后端需要的参数进行相应更改,大多是文件格式 |
| | | } |
| | | return formData; |
| | | }, |
| | | dialogConfirm() { |
| | | let formData=this.fillFormData(); |
| | | if(this.dialogMode ==='edit'){//dialogMode用于判断当前时添加还是编辑 |
| | | this.api.update(formData).then(res => {//调用修改接口 |
| | | if (res.data.code == "OK") { |
| | | this.$message({ |
| | | type: "success", |
| | | message: "修改成功!", |
| | | duration:5000 |
| | | }); |
| | | this.fileList=[]; |
| | | } else { |
| | | this.$message.error(res.data.message); |
| | | } |
| | | },()=>{ |
| | | this.$message.error("修改失败"); |
| | | }).finally(()=>{ |
| | | }); |
| | | }else{ |
| | | this.api.insert(formData).then(res => {//添加接口 |
| | | if (res.data.code == "OK") { |
| | | this.$message({ |
| | | type: "success", |
| | | message: "新建成功!", |
| | | duration:5000 |
| | | }); |
| | | this.fileList=[]; |
| | | } else { |
| | | this.$message.error(res.data.message); |
| | | } |
| | | },()=>{ |
| | | this.$message.error("新建失败"); |
| | | }).finally(()=>{ |
| | | }); |
| | | } |
| | | }, |
| | | //点击编辑时图片回显 |
| | | edit(info){//info=>后台接口返回的数据 |
| | | let url=this.baseUrl+info.photo//url的地址根据项目实际需要,info.photo=>图片路径,this.baseUrl=>上传的网络地址 |
| | | this.fileList=[]; |
| | | this.fileList.push({ |
| | | 'url': url |
| | | }) |
| | | this.dialogMode='edit';//设置为编辑 |
| | | }, |
| | | onCreateNew(){ |
| | | this.fileList=[]; |
| | | this.dialogMode='create';//设置为添加 |
| | | }, |
| | | /** 个人信息列表 */ |
| | | getList() { |
| | | this.loading = true; |
| | | // console.log(this.queryParams) |
| | | // listProperty(this.addDateRange(this.queryParams, this.dateRange)).then(response => { |
| | | listIndividual(this.queryParams).then(response => { |
| | | // alert(123) |
| | | // console.log(response.data) |
| | | this.individualList = response.data.data; |
| | | |
| | | this.total = response.data.total; |
| | | this.loading = false; |
| | | } |
| | | ); |
| | | }, |
| | | |
| | | /** 删除按钮操作 */ |
| | | handleDelete(row) { |
| | | const Ids = row.id || this.ids; |
| | | this.$modal.confirm('是否确认删除编号为"' + Ids + '"的数据项?').then(function() { |
| | | return delProperty(Ids); |
| | | }).then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }).catch(() => {}); |
| | | }, |
| | | /** 查看详细信息 */ |
| | | handleCheck(row){ |
| | | const id = row.id; |
| | | this.$router.push("/family/note1/propertyInfo/" + id); |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |