27 files modified
2 files added
| | |
| | | }, |
| | | "node_modules/echarts": { |
| | | "version": "5.4.3", |
| | | <<<<<<< HEAD |
| | | "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", |
| | | ======= |
| | | "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz", |
| | | >>>>>>> 7777a40af5210dce0abe07360a48042b1bc8d264 |
| | | "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", |
| | | "dependencies": { |
| | | "tslib": "2.3.0", |
| | |
| | | }, |
| | | "node_modules/tslib": { |
| | | "version": "2.3.0", |
| | | <<<<<<< HEAD |
| | | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", |
| | | ======= |
| | | "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", |
| | | >>>>>>> 7777a40af5210dce0abe07360a48042b1bc8d264 |
| | | "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" |
| | | }, |
| | | "node_modules/tty-browserify": { |
| | |
| | | }, |
| | | "node_modules/zrender": { |
| | | "version": "5.4.4", |
| | | <<<<<<< HEAD |
| | | "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", |
| | | ======= |
| | | "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz", |
| | | >>>>>>> 7777a40af5210dce0abe07360a48042b1bc8d264 |
| | | "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", |
| | | "dependencies": { |
| | | "tslib": "2.3.0" |
| | |
| | | }, |
| | | "echarts": { |
| | | "version": "5.4.3", |
| | | <<<<<<< HEAD |
| | | "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", |
| | | ======= |
| | | "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz", |
| | | >>>>>>> 7777a40af5210dce0abe07360a48042b1bc8d264 |
| | | "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", |
| | | "requires": { |
| | | "tslib": "2.3.0", |
| | |
| | | }, |
| | | "tslib": { |
| | | "version": "2.3.0", |
| | | <<<<<<< HEAD |
| | | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", |
| | | ======= |
| | | "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", |
| | | >>>>>>> 7777a40af5210dce0abe07360a48042b1bc8d264 |
| | | "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" |
| | | }, |
| | | "tty-browserify": { |
| | |
| | | }, |
| | | "zrender": { |
| | | "version": "5.4.4", |
| | | <<<<<<< HEAD |
| | | "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", |
| | | ======= |
| | | "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz", |
| | | >>>>>>> 7777a40af5210dce0abe07360a48042b1bc8d264 |
| | | "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", |
| | | "requires": { |
| | | "tslib": "2.3.0" |
| | |
| | | <html> |
| | | |
| | | <head> |
| | | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| | | <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| | | <meta http-equiv="X-UA-Compatible" content="chrome=1"/> |
| | | <meta name="renderer" content="webkit"> |
| | | <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"> |
| | | <meta name="apple-mobile-web-app-capable" content="yes"> |
| | | <meta name="apple-mobile-web-app-status-bar-style" content="black"> |
| | | <meta name="format-detection" content="telephone=no"> |
| | | <link rel="stylesheet" href="<%= BASE_URL %>cdn/element-ui/2.15.6/theme-chalk/index.css"> |
| | | <link rel="stylesheet" href="<%= BASE_URL %>cdn/animate/3.5.2/animate.css"> |
| | | <link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/index.css"> |
| | | <link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/avue/iconfont.css"> |
| | | <link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/saber/iconfont.css"> |
| | | <link rel="stylesheet" href="<%= BASE_URL %>cdn/avue/2.10.16/index.css"> |
| | | <script src="<%= BASE_URL %>cdn/xlsx/FileSaver.min.js"></script> |
| | | <script src="<%= BASE_URL %>cdn/xlsx/xlsx.full.min.js"></script> |
| | | <!-- AvueMap-begin--> |
| | | <script> |
| | | window._AMapSecurityConfig = { |
| | | securityJsCode: '5c569caedb31676fc64da5be4c5e8cee', |
| | | } |
| | | </script> |
| | | <script type="text/javascript" src='https://webapi.amap.com/maps?v=1.4.11&key=fce315b8c816ec06755a523ccae9922d&plugin=AMap.PlaceSearch'></script> |
| | | <script src="https://webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script> |
| | | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| | | <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| | | <meta http-equiv="X-UA-Compatible" content="chrome=1" /> |
| | | <meta name="renderer" content="webkit"> |
| | | <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"> |
| | | <meta name="apple-mobile-web-app-capable" content="yes"> |
| | | <meta name="apple-mobile-web-app-status-bar-style" content="black"> |
| | | <meta name="format-detection" content="telephone=no"> |
| | | <link rel="stylesheet" href="<%= BASE_URL %>cdn/element-ui/2.15.6/theme-chalk/index.css"> |
| | | <link rel="stylesheet" href="<%= BASE_URL %>cdn/animate/3.5.2/animate.css"> |
| | | <link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/index.css"> |
| | | <link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/avue/iconfont.css"> |
| | | <link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/saber/iconfont.css"> |
| | | <link rel="stylesheet" href="<%= BASE_URL %>cdn/avue/2.10.16/index.css"> |
| | | <script src="<%= BASE_URL %>cdn/xlsx/FileSaver.min.js"></script> |
| | | <script src="<%= BASE_URL %>cdn/xlsx/xlsx.full.min.js"></script> |
| | | <!-- AvueMap-begin--> |
| | | <script> |
| | | window._AMapSecurityConfig={ |
| | | securityJsCode: '5c569caedb31676fc64da5be4c5e8cee', |
| | | } |
| | | </script> |
| | | <script type="text/javascript" |
| | | src='https://webapi.amap.com/maps?v=1.4.11&key=fce315b8c816ec06755a523ccae9922d&plugin=AMap.PlaceSearch'></script> |
| | | <script src="https://webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script> |
| | | <!-- AvueMap-end--> |
| | | <link rel="icon" href="<%= BASE_URL %>favicon.png"> |
| | | <title>基层智治综合协同平台</title> |
| | | <link rel="icon" href="<%= BASE_URL %>favicon.png"> |
| | | |
| | | <style> |
| | | html, |
| | | body, |
| | | #app { |
| | | height: 100%; |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | <style> |
| | | html, |
| | | body, |
| | | #app { |
| | | height: 100%; |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | |
| | | .avue-home { |
| | | background-color: #303133; |
| | | height: 100%; |
| | | display: flex; |
| | | flex-direction: column; |
| | | } |
| | | .avue-home { |
| | | background-color: #303133; |
| | | height: 100%; |
| | | display: flex; |
| | | flex-direction: column; |
| | | } |
| | | |
| | | .avue-home__main { |
| | | user-select: none; |
| | | width: 100%; |
| | | flex-grow: 1; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | flex-direction: column; |
| | | } |
| | | .avue-home__main { |
| | | user-select: none; |
| | | width: 100%; |
| | | flex-grow: 1; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | flex-direction: column; |
| | | } |
| | | |
| | | .avue-home__footer { |
| | | width: 100%; |
| | | flex-grow: 0; |
| | | text-align: center; |
| | | padding: 1em 0; |
| | | } |
| | | .avue-home__footer { |
| | | width: 100%; |
| | | flex-grow: 0; |
| | | text-align: center; |
| | | padding: 1em 0; |
| | | } |
| | | |
| | | .avue-home__footer > a { |
| | | font-size: 12px; |
| | | color: #ABABAB; |
| | | text-decoration: none; |
| | | } |
| | | .avue-home__footer>a { |
| | | font-size: 12px; |
| | | color: #ABABAB; |
| | | text-decoration: none; |
| | | } |
| | | |
| | | .avue-home__loading { |
| | | height: 32px; |
| | | width: 32px; |
| | | margin-bottom: 20px; |
| | | } |
| | | .avue-home__loading { |
| | | height: 32px; |
| | | width: 32px; |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .avue-home__title { |
| | | color: #FFF; |
| | | font-size: 14px; |
| | | margin-bottom: 10px; |
| | | } |
| | | .avue-home__title { |
| | | color: #FFF; |
| | | font-size: 14px; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .avue-home__sub-title { |
| | | color: #ABABAB; |
| | | font-size: 12px; |
| | | } |
| | | </style> |
| | | .avue-home__sub-title { |
| | | color: #ABABAB; |
| | | font-size: 12px; |
| | | } |
| | | </style> |
| | | </head> |
| | | |
| | | <body> |
| | | <noscript> |
| | | <strong> |
| | | 很抱歉,如果没有 JavaScript 支持,Saber 将不能正常工作。请启用浏览器的 JavaScript 然后继续。 |
| | | </strong> |
| | | </noscript> |
| | | <div id="app"> |
| | | <div class="avue-home"> |
| | | <div class="avue-home__main"> |
| | | <img class="avue-home__loading" src="<%= BASE_URL %>svg/loading-spin.svg" alt="loading"> |
| | | <div class="avue-home__title"> |
| | | 正在加载资源 |
| | | </div> |
| | | <div class="avue-home__sub-title d"> |
| | | 初次加载资源可能需要较多时间 请耐心等待 |
| | | </div> |
| | | <noscript> |
| | | <strong> |
| | | 很抱歉,如果没有 JavaScript 支持,Saber 将不能正常工作。请启用浏览器的 JavaScript 然后继续。 |
| | | </strong> |
| | | </noscript> |
| | | <div id="app"> |
| | | <div class="avue-home"> |
| | | <div class="avue-home__main"> |
| | | <img class="avue-home__loading" src="<%= BASE_URL %>svg/loading-spin.svg" alt="loading"> |
| | | <div class="avue-home__title"> |
| | | 正在加载资源 |
| | | </div> |
| | | <div class="avue-home__sub-title d"> |
| | | 初次加载资源可能需要较多时间 请耐心等待 |
| | | </div> |
| | | </div> |
| | | <div class="avue-home__footer"> |
| | | <a href="https://bladex.cn" target="_blank"> |
| | | https://bladex.cn </a> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="avue-home__footer"> |
| | | <a href="https://bladex.cn" target="_blank"> |
| | | https://bladex.cn </a> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- built files will be auto injected --> |
| | | <script src="<%= BASE_URL %>util/aes.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/vue/2.6.10/vue.min.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/vuex/3.1.1/vuex.min.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/vue-router/3.0.1/vue-router.min.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/axios/1.0.0/axios.min.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/element-ui/2.15.6/index.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/avue/2.10.16/avue.min.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/nutflow/wf-design-base/index.umd.min.js" charset="utf-8"></script> |
| | | <!-- built files will be auto injected --> |
| | | <script src="<%= BASE_URL %>util/aes.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/vue/2.6.10/vue.min.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/vuex/3.1.1/vuex.min.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/vue-router/3.0.1/vue-router.min.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/axios/1.0.0/axios.min.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/element-ui/2.15.6/index.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/avue/2.10.16/avue.min.js" charset="utf-8"></script> |
| | | <script src="<%= BASE_URL %>cdn/nutflow/wf-design-base/index.umd.min.js" charset="utf-8"></script> |
| | | </body> |
| | | |
| | | </html> |
| | | </html> |
| | |
| | | export default { |
| | | title: "saber", |
| | | logo: "S", |
| | | key: 'saber',//配置主键,目前用于存储 |
| | | key: 'saber', //配置主键,目前用于存储 |
| | | indexTitle: '基层智治综合协同平台', |
| | | clientId: 'saber', // 客户端id |
| | | clientSecret: 'saber_secret', // 客户端密钥 |
| | |
| | | authUrl: 'http://localhost/blade-auth/oauth/render', |
| | | // 报表设计器地址(cloud端口为8108,boot端口为80) |
| | | reportUrl: 'https://srgdjczzxtpt.com:2080/jczz-ureport/ureport', |
| | | // reportUrl: 'http://localhost:9528/ureport', |
| | | // 单点登录系统认证(blade-auth服务的地) |
| | | ssoUrl: 'http://localhost:8100/oauth/authorize?client_id=saber&response_type=code&redirect_uri=', |
| | | // 单点登录回调地址(Saber服务的地址) |
| | |
| | | export default { |
| | | title: '基层智治综合协同平台', |
| | | logoutTip: 'Exit the system, do you want to continue?', |
| | | submitText: 'submit', |
| | | cancelText: 'cancel', |
| | | search: 'Please input search content', |
| | | menuTip: 'none menu list', |
| | | title: "", |
| | | logoutTip: "Exit the system, do you want to continue?", |
| | | submitText: "submit", |
| | | cancelText: "cancel", |
| | | search: "Please input search content", |
| | | menuTip: "none menu list", |
| | | common: { |
| | | condition: 'condition', |
| | | display: 'display', |
| | | hide: 'hide' |
| | | condition: "condition", |
| | | display: "display", |
| | | hide: "hide", |
| | | }, |
| | | tip: { |
| | | select: 'Please select', |
| | | input: 'Please input' |
| | | select: "Please select", |
| | | input: "Please input", |
| | | }, |
| | | upload: { |
| | | upload: 'upload', |
| | | tip: 'Drag files here,/' |
| | | upload: "upload", |
| | | tip: "Drag files here,/", |
| | | }, |
| | | date: { |
| | | start: 'Start date', |
| | | end: 'End date', |
| | | t: 'today', |
| | | y: 'yesterday', |
| | | n: 'nearly 7', |
| | | a: 'whole' |
| | | start: "Start date", |
| | | end: "End date", |
| | | t: "today", |
| | | y: "yesterday", |
| | | n: "nearly 7", |
| | | a: "whole", |
| | | }, |
| | | form: { |
| | | printBtn: 'print', |
| | | mockBtn: 'mock', |
| | | submitBtn: 'submit', |
| | | emptyBtn: 'empty' |
| | | printBtn: "print", |
| | | mockBtn: "mock", |
| | | submitBtn: "submit", |
| | | emptyBtn: "empty", |
| | | }, |
| | | crud: { |
| | | filter: { |
| | | addBtn: 'add', |
| | | clearBtn: 'clear', |
| | | resetBtn: 'reset', |
| | | cancelBtn: 'cancel', |
| | | submitBtn: 'submit' |
| | | addBtn: "add", |
| | | clearBtn: "clear", |
| | | resetBtn: "reset", |
| | | cancelBtn: "cancel", |
| | | submitBtn: "submit", |
| | | }, |
| | | column: { |
| | | name: 'name', |
| | | hide: 'hide', |
| | | fixed: 'fixed', |
| | | filters: 'filters', |
| | | sortable: 'sortable', |
| | | index: 'index', |
| | | width: 'width' |
| | | name: "name", |
| | | hide: "hide", |
| | | fixed: "fixed", |
| | | filters: "filters", |
| | | sortable: "sortable", |
| | | index: "index", |
| | | width: "width", |
| | | }, |
| | | tipStartTitle: 'Currently selected', |
| | | tipEndTitle: 'items', |
| | | editTitle: 'edit', |
| | | copyTitle: 'copy', |
| | | addTitle: 'add', |
| | | viewTitle: 'view', |
| | | filterTitle: 'filter', |
| | | showTitle: 'showTitle', |
| | | menu: 'menu', |
| | | addBtn: 'add', |
| | | show: 'show', |
| | | hide: 'hide', |
| | | open: 'open', |
| | | shrink: 'shrink', |
| | | printBtn: 'print', |
| | | excelBtn: 'excel', |
| | | updateBtn: 'update', |
| | | cancelBtn: 'cancel', |
| | | searchBtn: 'search', |
| | | emptyBtn: 'empty', |
| | | menuBtn: 'menu', |
| | | saveBtn: 'save', |
| | | viewBtn: 'view', |
| | | editBtn: 'edit', |
| | | copyBtn: 'copy', |
| | | delBtn: 'delete' |
| | | tipStartTitle: "Currently selected", |
| | | tipEndTitle: "items", |
| | | editTitle: "edit", |
| | | copyTitle: "copy", |
| | | addTitle: "add", |
| | | viewTitle: "view", |
| | | filterTitle: "filter", |
| | | showTitle: "showTitle", |
| | | menu: "menu", |
| | | addBtn: "add", |
| | | show: "show", |
| | | hide: "hide", |
| | | open: "open", |
| | | shrink: "shrink", |
| | | printBtn: "print", |
| | | excelBtn: "excel", |
| | | updateBtn: "update", |
| | | cancelBtn: "cancel", |
| | | searchBtn: "search", |
| | | emptyBtn: "empty", |
| | | menuBtn: "menu", |
| | | saveBtn: "save", |
| | | viewBtn: "view", |
| | | editBtn: "edit", |
| | | copyBtn: "copy", |
| | | delBtn: "delete", |
| | | }, |
| | | login: { |
| | | title: 'Login ', |
| | | info: 'BladeX Development Platform', |
| | | tenantId: 'Please input tenantId', |
| | | username: 'Please input username', |
| | | password: 'Please input a password', |
| | | wechat: 'Wechat', |
| | | qq: 'QQ', |
| | | github: 'github', |
| | | gitee: 'gitee', |
| | | phone: 'Please input a phone', |
| | | code: 'Please input a code', |
| | | submit: 'Login', |
| | | userLogin: 'userLogin', |
| | | phoneLogin: 'phoneLogin', |
| | | thirdLogin: 'thirdLogin', |
| | | ssoLogin: 'ssoLogin', |
| | | msgText: 'send code', |
| | | msgSuccess: 'reissued code', |
| | | title: "Login ", |
| | | info: "BladeX Development Platform", |
| | | tenantId: "Please input tenantId", |
| | | username: "Please input username", |
| | | password: "Please input a password", |
| | | wechat: "Wechat", |
| | | qq: "QQ", |
| | | github: "github", |
| | | gitee: "gitee", |
| | | phone: "Please input a phone", |
| | | code: "Please input a code", |
| | | submit: "Login", |
| | | userLogin: "userLogin", |
| | | phoneLogin: "phoneLogin", |
| | | thirdLogin: "thirdLogin", |
| | | ssoLogin: "ssoLogin", |
| | | msgText: "send code", |
| | | msgSuccess: "reissued code", |
| | | }, |
| | | navbar: { |
| | | info: 'info', |
| | | logOut: 'logout', |
| | | userinfo: 'userinfo', |
| | | switchDept : 'switch dept', |
| | | dashboard: 'dashboard', |
| | | lock: 'lock', |
| | | bug: 'none bug', |
| | | bugs: 'bug', |
| | | screenfullF: 'exit screenfull', |
| | | screenfull: 'screenfull', |
| | | language: 'language', |
| | | notice: 'notice', |
| | | theme: 'theme', |
| | | color: 'color' |
| | | info: "info", |
| | | logOut: "logout", |
| | | userinfo: "userinfo", |
| | | switchDept: "switch dept", |
| | | dashboard: "dashboard", |
| | | lock: "lock", |
| | | bug: "none bug", |
| | | bugs: "bug", |
| | | screenfullF: "exit screenfull", |
| | | screenfull: "screenfull", |
| | | language: "language", |
| | | notice: "notice", |
| | | theme: "theme", |
| | | color: "color", |
| | | }, |
| | | tagsView: { |
| | | search: 'Search', |
| | | menu: 'menu', |
| | | clearCache: 'Clear Cache', |
| | | closeOthers: 'Close Others', |
| | | closeAll: 'Close All' |
| | | } |
| | | search: "Search", |
| | | menu: "menu", |
| | | clearCache: "Clear Cache", |
| | | closeOthers: "Close Others", |
| | | closeAll: "Close All", |
| | | }, |
| | | }; |
| | |
| | | <!-- |
| | | * @Author: shuishen 1109946754@qq.com |
| | | * @Date: 2023-12-14 17:10:00 |
| | | * @LastEditors: shuishen 1109946754@qq.com |
| | | * @LastEditTime: 2024-01-19 15:47:47 |
| | | * @FilePath: \jczz_web\src\page\index\logo.vue |
| | | * @Description: |
| | | * |
| | | * Copyright (c) 2024 by shuishen, All Rights Reserved. |
| | | --> |
| | | <template> |
| | | <div class="avue-logo"> |
| | | <transition name="fade"> |
| | | <span v-if="keyCollapse" |
| | | class="avue-logo_subtitle" |
| | | key="0"> |
| | | {{website.logo}} |
| | | </span> |
| | | </transition> |
| | | <transition-group name="fade"> |
| | | <template v-if="!keyCollapse"> |
| | | <span class="avue-logo_title" |
| | | key="1">{{website.indexTitle}} </span> |
| | | </template> |
| | | </transition-group> |
| | | </div> |
| | | <div class="avue-logo"> |
| | | <transition name="fade"> |
| | | <span v-if="keyCollapse" class="avue-logo_subtitle" key="0"> |
| | | {{ website.logo }} |
| | | </span> |
| | | </transition> |
| | | <transition-group name="fade"> |
| | | <template v-if="!keyCollapse"> |
| | | <span class="avue-logo_title" key="1">{{ webTitle }} </span> |
| | | </template> |
| | | </transition-group> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { mapGetters } from "vuex"; |
| | | import { getStore } from "@/util/store" |
| | | import { mapGetters } from "vuex" |
| | | |
| | | export default { |
| | | name: "logo", |
| | | data() { |
| | | return {}; |
| | | }, |
| | | created() {}, |
| | | computed: { |
| | | ...mapGetters(["website", "keyCollapse"]) |
| | | }, |
| | | methods: {} |
| | | }; |
| | | name: "logo", |
| | | data () { |
| | | return { |
| | | webTitle: getStore({ name: "webTitle" }) |
| | | } |
| | | }, |
| | | created () { }, |
| | | computed: { |
| | | ...mapGetters(["website", "keyCollapse"]) |
| | | }, |
| | | methods: {} |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | .fade-leave-active { |
| | | transition: opacity 0.2s; |
| | | transition: opacity 0.2s; |
| | | } |
| | | |
| | | .fade-enter-active { |
| | | transition: opacity 2.5s; |
| | | transition: opacity 2.5s; |
| | | } |
| | | |
| | | .fade-enter, |
| | | .fade-leave-to { |
| | | opacity: 0; |
| | | opacity: 0; |
| | | } |
| | | |
| | | .avue-logo { |
| | | position: fixed; |
| | | top: 0; |
| | | left: 0; |
| | | width: 240px; |
| | | height: 64px; |
| | | line-height: 64px; |
| | | background-color: #20222a; |
| | | font-size: 20px; |
| | | overflow: hidden; |
| | | box-sizing: border-box; |
| | | box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.15); |
| | | color: rgba(255, 255, 255, 0.8); |
| | | z-index: 1024; |
| | | &_title { |
| | | display: block; |
| | | text-align: center; |
| | | font-weight: 300; |
| | | position: fixed; |
| | | top: 0; |
| | | left: 0; |
| | | width: 240px; |
| | | height: 64px; |
| | | line-height: 64px; |
| | | background-color: #20222a; |
| | | font-size: 20px; |
| | | } |
| | | &_subtitle { |
| | | display: block; |
| | | text-align: center; |
| | | font-size: 18px; |
| | | font-weight: bold; |
| | | color: #fff; |
| | | } |
| | | overflow: hidden; |
| | | box-sizing: border-box; |
| | | box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.15); |
| | | color: rgba(255, 255, 255, 0.8); |
| | | z-index: 1024; |
| | | |
| | | &_title { |
| | | display: block; |
| | | text-align: center; |
| | | font-weight: 300; |
| | | font-size: 20px; |
| | | } |
| | | |
| | | &_subtitle { |
| | | display: block; |
| | | text-align: center; |
| | | font-size: 18px; |
| | | font-weight: bold; |
| | | color: #fff; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import { getStore } from "@/util/store" |
| | | import { setTheme } from "@/util/util" |
| | | import { resetRouter } from '@/router/router' |
| | | import { mapGetters, mapState } from "vuex" |
| | |
| | | name: "top", |
| | | data () { |
| | | return { |
| | | webType: getStore({ name: "webType" }), |
| | | searchShow: false, |
| | | userBox: false, |
| | | userForm: { |
| | |
| | | }).then(() => { |
| | | this.$store.dispatch("LogOut").then(() => { |
| | | resetRouter() |
| | | this.$router.push({ path: "/login" }) |
| | | |
| | | |
| | | if (this.webType == 'default') { |
| | | this.$router.push({ path: "/login" }) |
| | | } else { |
| | | this.$router.push({ path: "/tenementLogin" }) |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | |
| | | {{ time }} |
| | | </div> |
| | | <!-- <img class="img" src="/img/logo.png" alt=""> --> |
| | | <p class="title">{{ $t('login.info') }}</p> |
| | | <!-- <p class="title">{{ $t('login.info') }}</p> --> |
| | | <p class="title">基层智治综合协同平台</p> |
| | | </div> |
| | | <div class="login-border"> |
| | | <img class="img" src="/img/logo.png" alt=""> |
| | |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import { setStore, getStore } from "@/util/store" |
| | | import Watermark from "@/warterMarkVUE" |
| | | import userLogin from "./userlogin" |
| | | import codeLogin from "./codelogin" |
| | |
| | | } |
| | | }, |
| | | created () { |
| | | document.title = "基层智治综合协同平台" |
| | | setStore({ |
| | | name: "webTitle", |
| | | content: '基层智治综合协同平台', |
| | | }) |
| | | |
| | | setStore({ |
| | | name: "webType", |
| | | content: 'default', |
| | | }) |
| | | |
| | | Watermark.remove() |
| | | |
| | | this.handleLogin() |
| New file |
| | |
| | | <template> |
| | | <div class="login-container" ref="login" @keyup.enter.native="handleLogin"> |
| | | <top-color v-show="false"></top-color> |
| | | |
| | | <div class="login-weaper animated bounceInDown"> |
| | | <div class="login-left"> |
| | | <div class="login-time"> |
| | | {{ time }} |
| | | </div> |
| | | <!-- <img class="img" src="/img/logo.png" alt=""> --> |
| | | <!-- <p class="title">{{ $t('login.info') }}</p> --> |
| | | <p class="title">上饶市智慧物业管理平台</p> |
| | | </div> |
| | | <div class="login-border"> |
| | | <img class="img" src="/img/logo.png" alt=""> |
| | | <div class="login-main"> |
| | | |
| | | <h4 class="login-title"> |
| | | {{ $t('login.title') }} |
| | | <!-- <top-lang></top-lang> --> |
| | | </h4> |
| | | <userLogin v-if="activeName === 'user'"></userLogin> |
| | | <!-- <codeLogin v-else-if="activeName==='code'"></codeLogin> --> |
| | | <!-- <thirdLogin v-else-if="activeName==='third'"></thirdLogin> --> |
| | | <div class="login-menu"> |
| | | <!-- <a href="#" @click.stop="activeName='user'">{{ $t('login.userLogin') }}</a> --> |
| | | <!--<a href="#" @click.stop="activeName='code'">{{ $t('login.phoneLogin') }}</a>--> |
| | | <!-- <a href="#" @click.stop="activeName='third'">{{ $t('login.thirdLogin') }}</a> --> |
| | | <!-- <a :href="website.ssoUrl + website.redirectUri">{{ $t('login.ssoLogin') }}</a> --> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="copyright-box"> |
| | | 版权所有:上饶市住房和城乡建设局 |
| | | <br /> |
| | | 技术支持:上饶国控数字科技有限公司 |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import { setStore, getStore } from "@/util/store" |
| | | import Watermark from "@/warterMarkVUE" |
| | | import userLogin from "./userlogin" |
| | | import codeLogin from "./codelogin" |
| | | import thirdLogin from "./thirdlogin" |
| | | import { mapGetters } from "vuex" |
| | | import { dateFormat } from "@/util/date" |
| | | import { validatenull } from "@/util/validate" |
| | | import topLang from "@/page/index/top/top-lang" |
| | | import topColor from "@/page/index/top/top-color" |
| | | import { getQueryString, getTopUrl } from "@/util/util" |
| | | |
| | | export default { |
| | | name: "login", |
| | | components: { |
| | | userLogin, |
| | | codeLogin, |
| | | thirdLogin, |
| | | topLang, |
| | | topColor |
| | | }, |
| | | data () { |
| | | return { |
| | | time: "", |
| | | activeName: "user", |
| | | socialForm: { |
| | | tenantId: "000000", |
| | | source: "", |
| | | code: "", |
| | | state: "", |
| | | } |
| | | } |
| | | }, |
| | | watch: { |
| | | $route () { |
| | | this.handleLogin() |
| | | } |
| | | }, |
| | | created () { |
| | | document.title = "上饶市智慧物业管理平台" |
| | | setStore({ |
| | | name: "webTitle", |
| | | content: '上饶市智慧物业管理平台', |
| | | }) |
| | | |
| | | setStore({ |
| | | name: "webType", |
| | | content: 'secend', |
| | | }) |
| | | |
| | | Watermark.remove() |
| | | |
| | | this.handleLogin() |
| | | this.getTime() |
| | | }, |
| | | mounted () { |
| | | }, |
| | | computed: { |
| | | ...mapGetters(["website", "tagWel"]) |
| | | }, |
| | | props: [], |
| | | methods: { |
| | | getTime () { |
| | | setInterval(() => { |
| | | this.time = dateFormat(new Date()) |
| | | }, 1000) |
| | | }, |
| | | handleLogin () { |
| | | const topUrl = getTopUrl() |
| | | const redirectUrl = "/oauth/redirect/" |
| | | const ssoCode = "?code=" |
| | | this.socialForm.source = getQueryString("source") |
| | | this.socialForm.code = getQueryString("code") |
| | | this.socialForm.state = getQueryString("state") |
| | | if (validatenull(this.socialForm.source) && topUrl.includes(redirectUrl)) { |
| | | let source = topUrl.split("?")[0] |
| | | source = source.split(redirectUrl)[1] |
| | | this.socialForm.source = source |
| | | } |
| | | if (topUrl.includes(redirectUrl) && !validatenull(this.socialForm.source) && !validatenull(this.socialForm.code) && !validatenull(this.socialForm.state)) { |
| | | const loading = this.$loading({ |
| | | lock: true, |
| | | text: '第三方系统登录中,请稍后。。。', |
| | | spinner: "el-icon-loading" |
| | | }) |
| | | this.$store.dispatch("LoginBySocial", this.socialForm).then(() => { |
| | | window.location.href = topUrl.split(redirectUrl)[0] |
| | | this.$router.push({ path: this.tagWel.value }) |
| | | loading.close() |
| | | }).catch(() => { |
| | | loading.close() |
| | | }) |
| | | } else if (!topUrl.includes(redirectUrl) && !validatenull(this.socialForm.code) && !validatenull(this.socialForm.state)) { |
| | | const loading = this.$loading({ |
| | | lock: true, |
| | | text: '单点系统登录中,请稍后。。。', |
| | | spinner: "el-icon-loading" |
| | | }) |
| | | this.$store.dispatch("LoginBySso", this.socialForm).then(() => { |
| | | window.location.href = topUrl.split(ssoCode)[0] |
| | | this.$router.push({ path: this.tagWel.value }) |
| | | loading.close() |
| | | }).catch(() => { |
| | | loading.close() |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import "@/styles/login.scss"; |
| | | </style> |
| | |
| | | let RouterPlugin = function () { |
| | | this.$router = null; |
| | | this.$store = null; |
| | | |
| | | }; |
| | | |
| | | import { getStore } from "@/util/store"; |
| | | |
| | | RouterPlugin.install = function (vue, option = {}) { |
| | | this.$router = option.router; |
| | | this.$store = option.store; |
| | |
| | | |
| | | // 这个的作用是 为了检查出网页链接,因为本项目用到了 iframe |
| | | function isURL(s) { |
| | | if (s.includes('html')) return true; |
| | | return /^http[s]?:\/\/.*/.test(s) |
| | | if (s.includes("html")) return true; |
| | | return /^http[s]?:\/\/.*/.test(s); |
| | | } |
| | | |
| | | // 将参数处理为参数的形式拼接 |
| | | function objToform(obj) { |
| | | let result = []; |
| | | Object.keys(obj).forEach(ele => { |
| | | Object.keys(obj).forEach((ele) => { |
| | | result.push(`${ele}=${obj[ele]}`); |
| | | }) |
| | | return result.join('&'); |
| | | }); |
| | | return result.join("&"); |
| | | } |
| | | |
| | | this.$router.$avueRouter = { |
| | | //全局配置 |
| | | $website: this.$store.getters.website, |
| | | group: '', |
| | | group: "", |
| | | meta: {}, |
| | | safe: this, |
| | | // 设置标题 |
| | | setTitle: (title) => { |
| | | const defaultTitle = this.$vue.$t('title'); |
| | | title = title ? `${title}-${defaultTitle}` : defaultTitle; |
| | | // const defaultTitle = this.$vue.$t("title"); |
| | | |
| | | title = title |
| | | ? `${title}-${getStore({ name: "webTitle" })}` |
| | | : getStore({ name: "webTitle" }); |
| | | document.title = title; |
| | | }, |
| | | closeTag: (value) => { |
| | | let tag = value || this.$store.getters.tag; |
| | | if (typeof value === 'string') { |
| | | tag = this.$store.getters.tagList.filter(ele => ele.value === value)[0] |
| | | if (typeof value === "string") { |
| | | tag = this.$store.getters.tagList.filter( |
| | | (ele) => ele.value === value |
| | | )[0]; |
| | | } |
| | | this.$store.commit('DEL_TAG', tag) |
| | | this.$store.commit("DEL_TAG", tag); |
| | | }, |
| | | generateTitle: (title, key) => { |
| | | if (!key) return title; |
| | | const hasKey = this.$vue.$te('route.' + key) |
| | | const hasKey = this.$vue.$te("route." + key); |
| | | if (hasKey) { |
| | | // $t :this method from vue-i18n, inject in @/lang/index.js |
| | | const translatedTitle = this.$vue.$t('route.' + key) |
| | | const translatedTitle = this.$vue.$t("route." + key); |
| | | |
| | | return translatedTitle |
| | | return translatedTitle; |
| | | } |
| | | return title |
| | | return title; |
| | | }, |
| | | //处理路由 |
| | | getPath: function (params) { |
| | | let {src} = params; |
| | | let result = src || '/'; |
| | | let { src } = params; |
| | | let result = src || "/"; |
| | | if (isURL(src)) { |
| | | result = `/myiframe/urlPath?${objToform(params)}`; |
| | | } |
| | |
| | | //正则处理路由 |
| | | vaildPath: function (list, path) { |
| | | let result = false; |
| | | list.forEach(ele => { |
| | | list.forEach((ele) => { |
| | | if (new RegExp("^" + ele + ".*", "g").test(path)) { |
| | | result = true |
| | | result = true; |
| | | } |
| | | |
| | | }) |
| | | }); |
| | | return result; |
| | | }, |
| | | //设置路由值 |
| | |
| | | }, |
| | | //动态路由 |
| | | // 路由是专门的一个接口获取 |
| | | /** |
| | | * aMenu: 接受到的动态路由数据 menu的结构外层有父级path 里面有一个childen 记录页面的路由 |
| | | * first: 为了区分外界 调用formatRoutes 和 当前文件调用 formatRoutes |
| | | */ |
| | | /** |
| | | * aMenu: 接受到的动态路由数据 menu的结构外层有父级path 里面有一个childen 记录页面的路由 |
| | | * first: 为了区分外界 调用formatRoutes 和 当前文件调用 formatRoutes |
| | | */ |
| | | formatRoutes: function (aMenu = [], first) { |
| | | // window.console.log('aMenu') |
| | | // window.console.log(aMenu) |
| | | const aRouter = [] |
| | | const aRouter = []; |
| | | // 获取到全局配置中的 props |
| | | const propsConfig = this.$website.menu.props; |
| | | // 设置 props默认值 作用就是将字段设置成配置的 |
| | | const propsDefault = { |
| | | label: propsConfig.label || 'name', |
| | | path: propsConfig.path || 'path', |
| | | icon: propsConfig.icon || 'icon', |
| | | children: propsConfig.children || 'children', |
| | | meta: propsConfig.meta || 'meta', |
| | | } |
| | | label: propsConfig.label || "name", |
| | | path: propsConfig.path || "path", |
| | | icon: propsConfig.icon || "icon", |
| | | children: propsConfig.children || "children", |
| | | meta: propsConfig.meta || "meta", |
| | | }; |
| | | // 如果没有权限菜单就结束 |
| | | if (aMenu.length === 0) return; |
| | | // 开始处理menu |
| | |
| | | let path = (() => { |
| | | if (first) { |
| | | // 将 '/index' 替换为 '' |
| | | return oMenu[propsDefault.path].replace('/index', '') |
| | | return oMenu[propsDefault.path].replace("/index", ""); |
| | | } else { |
| | | return oMenu[propsDefault.path] |
| | | return oMenu[propsDefault.path]; |
| | | } |
| | | })(), |
| | | //特殊处理组件 执行完这个 component 也就是精确到具体的文件了 views文件夹下面就是具体的页面代码 |
| | | component = 'views' + oMenu.path, |
| | | component = "views" + oMenu.path, |
| | | name = oMenu[propsDefault.label], |
| | | icon = oMenu[propsDefault.icon], |
| | | children = oMenu[propsDefault.children], |
| | | meta = oMenu[propsDefault.meta] || {}; |
| | | // meta中 keepalive 的处理 |
| | | meta = Object.assign(meta, (function () { |
| | | if (option.keepAlive === true) { |
| | | return { |
| | | keepAlive: true |
| | | // meta中 keepalive 的处理 |
| | | meta = Object.assign( |
| | | meta, |
| | | (function () { |
| | | if (option.keepAlive === true) { |
| | | return { |
| | | keepAlive: true, |
| | | }; |
| | | } |
| | | } |
| | | })()); |
| | | })() |
| | | ); |
| | | //是否有子路由 |
| | | const isChild = children.length !== 0; |
| | | const oRouter = { |
| | |
| | | component(resolve) { |
| | | // 判断是否为首路由 |
| | | if (first) { |
| | | require(['../page/index'], resolve) |
| | | return |
| | | require(["../page/index"], resolve); |
| | | return; |
| | | // 判断是否为多层路由 |
| | | } else if (isChild && !first) { |
| | | require(['../page/index/layout'], resolve) |
| | | return |
| | | require(["../page/index/layout"], resolve); |
| | | return; |
| | | // 判断是否为最终的页面视图 |
| | | } else { |
| | | require([`../${component}.vue`], resolve) |
| | | require([`../${component}.vue`], resolve); |
| | | } |
| | | }, |
| | | name: name, |
| | |
| | | meta: meta, |
| | | redirect: (() => { |
| | | // 第一次进来但是没有子路由的 需要添加redirect |
| | | if (!isChild && first && !isURL(path)) return `${path}/index` |
| | | else return ''; |
| | | if (!isChild && first && !isURL(path)) return `${path}/index`; |
| | | else return ""; |
| | | })(), |
| | | // 整理子路由的route 配置 |
| | | // 处理是否为一级路由 |
| | | children: !isChild ? (() => { |
| | | if (first) { |
| | | // 这里的isURL判断,因为这个网站有使用 iframe。所以需要判断是否为网页链接 |
| | | if (!isURL(path)) oMenu[propsDefault.path] = `${path}/index`; |
| | | return [{ |
| | | component(resolve) { |
| | | require([`../${component}.vue`], resolve) |
| | | }, |
| | | icon: icon, |
| | | name: name, |
| | | meta: meta, |
| | | path: 'index' |
| | | }] |
| | | } |
| | | return []; |
| | | })() : (() => { |
| | | /** |
| | | * 这里是重点,当有子路由的时候 会再去执行 formatRoutes 方法,然后又会有一个新的 aMenu for循环。 |
| | | * 最后返回的是一个数组 aRouter 这个数组就会作为 childen的值被 return |
| | | */ |
| | | return this.formatRoutes(children, false) |
| | | })() |
| | | } |
| | | aRouter.push(oRouter) |
| | | children: !isChild |
| | | ? (() => { |
| | | if (first) { |
| | | // 这里的isURL判断,因为这个网站有使用 iframe。所以需要判断是否为网页链接 |
| | | if (!isURL(path)) oMenu[propsDefault.path] = `${path}/index`; |
| | | return [ |
| | | { |
| | | component(resolve) { |
| | | require([`../${component}.vue`], resolve); |
| | | }, |
| | | icon: icon, |
| | | name: name, |
| | | meta: meta, |
| | | path: "index", |
| | | }, |
| | | ]; |
| | | } |
| | | return []; |
| | | })() |
| | | : (() => { |
| | | /** |
| | | * 这里是重点,当有子路由的时候 会再去执行 formatRoutes 方法,然后又会有一个新的 aMenu for循环。 |
| | | * 最后返回的是一个数组 aRouter 这个数组就会作为 childen的值被 return |
| | | */ |
| | | return this.formatRoutes(children, false); |
| | | })(), |
| | | }; |
| | | aRouter.push(oRouter); |
| | | } |
| | | // for循环结束 |
| | | // 这个first 卡的其实就是首路由 |
| | | if (first) { |
| | | this.safe.$router.addRoutes(aRouter) |
| | | this.safe.$router.addRoutes(aRouter); |
| | | } else { |
| | | // 这里返回的是子组件 |
| | | return aRouter |
| | | return aRouter; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | }; |
| | | }; |
| | | export default RouterPlugin; |
| | |
| | | import Layout from '@/page/index/' |
| | | /* |
| | | * @Author: shuishen 1109946754@qq.com |
| | | * @Date: 2023-12-14 17:10:00 |
| | | * @LastEditors: shuishen 1109946754@qq.com |
| | | * @LastEditTime: 2024-01-19 11:40:51 |
| | | * @FilePath: \jczz_web\src\router\page\index.js |
| | | * @Description: |
| | | * |
| | | * Copyright (c) 2024 by shuishen, All Rights Reserved. |
| | | */ |
| | | import Layout from "@/page/index/"; |
| | | |
| | | export default [{ |
| | | path: '/login', |
| | | name: '登录页', |
| | | component: () => |
| | | import( /* webpackChunkName: "page" */ '@/page/login/index'), |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false |
| | | } |
| | | }, |
| | | export default [ |
| | | { |
| | | path: '/lock', |
| | | name: '锁屏页', |
| | | path: "/login", |
| | | name: "登录页", |
| | | component: () => |
| | | import( /* webpackChunkName: "page" */ '@/page/lock/index'), |
| | | import(/* webpackChunkName: "page" */ "@/page/login/index"), |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false |
| | | } |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/404', |
| | | path: "/tenementLogin", |
| | | name: "登录页", |
| | | component: () => |
| | | import( /* webpackChunkName: "page" */ '@/components/error-page/404'), |
| | | name: '404', |
| | | import(/* webpackChunkName: "page" */ "@/page/login/tenement.vue"), |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false |
| | | } |
| | | |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/403', |
| | | component: () => |
| | | import( /* webpackChunkName: "page" */ '@/components/error-page/403'), |
| | | name: '403', |
| | | path: "/lock", |
| | | name: "锁屏页", |
| | | component: () => import(/* webpackChunkName: "page" */ "@/page/lock/index"), |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false |
| | | } |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/500', |
| | | path: "/404", |
| | | component: () => |
| | | import( /* webpackChunkName: "page" */ '@/components/error-page/500'), |
| | | name: '500', |
| | | import(/* webpackChunkName: "page" */ "@/components/error-page/404"), |
| | | name: "404", |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false |
| | | } |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/', |
| | | name: '主页', |
| | | redirect: '/wel' |
| | | path: "/403", |
| | | component: () => |
| | | import(/* webpackChunkName: "page" */ "@/components/error-page/403"), |
| | | name: "403", |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/myiframe', |
| | | path: "/500", |
| | | component: () => |
| | | import(/* webpackChunkName: "page" */ "@/components/error-page/500"), |
| | | name: "500", |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: "/", |
| | | name: "主页", |
| | | redirect: "/wel", |
| | | }, |
| | | { |
| | | path: "/myiframe", |
| | | component: Layout, |
| | | redirect: '/myiframe', |
| | | children: [{ |
| | | path: ":routerPath", |
| | | name: 'iframe', |
| | | component: () => |
| | | import( /* webpackChunkName: "page" */ '@/components/iframe/main'), |
| | | props: true |
| | | }] |
| | | |
| | | redirect: "/myiframe", |
| | | children: [ |
| | | { |
| | | path: ":routerPath", |
| | | name: "iframe", |
| | | component: () => |
| | | import(/* webpackChunkName: "page" */ "@/components/iframe/main"), |
| | | props: true, |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | path: '*', |
| | | redirect: '/404' |
| | | } |
| | | ] |
| | | path: "*", |
| | | redirect: "/404", |
| | | }, |
| | | ]; |
| | |
| | | /* |
| | | * @Author: shuishen 1109946754@qq.com |
| | | * @Date: 2023-12-14 17:10:00 |
| | | * @LastEditors: shuishen 1109946754@qq.com |
| | | * @LastEditTime: 2024-01-19 15:58:57 |
| | | * @FilePath: \jczz_web\src\store\getters.js |
| | | * @Description: |
| | | * |
| | | * Copyright (c) 2024 by shuishen, All Rights Reserved. |
| | | */ |
| | | const getters = { |
| | | tag: state => state.tags.tag, |
| | | language: state => state.common.language, |
| | | website: state => state.common.website, |
| | | userInfo: state => state.user.userInfo, |
| | | colorName: state => state.common.colorName, |
| | | themeName: state => state.common.themeName, |
| | | isShade: state => state.common.isShade, |
| | | isCollapse: state => state.common.isCollapse, |
| | | keyCollapse: (state, getters) => getters.screen > 1 ? getters.isCollapse : false, |
| | | screen: state => state.common.screen, |
| | | isLock: state => state.common.isLock, |
| | | isFullScren: state => state.common.isFullScren, |
| | | isMenu: state => state.common.isMenu, |
| | | lockPasswd: state => state.common.lockPasswd, |
| | | tagList: state => state.tags.tagList, |
| | | tagWel: state => state.tags.tagWel, |
| | | token: state => state.user.token, |
| | | roles: state => state.user.roles, |
| | | permission: state => state.user.permission, |
| | | menu: state => state.user.menu, |
| | | menuId: state => state.user.menuId, |
| | | menuAll: state => state.user.menuAll, |
| | | logsList: state => state.logs.logsList, |
| | | logsLen: state => state.logs.logsList.length || 0, |
| | | tag: (state) => state.tags.tag, |
| | | language: (state) => state.common.language, |
| | | website: (state) => state.common.website, |
| | | userInfo: (state) => state.user.userInfo, |
| | | colorName: (state) => state.common.colorName, |
| | | themeName: (state) => state.common.themeName, |
| | | isShade: (state) => state.common.isShade, |
| | | isCollapse: (state) => state.common.isCollapse, |
| | | keyCollapse: (state, getters) => |
| | | getters.screen > 1 ? getters.isCollapse : false, |
| | | screen: (state) => state.common.screen, |
| | | isLock: (state) => state.common.isLock, |
| | | isFullScren: (state) => state.common.isFullScren, |
| | | isMenu: (state) => state.common.isMenu, |
| | | lockPasswd: (state) => state.common.lockPasswd, |
| | | tagList: (state) => state.tags.tagList, |
| | | tagWel: (state) => state.tags.tagWel, |
| | | token: (state) => state.user.token, |
| | | roles: (state) => state.user.roles, |
| | | permission: (state) => state.user.permission, |
| | | menu: (state) => state.user.menu, |
| | | menuId: (state) => state.user.menuId, |
| | | menuAll: (state) => state.user.menuAll, |
| | | logsList: (state) => state.logs.logsList, |
| | | logsLen: (state) => state.logs.logsList.length || 0, |
| | | logsFlag: (state, getters) => getters.logsLen === 0, |
| | | flowRoutes: state => state.dict.flowRoutes, |
| | | } |
| | | export default getters |
| | | flowRoutes: (state) => state.dict.flowRoutes, |
| | | }; |
| | | export default getters; |
| | |
| | | import { |
| | | setStore, |
| | | getStore, |
| | | removeStore |
| | | } from '@/util/store' |
| | | import website from '@/config/website' |
| | | /* |
| | | * @Author: shuishen 1109946754@qq.com |
| | | * @Date: 2023-12-14 17:10:00 |
| | | * @LastEditors: shuishen 1109946754@qq.com |
| | | * @LastEditTime: 2024-01-19 16:43:29 |
| | | * @FilePath: \jczz_web\src\store\modules\common.js |
| | | * @Description: |
| | | * |
| | | * Copyright (c) 2024 by shuishen, All Rights Reserved. |
| | | */ |
| | | import { setStore, getStore, removeStore } from "@/util/store"; |
| | | import website from "@/config/website"; |
| | | |
| | | const common = { |
| | | |
| | | state: { |
| | | language: getStore({name: 'language'}) || 'zh', |
| | | language: getStore({ name: "language" }) || "zh", |
| | | isCollapse: false, |
| | | isFullScren: false, |
| | | isMenu: true, |
| | | isShade: false, |
| | | screen: -1, |
| | | isLock: getStore({name: 'isLock'}) || false, |
| | | isLock: getStore({ name: "isLock" }) || false, |
| | | showTag: true, |
| | | showDebug: true, |
| | | showCollapse: true, |
| | |
| | | showTheme: true, |
| | | showMenu: true, |
| | | showColor: true, |
| | | colorName: getStore({name: 'colorName'}) || '#409EFF', |
| | | themeName: 'theme-white', |
| | | lockPasswd: getStore({name: 'lockPasswd'}) || '', |
| | | colorName: getStore({ name: "colorName" }) || "#409EFF", |
| | | themeName: "theme-white", |
| | | lockPasswd: getStore({ name: "lockPasswd" }) || "", |
| | | website: website, |
| | | }, |
| | | mutations: { |
| | | SET_LANGUAGE: (state, language) => { |
| | | state.language = language |
| | | state.language = language; |
| | | setStore({ |
| | | name: 'language', |
| | | content: state.language |
| | | }) |
| | | name: "language", |
| | | content: state.language, |
| | | }); |
| | | }, |
| | | SET_SHADE: (state, active) => { |
| | | state.isShade = active; |
| | |
| | | SET_LOCK: (state) => { |
| | | state.isLock = true; |
| | | setStore({ |
| | | name: 'isLock', |
| | | name: "isLock", |
| | | content: state.isLock, |
| | | type: 'session' |
| | | }) |
| | | type: "session", |
| | | }); |
| | | }, |
| | | SET_SCREEN: (state, screen) => { |
| | | state.screen = screen; |
| | |
| | | SET_COLOR_NAME: (state, colorName) => { |
| | | state.colorName = colorName; |
| | | setStore({ |
| | | name: 'colorName', |
| | | name: "colorName", |
| | | content: state.colorName, |
| | | }) |
| | | }); |
| | | }, |
| | | SET_THEME_NAME: (state, themeName) => { |
| | | state.themeName = themeName; |
| | | setStore({ |
| | | name: 'themeName', |
| | | name: "themeName", |
| | | content: state.themeName, |
| | | }) |
| | | }); |
| | | }, |
| | | SET_LOCK_PASSWD: (state, lockPasswd) => { |
| | | state.lockPasswd = lockPasswd; |
| | | setStore({ |
| | | name: 'lockPasswd', |
| | | name: "lockPasswd", |
| | | content: state.lockPasswd, |
| | | type: 'session' |
| | | }) |
| | | type: "session", |
| | | }); |
| | | }, |
| | | CLEAR_LOCK: (state) => { |
| | | state.isLock = false; |
| | | state.lockPasswd = ''; |
| | | state.lockPasswd = ""; |
| | | removeStore({ |
| | | name: 'lockPasswd', |
| | | type: 'session' |
| | | name: "lockPasswd", |
| | | type: "session", |
| | | }); |
| | | removeStore({ |
| | | name: 'isLock', |
| | | type: 'session' |
| | | name: "isLock", |
| | | type: "session", |
| | | }); |
| | | }, |
| | | } |
| | | } |
| | | export default common |
| | | }, |
| | | }; |
| | | export default common; |
| | |
| | | background-color: #469BC0; |
| | | // background-image: url("/img/bg/bg.jpg"); |
| | | background-size: 100% 100%; |
| | | |
| | | .copyright-box { |
| | | width: 100%; |
| | | position: absolute; |
| | | bottom: 40px; |
| | | text-align: center; |
| | | color: #fff; |
| | | line-height: 24px; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | |
| | | .login-weaper { |
| | |
| | | <template> |
| | | <basic-container> |
| | | <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" @row-del="rowDel" |
| | | v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave" |
| | | :before-open="beforeOpen" @search-change="searchChange" @search-reset="searchReset" |
| | | @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange" |
| | | @refresh-change="refreshChange" @on-load="onLoad"> |
| | | <template slot="menuLeft"> |
| | | <el-button size="small" icon="el-icon-delete" plain v-if="permission.article_delete" @click="handleDelete">删 |
| | | 除 |
| | | </el-button> |
| | | </template> |
| | | <basic-container> |
| | | <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" @row-del="rowDel" |
| | | v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave" :before-open="beforeOpen" |
| | | @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange" |
| | | @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"> |
| | | <template slot="menuLeft"> |
| | | <el-button size="small" icon="el-icon-delete" plain v-if="permission.article_delete" @click="handleDelete">删 |
| | | 除 |
| | | </el-button> |
| | | </template> |
| | | |
| | | <template slot-scope="{type,size,row }" slot="menu"> |
| | | <el-button icon="el-icon-s-tools" :size="size" :type="type" @click.stop="openDilog(row, 1)"> |
| | | 设置 |
| | | </el-button> |
| | | <template slot-scope="{type,size,row }" slot="menu"> |
| | | <el-button icon="el-icon-s-tools" :size="size" :type="type" @click.stop="openDilog(row, 1)"> |
| | | 设置 |
| | | </el-button> |
| | | |
| | | <el-button icon="el-icon-edit" :size="size" :type="type" @click.stop="openEditPopup(row, 1)"> |
| | | 编辑议题 |
| | | </el-button> |
| | | <el-button icon="el-icon-edit" :size="size" :type="type" @click.stop="openEditPopup(row, 1)"> |
| | | 编辑议题 |
| | | </el-button> |
| | | |
| | | <el-button icon="el-icon-user" :size="size" :type="type" @click.stop="openUserPopup(row, 1)"> |
| | | 参与用户 |
| | | </el-button> |
| | | <el-button icon="el-icon-user" :size="size" :type="type" @click.stop="openUserPopup(row, 1)"> |
| | | 参与用户 |
| | | </el-button> |
| | | |
| | | <el-button v-if="row.publish == '1'" icon="el-icon-close" :size="size" :type="type" |
| | | @click.stop="updateFb(row)"> |
| | | 撤销 |
| | | </el-button> |
| | | <el-button v-if="row.publish == '1'" icon="el-icon-close" :size="size" :type="type" @click.stop="updateFb(row)"> |
| | | 撤销 |
| | | </el-button> |
| | | |
| | | <el-button v-if="row.publish == '0'" icon="el-icon-check" :size="size" :type="type" |
| | | @click.stop="updateFb(row)"> |
| | | 发布 |
| | | </el-button> |
| | | </template> |
| | | <el-button v-if="row.publish == '0'" icon="el-icon-check" :size="size" :type="type" @click.stop="updateFb(row)"> |
| | | 发布 |
| | | </el-button> |
| | | </template> |
| | | |
| | | <template slot-scope="{ row, size }" slot="publish"> |
| | | <el-tag :size="size" :type="showStatus(row.publish, 1).type" v-text="showStatus(row.publish, 1).text"> |
| | | </el-tag> |
| | | </template> |
| | | <template slot-scope="{ row, size }" slot="publish"> |
| | | <el-tag :size="size" :type="showStatus(row.publish, 1).type" v-text="showStatus(row.publish, 1).text"> |
| | | </el-tag> |
| | | </template> |
| | | |
| | | <template slot-scope="{ row, size }" slot="iscomment"> |
| | | <el-tag :size="size" :type="showStatus(row.iscomment, 2).type" v-text="showStatus(row.iscomment, 2).text"> |
| | | </el-tag> |
| | | </template> |
| | | </avue-crud> |
| | | <template slot-scope="{ row, size }" slot="iscomment"> |
| | | <el-tag :size="size" :type="showStatus(row.iscomment, 2).type" v-text="showStatus(row.iscomment, 2).text"> |
| | | </el-tag> |
| | | </template> |
| | | </avue-crud> |
| | | |
| | | <deitDiscussion ref="DeitDiscussion"> |
| | | </deitDiscussion> |
| | | <deitDiscussion ref="DeitDiscussion"> |
| | | </deitDiscussion> |
| | | |
| | | <discussionManageChild ref="discussionManageChild" /> |
| | | <discussionManageChild ref="discussionManageChild" /> |
| | | |
| | | </basic-container> |
| | | </basic-container> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | import { |
| | | getList, |
| | | remove, |
| | | update, |
| | | add, |
| | | getNotice, |
| | | upcomment |
| | | } from "@/api/article/article" |
| | | } from "@/api/article/article" |
| | | |
| | | import { |
| | | import { |
| | | getListPd, |
| | | removePd, |
| | | updatePd, |
| | | addPd, |
| | | getNoticePd, |
| | | upcommentPd |
| | | } from "@/api/discuss/publicDiscuss" |
| | | import website from '@/config/website' |
| | | import { |
| | | } from "@/api/discuss/publicDiscuss" |
| | | import website from '@/config/website' |
| | | import { |
| | | getDistrictTree |
| | | } from "@/api/district/index" |
| | | import { |
| | | } from "@/api/district/index" |
| | | import { |
| | | mapGetters |
| | | } from "vuex" |
| | | import deitDiscussion from "./components/deitDiscussion" |
| | | import discussionManageChild from "./components/discussionManageChild" |
| | | } from "vuex" |
| | | import deitDiscussion from "./components/deitDiscussion" |
| | | import discussionManageChild from "./components/discussionManageChild" |
| | | |
| | | export default { |
| | | export default { |
| | | components: { |
| | | deitDiscussion, |
| | | discussionManageChild, |
| | | deitDiscussion, |
| | | discussionManageChild, |
| | | }, |
| | | |
| | | data () { |
| | | return { |
| | | discussForm: { |
| | | ontitle: '', |
| | | title: '', |
| | | openFlag: 0, |
| | | numberRestrictions: 0, |
| | | voteRestrictions: 0, |
| | | userRestrictions: 0, |
| | | signatureFlag: 0, |
| | | endTime: '', |
| | | articleId: '', |
| | | createTime: '', |
| | | updateTime: '', |
| | | deleteFlag: '', |
| | | repeatVote: 0, |
| | | voteNumberPublic: 0, |
| | | appointUser: 0, |
| | | userIds: '', |
| | | eventType: 1, |
| | | }, |
| | | form: {}, |
| | | query: {}, |
| | | loading: true, |
| | | page: { |
| | | pageSize: 10, |
| | | currentPage: 1, |
| | | total: 0, |
| | | }, |
| | | datetime: "", |
| | | selectionList: [], |
| | | option: { |
| | | labelWidth: 96, |
| | | searchLabelWidth: 96, |
| | | searchShow: true, |
| | | searchMenuSpan: 3, |
| | | menuWidth: 500, |
| | | data() { |
| | | return { |
| | | discussForm: { |
| | | ontitle: '', |
| | | title: '', |
| | | openFlag: 0, |
| | | numberRestrictions: 0, |
| | | voteRestrictions: 0, |
| | | userRestrictions: 0, |
| | | signatureFlag: 0, |
| | | endTime: '', |
| | | articleId: '', |
| | | createTime: '', |
| | | updateTime: '', |
| | | deleteFlag: '', |
| | | repeatVote: 0, |
| | | voteNumberPublic: 0, |
| | | appointUser: 0, |
| | | userIds: '', |
| | | eventType: 1, |
| | | }, |
| | | form: {}, |
| | | query: {}, |
| | | loading: true, |
| | | page: { |
| | | pageSize: 10, |
| | | currentPage: 1, |
| | | total: 0, |
| | | }, |
| | | datetime: "", |
| | | selectionList: [], |
| | | option: { |
| | | labelWidth: 96, |
| | | searchLabelWidth: 96, |
| | | searchShow: true, |
| | | searchMenuSpan: 3, |
| | | menuWidth: 500, |
| | | |
| | | height: "auto", |
| | | calcHeight: 54, |
| | | dialogWidth: 950, |
| | | tip: false, |
| | | border: false, |
| | | //stripe:true, |
| | | index: true, |
| | | viewBtn: false, |
| | | selection: true, |
| | | excelBtn: true, |
| | | dialogClickModal: false, |
| | | column: [ |
| | | { |
| | | overHidden: true, |
| | | label: "议事标题", |
| | | prop: "title", |
| | | span: 24, |
| | | row: true, |
| | | searchSpan: 4, |
| | | search: true, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入议事标题", |
| | | trigger: "blur", |
| | | },], |
| | | }, |
| | | { |
| | | label: "范围", |
| | | prop: "articleList", |
| | | span: 24, |
| | | minRows: 2, |
| | | tags: true, |
| | | type: "tree", |
| | | multiple: true, |
| | | dicData: [], |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择范围", |
| | | trigger: "blur", |
| | | },], |
| | | props: { |
| | | label: "name", |
| | | value: 'id' |
| | | }, |
| | | hide: true, |
| | | }, |
| | | { |
| | | width: 110, |
| | | label: "封面", |
| | | prop: "url", |
| | | // align:'center', |
| | | type: "upload", |
| | | listType: "picture-img", |
| | | action: "/api/blade-resource/oss/endpoint/put-file", |
| | | propsHttp: { |
| | | res: "data", |
| | | url: "link", |
| | | }, |
| | | // hide: true, |
| | | span: 24, |
| | | }, |
| | | { |
| | | width: 110, |
| | | label: "文章类型", |
| | | prop: "articleType", |
| | | addDisplay: true, |
| | | editDisplay: true, |
| | | viewDisplay: true, |
| | | searchSpan: 4, |
| | | checkStrictly: true, |
| | | dicUrl: "/api/blade-system/dict-biz/dictionary?code=investigateType", |
| | | props: { |
| | | label: "dictValue", |
| | | value: "dictKey", |
| | | }, |
| | | search: true, |
| | | type: "tree", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择文章类型", |
| | | trigger: "blur", |
| | | },], |
| | | }, |
| | | { |
| | | label: "发布时间", |
| | | prop: "dateTime", |
| | | type: "daterange", |
| | | format: "yyyy-MM-dd", |
| | | valueFormat: "yyyy-MM-dd", |
| | | searchSpan: 6, |
| | | searchRange: true, |
| | | hide: true, |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | search: true, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择发布时间", |
| | | trigger: "blur", |
| | | },], |
| | | }, |
| | | { |
| | | width: 100, |
| | | label: "发布时间", |
| | | prop: "createTime", |
| | | type: "date", |
| | | format: "yyyy-MM-dd", |
| | | valueFormat: "yyyy-MM-dd HH:mm:ss", |
| | | }, |
| | | { |
| | | width: 100, |
| | | label: "发布状态", |
| | | prop: "publish", |
| | | searchSpan: 4, |
| | | value: "0", |
| | | slot: true, |
| | | search: true, |
| | | type: "select", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择发布状态", |
| | | trigger: "blur", |
| | | },], |
| | | dicData: [{ |
| | | label: "未发布", |
| | | value: "0", |
| | | }, |
| | | { |
| | | label: "已发布", |
| | | value: "1", |
| | | } |
| | | ], |
| | | }, |
| | | { |
| | | span: 24, |
| | | label: "评论区", |
| | | prop: "iscomment", |
| | | width: 80, |
| | | slot: true, |
| | | type: "switch", |
| | | activeColor: "#13ce66", |
| | | inactiveColor: "#ccc", |
| | | value: '1', |
| | | dicData: [{ |
| | | label: "关闭", |
| | | value: "0", |
| | | }, |
| | | { |
| | | label: "开启", |
| | | value: "1", |
| | | } |
| | | ], |
| | | }, |
| | | { |
| | | label: "视频", |
| | | prop: "videoUrl", |
| | | type: "upload", |
| | | accept: "video/mp4", |
| | | display: false, |
| | | hide: true, |
| | | span: 24, |
| | | listType: "picture-img", |
| | | action: "/api/depl/put-depl", |
| | | propsHttp: { |
| | | url: "data", |
| | | }, |
| | | }, |
| | | { |
| | | label: "议事内容", |
| | | prop: "content", |
| | | component: "AvueUeditor", |
| | | options: { |
| | | action: "/api/blade-resource/oss/endpoint/put-file", |
| | | // customConfig: { |
| | | // lineHeights: ['1', '1.15', '1.6', '2', '2.5', '3'] |
| | | // },//wangEditor编辑的配置 |
| | | props: { |
| | | res: "data", |
| | | url: "link", |
| | | }, |
| | | }, |
| | | hide: true, |
| | | minRows: 6, |
| | | span: 24, |
| | | }, |
| | | ], |
| | | height: "auto", |
| | | calcHeight: 54, |
| | | dialogWidth: 950, |
| | | tip: false, |
| | | border: false, |
| | | //stripe:true, |
| | | index: true, |
| | | viewBtn: false, |
| | | selection: true, |
| | | excelBtn: true, |
| | | dialogClickModal: false, |
| | | column: [{ |
| | | overHidden: true, |
| | | label: "议事标题", |
| | | prop: "title", |
| | | span: 24, |
| | | row: true, |
| | | searchSpan: 4, |
| | | search: true, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入议事标题", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, |
| | | data: [], |
| | | optionDiscuss: { |
| | | column: [{ |
| | | label: "", |
| | | type: 'title', |
| | | prop: "title", |
| | | span: 24, |
| | | row: true, |
| | | offset: 2, |
| | | styles: { |
| | | fontSize: '24px' |
| | | } |
| | | }, { |
| | | labelWidth: 100, |
| | | label: '开启投票', |
| | | prop: 'openFlag', |
| | | type: 'radio', |
| | | button: true, |
| | | row: true, |
| | | offset: 6, |
| | | dicData: [{ |
| | | label: '开启', |
| | | value: 0 |
| | | }, { |
| | | label: '不开启', |
| | | value: 1 |
| | | }], |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择开启状态", |
| | | trigger: "blur", |
| | | },], |
| | | }, { |
| | | labelWidth: 100, |
| | | label: '投票限制', |
| | | prop: 'voteRestrictions', |
| | | type: 'radio', |
| | | button: true, |
| | | row: true, |
| | | offset: 6, |
| | | dicData: [{ |
| | | label: '一人一票', |
| | | value: 0 |
| | | }, { |
| | | label: '一户一票', |
| | | value: 1 |
| | | }], |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择投票限制", |
| | | trigger: "blur", |
| | | },], |
| | | }, { |
| | | labelWidth: 100, |
| | | label: '签名', |
| | | prop: 'signatureFlag', |
| | | type: 'radio', |
| | | button: true, |
| | | row: true, |
| | | offset: 6, |
| | | dicData: [{ |
| | | label: '不需要', |
| | | value: 0 |
| | | }, { |
| | | label: '需要', |
| | | value: 1 |
| | | }], |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择是否签名", |
| | | trigger: "blur", |
| | | },], |
| | | }, { |
| | | labelWidth: 100, |
| | | label: '指定用户', |
| | | prop: 'appointUser', |
| | | type: 'radio', |
| | | button: true, |
| | | row: true, |
| | | offset: 6, |
| | | dicData: [{ |
| | | label: '不限制', |
| | | value: 0 |
| | | }, { |
| | | label: '指定用户', |
| | | value: 1 |
| | | }], |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择是否指定用户", |
| | | trigger: "blur", |
| | | },], |
| | | { |
| | | label: "范围", |
| | | prop: "articleList", |
| | | span: 24, |
| | | minRows: 2, |
| | | tags: true, |
| | | type: "cascader", |
| | | multiple: true, |
| | | dicData: [], |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择范围", |
| | | trigger: "blur", |
| | | }, ], |
| | | props: { |
| | | label: "name", |
| | | value: 'id' |
| | | }, |
| | | hide: true, |
| | | }, |
| | | { |
| | | width: 110, |
| | | label: "封面", |
| | | prop: "url", |
| | | // align:'center', |
| | | type: "upload", |
| | | listType: "picture-img", |
| | | action: "/api/blade-resource/oss/endpoint/put-file", |
| | | propsHttp: { |
| | | res: "data", |
| | | url: "link", |
| | | }, |
| | | // hide: true, |
| | | span: 24, |
| | | }, |
| | | { |
| | | width: 110, |
| | | label: "文章类型", |
| | | prop: "articleType", |
| | | addDisplay: true, |
| | | editDisplay: true, |
| | | viewDisplay: true, |
| | | searchSpan: 4, |
| | | checkStrictly: true, |
| | | dicUrl: "/api/blade-system/dict-biz/dictionary?code=investigateType", |
| | | props: { |
| | | label: "dictValue", |
| | | value: "dictKey", |
| | | }, |
| | | search: true, |
| | | type: "tree", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择文章类型", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, |
| | | { |
| | | label: "发布时间", |
| | | prop: "dateTime", |
| | | type: "daterange", |
| | | format: "yyyy-MM-dd", |
| | | valueFormat: "yyyy-MM-dd", |
| | | searchSpan: 6, |
| | | searchRange: true, |
| | | hide: true, |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | search: true, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择发布时间", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, |
| | | { |
| | | width: 100, |
| | | label: "发布时间", |
| | | prop: "createTime", |
| | | type: "date", |
| | | format: "yyyy-MM-dd", |
| | | valueFormat: "yyyy-MM-dd HH:mm:ss", |
| | | }, |
| | | { |
| | | width: 100, |
| | | label: "发布状态", |
| | | prop: "publish", |
| | | searchSpan: 4, |
| | | value: "0", |
| | | slot: true, |
| | | search: true, |
| | | type: "select", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择发布状态", |
| | | trigger: "blur", |
| | | }, ], |
| | | dicData: [{ |
| | | label: "未发布", |
| | | value: "0", |
| | | }, |
| | | { |
| | | label: "截止时间", |
| | | row: true, |
| | | offset: 6, |
| | | prop: "endTime", |
| | | type: "datetime", |
| | | format: "yyyy-MM-dd hh:mm:ss", |
| | | valueFormat: "timestamp", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择截止时间", |
| | | trigger: "blur", |
| | | },], |
| | | }, |
| | | ] |
| | | label: "已发布", |
| | | value: "1", |
| | | } |
| | | ], |
| | | }, |
| | | districtTree: [], |
| | | } |
| | | { |
| | | span: 24, |
| | | label: "评论区", |
| | | prop: "iscomment", |
| | | width: 80, |
| | | slot: true, |
| | | type: "switch", |
| | | activeColor: "#13ce66", |
| | | inactiveColor: "#ccc", |
| | | value: '1', |
| | | dicData: [{ |
| | | label: "关闭", |
| | | value: "0", |
| | | }, |
| | | { |
| | | label: "开启", |
| | | value: "1", |
| | | } |
| | | ], |
| | | }, |
| | | { |
| | | label: "视频", |
| | | prop: "videoUrl", |
| | | type: "upload", |
| | | accept: "video/mp4", |
| | | display: false, |
| | | hide: true, |
| | | span: 24, |
| | | listType: "picture-img", |
| | | action: "/api/depl/put-depl", |
| | | propsHttp: { |
| | | url: "data", |
| | | }, |
| | | }, |
| | | { |
| | | label: "议事内容", |
| | | prop: "content", |
| | | component: "AvueUeditor", |
| | | options: { |
| | | action: "/api/blade-resource/oss/endpoint/put-file", |
| | | // customConfig: { |
| | | // lineHeights: ['1', '1.15', '1.6', '2', '2.5', '3'] |
| | | // },//wangEditor编辑的配置 |
| | | props: { |
| | | res: "data", |
| | | url: "link", |
| | | }, |
| | | }, |
| | | hide: true, |
| | | minRows: 6, |
| | | span: 24, |
| | | }, |
| | | ], |
| | | }, |
| | | data: [], |
| | | optionDiscuss: { |
| | | column: [{ |
| | | label: "", |
| | | type: 'title', |
| | | prop: "title", |
| | | span: 24, |
| | | row: true, |
| | | offset: 2, |
| | | styles: { |
| | | fontSize: '24px' |
| | | } |
| | | }, { |
| | | labelWidth: 100, |
| | | label: '开启投票', |
| | | prop: 'openFlag', |
| | | type: 'radio', |
| | | button: true, |
| | | row: true, |
| | | offset: 6, |
| | | dicData: [{ |
| | | label: '开启', |
| | | value: 0 |
| | | }, { |
| | | label: '不开启', |
| | | value: 1 |
| | | }], |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择开启状态", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, { |
| | | labelWidth: 100, |
| | | label: '投票限制', |
| | | prop: 'voteRestrictions', |
| | | type: 'radio', |
| | | button: true, |
| | | row: true, |
| | | offset: 6, |
| | | dicData: [{ |
| | | label: '一人一票', |
| | | value: 0 |
| | | }, { |
| | | label: '一户一票', |
| | | value: 1 |
| | | }], |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择投票限制", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, { |
| | | labelWidth: 100, |
| | | label: '签名', |
| | | prop: 'signatureFlag', |
| | | type: 'radio', |
| | | button: true, |
| | | row: true, |
| | | offset: 6, |
| | | dicData: [{ |
| | | label: '不需要', |
| | | value: 0 |
| | | }, { |
| | | label: '需要', |
| | | value: 1 |
| | | }], |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择是否签名", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, { |
| | | labelWidth: 100, |
| | | label: '指定用户', |
| | | prop: 'appointUser', |
| | | type: 'radio', |
| | | button: true, |
| | | row: true, |
| | | offset: 6, |
| | | dicData: [{ |
| | | label: '不限制', |
| | | value: 0 |
| | | }, { |
| | | label: '指定用户', |
| | | value: 1 |
| | | }], |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择是否指定用户", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, |
| | | { |
| | | label: "截止时间", |
| | | row: true, |
| | | offset: 6, |
| | | prop: "endTime", |
| | | type: "datetime", |
| | | format: "yyyy-MM-dd hh:mm:ss", |
| | | valueFormat: "timestamp", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择截止时间", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, |
| | | ] |
| | | }, |
| | | districtTree: [], |
| | | } |
| | | }, |
| | | watch: { |
| | | "form.articleType": { |
| | | handler (val) { |
| | | if (val) { |
| | | var videoUrl = this.findObject(this.option.column, "videoUrl") |
| | | var content = this.findObject(this.option.column, "content") |
| | | if (val.indexOf('ksp') != -1) { |
| | | videoUrl.display = true |
| | | content.display = false |
| | | videoUrl.rules = [{ |
| | | required: false, |
| | | message: "请选择视频", |
| | | trigger: "blur", |
| | | },] |
| | | } else { |
| | | videoUrl.display = false |
| | | content.display = true |
| | | videoUrl.rules = "" |
| | | } |
| | | } |
| | | }, |
| | | immediate: true, |
| | | } |
| | | "form.articleType": { |
| | | handler(val) { |
| | | if (val) { |
| | | var videoUrl = this.findObject(this.option.column, "videoUrl") |
| | | var content = this.findObject(this.option.column, "content") |
| | | if (val.indexOf('ksp') != -1) { |
| | | videoUrl.display = true |
| | | content.display = false |
| | | videoUrl.rules = [{ |
| | | required: false, |
| | | message: "请选择视频", |
| | | trigger: "blur", |
| | | }, ] |
| | | } else { |
| | | videoUrl.display = false |
| | | content.display = true |
| | | videoUrl.rules = "" |
| | | } |
| | | } |
| | | }, |
| | | immediate: true, |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapGetters(["permission", "userInfo"]), |
| | | permissionList () { |
| | | return { |
| | | addBtn: this.vaildData(this.permission.article_add, true), |
| | | viewBtn: this.vaildData(this.permission.article_view, true), |
| | | delBtn: this.vaildData(this.permission.article_delete, true), |
| | | editBtn: this.vaildData(this.permission.article_edit, true), |
| | | } |
| | | }, |
| | | |
| | | ids () { |
| | | let ids = [] |
| | | this.selectionList.forEach((ele) => { |
| | | ids.push(ele.id) |
| | | }) |
| | | return ids.join(",") |
| | | }, |
| | | |
| | | showStatus () { |
| | | return (data, type) => { |
| | | if (data == 0) { |
| | | return { |
| | | text: type == 1 ? '未发布' : '关闭', |
| | | type: 'info' |
| | | } |
| | | } else if (data == 1) { |
| | | return { |
| | | text: type == 1 ? '已发布' : '开启', |
| | | type: 'success' |
| | | } |
| | | } |
| | | } |
| | | ...mapGetters(["permission", "userInfo"]), |
| | | permissionList() { |
| | | return { |
| | | addBtn: this.vaildData(this.permission.article_add, true), |
| | | viewBtn: this.vaildData(this.permission.article_view, true), |
| | | delBtn: this.vaildData(this.permission.article_delete, true), |
| | | editBtn: this.vaildData(this.permission.article_edit, true), |
| | | } |
| | | }, |
| | | |
| | | ids() { |
| | | let ids = [] |
| | | this.selectionList.forEach((ele) => { |
| | | ids.push(ele.id) |
| | | }) |
| | | return ids.join(",") |
| | | }, |
| | | |
| | | showStatus() { |
| | | return (data, type) => { |
| | | if (data == 0) { |
| | | return { |
| | | text: type == 1 ? '未发布' : '关闭', |
| | | type: 'info' |
| | | } |
| | | } else if (data == 1) { |
| | | return { |
| | | text: type == 1 ? '已发布' : '开启', |
| | | type: 'success' |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | openEditPopup (row) { |
| | | this.$refs.DeitDiscussion.initData(row) |
| | | }, |
| | | openEditPopup(row) { |
| | | this.$refs.DeitDiscussion.initData(row) |
| | | }, |
| | | |
| | | openUserPopup (row) { |
| | | this.$refs.DeitDiscussion.openUser(row) |
| | | }, |
| | | openUserPopup(row) { |
| | | this.$refs.DeitDiscussion.openUser(row) |
| | | }, |
| | | |
| | | openDilog (row, type) { |
| | | var that = this |
| | | this.$nextTick(() => { |
| | | that.$refs.discussionManageChild.init(row) |
| | | }) |
| | | }, |
| | | openDilog(row, type) { |
| | | var that = this |
| | | this.$nextTick(() => { |
| | | that.$refs.discussionManageChild.init(row) |
| | | }) |
| | | }, |
| | | |
| | | rowSave (row, done, loading) { |
| | | if (row.videoUrl.length == 0) { |
| | | row.videoUrl = "" |
| | | } |
| | | row.userid = this.userInfo.user_id |
| | | row.articleRange = JSON.stringify(row.articleList) |
| | | if (row.url.length > 0) { |
| | | var urls = [] |
| | | var split = row.url.split(",") |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | row.url = urls.join(",") |
| | | } |
| | | // 类型 0:文章 1经营性收支,2:物业招标 3:公益报名 4:选举调查 |
| | | row.type = 4 |
| | | row.publish = 1 |
| | | |
| | | add(row).then( |
| | | () => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | done() |
| | | }, |
| | | (error) => { |
| | | window.console.log(error) |
| | | loading() |
| | | } |
| | | ) |
| | | }, |
| | | rowUpdate (row, index, done, loading) { |
| | | row.articleRange = JSON.stringify(row.articleList) |
| | | if (row.url.length > 0) { |
| | | var urls = [] |
| | | var split = row.url.split(",") |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | row.url = urls.join(",") |
| | | } |
| | | |
| | | update(row).then( |
| | | () => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | done() |
| | | }, |
| | | (error) => { |
| | | window.console.log(error) |
| | | loading() |
| | | } |
| | | ) |
| | | }, |
| | | rowDel (row) { |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | return remove(row.id) |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | }) |
| | | }, |
| | | searchReset () { |
| | | this.query = {} |
| | | this.onLoad(this.page) |
| | | }, |
| | | searchChange (params, done) { |
| | | this.query = params |
| | | this.page.currentPage = 1 |
| | | this.onLoad(this.page, params) |
| | | done() |
| | | }, |
| | | selectionChange (list) { |
| | | this.selectionList = list |
| | | }, |
| | | selectionClear () { |
| | | this.selectionList = [] |
| | | this.$refs.crud.toggleSelection() |
| | | }, |
| | | handleDelete () { |
| | | if (this.selectionList.length === 0) { |
| | | this.$message.warning("请选择至少一条数据") |
| | | return |
| | | } |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | return remove(this.ids) |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | this.$refs.crud.toggleSelection() |
| | | }) |
| | | }, |
| | | beforeOpen (done, type) { |
| | | if (["edit", "view"].includes(type)) { |
| | | getNotice(this.form.id).then((res) => { |
| | | let data = res.data.data |
| | | // data.forEach(item=>{ |
| | | if (data.url.length > 0) { |
| | | var urls = [] |
| | | var names = data.url.split(",") |
| | | names.forEach(name => { |
| | | urls.push(website.minioUrl + name) |
| | | }) |
| | | data.url = urls.join(",") |
| | | } |
| | | // }) |
| | | this.form = { |
| | | ...data, |
| | | articleList: JSON.parse(data.articleRange) |
| | | } |
| | | }) |
| | | } |
| | | // con |
| | | done() |
| | | }, |
| | | currentChange (currentPage) { |
| | | this.page.currentPage = currentPage |
| | | }, |
| | | sizeChange (pageSize) { |
| | | this.page.pageSize = pageSize |
| | | }, |
| | | refreshChange () { |
| | | this.onLoad(this.page, this.query) |
| | | }, |
| | | onLoad (page, params = {}) { |
| | | const { |
| | | dateTime |
| | | } = this.query |
| | | let values = { |
| | | ...params, |
| | | } |
| | | if (dateTime) { |
| | | values = { |
| | | ...params, |
| | | startTime: dateTime[0], |
| | | endTime: dateTime[1], |
| | | ...this.query, |
| | | } |
| | | values.dateTime = null |
| | | } |
| | | values.type = 4 |
| | | this.loading = true |
| | | console.log(values) |
| | | getList(page.currentPage, page.pageSize, values).then((res) => { |
| | | const data = res.data.data |
| | | this.page.total = data.total |
| | | this.data = data.records |
| | | this.data.forEach(item => { |
| | | if (item.url.length > 0) { |
| | | var urls = [] |
| | | var names = item.url.split(",") |
| | | names.forEach(name => { |
| | | urls.push(website.minioUrl + name) |
| | | }) |
| | | item.url = urls.join(",") |
| | | } |
| | | }) |
| | | this.loading = false |
| | | this.selectionClear() |
| | | }) |
| | | getDistrictTree(params = {}).then((res) => { |
| | | const data = res.data.data |
| | | this.districtTree = data |
| | | const column = this.findObject(this.option.column, "articleList") |
| | | column.dicData = res.data.data |
| | | this.loading = false |
| | | }) |
| | | }, |
| | | updateFb (row) { |
| | | if (row.publish == "0") { |
| | | row.publish = "1" |
| | | } else { |
| | | row.publish = "0" |
| | | } |
| | | if (row.url.length > 0) { |
| | | var urls = [] |
| | | var split = row.url.split(",") |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | row.url = urls.join(",") |
| | | } |
| | | update(row).then( |
| | | () => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | done() |
| | | }, |
| | | (error) => { |
| | | window.console.log(error) |
| | | loading() |
| | | } |
| | | ) |
| | | }, |
| | | kqcomment () { |
| | | if (this.selectionList.length === 0) { |
| | | this.$message.warning("请选择至少一条数据") |
| | | return |
| | | } |
| | | this.$confirm("确定将选择数据开启评论?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }).then(() => { |
| | | return upcomment(this.ids, "1") |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | this.$refs.crud.toggleSelection() |
| | | }) |
| | | }, |
| | | gbcomment () { |
| | | if (this.selectionList.length === 0) { |
| | | this.$message.warning("请选择至少一条数据") |
| | | return |
| | | } |
| | | this.$confirm("确定将选择数据开启评论?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }).then(() => { |
| | | return upcomment(this.ids, "0") |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | this.$refs.crud.toggleSelection() |
| | | }) |
| | | rowSave(row, done, loading) { |
| | | if (row.videoUrl.length == 0) { |
| | | row.videoUrl = "" |
| | | } |
| | | row.userid = this.userInfo.user_id |
| | | row.articleRange = JSON.stringify(row.articleList) |
| | | if (row.url.length > 0) { |
| | | var urls = [] |
| | | var split = row.url.split(",") |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | row.url = urls.join(",") |
| | | } |
| | | // 类型 0:文章 1经营性收支,2:物业招标 3:公益报名 4:选举调查 |
| | | row.type = 4 |
| | | row.publish = 1 |
| | | |
| | | add(row).then( |
| | | () => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | done() |
| | | }, |
| | | (error) => { |
| | | window.console.log(error) |
| | | loading() |
| | | } |
| | | ) |
| | | }, |
| | | rowUpdate(row, index, done, loading) { |
| | | row.articleRange = JSON.stringify(row.articleList) |
| | | if (row.url.length > 0) { |
| | | var urls = [] |
| | | var split = row.url.split(",") |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | row.url = urls.join(",") |
| | | } |
| | | |
| | | update(row).then( |
| | | () => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | done() |
| | | }, |
| | | (error) => { |
| | | window.console.log(error) |
| | | loading() |
| | | } |
| | | ) |
| | | }, |
| | | rowDel(row) { |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | return remove(row.id) |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | }) |
| | | }, |
| | | searchReset() { |
| | | this.query = {} |
| | | this.onLoad(this.page) |
| | | }, |
| | | searchChange(params, done) { |
| | | this.query = params |
| | | this.page.currentPage = 1 |
| | | this.onLoad(this.page, params) |
| | | done() |
| | | }, |
| | | selectionChange(list) { |
| | | this.selectionList = list |
| | | }, |
| | | selectionClear() { |
| | | this.selectionList = [] |
| | | this.$refs.crud.toggleSelection() |
| | | }, |
| | | handleDelete() { |
| | | if (this.selectionList.length === 0) { |
| | | this.$message.warning("请选择至少一条数据") |
| | | return |
| | | } |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | return remove(this.ids) |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | this.$refs.crud.toggleSelection() |
| | | }) |
| | | }, |
| | | beforeOpen(done, type) { |
| | | if (["edit", "view"].includes(type)) { |
| | | getNotice(this.form.id).then((res) => { |
| | | let data = res.data.data |
| | | // data.forEach(item=>{ |
| | | if (data.url.length > 0) { |
| | | var urls = [] |
| | | var names = data.url.split(",") |
| | | names.forEach(name => { |
| | | urls.push(website.minioUrl + name) |
| | | }) |
| | | data.url = urls.join(",") |
| | | } |
| | | // }) |
| | | this.form = { |
| | | ...data, |
| | | articleList: JSON.parse(data.articleRange) |
| | | } |
| | | }) |
| | | } |
| | | // con |
| | | done() |
| | | }, |
| | | currentChange(currentPage) { |
| | | this.page.currentPage = currentPage |
| | | }, |
| | | sizeChange(pageSize) { |
| | | this.page.pageSize = pageSize |
| | | }, |
| | | refreshChange() { |
| | | this.onLoad(this.page, this.query) |
| | | }, |
| | | onLoad(page, params = {}) { |
| | | const { |
| | | dateTime |
| | | } = this.query |
| | | let values = { |
| | | ...params, |
| | | } |
| | | if (dateTime) { |
| | | values = { |
| | | ...params, |
| | | startTime: dateTime[0], |
| | | endTime: dateTime[1], |
| | | ...this.query, |
| | | } |
| | | values.dateTime = null |
| | | } |
| | | values.type = 4 |
| | | this.loading = true |
| | | console.log(values) |
| | | getList(page.currentPage, page.pageSize, values).then((res) => { |
| | | const data = res.data.data |
| | | this.page.total = data.total |
| | | this.data = data.records |
| | | this.data.forEach(item => { |
| | | if (item.url.length > 0) { |
| | | var urls = [] |
| | | var names = item.url.split(",") |
| | | names.forEach(name => { |
| | | urls.push(website.minioUrl + name) |
| | | }) |
| | | item.url = urls.join(",") |
| | | } |
| | | }) |
| | | this.loading = false |
| | | this.selectionClear() |
| | | }) |
| | | getDistrictTree(params = {}).then((res) => { |
| | | const data = res.data.data |
| | | this.districtTree = data |
| | | const column = this.findObject(this.option.column, "articleList") |
| | | column.dicData = res.data.data |
| | | this.loading = false |
| | | }) |
| | | }, |
| | | updateFb(row) { |
| | | if (row.publish == "0") { |
| | | row.publish = "1" |
| | | } else { |
| | | row.publish = "0" |
| | | } |
| | | if (row.url.length > 0) { |
| | | var urls = [] |
| | | var split = row.url.split(",") |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | row.url = urls.join(",") |
| | | } |
| | | update(row).then( |
| | | () => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | done() |
| | | }, |
| | | (error) => { |
| | | window.console.log(error) |
| | | loading() |
| | | } |
| | | ) |
| | | }, |
| | | kqcomment() { |
| | | if (this.selectionList.length === 0) { |
| | | this.$message.warning("请选择至少一条数据") |
| | | return |
| | | } |
| | | this.$confirm("确定将选择数据开启评论?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }).then(() => { |
| | | return upcomment(this.ids, "1") |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | this.$refs.crud.toggleSelection() |
| | | }) |
| | | }, |
| | | gbcomment() { |
| | | if (this.selectionList.length === 0) { |
| | | this.$message.warning("请选择至少一条数据") |
| | | return |
| | | } |
| | | this.$confirm("确定将选择数据开启评论?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }).then(() => { |
| | | return upcomment(this.ids, "0") |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | this.$refs.crud.toggleSelection() |
| | | }) |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .avue-upload__icon { |
| | | .avue-upload__icon { |
| | | line-height: 6; |
| | | } |
| | | </style> |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <basic-container> |
| | | <avue-crud :option="option" |
| | | :table-loading="loading" |
| | | :data="data" |
| | | ref="crud" |
| | | v-model="form" |
| | | :permission="permissionList" |
| | | :before-open="beforeOpen" |
| | | @row-del="rowDel" |
| | | @row-update="rowUpdate" |
| | | @row-save="rowSave" |
| | | @search-change="searchChange" |
| | | @search-reset="searchReset" |
| | | @selection-change="selectionChange" |
| | | @current-change="currentChange" |
| | | @size-change="sizeChange" |
| | | @refresh-change="refreshChange" |
| | | @on-load="onLoad"> |
| | | <template slot="menuLeft"> |
| | | <el-button type="danger" |
| | | size="small" |
| | | icon="el-icon-delete" |
| | | v-if="permission.role_delete" |
| | | plain |
| | | @click="handleDelete">删 除 |
| | | </el-button> |
| | | <el-button size="small" |
| | | icon="el-icon-setting" |
| | | @click="handleRole" |
| | | v-if="userInfo.role_name.includes('admin')" |
| | | plain>权限设置 |
| | | </el-button> |
| | | </template> |
| | | </avue-crud> |
| | | <el-dialog title="角色权限配置" |
| | | append-to-body |
| | | :visible.sync="box" |
| | | width="345px"> |
| | | <el-tabs type="border-card"> |
| | | <el-tab-pane label="权限"> |
| | | <el-tree :data="menuGrantList" |
| | | show-checkbox |
| | | node-key="id" |
| | | ref="treeMenu" |
| | | :default-checked-keys="menuTreeObj" |
| | | :props="props"> |
| | | </el-tree> |
| | | </el-tab-pane> |
| | | <!-- <el-tab-pane label="数据权限"> |
| | | <basic-container> |
| | | <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form" |
| | | :permission="permissionList" :before-open="beforeOpen" @row-del="rowDel" @row-update="rowUpdate" |
| | | @row-save="rowSave" @search-change="searchChange" @search-reset="searchReset" |
| | | @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange" |
| | | @refresh-change="refreshChange" @on-load="onLoad"> |
| | | <template slot="menuLeft"> |
| | | <el-button type="danger" size="small" icon="el-icon-delete" v-if="permission.role_delete" plain |
| | | @click="handleDelete">删 除 |
| | | </el-button> |
| | | <el-button size="small" icon="el-icon-setting" @click="handleRole" |
| | | v-if="userInfo.role_name.includes('admin')" plain>权限设置 |
| | | </el-button> |
| | | </template> |
| | | </avue-crud> |
| | | <el-dialog title="角色权限配置" append-to-body :visible.sync="box" width="345px"> |
| | | <el-tabs type="border-card"> |
| | | <el-tab-pane label="权限"> |
| | | <el-tree :data="menuGrantList" show-checkbox node-key="id" ref="treeMenu" |
| | | :default-checked-keys="menuTreeObj" :props="props"> |
| | | </el-tree> |
| | | </el-tab-pane> |
| | | <!-- <el-tab-pane label="数据权限"> |
| | | <el-tree :data="dataScopeGrantList" |
| | | show-checkbox |
| | | node-key="id" |
| | |
| | | :props="props"> |
| | | </el-tree> |
| | | </el-tab-pane> --> |
| | | </el-tabs> |
| | | </el-tabs> |
| | | |
| | | <span slot="footer" |
| | | class="dialog-footer"> |
| | | <el-button @click="box = false">取 消</el-button> |
| | | <el-button type="primary" |
| | | @click="submit">确 定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </basic-container> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="box = false">取 消</el-button> |
| | | <el-button type="primary" @click="submit">确 定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </basic-container> |
| | | </template> |
| | | |
| | | <script> |
| | | import {add, getList, getRoleList, getRole, getRoleTreeById, grant, grantTree, remove, update} from "@/api/system/role"; |
| | | import {mapGetters} from "vuex"; |
| | | import website from '@/config/website'; |
| | | import { add, getList, getRoleList, getRole, getRoleTreeById, grant, grantTree, remove, update } from "@/api/system/role" |
| | | import { mapGetters } from "vuex" |
| | | import website from '@/config/website' |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | form: {}, |
| | | box: false, |
| | | props: { |
| | | label: "title", |
| | | value: "key" |
| | | }, |
| | | menuGrantList: [], |
| | | dataScopeGrantList: [], |
| | | apiScopeGrantList: [], |
| | | apiGrantList: [], |
| | | menuTreeObj: [], |
| | | dataScopeTreeObj: [], |
| | | apiScopeTreeObj: [], |
| | | selectionList: [], |
| | | query: {}, |
| | | loading: true, |
| | | page: { |
| | | pageSize: 10, |
| | | currentPage: 1, |
| | | total: 0 |
| | | }, |
| | | option: { |
| | | tip: false, |
| | | simplePage: true, |
| | | searchShow: true, |
| | | searchMenuSpan: 6, |
| | | tree: true, |
| | | border: true, |
| | | index: true, |
| | | selection: true, |
| | | viewBtn: true, |
| | | dialogWidth: 900, |
| | | dialogClickModal: false, |
| | | column: [ |
| | | { |
| | | label: "角色名称", |
| | | prop: "roleName", |
| | | search: true, |
| | | span: 24, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "请输入角色名称", |
| | | trigger: "blur" |
| | | } |
| | | ] |
| | | export default { |
| | | data () { |
| | | return { |
| | | form: {}, |
| | | box: false, |
| | | props: { |
| | | label: "title", |
| | | value: "key" |
| | | }, |
| | | // { |
| | | // label: "所属租户", |
| | | // prop: "tenantId", |
| | | // type: "tree", |
| | | // dicUrl: "/api/blade-system/tenant/select", |
| | | // addDisplay: false, |
| | | // editDisplay: false, |
| | | // viewDisplay: website.tenantMode, |
| | | // span: 24, |
| | | // props: { |
| | | // label: "tenantName", |
| | | // value: "tenantId" |
| | | // }, |
| | | // hide: !website.tenantMode, |
| | | // search: website.tenantMode, |
| | | // rules: [{ |
| | | // required: true, |
| | | // message: "请输入所属租户", |
| | | // trigger: "click" |
| | | // }] |
| | | // }, |
| | | { |
| | | label: "角色别名", |
| | | prop: "roleAlias", |
| | | search: true, |
| | | span: 24, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "请输入角色别名", |
| | | trigger: "blur" |
| | | } |
| | | ] |
| | | menuGrantList: [], |
| | | dataScopeGrantList: [], |
| | | apiScopeGrantList: [], |
| | | apiGrantList: [], |
| | | menuTreeObj: [], |
| | | dataScopeTreeObj: [], |
| | | apiScopeTreeObj: [], |
| | | selectionList: [], |
| | | query: {}, |
| | | loading: true, |
| | | page: { |
| | | pageSize: 10, |
| | | currentPage: 1, |
| | | total: 0 |
| | | }, |
| | | { |
| | | label: "上级角色", |
| | | prop: "parentId", |
| | | dicData: [], |
| | | type: "tree", |
| | | hide: true, |
| | | span: 24, |
| | | props: { |
| | | label: "title" |
| | | }, |
| | | rules: [ |
| | | { |
| | | required: false, |
| | | message: "请选择上级角色", |
| | | trigger: "click" |
| | | } |
| | | ] |
| | | option: { |
| | | lazy: true, |
| | | tip: false, |
| | | simplePage: true, |
| | | searchShow: true, |
| | | searchMenuSpan: 6, |
| | | tree: true, |
| | | border: true, |
| | | index: true, |
| | | selection: true, |
| | | viewBtn: true, |
| | | dialogWidth: 900, |
| | | dialogClickModal: false, |
| | | column: [ |
| | | { |
| | | label: "角色名称", |
| | | prop: "roleName", |
| | | search: true, |
| | | span: 24, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "请输入角色名称", |
| | | trigger: "blur" |
| | | } |
| | | ] |
| | | }, |
| | | // { |
| | | // label: "所属租户", |
| | | // prop: "tenantId", |
| | | // type: "tree", |
| | | // dicUrl: "/api/blade-system/tenant/select", |
| | | // addDisplay: false, |
| | | // editDisplay: false, |
| | | // viewDisplay: website.tenantMode, |
| | | // span: 24, |
| | | // props: { |
| | | // label: "tenantName", |
| | | // value: "tenantId" |
| | | // }, |
| | | // hide: !website.tenantMode, |
| | | // search: website.tenantMode, |
| | | // rules: [{ |
| | | // required: true, |
| | | // message: "请输入所属租户", |
| | | // trigger: "click" |
| | | // }] |
| | | // }, |
| | | { |
| | | label: "角色别名", |
| | | prop: "roleAlias", |
| | | search: true, |
| | | span: 24, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "请输入角色别名", |
| | | trigger: "blur" |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: "上级角色", |
| | | prop: "parentId", |
| | | type: "tree", |
| | | dicData: [], |
| | | addDisabled: false, |
| | | hide: true, |
| | | span: 24, |
| | | props: { |
| | | label: "title", |
| | | value: 'id' |
| | | }, |
| | | rules: [ |
| | | { |
| | | required: false, |
| | | message: "请选择上级角色", |
| | | trigger: "click" |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: "角色排序", |
| | | prop: "sort", |
| | | type: "number", |
| | | span: 24, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "请输入角色排序", |
| | | trigger: "blur" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: "角色排序", |
| | | prop: "sort", |
| | | type: "number", |
| | | span: 24, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "请输入角色排序", |
| | | trigger: "blur" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | }, |
| | | data: [] |
| | | }; |
| | | data: [] |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapGetters(["userInfo", "permission"]), |
| | | permissionList() { |
| | | return { |
| | | addBtn: this.vaildData(this.permission.role_add, false), |
| | | viewBtn: this.vaildData(this.permission.role_view, false), |
| | | delBtn: this.vaildData(this.permission.role_delete, false), |
| | | editBtn: this.vaildData(this.permission.role_edit, false) |
| | | }; |
| | | }, |
| | | ids() { |
| | | let ids = []; |
| | | this.selectionList.forEach(ele => { |
| | | ids.push(ele.id); |
| | | ...mapGetters(["userInfo", "permission"]), |
| | | permissionList () { |
| | | return { |
| | | addBtn: this.vaildData(this.permission.role_add, false), |
| | | viewBtn: this.vaildData(this.permission.role_view, false), |
| | | delBtn: this.vaildData(this.permission.role_delete, false), |
| | | editBtn: this.vaildData(this.permission.role_edit, false) |
| | | } |
| | | }, |
| | | ids () { |
| | | let ids = [] |
| | | this.selectionList.forEach(ele => { |
| | | ids.push(ele.id) |
| | | |
| | | }); |
| | | return ids.join(","); |
| | | }, |
| | | idsArray() { |
| | | let ids = []; |
| | | this.selectionList.forEach(ele => { |
| | | ids.push(ele.id); |
| | | }); |
| | | return ids; |
| | | } |
| | | }) |
| | | return ids.join(",") |
| | | }, |
| | | idsArray () { |
| | | let ids = [] |
| | | this.selectionList.forEach(ele => { |
| | | ids.push(ele.id) |
| | | }) |
| | | return ids |
| | | } |
| | | }, |
| | | methods: { |
| | | initData(roleId){ |
| | | getRoleTreeById(roleId).then(res => { |
| | | const column = this.findObject(this.option.column, "parentId"); |
| | | column.dicData = res.data.data; |
| | | }); |
| | | }, |
| | | submit() { |
| | | const menuList = this.$refs.treeMenu.getCheckedKeys(); |
| | | const dataScopeList = []; |
| | | const apiScopeList = []; |
| | | grant(this.idsArray, menuList, dataScopeList, apiScopeList).then(() => { |
| | | this.box = false; |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | }); |
| | | this.onLoad(this.page); |
| | | }); |
| | | }, |
| | | rowSave(row, done, loading) { |
| | | add(row).then(() => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | }); |
| | | done(); |
| | | }, error => { |
| | | window.console.log(error); |
| | | loading(); |
| | | }); |
| | | }, |
| | | rowUpdate(row, index, done, loading) { |
| | | update(row).then(() => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | }); |
| | | done(); |
| | | }, error => { |
| | | window.console.log(error); |
| | | loading(); |
| | | }); |
| | | }, |
| | | rowDel(row) { |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | }) |
| | | .then(() => { |
| | | return remove(row.id); |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | }); |
| | | }); |
| | | }, |
| | | initData (roleId) { |
| | | getRoleTreeById(roleId).then(res => { |
| | | const column = this.findObject(this.option.column, "parentId") |
| | | column.dicData = res.data.data |
| | | }) |
| | | }, |
| | | submit () { |
| | | const menuList = this.$refs.treeMenu.getCheckedKeys() |
| | | const dataScopeList = [] |
| | | const apiScopeList = [] |
| | | grant(this.idsArray, menuList, dataScopeList, apiScopeList).then(() => { |
| | | this.box = false |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | }) |
| | | this.onLoad(this.page) |
| | | }) |
| | | }, |
| | | rowSave (row, done, loading) { |
| | | add(row).then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | }) |
| | | done() |
| | | }, error => { |
| | | window.console.log(error) |
| | | loading() |
| | | }) |
| | | }, |
| | | rowUpdate (row, index, done, loading) { |
| | | update(row).then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | }) |
| | | done() |
| | | }, error => { |
| | | window.console.log(error) |
| | | loading() |
| | | }) |
| | | }, |
| | | rowDel (row) { |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | }) |
| | | .then(() => { |
| | | return remove(row.id) |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | }) |
| | | }) |
| | | }, |
| | | |
| | | searchReset() { |
| | | this.query = {}; |
| | | this.onLoad(this.page); |
| | | }, |
| | | searchChange(params, done) { |
| | | this.query = params; |
| | | this.page.currentPage = 1; |
| | | this.onLoad(this.page, params); |
| | | done(); |
| | | }, |
| | | selectionChange(list) { |
| | | this.selectionList = list; |
| | | }, |
| | | selectionClear() { |
| | | this.selectionList = []; |
| | | this.$refs.crud.toggleSelection(); |
| | | }, |
| | | beforeOpen(done, type) { |
| | | if (["add", "edit"].includes(type)) { |
| | | this.initData(this.form.id); |
| | | searchReset () { |
| | | this.query = {} |
| | | this.onLoad(this.page) |
| | | }, |
| | | searchChange (params, done) { |
| | | this.query = params |
| | | this.page.currentPage = 1 |
| | | this.onLoad(this.page, params) |
| | | done() |
| | | }, |
| | | selectionChange (list) { |
| | | this.selectionList = list |
| | | }, |
| | | selectionClear () { |
| | | this.selectionList = [] |
| | | this.$refs.crud.toggleSelection() |
| | | }, |
| | | beforeOpen (done, type) { |
| | | if (["add", "edit"].includes(type)) { |
| | | this.initData(this.form.id) |
| | | } |
| | | done() |
| | | }, |
| | | handleRole () { |
| | | if (this.selectionList.length !== 1) { |
| | | this.$message.warning("只能选择一条数据") |
| | | return |
| | | } |
| | | this.menuTreeObj = [] |
| | | this.dataScopeTreeObj = [] |
| | | this.apiScopeTreeObj = [] |
| | | grantTree() |
| | | .then(res => { |
| | | this.menuGrantList = res.data.data.menu |
| | | // this.dataScopeGrantList = res.data.data.dataScope; |
| | | // this.apiScopeGrantList = res.data.data.apiScope; |
| | | getRole(this.ids).then(res => { |
| | | this.menuTreeObj = res.data.data.menu |
| | | // this.dataScopeTreeObj = res.data.data.dataScope; |
| | | // this.apiScopeTreeObj = res.data.data.apiScope; |
| | | this.box = true |
| | | }) |
| | | }) |
| | | }, |
| | | handleDelete () { |
| | | if (this.selectionList.length === 0) { |
| | | this.$message.warning("请选择至少一条数据") |
| | | return |
| | | } |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | }) |
| | | .then(() => { |
| | | return remove(this.ids) |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | }) |
| | | this.$refs.crud.toggleSelection() |
| | | }) |
| | | }, |
| | | currentChange (currentPage) { |
| | | this.page.currentPage = currentPage |
| | | }, |
| | | sizeChange (pageSize) { |
| | | this.page.pageSize = pageSize |
| | | }, |
| | | refreshChange () { |
| | | this.onLoad(this.page, this.query) |
| | | }, |
| | | onLoad (page, params = {}) { |
| | | this.loading = true |
| | | getRoleList(Object.assign(params, this.query)).then(res => { |
| | | this.data = res.data.data |
| | | this.loading = false |
| | | this.selectionClear() |
| | | }) |
| | | } |
| | | done(); |
| | | }, |
| | | handleRole() { |
| | | if (this.selectionList.length !== 1) { |
| | | this.$message.warning("只能选择一条数据"); |
| | | return; |
| | | } |
| | | this.menuTreeObj = []; |
| | | this.dataScopeTreeObj = []; |
| | | this.apiScopeTreeObj = []; |
| | | grantTree() |
| | | .then(res => { |
| | | this.menuGrantList = res.data.data.menu; |
| | | // this.dataScopeGrantList = res.data.data.dataScope; |
| | | // this.apiScopeGrantList = res.data.data.apiScope; |
| | | getRole(this.ids).then(res => { |
| | | this.menuTreeObj = res.data.data.menu; |
| | | // this.dataScopeTreeObj = res.data.data.dataScope; |
| | | // this.apiScopeTreeObj = res.data.data.apiScope; |
| | | this.box = true; |
| | | }); |
| | | }); |
| | | }, |
| | | handleDelete() { |
| | | if (this.selectionList.length === 0) { |
| | | this.$message.warning("请选择至少一条数据"); |
| | | return; |
| | | } |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | }) |
| | | .then(() => { |
| | | return remove(this.ids); |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | }); |
| | | this.$refs.crud.toggleSelection(); |
| | | }); |
| | | }, |
| | | currentChange(currentPage) { |
| | | this.page.currentPage = currentPage; |
| | | }, |
| | | sizeChange(pageSize) { |
| | | this.page.pageSize = pageSize; |
| | | }, |
| | | refreshChange() { |
| | | this.onLoad(this.page, this.query); |
| | | }, |
| | | onLoad(page, params = {}) { |
| | | this.loading = true; |
| | | getRoleList(Object.assign(params, this.query)).then(res => { |
| | | this.data = res.data.data; |
| | | this.loading = false; |
| | | this.selectionClear(); |
| | | }); |
| | | } |
| | | } |
| | | }; |
| | | } |
| | | </script> |
| New file |
| | |
| | | <!-- |
| | | * @Author: shuishen 1109946754@qq.com |
| | | * @Date: 2023-12-14 17:10:00 |
| | | * @LastEditors: shuishen 1109946754@qq.com |
| | | * @LastEditTime: 2024-01-09 18:59:37 |
| | | * @FilePath: \jczz_web\src\views\task\reportForRepairs.vue |
| | | * @Description: |
| | | * |
| | | * Copyright (c) 2023 by shuishen, All Rights Reserved. |
| | | --> |
| | | <!-- 走访日志 --> |
| | | <template> |
| | | <basic-container> |
| | | <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" @row-del="rowDel" |
| | | v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave" |
| | | :before-open="beforeOpen" @search-change="searchChange" @search-reset="searchReset" |
| | | @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange" |
| | | @refresh-change="refreshChange" @on-load="onLoad"> |
| | | <template slot="confirmFlag" slot-scope="{row, size}"> |
| | | <el-tag :size="size" :type="showConfirmFlag(row.confirmFlag).type"> |
| | | {{ showConfirmFlag(row.confirmFlag).text }} |
| | | </el-tag> |
| | | </template> |
| | | |
| | | <template slot="expand" slot-scope="{row, size}"> |
| | | <el-timeline> |
| | | <el-timeline-item v-for="(item, index) in timeLineData(row)" :key="index" :timestamp="item.createTime" |
| | | :icon="item.icon" :color="item.color" :hide-timestamp="item.contentType == 3" placement="top"> |
| | | <el-card v-show="item.contentType == 1" :body-style="{ padding: '10px', background: '#f8f8f8' }"> |
| | | <div> |
| | | 评价:{{ item.content }} |
| | | </div> |
| | | <el-rate v-model="item.point" disabled :colors="colors"> |
| | | </el-rate> |
| | | </el-card> |
| | | |
| | | <el-card v-show="item.peopleType != 1 && item.contentType == 0" |
| | | :body-style="{ padding: '10px', background: '#f8f8f8' }"> |
| | | <div> |
| | | {{ item.name }} {{ item.mobile }} |
| | | </div> |
| | | <div> |
| | | {{ item.content }} |
| | | </div> |
| | | <div v-show="item.imageList != '' && item.imageList != null"> |
| | | <el-image style="width: 100px; height: 100px" :src="showCurImage(item.imageList)" |
| | | :preview-src-list="showImageListData(item.imageList)"> |
| | | </el-image> |
| | | </div> |
| | | </el-card> |
| | | |
| | | <el-card v-show="item.peopleType == 1 && item.contentType == 0" |
| | | :body-style="{ padding: '10px', background: '#f8f8f8' }"> |
| | | <span style="color: rgb(204, 204, 204);">系统:{{ item.content || '959999' }}</span> |
| | | </el-card> |
| | | |
| | | <span v-show="item.contentType == 3">结束</span> |
| | | </el-timeline-item> |
| | | |
| | | |
| | | <!-- <el-timeline-item timestamp="2018/4/12" placement="top"> |
| | | <el-card> |
| | | <h4>更新 Github 模板</h4> |
| | | <p>王小虎 提交于 2018/4/12 20:46</p> |
| | | </el-card> |
| | | </el-timeline-item> --> |
| | | </el-timeline> |
| | | </template> |
| | | |
| | | <template slot-scope="{row, size, index}" slot="menu"> |
| | | <el-button :size="size" v-if="permission.report_for_repairs_details" type="text" |
| | | icon="el-icon-document-remove" @click="rowExpansion(row)"> |
| | | 详情 |
| | | </el-button> |
| | | |
| | | <el-button :size="size" v-if="permission.report_for_repairs_reply" type="text" |
| | | icon="el-icon-chat-dot-square" :disabled="row.confirmFlag === 3" @click="replyBtnClick(row)"> |
| | | 回复 |
| | | </el-button> |
| | | |
| | | <el-button :size="size" v-if="permission.report_for_repairs_turn_over" type="text" |
| | | icon="el-icon-document-copy" :disabled="row.confirmFlag === 3" @click="turnOverBtnClick(row)"> |
| | | 移交 |
| | | </el-button> |
| | | |
| | | <el-button :size="size" v-if="permission.report_for_repairs_del" type="text" icon="el-icon-delete" |
| | | @click="rowDel(row)"> |
| | | 删除 |
| | | </el-button> |
| | | </template> |
| | | |
| | | <template slot="menuLeft"> |
| | | <el-button size="small" icon="el-icon-delete" plain v-if="permission.article_delete" @click="handleDelete">删 |
| | | 除 |
| | | </el-button> |
| | | </template> |
| | | </avue-crud> |
| | | |
| | | <el-dialog title="回复" append-to-body :visible.sync="replyPopup" center @close="popupClose"> |
| | | <avue-form ref="replyForm" :option="replyOption" v-model="replyForm" @submit="handleSubmit" |
| | | @reset-change="handleReset"> |
| | | <template slot-scope="{row}" slot="videoList"> |
| | | <el-upload class="video-uploader" action="/api/blade-resource/oss/endpoint/put-file" |
| | | :file-list="fileList" :headers="updateHeader" :show-file-list="true" :limit="1" :on-change="getFile" |
| | | :on-exceed="handleExceed" :on-success="uploadVideoProcess" :before-upload="beforeUploadVideo" |
| | | :before-remove="beforeRemove"> |
| | | <el-button size="small" type="primary">点击上传</el-button> |
| | | <div slot="tip" class="el-upload__tip">上传视频只能是 mp4 格式,且大小不能超过 50MB</div> |
| | | </el-upload> |
| | | </template> |
| | | </avue-form> |
| | | </el-dialog> |
| | | |
| | | <el-dialog title="转交" class="turn-over-popup" append-to-body :visible.sync="turnOverPopup" center |
| | | @close="popupClose"> |
| | | <avue-form ref="turnOverForm" :option="turnOverOption" v-model="turnOverForm" @submit="turnOverHandleSubmit" |
| | | @reset-change="turnOverHandleReset"></avue-form> |
| | | </el-dialog> |
| | | </basic-container> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | getList, |
| | | remove, |
| | | update, |
| | | add, |
| | | getReportForRepairs, |
| | | saveReply |
| | | } from "@/api/task/reportForRepairs" |
| | | import { |
| | | mapGetters |
| | | } from "vuex" |
| | | import website from '@/config/website' |
| | | import { |
| | | Base64 |
| | | } from 'js-base64' |
| | | import { |
| | | getToken |
| | | } from '@/util/auth' |
| | | |
| | | export default { |
| | | data () { |
| | | let validatorPhone = function (rule, value, callback) { |
| | | if (value) { |
| | | if (!/^1[3456789]\d{9}$/.test(value)) { |
| | | callback(new Error('手机号格式有误!')) |
| | | } else { |
| | | callback() |
| | | } |
| | | } |
| | | callback() |
| | | } |
| | | |
| | | return { |
| | | colors: ['#99A9BF', '#F7BA2A', '#FF9900'], |
| | | form: {}, |
| | | query: {}, |
| | | loading: true, |
| | | page: { |
| | | pageSize: 10, |
| | | currentPage: 1, |
| | | total: 0, |
| | | }, |
| | | datetime: "", |
| | | selectionList: [], |
| | | option: { |
| | | labelWidth: 96, |
| | | searchLabelWidth: 96, |
| | | searchShow: true, |
| | | searchMenuSpan: 3, |
| | | menuWidth: 280, |
| | | |
| | | viewBtn: false, |
| | | editBtn: false, |
| | | delBtn: false, |
| | | index: false, |
| | | selection: false, |
| | | expand: true, |
| | | height: "auto", |
| | | calcHeight: 54, |
| | | dialogWidth: 950, |
| | | tip: false, |
| | | border: true, |
| | | //stripe:true, |
| | | // excelBtn: true, |
| | | dialogClickModal: false, |
| | | column: [ |
| | | { |
| | | width: 100, |
| | | label: "类型", |
| | | prop: "type", |
| | | span: 12, |
| | | searchLabelWidth: 66, |
| | | searchSpan: 4, |
| | | search: true, |
| | | dataType: "number", |
| | | type: "select", |
| | | dicUrl: "/api/blade-system/dict-biz/dictionary?code=reportForRepairsType", |
| | | props: { |
| | | label: "dictValue", |
| | | value: "dictKey", |
| | | }, |
| | | }, |
| | | { |
| | | width: 110, |
| | | label: "姓名", |
| | | prop: "realName", |
| | | span: 12, |
| | | searchSpan: 4, |
| | | searchLabelWidth: 66, |
| | | search: true, |
| | | }, |
| | | |
| | | { |
| | | width: 120, |
| | | label: "手机号码", |
| | | prop: "phone", |
| | | search: true, |
| | | searchSpan: 4, |
| | | slot: true, |
| | | rules: [{ |
| | | validator: validatorPhone, |
| | | trigger: 'blur' |
| | | }], |
| | | }, |
| | | |
| | | { |
| | | width: 110, |
| | | label: "图片", |
| | | prop: "imageUrls", |
| | | type: "upload", |
| | | listType: "picture-card", |
| | | dataType: "string", |
| | | multiple: true, |
| | | action: "/api/blade-resource/oss/endpoint/put-file", |
| | | propsHttp: { |
| | | res: "data", |
| | | name: 'name', |
| | | url: "link", |
| | | }, |
| | | span: 24, |
| | | }, |
| | | { |
| | | overHidden: true, |
| | | label: "地点", |
| | | prop: "addressName", |
| | | }, |
| | | { |
| | | width: 100, |
| | | label: "状态", |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | slot: true, |
| | | prop: "confirmFlag", |
| | | overHidden: true |
| | | }, |
| | | { |
| | | width: 144, |
| | | label: "上报时间", |
| | | prop: "createTime", |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | type: "date", |
| | | format: "yyyy-MM-dd HH:mm:ss", |
| | | valueFormat: "yyyy-MM-dd HH:mm:ss", |
| | | }, |
| | | { |
| | | width: 144, |
| | | label: "处理时间", |
| | | prop: "confirmTime", |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | type: "date", |
| | | format: "yyyy-MM-dd HH:mm:ss", |
| | | valueFormat: "yyyy-MM-dd HH:mm:ss", |
| | | }, |
| | | { |
| | | label: "描述", |
| | | prop: "remark", |
| | | type: "textarea", |
| | | hide: true, |
| | | span: 24, |
| | | } |
| | | ], |
| | | }, |
| | | data: [], |
| | | |
| | | replyPopup: false, |
| | | replyForm: {}, |
| | | replyOption: { |
| | | submitBtn: true, |
| | | submitText: '确定', |
| | | emptyBtn: true, |
| | | emptyText: '取消', |
| | | |
| | | column: [{ |
| | | span: 24, |
| | | label: "说明", |
| | | prop: "content", |
| | | type: 'textarea', |
| | | minRows: 3, |
| | | maxRows: 5, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入说明", |
| | | trigger: "blur", |
| | | }], |
| | | }, |
| | | |
| | | { |
| | | label: '处理状态', |
| | | prop: 'confirmFlag', |
| | | type: 'select', |
| | | dicData: [{ |
| | | label: '待处理', |
| | | value: 1 |
| | | }, { |
| | | label: '处理中', |
| | | value: 2 |
| | | }, { |
| | | label: '已处理', |
| | | value: 3 |
| | | }], |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择处理状态", |
| | | trigger: "blur", |
| | | }], |
| | | }, |
| | | |
| | | { |
| | | width: 110, |
| | | fileType: 'img', |
| | | label: "图片", |
| | | prop: "imageList", |
| | | type: "upload", |
| | | listType: "picture-card", |
| | | dataType: "string", |
| | | multiple: true, |
| | | action: "/api/blade-resource/oss/endpoint/put-file", |
| | | propsHttp: { |
| | | res: "data", |
| | | name: 'name', |
| | | url: "link", |
| | | }, |
| | | span: 24, |
| | | }, |
| | | |
| | | { |
| | | slot: true, |
| | | label: "视频", |
| | | prop: "videoList", |
| | | span: 24, |
| | | } |
| | | ] |
| | | }, |
| | | |
| | | turnOverPopup: false, |
| | | turnOverForm: {}, |
| | | turnOverOption: { |
| | | submitBtn: true, |
| | | submitText: '确定', |
| | | emptyBtn: true, |
| | | emptyText: '取消', |
| | | |
| | | column: [ |
| | | // { |
| | | // hide: true, |
| | | // span: 14, |
| | | // label: "地址", |
| | | // prop: "addressCode", |
| | | // }, |
| | | |
| | | { |
| | | span: 24, |
| | | label: "人员类型", |
| | | prop: "peopleType", |
| | | type: 'select', |
| | | dicData: [{ |
| | | label: '网格员', |
| | | value: 0 |
| | | }, { |
| | | label: '物业公司人员', |
| | | value: 2 |
| | | }], |
| | | cascader: ["transferUserId"], |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择人员类型", |
| | | trigger: "blur", |
| | | }], |
| | | }, |
| | | |
| | | { |
| | | span: 24, |
| | | label: "指定人员", |
| | | prop: "transferUserId", |
| | | type: 'select', |
| | | dicUrl: `/api/blade-system/user/getUserInfoByCode?houseCode={{addressCode}}&type={{peopleType}}`, |
| | | props: { |
| | | label: "name", |
| | | value: "id", |
| | | }, |
| | | change: ({ |
| | | value, |
| | | column, |
| | | item, |
| | | dic |
| | | }) => { |
| | | this.curPeopleDetails = {} |
| | | |
| | | if (value) { |
| | | this.curPeopleDetails = item |
| | | } |
| | | }, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择指定人员", |
| | | trigger: "blur", |
| | | }], |
| | | }, |
| | | ] |
| | | }, |
| | | |
| | | curRow: {}, |
| | | |
| | | fileList: [], |
| | | updateHeader: { |
| | | Authorization: `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`, |
| | | 'Blade-Auth': getToken() |
| | | }, |
| | | |
| | | curPeopleDetails: {}, |
| | | |
| | | videoFlag: false, |
| | | videoUploadPercent: '' |
| | | } |
| | | }, |
| | | watch: {}, |
| | | computed: { |
| | | ...mapGetters(["permission", "userInfo"]), |
| | | permissionList () { |
| | | return { |
| | | addBtn: this.vaildData(this.permission.reportForRepairs_add, true), |
| | | viewBtn: this.vaildData(this.permission.reportForRepairs_view, true), |
| | | delBtn: this.vaildData(this.permission.reportForRepairs_delete, true), |
| | | editBtn: this.vaildData(this.permission.reportForRepairs_edit, true), |
| | | } |
| | | }, |
| | | |
| | | ids () { |
| | | let ids = [] |
| | | this.selectionList.forEach((ele) => { |
| | | ids.push(ele.id) |
| | | }) |
| | | return ids.join(",") |
| | | }, |
| | | |
| | | timeLineData () { |
| | | return (row) => { |
| | | let imageList = row.imageUrls |
| | | |
| | | if (row.taskRepairAppraiseList.length) { |
| | | return [{ |
| | | createTime: row.createTime, |
| | | mobile: row.phone, |
| | | name: row.realName, |
| | | imageList, |
| | | content: row.remark, |
| | | color: '#1890ff', |
| | | contentType: 0, |
| | | }, |
| | | ...row.taskRepairStepList.map((item, index) => { |
| | | if (index == 0) { |
| | | return { |
| | | ...item, |
| | | contentType: 0, |
| | | } |
| | | } |
| | | return { |
| | | ...item, |
| | | contentType: 0 |
| | | } |
| | | }), |
| | | ...row.taskRepairAppraiseList.map(item => { |
| | | return { |
| | | ...item, |
| | | contentType: 1 |
| | | } |
| | | }), |
| | | { |
| | | contentType: 3, |
| | | createTime: '', |
| | | icon: 'el-icon-check', |
| | | color: '#0bbd87' |
| | | } |
| | | ] |
| | | } else { |
| | | return [{ |
| | | createTime: row.createTime, |
| | | mobile: row.phone, |
| | | name: row.realName, |
| | | imageList, |
| | | content: row.remark, |
| | | color: '#1890ff', |
| | | contentType: 0, |
| | | }, |
| | | ...row.taskRepairStepList.map((item, index) => { |
| | | if (index == 0) { |
| | | return { |
| | | ...item, |
| | | contentType: 0, |
| | | } |
| | | } |
| | | return { |
| | | ...item, |
| | | contentType: 0 |
| | | } |
| | | }) |
| | | ] |
| | | } |
| | | } |
| | | }, |
| | | |
| | | showCurImage () { |
| | | return (data) => { |
| | | if (data != null && data.length > 0) { |
| | | return data.split(',').filter(item => item != '')[0] |
| | | } |
| | | return '' |
| | | } |
| | | }, |
| | | |
| | | showImageListData () { |
| | | return (data) => { |
| | | if (data != null && data.length > 0) { |
| | | return data.split(',').filter(item => item != '') |
| | | } |
| | | return [] |
| | | } |
| | | }, |
| | | |
| | | showConfirmFlag () { |
| | | return (data) => { |
| | | let tags = {} |
| | | |
| | | if (data == 1) { |
| | | tags = { |
| | | type: 'warning', |
| | | text: '待处理' |
| | | } |
| | | } else if (data == 2) { |
| | | tags = { |
| | | type: '', |
| | | text: '处理中' |
| | | } |
| | | } else if (data == 3) { |
| | | tags = { |
| | | type: 'success', |
| | | text: '已处理' |
| | | } |
| | | } else if (data == 4) { |
| | | tags = { |
| | | type: 'success', |
| | | text: '已评价' |
| | | } |
| | | } |
| | | |
| | | return tags |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | rowExpansion (row) { |
| | | this.$refs.crud.toggleRowExpansion(row) |
| | | }, |
| | | |
| | | popupClose () { |
| | | this.$refs.replyForm && this.$refs.replyForm.resetForm() |
| | | this.$refs.turnOverForm && this.$refs.turnOverForm.resetForm() |
| | | }, |
| | | |
| | | saveReply (data, done) { |
| | | saveReply(data).then( |
| | | () => { |
| | | this.replyPopup = false |
| | | this.turnOverPopup = false |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | done() |
| | | }, |
| | | (error) => { |
| | | window.console.log(error) |
| | | } |
| | | ) |
| | | }, |
| | | |
| | | handleSubmit (form, done) { |
| | | |
| | | if (form.imageList.length > 0) { |
| | | var urls = [] |
| | | var split = form.imageList.split(",").filter(item => item != '') |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | form.imageList = urls.join(",") |
| | | } |
| | | // if (form.imageList.length > 0) { |
| | | // var urls = [] |
| | | // var split = form.imageList.split(",").filter(item => item != '') |
| | | // split.forEach(url => { |
| | | // var names = url.split("jczz/") |
| | | // urls.push(names[1]) |
| | | // }) |
| | | // form.imageList = urls.join(",") |
| | | // } |
| | | |
| | | this.saveReply({ |
| | | ...form, |
| | | videoList: this.fileList.map(item => item.response.data.link).join(','), |
| | | repairId: this.curRow.id, |
| | | peopleType: 0, |
| | | mobile: this.userInfo.phone |
| | | }, done) |
| | | }, |
| | | |
| | | handleReset () { |
| | | this.fileList = [] |
| | | this.replyPopup = false |
| | | }, |
| | | |
| | | turnOverHandleSubmit (form, done) { |
| | | let content = '' |
| | | |
| | | if (form.peopleType == 0) { |
| | | content = `事件已移交至 网格员 ${this.curPeopleDetails.name}` |
| | | } else if (form.peopleType == 2) { |
| | | content = `事件已移交至 物业公司人员 ${this.curPeopleDetails.distictName || ''}${this.curPeopleDetails.name}` |
| | | } |
| | | |
| | | this.saveReply({ |
| | | ...form, |
| | | confirmFlag: 1, |
| | | content, |
| | | peopleType: 1, |
| | | repairId: this.curRow.id, |
| | | }, done) |
| | | }, |
| | | |
| | | turnOverHandleReset () { |
| | | this.turnOverPopup = false |
| | | }, |
| | | |
| | | //移除 |
| | | beforeRemove (file, fileList) { |
| | | return this.$confirm(`确定移除 ${file.name}?`).then(() => { |
| | | this.fileList = fileList |
| | | }) |
| | | }, |
| | | |
| | | //上传 |
| | | getFile (file, fileList) { |
| | | this.fileList = fileList |
| | | }, |
| | | |
| | | beforeUploadVideo (file) { |
| | | const isLt50M = file.size / 1024 / 1024 < 50 |
| | | if (['video/mp4'].indexOf(file.type) == -1) { |
| | | this.$message.error('上传视频只能是 mp4 格式!') |
| | | return false |
| | | } |
| | | if (!isLt50M) { |
| | | this.$message.error('上传视频大小不能超过 50MB!') |
| | | return false |
| | | } |
| | | return true |
| | | }, |
| | | |
| | | handleExceed (files, fileList) { |
| | | this.$message.warning("目前只能上传一个视频文件") |
| | | }, |
| | | |
| | | uploadVideoProcess (event, file, fileList) { |
| | | console.log(event, file, fileList, this.fileList) |
| | | }, |
| | | |
| | | replyBtnClick (row) { |
| | | this.curRow = row |
| | | this.replyForm = {} |
| | | this.replyPopup = true |
| | | }, |
| | | |
| | | turnOverBtnClick (row) { |
| | | this.curRow = row |
| | | this.turnOverForm = { |
| | | addressCode: row.addressCode |
| | | } |
| | | this.turnOverPopup = true |
| | | }, |
| | | |
| | | rowSave (row, done, loading) { |
| | | if (row.imageUrls.length > 0) { |
| | | var urls = [] |
| | | var split = row.imageUrls.split(",") |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | row.imageUrls = urls.join(",") |
| | | } |
| | | add(row).then( |
| | | () => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | done() |
| | | }, |
| | | (error) => { |
| | | window.console.log(error) |
| | | loading() |
| | | } |
| | | ) |
| | | }, |
| | | rowUpdate (row, index, done, loading) { |
| | | if (row.imageUrls.length > 0) { |
| | | var urls = [] |
| | | var split = row.imageUrls.split(",") |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | row.imageUrls = urls.join(",") |
| | | } |
| | | update(row).then( |
| | | () => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | done() |
| | | }, |
| | | (error) => { |
| | | window.console.log(error) |
| | | loading() |
| | | } |
| | | ) |
| | | }, |
| | | rowDel (row) { |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | return remove(row.id) |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | }) |
| | | }, |
| | | searchReset () { |
| | | this.query = {} |
| | | this.onLoad(this.page) |
| | | }, |
| | | searchChange (params, done) { |
| | | this.query = params |
| | | this.page.currentPage = 1 |
| | | this.onLoad(this.page, params) |
| | | done() |
| | | }, |
| | | selectionChange (list) { |
| | | this.selectionList = list |
| | | }, |
| | | selectionClear () { |
| | | this.selectionList = [] |
| | | this.$refs.crud.toggleSelection() |
| | | }, |
| | | handleDelete () { |
| | | if (this.selectionList.length === 0) { |
| | | this.$message.warning("请选择至少一条数据") |
| | | return |
| | | } |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | return remove(this.ids) |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | this.$refs.crud.toggleSelection() |
| | | }) |
| | | }, |
| | | beforeOpen (done, type) { |
| | | if (["edit", "view"].includes(type)) { |
| | | getReportForRepairs(this.form.id).then((res) => { |
| | | this.form = res.data.data |
| | | if (this.form.imageUrls) { |
| | | if (this.form.imageUrls.length > 0) { |
| | | var urls = [] |
| | | var names = this.form.imageUrls.split(",") |
| | | names.forEach(name => { |
| | | urls.push(website.minioUrl + name) |
| | | }) |
| | | this.form.imageUrls = urls.join(",") |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | |
| | | done() |
| | | }, |
| | | currentChange (currentPage) { |
| | | this.page.currentPage = currentPage |
| | | }, |
| | | sizeChange (pageSize) { |
| | | this.page.pageSize = pageSize |
| | | }, |
| | | refreshChange () { |
| | | this.onLoad(this.page, this.query) |
| | | }, |
| | | onLoad (page, params = {}) { |
| | | const { |
| | | dateTime |
| | | } = this.query |
| | | let values = { |
| | | ...params, |
| | | } |
| | | if (dateTime) { |
| | | values = { |
| | | ...params, |
| | | startTime: dateTime[0], |
| | | endTime: dateTime[1], |
| | | ...this.query, |
| | | } |
| | | values.dateTime = null |
| | | } |
| | | this.loading = true |
| | | getList(page.currentPage, page.pageSize, values).then((res) => { |
| | | const data = res.data.data |
| | | this.page.total = data.total |
| | | this.data = data.records |
| | | this.data.forEach(item => { |
| | | if (item.imageUrls) { |
| | | if (item.imageUrls.length > 0) { |
| | | var urls = [] |
| | | var names = item.imageUrls.split(",") |
| | | names.forEach(name => { |
| | | urls.push(website.minioUrl + name) |
| | | }) |
| | | item.imageUrls = urls.join(",") |
| | | } |
| | | } |
| | | if (item.taskRepairStepList.length > 0) { |
| | | item.taskRepairStepList.forEach(ee => { |
| | | if (ee.imageList) { |
| | | if (ee.imageList.length > 0) { |
| | | var urls = [] |
| | | var names = ee.imageList.split(",") |
| | | names.forEach(name => { |
| | | urls.push(website.minioUrl + name) |
| | | }) |
| | | ee.imageList = urls.join(",") |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | this.loading = false |
| | | this.selectionClear() |
| | | }) |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .avue-upload__icon { |
| | | line-height: 6; |
| | | } |
| | | </style> |
| | |
| | | { |
| | | overHidden: true, |
| | | label: "所属社区", |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | display: false, |
| | | prop: "communityName", |
| | | search: true, |
| | | searchSpan: 4, |
| | |
| | | label: "name", |
| | | value: "id", |
| | | }, |
| | | cascader: ["gridId"], |
| | | cascader: ["gridCode"], |
| | | rules: [ |
| | | { |
| | | required: true, |
| | |
| | | { |
| | | hide: true, |
| | | label: "所属网格", |
| | | prop: "gridId", |
| | | prop: "gridCode", |
| | | type: "tree", |
| | | cell: true, |
| | | props: { |
| | | label: "gridName", |
| | | value: "id", |
| | | value: "gridCode", |
| | | }, |
| | | dataType: 'string', |
| | | // dataType: 'string', |
| | | dicUrl: |
| | | "/api/blade-grid/grid/getGridList?communityCode={{neiCode}}", |
| | | rules: [ |
| | |
| | | getPlaceExt({ placeId: newData['id'] }), |
| | | ]).then(that.$axios.spread(function (baseInfo, restInfo) { |
| | | that.form = baseInfo.data.data |
| | | console.log(that.form, 90999) |
| | | |
| | | // that.$nextTick(() => that.$refs.baseForm.dicInit('cascader')) |
| | | |
| | | that.form.location = [that.form.lng, that.form.lat, that.form.location].join(',') |
| | | |
| | |
| | | planImageUrls |
| | | } |
| | | } |
| | | |
| | | // that.$nextTick(() => { |
| | | // that.$refs.baseForm.dicInit('select') |
| | | // }) |
| | | })) |
| | | |
| | | that.holdOnLoad(this.holdPage) |
| | | }, |
| | | |
| | | locationDispose (data) { |
| | |
| | | }, |
| | | |
| | | holdOnLoad (holdPage, params = {}) { |
| | | |
| | | if (!this.curRow.id) return |
| | | |
| | | let values = { |
| | |
| | | this.holdPage.pageSize = pageSize |
| | | }, |
| | | |
| | | dataUpdate () { |
| | | const that = this |
| | | |
| | | let imageUrls = this.form.imageUrls |
| | | |
| | | if (imageUrls.length > 0) { |
| | | desposeImage (data) { |
| | | if (data.length > 0) { |
| | | var urls = [] |
| | | var split = imageUrls.split(",").filter(item => item != '') |
| | | var split = data.split(",").filter(item => item != '') |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | imageUrls = urls.join(",") |
| | | data = urls.join(",") |
| | | } |
| | | |
| | | return data |
| | | }, |
| | | |
| | | dataUpdate () { |
| | | const that = this |
| | | |
| | | let imageUrls = this.desposeImage(this.form.imageUrls) |
| | | let placeImages = this.desposeImage(this.placeForm.imageUrls) |
| | | let placePlanImageUrls = this.desposeImage(this.placeForm.planImageUrls) |
| | | |
| | | |
| | | let label = this.form.label |
| | | |
| | |
| | | label, |
| | | ...this.locationDispose(this.form.location) |
| | | }), |
| | | updatePlaceExt(this.placeForm) |
| | | updatePlaceExt({ |
| | | ...this.placeForm, |
| | | imageUrls: placeImages, |
| | | planImageUrls: placePlanImageUrls |
| | | }) |
| | | ]).then(that.$axios.spread(function () { |
| | | that.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | |
| | | that.closeRowDetails() |
| | | that.roleBoxClose() |
| | | |
| | | that.placeElement.onLoad(that.placeElement.page, that.placeElement.query) |
| | | |
| | |
| | | label: "name", |
| | | value: "id", |
| | | }, |
| | | cascader: ["gridId"], |
| | | cascader: ["gridCode"], |
| | | rules: [ |
| | | { |
| | | required: true, |
| | |
| | | { |
| | | hide: true, |
| | | label: "所属网格", |
| | | prop: "gridId", |
| | | prop: "gridCode", |
| | | type: "tree", |
| | | cell: true, |
| | | props: { |
| | | label: "gridName", |
| | | value: "id", |
| | | value: "gridCode", |
| | | }, |
| | | dicUrl: |
| | | "/api/blade-grid/grid/getGridList?communityCode={{neiCode}}", |
| | |
| | | <el-tab-pane label="经营信息" name="info2"></el-tab-pane> |
| | | <el-tab-pane label="纳税信息" name="info3"></el-tab-pane> |
| | | <el-tab-pane label="党建信息" name="info4"></el-tab-pane> |
| | | <el-tab-pane label="街道社区" name="info8"></el-tab-pane> |
| | | <el-tab-pane label="企业良好行为" name="info5"></el-tab-pane> |
| | | <el-tab-pane label="项目良好行为" name="info6"></el-tab-pane> |
| | | <el-tab-pane label="违法违规行为惩戒" name="info7"></el-tab-pane> |
| | |
| | | |
| | | <div v-if="item.choicesType == 0"> |
| | | <div v-for="(item1, index1) in item.subjectOptionList" :key="index1"> |
| | | <el-radio v-model="item1.ids" :label="item1.id">{{item1.optionName}}-----------{{item1.score}}</el-radio> |
| | | <el-radio v-model="item1.ids" :label="item1.id">{{item1.optionName}}</el-radio> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- </el-radio-group> --> |
| | | |
| | | <div v-if="item.choicesType == 3"> |
| | | <!-- <div>{{item1.optionName}}</div> --> |
| | | <div v-for="(item1, index1) in item.subjectOptionList" :key="index1"> |
| | | |
| | | <div v-for="(item1, index1) in item.subjectOptionList" :key="index1" style="display: flex;"> |
| | | <div>{{item1.optionName}}:</div> |
| | | <el-input-number v-model="item1.numbers" @change="handleChange" :min="0" :max="25" |
| | | :label="item1.optionName"></el-input-number> |
| | | </div> |
| | |
| | | </script> |
| | | |
| | | <style> |
| | | </style> |
| | | </style> |
| | |
| | | <!-- 物业公司管理 --> |
| | | <template> |
| | | <basic-container> |
| | | <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" @row-del="rowDel" |
| | | v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave" |
| | | :before-open="beforeOpen" @search-change="searchChange" @search-reset="searchReset" |
| | | @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange" |
| | | @refresh-change="refreshChange" @on-load="onLoad"> |
| | | <basic-container> |
| | | <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" @row-del="rowDel" |
| | | v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave" :before-open="beforeOpen" |
| | | @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange" |
| | | @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"> |
| | | |
| | | <template slot-scope="{ row, size, index }" slot="menu"> |
| | | <el-button :size="size" type="text" v-if="row.applyStatus === 4" @click="handleWork(row)">调整申请 |
| | | </el-button> |
| | | <el-button :size="size" type="text" @click="goDetail(row)">查看申请 |
| | | </el-button> |
| | | <!-- <el-button :size="size" type="text" @click="goDetail(row)">删 除 |
| | | <template slot-scope="{ row, size, index }" slot="menu"> |
| | | <el-button :size="size" type="text" v-if="row.applyStatus === 4" @click="handleWork(row)">调整申请 |
| | | </el-button> |
| | | <el-button :size="size" type="text" @click="goDetail(row)">查看申请 |
| | | </el-button> |
| | | <!-- <el-button :size="size" type="text" @click="goDetail(row)">删 除 |
| | | </el-button> --> |
| | | </template> |
| | | <!-- <template slot="menuLeft"> |
| | | </template> |
| | | <!-- <template slot="menuLeft"> |
| | | <el-button size="small" icon="el-icon-delete" plain v-if="permission.propertyCapitalApply_delete" |
| | | @click="handleDelete">删 除 |
| | | </el-button> |
| | | </template> --> |
| | | <!-- <template slot="constructionSchemeUrlsType" slot-scope="{file}"> |
| | | <!-- <template slot="constructionSchemeUrlsType" slot-scope="{file}"> |
| | | <span>{{ file }}</span> |
| | | </template> --> |
| | | </avue-crud> |
| | | </basic-container> |
| | | </avue-crud> |
| | | </basic-container> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | import { |
| | | getList, |
| | | remove, |
| | | update, |
| | | add, |
| | | getPropertyCapitalApply |
| | | } from "@/api/property/propertyCapitalApply" |
| | | import { |
| | | } from "@/api/property/propertyCapitalApply" |
| | | import { |
| | | mapGetters |
| | | } from "vuex" |
| | | import website from '@/config/website' |
| | | import func from "@/util/func" |
| | | export default { |
| | | data () { |
| | | return { |
| | | form: { |
| | | // constructionSchemeUrls:[] |
| | | }, |
| | | query: {}, |
| | | loading: true, |
| | | page: { |
| | | pageSize: 10, |
| | | currentPage: 1, |
| | | total: 0, |
| | | }, |
| | | datetime: "", |
| | | selectionList: [], |
| | | option: { |
| | | labelWidth: 154, |
| | | searchLabelWidth: 96, |
| | | searchShow: true, |
| | | searchMenuSpan: 3, |
| | | menuWidth: 210, |
| | | } from "vuex" |
| | | import website from '@/config/website' |
| | | import func from "@/util/func" |
| | | export default { |
| | | data() { |
| | | return { |
| | | form: { |
| | | // constructionSchemeUrls:[] |
| | | }, |
| | | query: {}, |
| | | loading: true, |
| | | page: { |
| | | pageSize: 10, |
| | | currentPage: 1, |
| | | total: 0, |
| | | }, |
| | | datetime: "", |
| | | selectionList: [], |
| | | option: { |
| | | labelWidth: 154, |
| | | searchLabelWidth: 96, |
| | | searchShow: true, |
| | | searchMenuSpan: 3, |
| | | menuWidth: 210, |
| | | |
| | | height: "auto", |
| | | calcHeight: 54, |
| | | dialogWidth: 1150, |
| | | tip: false, |
| | | border: true, |
| | | //stripe:true, |
| | | index: true, |
| | | editBtn: false, |
| | | viewBtn: false, |
| | | delBtn: false, |
| | | selection: true, |
| | | dialogClickModal: false, |
| | | column: [{ |
| | | width: 220, |
| | | overHidden: true, |
| | | label: '小区名称', |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | prop: "districtName", |
| | | search: true, |
| | | searchSpan: 4, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入小区名称", |
| | | trigger: "blur", |
| | | }], |
| | | }, |
| | | |
| | | { |
| | | hide: true, |
| | | parent: false, |
| | | label: "小区", |
| | | prop: "districtId", |
| | | search: false, |
| | | type: 'tree', |
| | | dicUrl: `/api/blade-district/district/getDistrictTree`, |
| | | props: { |
| | | label: "name", |
| | | value: "id" |
| | | }, |
| | | defaultExpandedKeys: ["361102003"], |
| | | span: 12, |
| | | width: 260, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择小区", |
| | | trigger: "blur", |
| | | },], |
| | | }, |
| | | |
| | | { |
| | | label: '维修项目名称', |
| | | prop: 'name', |
| | | searchSpan: 5, |
| | | searchLabelWidth: 124, |
| | | search: true, |
| | | span: 12, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入维修项目名称", |
| | | trigger: "blur", |
| | | },], |
| | | }, |
| | | { |
| | | width: 100, |
| | | label: "预计开工时间", |
| | | prop: "runTime", |
| | | span: 12, |
| | | type: "date", |
| | | format: "yyyy-MM-dd", |
| | | valueFormat: "yyyy-MM-dd", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择合同开始时间", |
| | | trigger: "blur", |
| | | },], |
| | | }, |
| | | { |
| | | width: 100, |
| | | label: "预计竣工时间", |
| | | prop: "completedTime", |
| | | span: 12, |
| | | type: "date", |
| | | format: "yyyy-MM-dd", |
| | | valueFormat: "yyyy-MM-dd", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择合同结束时间", |
| | | trigger: "blur", |
| | | },], |
| | | }, |
| | | { |
| | | label: "项目分摊方式", |
| | | prop: "allocationWay", |
| | | value: '按建筑面积分摊', |
| | | span: 14, |
| | | row: true, |
| | | }, |
| | | { |
| | | width: 110, |
| | | label: '联系人', |
| | | prop: 'linkman', |
| | | span: 12, |
| | | searchSpan: 4, |
| | | searchLabelWidth: 80, |
| | | search: true, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入联系人", |
| | | trigger: "blur", |
| | | },], |
| | | }, |
| | | { |
| | | width: 120, |
| | | label: '联系方式', |
| | | prop: 'linkPhone', |
| | | span: 12, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入联系方式", |
| | | trigger: "blur", |
| | | },], |
| | | }, |
| | | { |
| | | width: 100, |
| | | label: '申请时间', |
| | | prop: 'applyTime', |
| | | span: 12, |
| | | display: false, |
| | | }, { |
| | | label: '审核进度', |
| | | prop: 'applyStatus', |
| | | span: 12, |
| | | display: false, |
| | | dicData: [{ |
| | | label: "待审核", |
| | | value: 0, |
| | | }, { |
| | | label: "业委会", |
| | | value: 1, |
| | | }, { |
| | | label: "街道", |
| | | value: 2, |
| | | }, { |
| | | label: "住建局", |
| | | value: 3, |
| | | }, { |
| | | label: "调整申请", |
| | | value: 4, |
| | | }, { |
| | | label: "审核通过", |
| | | value: 5, |
| | | }, { |
| | | label: "审核不通过", |
| | | value: 6, |
| | | }] |
| | | }, |
| | | { |
| | | label: "项目预算总金额(元)", |
| | | prop: "budgetAmount", |
| | | span: 12, |
| | | hide: true, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00' |
| | | }, |
| | | { |
| | | label: "实际预算金额(元)", |
| | | prop: "actualAmount", |
| | | span: 12, |
| | | hide: true, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00' |
| | | }, |
| | | { |
| | | label: "自筹金额(元)", |
| | | prop: "selfAmount", |
| | | span: 12, |
| | | hide: true, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00' |
| | | }, |
| | | { |
| | | label: "预算应拨付金额(元)", |
| | | prop: "budgetAppropriateAmount", |
| | | span: 12, |
| | | hide: true, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00' |
| | | }, |
| | | { |
| | | label: "项目摘要", |
| | | span: 24, |
| | | hide: true, |
| | | prop: "projectDigest", |
| | | placeholder: "例如:“XX小区XX栋XX设施设备维修,总的预算金额是X,是否含有审价,本次维修涉及范围共XX户,总面积的建筑面积为XX平方米”", |
| | | type: "textarea" |
| | | }, |
| | | { |
| | | label: "项目进度描述", |
| | | span: 24, |
| | | hide: true, |
| | | prop: "projectDescribe", |
| | | type: "textarea" |
| | | }, |
| | | { |
| | | label: '施工方案附件', |
| | | prop: 'constructionSchemeUrls', |
| | | type: 'upload', |
| | | span: 24, |
| | | hide: true, |
| | | multiple: true, |
| | | // showFileList: true, |
| | | propsHttp: { |
| | | res: 'data', |
| | | name: "originalName", |
| | | url: "link" |
| | | }, |
| | | action: '/api/blade-resource/oss/endpoint/put-file-attach', |
| | | rules: [{ |
| | | required: true, |
| | | message: "请上传施工方案", |
| | | trigger: "blur", |
| | | },], |
| | | } |
| | | ], |
| | | height: "auto", |
| | | calcHeight: 54, |
| | | dialogWidth: 1150, |
| | | tip: false, |
| | | border: true, |
| | | //stripe:true, |
| | | index: true, |
| | | editBtn: false, |
| | | viewBtn: false, |
| | | delBtn: false, |
| | | selection: true, |
| | | dialogClickModal: false, |
| | | column: [{ |
| | | width: 220, |
| | | overHidden: true, |
| | | label: '小区名称', |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | prop: "districtName", |
| | | search: true, |
| | | searchSpan: 4, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入小区名称", |
| | | trigger: "blur", |
| | | }], |
| | | }, |
| | | data: [], |
| | | } |
| | | |
| | | { |
| | | hide: true, |
| | | parent: false, |
| | | label: "小区", |
| | | prop: "districtId", |
| | | search: false, |
| | | type: 'tree', |
| | | dicUrl: `/api/blade-district/district/getDistrictTree`, |
| | | props: { |
| | | label: "name", |
| | | value: "id" |
| | | }, |
| | | defaultExpandedKeys: ["361102003"], |
| | | span: 12, |
| | | width: 260, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择小区", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, |
| | | |
| | | { |
| | | label: '维修项目名称', |
| | | prop: 'name', |
| | | searchSpan: 5, |
| | | searchLabelWidth: 124, |
| | | search: true, |
| | | span: 12, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入维修项目名称", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, |
| | | { |
| | | width: 100, |
| | | label: "预计开工时间", |
| | | prop: "runTime", |
| | | span: 12, |
| | | type: "date", |
| | | format: "yyyy-MM-dd", |
| | | valueFormat: "yyyy-MM-dd", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择合同开始时间", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, |
| | | { |
| | | width: 100, |
| | | label: "预计竣工时间", |
| | | prop: "completedTime", |
| | | span: 12, |
| | | type: "date", |
| | | format: "yyyy-MM-dd", |
| | | valueFormat: "yyyy-MM-dd", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择合同结束时间", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, |
| | | { |
| | | label: "项目分摊方式", |
| | | prop: "allocationWay", |
| | | value: '按建筑面积分摊', |
| | | span: 12, |
| | | row: true, |
| | | }, |
| | | { |
| | | width: 110, |
| | | label: '联系人', |
| | | prop: 'linkman', |
| | | span: 12, |
| | | searchSpan: 4, |
| | | searchLabelWidth: 80, |
| | | search: true, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入联系人", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, |
| | | { |
| | | width: 120, |
| | | label: '联系方式', |
| | | prop: 'linkPhone', |
| | | span: 12, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入联系方式", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, |
| | | { |
| | | width: 100, |
| | | label: '申请时间', |
| | | prop: 'applyTime', |
| | | span: 12, |
| | | display: false, |
| | | }, { |
| | | label: '审核进度', |
| | | prop: 'applyStatus', |
| | | span: 12, |
| | | display: false, |
| | | dicData: [{ |
| | | label: "待审核", |
| | | value: 0, |
| | | }, { |
| | | label: "业委会", |
| | | value: 1, |
| | | }, { |
| | | label: "街道", |
| | | value: 2, |
| | | }, { |
| | | label: "住建局", |
| | | value: 3, |
| | | }, { |
| | | label: "调整申请", |
| | | value: 4, |
| | | }, { |
| | | label: "审核通过", |
| | | value: 5, |
| | | }, { |
| | | label: "审核不通过", |
| | | value: 6, |
| | | }] |
| | | }, |
| | | { |
| | | label: "项目预算总金额(元)", |
| | | prop: "budgetAmount", |
| | | span: 12, |
| | | hide: true, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00' |
| | | }, |
| | | { |
| | | label: "实际预算金额(元)", |
| | | prop: "actualAmount", |
| | | span: 12, |
| | | hide: true, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00' |
| | | }, |
| | | { |
| | | label: "自筹金额(元)", |
| | | prop: "selfAmount", |
| | | span: 12, |
| | | hide: true, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00' |
| | | }, |
| | | { |
| | | label: "预算应拨付金额(元)", |
| | | prop: "budgetAppropriateAmount", |
| | | span: 12, |
| | | hide: true, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00' |
| | | }, |
| | | { |
| | | label: "项目摘要", |
| | | span: 24, |
| | | hide: true, |
| | | prop: "projectDigest", |
| | | placeholder: "例如:“XX小区XX栋XX设施设备维修,总的预算金额是X,是否含有审价,本次维修涉及范围共XX户,总面积的建筑面积为XX平方米”", |
| | | type: "textarea" |
| | | }, |
| | | { |
| | | label: "项目进度描述", |
| | | span: 24, |
| | | hide: true, |
| | | prop: "projectDescribe", |
| | | type: "textarea" |
| | | }, |
| | | { |
| | | label: '施工方案附件', |
| | | prop: 'constructionSchemeUrls', |
| | | type: 'upload', |
| | | span: 24, |
| | | hide: true, |
| | | multiple: true, |
| | | // showFileList: true, |
| | | propsHttp: { |
| | | res: 'data', |
| | | name: "originalName", |
| | | url: "link" |
| | | }, |
| | | action: '/api/blade-resource/oss/endpoint/put-file-attach', |
| | | rules: [{ |
| | | required: true, |
| | | message: "请上传施工方案", |
| | | trigger: "blur", |
| | | }, ], |
| | | } |
| | | ], |
| | | }, |
| | | data: [], |
| | | } |
| | | }, |
| | | watch: {}, |
| | | computed: { |
| | | ...mapGetters(["permission", "userInfo"]), |
| | | permissionList () { |
| | | return { |
| | | addBtn: this.vaildData(this.permission.propertyCapitalApply_add, true), |
| | | viewBtn: this.vaildData(this.permission.propertyCapitalApply_view, true), |
| | | delBtn: this.vaildData(this.permission.propertyCapitalApply_delete, true), |
| | | editBtn: this.vaildData(this.permission.propertyCapitalApply_edit, true), |
| | | } |
| | | }, |
| | | ids () { |
| | | let ids = [] |
| | | this.selectionList.forEach((ele) => { |
| | | ids.push(ele.id) |
| | | }) |
| | | return ids.join(",") |
| | | }, |
| | | ...mapGetters(["permission", "userInfo"]), |
| | | permissionList() { |
| | | return { |
| | | addBtn: this.vaildData(this.permission.propertyCapitalApply_add, true), |
| | | viewBtn: this.vaildData(this.permission.propertyCapitalApply_view, true), |
| | | delBtn: this.vaildData(this.permission.propertyCapitalApply_delete, true), |
| | | editBtn: this.vaildData(this.permission.propertyCapitalApply_edit, true), |
| | | } |
| | | }, |
| | | ids() { |
| | | let ids = [] |
| | | this.selectionList.forEach((ele) => { |
| | | ids.push(ele.id) |
| | | }) |
| | | return ids.join(",") |
| | | }, |
| | | }, |
| | | methods: { |
| | | handleWork (row) { |
| | | this.$router.push({ |
| | | path: `/work/process/maintenanceFundApply/edit/${row.taskId}/${row.processInstanceId}/${row.id}` |
| | | }) |
| | | }, |
| | | goDetail (row) { |
| | | this.$router.push({ |
| | | path: `/work/process/maintenanceFundApply/detail/${row.processInstanceId}/${row.id}` |
| | | }) |
| | | }, |
| | | rowSave (row, done, loading) { |
| | | row.constructionSchemeUrls = func.join(row.constructionSchemeUrls) |
| | | if (row.constructionSchemeUrls.length > 0) { |
| | | var urls = [] |
| | | var split = row.constructionSchemeUrls.split(",") |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | row.constructionSchemeUrls = urls.join(",") |
| | | } |
| | | row.propertyFlag = 1 |
| | | add(row).then( |
| | | () => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | done() |
| | | }, |
| | | (error) => { |
| | | window.console.log(error) |
| | | loading() |
| | | } |
| | | ) |
| | | }, |
| | | rowUpdate (row, index, done, loading) { |
| | | if (row.constructionSchemeUrls.length > 0) { |
| | | var urls = [] |
| | | var split = row.constructionSchemeUrls.split(",") |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | row.constructionSchemeUrls = urls.join(",") |
| | | } |
| | | update(row).then( |
| | | () => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | done() |
| | | }, |
| | | (error) => { |
| | | window.console.log(error) |
| | | loading() |
| | | } |
| | | ) |
| | | }, |
| | | rowDel (row) { |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | return remove(row.id) |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | }) |
| | | }, |
| | | searchReset () { |
| | | this.query = {} |
| | | this.onLoad(this.page) |
| | | }, |
| | | searchChange (params, done) { |
| | | this.query = params |
| | | this.page.currentPage = 1 |
| | | this.onLoad(this.page, params) |
| | | done() |
| | | }, |
| | | selectionChange (list) { |
| | | this.selectionList = list |
| | | }, |
| | | selectionClear () { |
| | | this.selectionList = [] |
| | | this.$refs.crud.toggleSelection() |
| | | }, |
| | | handleDelete () { |
| | | if (this.selectionList.length === 0) { |
| | | this.$message.warning("请选择至少一条数据") |
| | | return |
| | | } |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | return remove(this.ids) |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | this.$refs.crud.toggleSelection() |
| | | }) |
| | | }, |
| | | beforeOpen (done, type) { |
| | | if (["edit", "view"].includes(type)) { |
| | | getPropertyCapitalApply(this.form.id).then((res) => { |
| | | this.form = res.data.data |
| | | this.form.propertyFlag = 1 |
| | | if (this.form.constructionSchemeUrls.length > 0) { |
| | | var urls = [] |
| | | var names = this.form.constructionSchemeUrls.split(",") |
| | | names.forEach(name => { |
| | | urls.push(website.minioUrl + name) |
| | | }) |
| | | this.form.constructionSchemeUrls = urls.join(",") |
| | | } |
| | | }) |
| | | } |
| | | // con |
| | | done() |
| | | }, |
| | | currentChange (currentPage) { |
| | | this.page.currentPage = currentPage |
| | | }, |
| | | sizeChange (pageSize) { |
| | | this.page.pageSize = pageSize |
| | | }, |
| | | refreshChange () { |
| | | this.onLoad(this.page, this.query) |
| | | }, |
| | | onLoad (page, params = {}) { |
| | | const { |
| | | dateTime |
| | | } = this.query |
| | | let values = { |
| | | ...params, |
| | | } |
| | | if (dateTime) { |
| | | values = { |
| | | ...params, |
| | | startTime: dateTime[0], |
| | | endTime: dateTime[1], |
| | | ...this.query, |
| | | } |
| | | values.dateTime = null |
| | | } |
| | | this.loading = true |
| | | getList(page.currentPage, page.pageSize, values).then((res) => { |
| | | const data = res.data.data |
| | | this.page.total = data.total |
| | | this.data = data.records |
| | | this.data.forEach(item => { |
| | | if (item.constructionSchemeUrls.length > 0) { |
| | | var urls = [] |
| | | var names = item.constructionSchemeUrls.split(",") |
| | | names.forEach(name => { |
| | | urls.push(website.minioUrl + name) |
| | | }) |
| | | item.constructionSchemeUrls = urls.join(",") |
| | | } |
| | | }) |
| | | this.loading = false |
| | | this.selectionClear() |
| | | }) |
| | | handleWork(row) { |
| | | this.$router.push({ |
| | | path: `/work/process/maintenanceFundApply/edit/${row.taskId}/${row.processInstanceId}/${row.id}` |
| | | }) |
| | | }, |
| | | goDetail(row) { |
| | | this.$router.push({ |
| | | path: `/work/process/maintenanceFundApply/detail/${row.processInstanceId}/${row.id}` |
| | | }) |
| | | }, |
| | | rowSave(row, done, loading) { |
| | | row.constructionSchemeUrls = func.join(row.constructionSchemeUrls) |
| | | if (row.constructionSchemeUrls.length > 0) { |
| | | var urls = [] |
| | | var split = row.constructionSchemeUrls.split(",") |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | row.constructionSchemeUrls = urls.join(",") |
| | | } |
| | | row.propertyFlag = 1 |
| | | add(row).then( |
| | | () => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | done() |
| | | }, |
| | | (error) => { |
| | | window.console.log(error) |
| | | loading() |
| | | } |
| | | ) |
| | | }, |
| | | rowUpdate(row, index, done, loading) { |
| | | if (row.constructionSchemeUrls.length > 0) { |
| | | var urls = [] |
| | | var split = row.constructionSchemeUrls.split(",") |
| | | split.forEach(url => { |
| | | var names = url.split("jczz/") |
| | | urls.push(names[1]) |
| | | }) |
| | | row.constructionSchemeUrls = urls.join(",") |
| | | } |
| | | update(row).then( |
| | | () => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | done() |
| | | }, |
| | | (error) => { |
| | | window.console.log(error) |
| | | loading() |
| | | } |
| | | ) |
| | | }, |
| | | rowDel(row) { |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | return remove(row.id) |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | }) |
| | | }, |
| | | searchReset() { |
| | | this.query = {} |
| | | this.onLoad(this.page) |
| | | }, |
| | | searchChange(params, done) { |
| | | this.query = params |
| | | this.page.currentPage = 1 |
| | | this.onLoad(this.page, params) |
| | | done() |
| | | }, |
| | | selectionChange(list) { |
| | | this.selectionList = list |
| | | }, |
| | | selectionClear() { |
| | | this.selectionList = [] |
| | | this.$refs.crud.toggleSelection() |
| | | }, |
| | | handleDelete() { |
| | | if (this.selectionList.length === 0) { |
| | | this.$message.warning("请选择至少一条数据") |
| | | return |
| | | } |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | return remove(this.ids) |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!", |
| | | }) |
| | | this.$refs.crud.toggleSelection() |
| | | }) |
| | | }, |
| | | beforeOpen(done, type) { |
| | | if (["edit", "view"].includes(type)) { |
| | | getPropertyCapitalApply(this.form.id).then((res) => { |
| | | this.form = res.data.data |
| | | this.form.propertyFlag = 1 |
| | | if (this.form.constructionSchemeUrls.length > 0) { |
| | | var urls = [] |
| | | var names = this.form.constructionSchemeUrls.split(",") |
| | | names.forEach(name => { |
| | | urls.push(website.minioUrl + name) |
| | | }) |
| | | this.form.constructionSchemeUrls = urls.join(",") |
| | | } |
| | | }) |
| | | } |
| | | // con |
| | | done() |
| | | }, |
| | | currentChange(currentPage) { |
| | | this.page.currentPage = currentPage |
| | | }, |
| | | sizeChange(pageSize) { |
| | | this.page.pageSize = pageSize |
| | | }, |
| | | refreshChange() { |
| | | this.onLoad(this.page, this.query) |
| | | }, |
| | | onLoad(page, params = {}) { |
| | | const { |
| | | dateTime |
| | | } = this.query |
| | | let values = { |
| | | ...params, |
| | | } |
| | | if (dateTime) { |
| | | values = { |
| | | ...params, |
| | | startTime: dateTime[0], |
| | | endTime: dateTime[1], |
| | | ...this.query, |
| | | } |
| | | values.dateTime = null |
| | | } |
| | | this.loading = true |
| | | getList(page.currentPage, page.pageSize, values).then((res) => { |
| | | const data = res.data.data |
| | | this.page.total = data.total |
| | | this.data = data.records |
| | | this.data.forEach(item => { |
| | | if (item.constructionSchemeUrls.length > 0) { |
| | | var urls = [] |
| | | var names = item.constructionSchemeUrls.split(",") |
| | | names.forEach(name => { |
| | | urls.push(website.minioUrl + name) |
| | | }) |
| | | item.constructionSchemeUrls = urls.join(",") |
| | | } |
| | | }) |
| | | this.loading = false |
| | | this.selectionClear() |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .avue-upload__icon { |
| | | .avue-upload__icon { |
| | | line-height: 6; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | @click="openPayConfig(row)">商户配置 |
| | | </el-button> |
| | | |
| | | <el-button :size="size" icon="el-icon-circle-plus-outline" type="text" @click="addProperty(row)">物业评定 |
| | | <el-button :size="size" v-if="permission.property_evaluation" icon="el-icon-circle-plus-outline" type="text" |
| | | @click="addProperty(row)">物业评定 |
| | | </el-button> |
| | | </template> |
| | | </avue-crud> |
| | |
| | | label: "管辖区域", |
| | | prop: "regionCode", |
| | | type: "tree", |
| | | dicUrl: "/api/blade-system/region/tree?cityCode=3611", |
| | | dicUrl: "/api/blade-system/region/tree?cityCode=361100000000", |
| | | props: { |
| | | label: "name", |
| | | value: "id", |
| | |
| | | <template> |
| | | <div id="homeL"> |
| | | <div class="homeL-up"> |
| | | <span class="h1">基层智治综合协同平台</span> |
| | | <span class="h2">Grassroots intelligent governance integrated cooperation platform</span> |
| | | <span class="h1">{{ webTitle }}</span> |
| | | <span class="h2"></span> |
| | | </div> |
| | | <div class="homeL-bar"> |
| | | <div class="outS" @click="down1"> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { getToken } from '@/util/auth' |
| | | import { getStore } from "@/util/store" |
| | | |
| | | export default { |
| | | data () { |
| | | return { |
| | | webTitle: getStore({ name: "webTitle" }), |
| | | webType: getStore({ name: "webType" }), |
| | | a: 1, |
| | | globalUserInfo: getStore({ name: "userInfo" }), |
| | | } |
| | | }, |
| | | |
| | | methods: { |
| | | down1 () { |
| | | this.$router.push({ path: "/userHouse/houseHoldList" }) |
| | |
| | | this.$router.push({ path: "/cGovernance/gridWorkLog" }) |
| | | }, |
| | | down6 () { |
| | | window.open('http://srgdjczzxtpt.com:2181/databoard-server/uniformLogin?passwordlessToken=bmtMNkFYcjh1dk50UVlUYXpLV2xHUDZpdGU0d1ZqMStYV01aVzlVMGsyVT0=') |
| | | let token = 'bearer ' + getToken() |
| | | window.open(`http://srgdjczzxtpt.com:2181/uniform-auth/login?app=app_smart_aoi&Blade-Auth=${token}`) |
| | | }, |
| | | }, |
| | | mouted () { }, |
| | |
| | | prop: "allocationWay", |
| | | labelWidth: 140, |
| | | value: '按建筑面积分摊', |
| | | span: 14, |
| | | span: 12, |
| | | row: true, |
| | | disabled: true |
| | | }, |
| | |
| | | prop: "allocationWay", |
| | | labelWidth: 140, |
| | | value: '按建筑面积分摊', |
| | | span: 14, |
| | | span: 12, |
| | | row: true, |
| | | }, |
| | | { |
| | |
| | | prop: "allocationWay", |
| | | labelWidth: 140, |
| | | value: '按建筑面积分摊', |
| | | span: 14, |
| | | span: 12, |
| | | row: true, |
| | | }, |
| | | { |
| | |
| | | <template> |
| | | <basic-container> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| | | <el-row type="flex" class="row-bg" justify="end"> |
| | | <el-form-item> |
| | | <el-button @click="handleCancel">关闭</el-button> |
| | | </el-form-item> |
| | | </el-row> |
| | | <basic-container> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| | | <el-row type="flex" class="row-bg" justify="end"> |
| | | <el-form-item> |
| | | <el-button @click="handleCancel">关闭</el-button> |
| | | </el-form-item> |
| | | </el-row> |
| | | |
| | | <el-card shadow="hover"> |
| | | <div slot="header"> |
| | | <span>审批信息</span> |
| | | </div> |
| | | <avue-form :option="option" v-model="form"></avue-form> |
| | | </el-card> |
| | | <el-card shadow="hover"> |
| | | <div slot="header"> |
| | | <span>审批信息</span> |
| | | </div> |
| | | <avue-form :option="option" v-model="form"></avue-form> |
| | | </el-card> |
| | | |
| | | <el-card shadow="hover"> |
| | | <div slot="header"> |
| | | <span>流程信息</span> |
| | | </div> |
| | | <el-row type="flex" class="row-bg"> |
| | | <el-timeline> |
| | | <el-timeline-item :key="flow.id" :timestamp="flow.createTime" v-for="flow in flowList" |
| | | placement="top"> |
| | | <el-card shadow="hover"> |
| | | <p>{{ flow.assigneeName }} 在 [{{ flow.createTime }}] 开始处理 [{{ flow.historyActivityName }}] |
| | | 环节</p> |
| | | <p v-if="flow.historyActivityDurationTime !== ''">任务历时 [{{ flow.historyActivityDurationTime |
| | | <el-card shadow="hover"> |
| | | <div slot="header"> |
| | | <span>流程信息</span> |
| | | </div> |
| | | <el-row type="flex" class="row-bg"> |
| | | <el-timeline> |
| | | <el-timeline-item :key="flow.id" :timestamp="flow.createTime" v-for="flow in flowList" placement="top"> |
| | | <el-card shadow="hover"> |
| | | <p>{{ flow.assigneeName }} 在 [{{ flow.createTime }}] 开始处理 [{{ flow.historyActivityName }}] |
| | | 环节</p> |
| | | <p v-if="flow.historyActivityDurationTime !== ''">任务历时 [{{ flow.historyActivityDurationTime |
| | | }}] |
| | | </p> |
| | | <p v-if="flow.comment !== ''">批复意见: [{{ flow.comment }}]</p> |
| | | <p v-if="flow.endTime !== ''">结束时间: [{{ flow.endTime }}]</p> |
| | | </el-card> |
| | | </el-timeline-item> |
| | | </el-timeline> |
| | | </el-row> |
| | | </el-card> |
| | | <el-card shadow="hover"> |
| | | <div slot="header"> |
| | | <span>流程跟踪</span> |
| | | </div> |
| | | <el-row class="row-bg"> |
| | | <flow-design :is-display="true" :process-instance-id="processInstanceId"></flow-design> |
| | | </el-row> |
| | | </el-card> |
| | | </el-form> |
| | | </p> |
| | | <p v-if="flow.comment !== ''">批复意见: [{{ flow.comment }}]</p> |
| | | <p v-if="flow.endTime !== ''">结束时间: [{{ flow.endTime }}]</p> |
| | | </el-card> |
| | | </el-timeline-item> |
| | | </el-timeline> |
| | | </el-row> |
| | | </el-card> |
| | | <el-card shadow="hover"> |
| | | <div slot="header"> |
| | | <span>流程跟踪</span> |
| | | </div> |
| | | <el-row class="row-bg"> |
| | | <flow-design :is-display="true" :process-instance-id="processInstanceId"></flow-design> |
| | | </el-row> |
| | | </el-card> |
| | | </el-form> |
| | | |
| | | <!-- <div style=""> |
| | | <!-- <div style=""> |
| | | <el-button type="primary" @click="handleAgree">同意</el-button> |
| | | <el-button type="danger" @click="handleDisagree">驳回</el-button> |
| | | </div> --> |
| | | |
| | | <div style="text-align: center; |
| | | <div style="text-align: center; |
| | | position: fixed; |
| | | left: 0; |
| | | right: 0; |
| | | bottom: 10px;"> |
| | | <el-button type="primary" @click="handleAgree">同意</el-button> |
| | | <el-button type="danger" @click="handleDisagree">驳回</el-button> |
| | | </div> |
| | | <el-button type="primary" @click="handleAgree">同意</el-button> |
| | | <el-button type="danger" @click="handleDisagree">驳回</el-button> |
| | | </div> |
| | | |
| | | </basic-container> |
| | | </basic-container> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | import { |
| | | historyFlowList, |
| | | leaveDetail |
| | | } from "@/api/work/process" |
| | | } from "@/api/work/process" |
| | | |
| | | import { |
| | | import { |
| | | getList, |
| | | remove, |
| | | update, |
| | | add, |
| | | getPropertyCapitalApply |
| | | } from "@/api/property/propertyCapitalApply" |
| | | import { |
| | | } from "@/api/property/propertyCapitalApply" |
| | | import { |
| | | completeTask |
| | | } from "@/api/work/work" |
| | | import website from '@/config/website' |
| | | } from "@/api/work/work" |
| | | import website from '@/config/website' |
| | | |
| | | export default { |
| | | data () { |
| | | return { |
| | | taskId: '', |
| | | businessId: '', |
| | | processInstanceId: '', |
| | | src: '', |
| | | flowList: [], |
| | | form: { |
| | | flow: { |
| | | assigneeName: '', |
| | | }, |
| | | startTime: '', |
| | | endTime: '', |
| | | reason: '', |
| | | export default { |
| | | data() { |
| | | return { |
| | | taskId: '', |
| | | businessId: '', |
| | | processInstanceId: '', |
| | | src: '', |
| | | flowList: [], |
| | | form: { |
| | | flow: { |
| | | assigneeName: '', |
| | | }, |
| | | startTime: '', |
| | | endTime: '', |
| | | reason: '', |
| | | }, |
| | | option: { |
| | | height: "auto", |
| | | calcHeight: 54, |
| | | dialogWidth: 1150, |
| | | tip: false, |
| | | searchShow: true, |
| | | searchMenuSpan: 3, |
| | | menuWidth: 350, |
| | | border: true, |
| | | //stripe:true, |
| | | submitBtn: false, |
| | | emptyBtn: false, |
| | | index: true, |
| | | viewBtn: true, |
| | | selection: true, |
| | | dialogClickModal: false, |
| | | column: [{ |
| | | label: "小区", |
| | | prop: "districtId", |
| | | searchSpan: 5, |
| | | search: true, |
| | | type: 'tree', |
| | | dicUrl: `/api/blade-district/district/getDistrictTree`, |
| | | props: { |
| | | label: "name", |
| | | value: "id" |
| | | }, |
| | | defaultExpandedKeys: ["361102003"], |
| | | span: 12, |
| | | labelWidth: 120, |
| | | width: 220, |
| | | overHidden: true, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择小区", |
| | | trigger: "blur", |
| | | }, ], |
| | | disabled: true |
| | | }, |
| | | option: { |
| | | height: "auto", |
| | | calcHeight: 54, |
| | | dialogWidth: 1150, |
| | | tip: false, |
| | | searchShow: true, |
| | | searchMenuSpan: 3, |
| | | menuWidth: 350, |
| | | border: true, |
| | | //stripe:true, |
| | | submitBtn: false, |
| | | emptyBtn: false, |
| | | index: true, |
| | | viewBtn: true, |
| | | selection: true, |
| | | dialogClickModal: false, |
| | | column: [{ |
| | | label: "小区", |
| | | prop: "districtId", |
| | | searchSpan: 5, |
| | | search: true, |
| | | type: 'tree', |
| | | dicUrl: `/api/blade-district/district/getDistrictTree`, |
| | | props: { |
| | | label: "name", |
| | | value: "id" |
| | | }, |
| | | defaultExpandedKeys: ["361102003"], |
| | | span: 12, |
| | | labelWidth: 120, |
| | | width: 220, |
| | | overHidden: true, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择小区", |
| | | trigger: "blur", |
| | | },], |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: '维修项目名称', |
| | | prop: 'name', |
| | | searchLabelWidth: 120, |
| | | searchSpan: 5, |
| | | search: true, |
| | | span: 12, |
| | | labelWidth: 140, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入维修项目名称", |
| | | trigger: "blur", |
| | | },], |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "预计开工时间", |
| | | prop: "runTime", |
| | | span: 12, |
| | | labelWidth: 140, |
| | | type: "date", |
| | | format: "yyyy-MM-dd", |
| | | valueFormat: "yyyy-MM-dd", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择合同开始时间", |
| | | trigger: "blur", |
| | | },], |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "预计竣工时间", |
| | | prop: "completedTime", |
| | | labelWidth: 140, |
| | | span: 12, |
| | | type: "date", |
| | | format: "yyyy-MM-dd", |
| | | valueFormat: "yyyy-MM-dd", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择合同结束时间", |
| | | trigger: "blur", |
| | | },], |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "项目分摊方式", |
| | | prop: "allocationWay", |
| | | labelWidth: 140, |
| | | value: '按建筑面积分摊', |
| | | span: 14, |
| | | row: true, |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: '联系人', |
| | | prop: 'linkman', |
| | | span: 12, |
| | | labelWidth: 120, |
| | | search: true, |
| | | searchSpan: 4, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入联系人", |
| | | trigger: "blur", |
| | | },], |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: '联系方式', |
| | | prop: 'linkPhone', |
| | | span: 12, |
| | | labelWidth: 140, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入联系方式", |
| | | trigger: "blur", |
| | | },], |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "项目预算总金额(元)", |
| | | prop: "budgetAmount", |
| | | span: 12, |
| | | hide: true, |
| | | labelWidth: 140, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00', |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "实际预算金额(元)", |
| | | prop: "actualAmount", |
| | | span: 12, |
| | | hide: true, |
| | | labelWidth: 140, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00', |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "自筹金额(元)", |
| | | prop: "selfAmount", |
| | | span: 12, |
| | | hide: true, |
| | | labelWidth: 140, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00', |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "预算应拨付金额(元)", |
| | | prop: "budgetAppropriateAmount", |
| | | span: 12, |
| | | hide: true, |
| | | labelWidth: 140, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00', |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "项目摘要", |
| | | span: 24, |
| | | hide: true, |
| | | prop: "projectDigest", |
| | | placeholder: "例如:“XX小区XX栋XX设施设备维修,总的预算金额是X,是否含有审价,本次维修涉及范围共XX户,总面积的建筑面积为XX平方米”", |
| | | labelWidth: 140, |
| | | type: "textarea", |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "项目进度描述", |
| | | span: 24, |
| | | hide: true, |
| | | prop: "projectDescribe", |
| | | labelWidth: 140, |
| | | type: "textarea", |
| | | disabled: true |
| | | }, { |
| | | label: "批复意见", |
| | | span: 24, |
| | | hide: true, |
| | | prop: "comment", |
| | | labelWidth: 140, |
| | | type: "textarea", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入批复意见", |
| | | trigger: "blur", |
| | | },], |
| | | }, |
| | | { |
| | | label: '施工方案附件', |
| | | prop: 'constructionSchemeUrls', |
| | | type: 'upload', |
| | | listType: 'picture-img', |
| | | span: 24, |
| | | hide: true, |
| | | labelWidth: 140, |
| | | multiple: true, |
| | | // showFileList: true, |
| | | propsHttp: { |
| | | res: 'data', |
| | | name: "originalName", |
| | | url: "link" |
| | | }, |
| | | action: '/api/blade-resource/oss/endpoint/put-file-attach', |
| | | rules: [{ |
| | | required: true, |
| | | message: "请上传施工方案", |
| | | trigger: "blur", |
| | | },], |
| | | } |
| | | ], |
| | | { |
| | | label: '维修项目名称', |
| | | prop: 'name', |
| | | searchLabelWidth: 120, |
| | | searchSpan: 5, |
| | | search: true, |
| | | span: 12, |
| | | labelWidth: 140, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入维修项目名称", |
| | | trigger: "blur", |
| | | }, ], |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "预计开工时间", |
| | | prop: "runTime", |
| | | span: 12, |
| | | labelWidth: 140, |
| | | type: "date", |
| | | format: "yyyy-MM-dd", |
| | | valueFormat: "yyyy-MM-dd", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择合同开始时间", |
| | | trigger: "blur", |
| | | }, ], |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "预计竣工时间", |
| | | prop: "completedTime", |
| | | labelWidth: 140, |
| | | span: 12, |
| | | type: "date", |
| | | format: "yyyy-MM-dd", |
| | | valueFormat: "yyyy-MM-dd", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请选择合同结束时间", |
| | | trigger: "blur", |
| | | }, ], |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "项目分摊方式", |
| | | prop: "allocationWay", |
| | | labelWidth: 140, |
| | | value: '按建筑面积分摊', |
| | | span: 12, |
| | | row: true, |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: '联系人', |
| | | prop: 'linkman', |
| | | span: 12, |
| | | labelWidth: 120, |
| | | search: true, |
| | | searchSpan: 4, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入联系人", |
| | | trigger: "blur", |
| | | }, ], |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: '联系方式', |
| | | prop: 'linkPhone', |
| | | span: 12, |
| | | labelWidth: 140, |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入联系方式", |
| | | trigger: "blur", |
| | | }, ], |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "项目预算总金额(元)", |
| | | prop: "budgetAmount", |
| | | span: 12, |
| | | hide: true, |
| | | labelWidth: 140, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00', |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "实际预算金额(元)", |
| | | prop: "actualAmount", |
| | | span: 12, |
| | | hide: true, |
| | | labelWidth: 140, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00', |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "自筹金额(元)", |
| | | prop: "selfAmount", |
| | | span: 12, |
| | | hide: true, |
| | | labelWidth: 140, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00', |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "预算应拨付金额(元)", |
| | | prop: "budgetAppropriateAmount", |
| | | span: 12, |
| | | hide: true, |
| | | labelWidth: 140, |
| | | type: 'number', |
| | | precision: 2, |
| | | value: '0.00', |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "项目摘要", |
| | | span: 24, |
| | | hide: true, |
| | | prop: "projectDigest", |
| | | placeholder: "例如:“XX小区XX栋XX设施设备维修,总的预算金额是X,是否含有审价,本次维修涉及范围共XX户,总面积的建筑面积为XX平方米”", |
| | | labelWidth: 140, |
| | | type: "textarea", |
| | | disabled: true |
| | | }, |
| | | { |
| | | label: "项目进度描述", |
| | | span: 24, |
| | | hide: true, |
| | | prop: "projectDescribe", |
| | | labelWidth: 140, |
| | | type: "textarea", |
| | | disabled: true |
| | | }, { |
| | | label: "批复意见", |
| | | span: 24, |
| | | hide: true, |
| | | prop: "comment", |
| | | labelWidth: 140, |
| | | type: "textarea", |
| | | rules: [{ |
| | | required: true, |
| | | message: "请输入批复意见", |
| | | trigger: "blur", |
| | | }, ], |
| | | }, |
| | | { |
| | | label: '施工方案附件', |
| | | prop: 'constructionSchemeUrls', |
| | | type: 'upload', |
| | | listType: 'picture-img', |
| | | span: 24, |
| | | hide: true, |
| | | labelWidth: 140, |
| | | multiple: true, |
| | | // showFileList: true, |
| | | propsHttp: { |
| | | res: 'data', |
| | | name: "originalName", |
| | | url: "link" |
| | | }, |
| | | action: '/api/blade-resource/oss/endpoint/put-file-attach', |
| | | rules: [{ |
| | | required: true, |
| | | message: "请上传施工方案", |
| | | trigger: "blur", |
| | | }, ], |
| | | } |
| | | ], |
| | | } |
| | | } |
| | | }, |
| | | created () { |
| | | created() { |
| | | this.init() |
| | | }, |
| | | beforeRouteUpdate(to, from, next) { |
| | | // 在当前路由改变,但是该组件被复用时调用 |
| | | // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候 |
| | | // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用 |
| | | // 可以访问组件实例 `this` |
| | | if (to.fullPath !== from.fullPath) { |
| | | next() |
| | | this.init() |
| | | }, |
| | | beforeRouteUpdate (to, from, next) { |
| | | // 在当前路由改变,但是该组件被复用时调用 |
| | | // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候 |
| | | // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用 |
| | | // 可以访问组件实例 `this` |
| | | if (to.fullPath !== from.fullPath) { |
| | | next() |
| | | this.init() |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | init () { |
| | | this.taskId = this.$route.params.taskId |
| | | this.processInstanceId = this.$route.params.processInstanceId |
| | | this.businessId = this.$route.params.businessId |
| | | historyFlowList(this.processInstanceId).then(res => { |
| | | const data = res.data |
| | | if (data.success) { |
| | | this.flowList = data.data |
| | | } |
| | | }) |
| | | getPropertyCapitalApply(this.businessId).then(res => { |
| | | const data = res.data |
| | | if (data.success) { |
| | | data.data.constructionSchemeUrls = website.minioUrl + data.data.constructionSchemeUrls |
| | | this.form = data.data |
| | | } |
| | | }) |
| | | }, |
| | | handleAgree () { |
| | | if (!this.form.comment) { |
| | | this.$message.warning('请先填写批复意见') |
| | | return |
| | | } |
| | | const params = { |
| | | taskId: this.taskId, |
| | | processInstanceId: this.processInstanceId, |
| | | flag: 'ok', |
| | | comment: this.form.comment, |
| | | } |
| | | completeTask(params).then(res => { |
| | | const data = res.data |
| | | if (data.success) { |
| | | this.$message.success(data.msg) |
| | | this.$router.$avueRouter.closeTag() |
| | | this.$router.push({ |
| | | path: `/work/todo` |
| | | }) |
| | | } else { |
| | | this.$message.error(data.msg || '提交失败') |
| | | } |
| | | }) |
| | | }, |
| | | handleDisagree () { |
| | | if (!this.form.comment) { |
| | | this.$message.warning('请先填写批复意见') |
| | | return |
| | | } |
| | | const params = { |
| | | taskId: this.taskId, |
| | | processInstanceId: this.processInstanceId, |
| | | comment: this.form.comment, |
| | | } |
| | | completeTask(params).then(res => { |
| | | const data = res.data |
| | | if (data.success) { |
| | | this.$message.success(data.msg) |
| | | this.$router.$avueRouter.closeTag() |
| | | this.$router.push({ |
| | | path: `/work/todo` |
| | | }) |
| | | } else { |
| | | this.$message.error(data.msg || '提交失败') |
| | | } |
| | | }) |
| | | }, |
| | | handleCancel () { |
| | | init() { |
| | | this.taskId = this.$route.params.taskId |
| | | this.processInstanceId = this.$route.params.processInstanceId |
| | | this.businessId = this.$route.params.businessId |
| | | historyFlowList(this.processInstanceId).then(res => { |
| | | const data = res.data |
| | | if (data.success) { |
| | | this.flowList = data.data |
| | | } |
| | | }) |
| | | getPropertyCapitalApply(this.businessId).then(res => { |
| | | const data = res.data |
| | | if (data.success) { |
| | | data.data.constructionSchemeUrls = website.minioUrl + data.data.constructionSchemeUrls |
| | | this.form = data.data |
| | | } |
| | | }) |
| | | }, |
| | | handleAgree() { |
| | | if (!this.form.comment) { |
| | | this.$message.warning('请先填写批复意见') |
| | | return |
| | | } |
| | | const params = { |
| | | taskId: this.taskId, |
| | | processInstanceId: this.processInstanceId, |
| | | flag: 'ok', |
| | | comment: this.form.comment, |
| | | } |
| | | completeTask(params).then(res => { |
| | | const data = res.data |
| | | if (data.success) { |
| | | this.$message.success(data.msg) |
| | | this.$router.$avueRouter.closeTag() |
| | | this.$router.push({ |
| | | path: `/work/todo` |
| | | path: `/work/todo` |
| | | }) |
| | | } else { |
| | | this.$message.error(data.msg || '提交失败') |
| | | } |
| | | }) |
| | | }, |
| | | handleDisagree() { |
| | | if (!this.form.comment) { |
| | | this.$message.warning('请先填写批复意见') |
| | | return |
| | | } |
| | | const params = { |
| | | taskId: this.taskId, |
| | | processInstanceId: this.processInstanceId, |
| | | comment: this.form.comment, |
| | | } |
| | | completeTask(params).then(res => { |
| | | const data = res.data |
| | | if (data.success) { |
| | | this.$message.success(data.msg) |
| | | this.$router.$avueRouter.closeTag() |
| | | this.$router.push({ |
| | | path: `/work/todo` |
| | | }) |
| | | } else { |
| | | this.$message.error(data.msg || '提交失败') |
| | | } |
| | | }) |
| | | }, |
| | | handleCancel() { |
| | | this.$router.$avueRouter.closeTag() |
| | | this.$router.push({ |
| | | path: `/work/todo` |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .container { |
| | | .container { |
| | | position: relative; |
| | | /* 确保按钮相对于该元素定位 */ |
| | | } |
| | | } |
| | | |
| | | #myButton { |
| | | #myButton { |
| | | position: fixed; |
| | | bottom: 0; |
| | | left: 50%; |
| | | transform: translateX(-50%); |
| | | } |
| | | } |
| | | </style> |
| | |
| | | entry.add("@/mock").end(); |
| | | }, |
| | | css: { |
| | | extract: { ignoreOrder: true }, |
| | | extract: { |
| | | ignoreOrder: true |
| | | }, |
| | | }, |
| | | //开发模式反向代理配置,生产模式请使用Nginx部署并配置反向代理 |
| | | devServer: { |
| | |
| | | proxy: { |
| | | "/api": { |
| | | //本地服务接口地址 |
| | | target: "https://srgdjczzxtpt.com:2080/api", |
| | | // target: "https://srgdjczzxtpt.com:2080/api", |
| | | // target: "http://z4042833u6.wicp.vip", |
| | | // target: "http://localhost:9528", |
| | | target: "http://localhost:9528", |
| | | // target:"http://192.168.0.109:9528", |
| | | //远程演示服务地址,可用于直接启动项目 |
| | | //target: 'https://saber.bladex.cn/api', |