提交 c325ceca authored 作者: 宋雄's avatar 宋雄

完善授权

上级 34f22543
NODE_ENV=development
VUE_APP_API_BASE_URL='http://192.168.0.118:9999/property-central'
VUE_APP_API_BASE_URL='http://192.168.0.118:9999'
# VUE_APP_API_BASE_URL='http://220.203.25.212:9999/property-central'
VUE_APP_CAS_BASE_URL=http://cas.example.org:8443/cas
VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview
......
......@@ -11,42 +11,43 @@
"lint": "vue-cli-service lint"
},
"dependencies": {
"@antv/data-set": "^0.11.4",
"@jeecg/antd-online-mini": "3.4.3-beta2",
"@tinymce/tinymce-vue": "2.1.0",
"@toast-ui/editor": "^2.1.2",
"ant-design-vue": "^1.7.2",
"@antv/data-set": "^0.11.4",
"viser-vue": "^2.4.8",
"axios": "^0.18.0",
"china-area-data": "^5.0.1",
"clipboard": "^2.0.4",
"codemirror": "^5.46.0",
"cron-parser": "^2.10.0",
"dayjs": "^1.8.0",
"dom-align": "1.12.0",
"echarts": "^5.4.2",
"enquire.js": "^2.1.6",
"js-cookie": "^2.2.0",
"lodash.get": "^4.4.2",
"lodash.pick": "^4.4.0",
"md5": "^2.2.1",
"nprogress": "^0.2.0",
"qiankun": "^2.5.1",
"tinymce": "5.4.1",
"viser-vue": "^2.4.8",
"vue": "^2.6.10",
"vue-area-linkage": "^5.1.0",
"vue-cropper": "^0.5.4",
"vue-i18n": "^8.7.0",
"vue-loader": "^15.7.0",
"vue-ls": "^3.2.0",
"vue-router": "^3.0.1",
"vuex": "^3.1.0",
"vue-print-nb-jeecg": "^1.0.12",
"clipboard": "^2.0.4",
"vue-photo-preview": "^1.1.3",
"vue-print-nb-jeecg": "^1.0.12",
"vue-router": "^3.0.1",
"vue-splitpane": "^1.0.4",
"vuedraggable": "^2.20.0",
"codemirror": "^5.46.0",
"@tinymce/tinymce-vue": "2.1.0",
"tinymce": "5.4.1",
"@toast-ui/editor": "^2.1.2",
"vue-area-linkage": "^5.1.0",
"china-area-data": "^5.0.1",
"dom-align": "1.12.0",
"xe-utils": "2.4.8",
"vuex": "^3.1.0",
"vxe-table": "2.9.13",
"vxe-table-plugin-antd": "1.8.10",
"cron-parser": "^2.10.0",
"qiankun": "^2.5.1",
"xe-utils": "2.4.8",
"xss": "^1.0.13"
},
"devDependencies": {
......@@ -56,13 +57,13 @@
"@vue/cli-service": "^3.3.0",
"@vue/eslint-config-standard": "^4.0.0",
"babel-eslint": "7.2.3",
"compression-webpack-plugin": "^3.1.0",
"eslint": "^5.16.0",
"eslint-plugin-vue": "^5.1.0",
"html-webpack-plugin": "^4.2.0",
"less": "^3.9.0",
"less-loader": "^4.1.0",
"vue-template-compiler": "^2.6.10",
"html-webpack-plugin": "^4.2.0",
"compression-webpack-plugin": "^3.1.0"
"vue-template-compiler": "^2.6.10"
},
"eslintConfig": {
"root": true,
......@@ -100,7 +101,10 @@
"vue/html-closing-bracket-newline": 0,
"vue/no-parsing-error": 0,
"no-tabs": 0,
"indent": ["off", 2],
"indent": [
"off",
2
],
"no-console": 0,
"space-before-function-paren": 0
}
......
......@@ -5,7 +5,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>JeecgBoot 企业级低代码平台</title>
<title>湖北汉江之星科技有限公司</title>
<link rel="icon" href="<%= BASE_URL %>logo.png">
<script src="<%= BASE_URL %>cdn/babel-polyfill/polyfill_7_2_5.js"></script>
<style>
......
......@@ -2,6 +2,9 @@ import { getAction, deleteAction, putAction, postAction, httpAction } from '@/ap
import Vue from 'vue'
import {UI_CACHE_DB_DICT_DATA } from "@/store/mutation-types"
// 首页统计数据
const getDataStatisticsApi = (params)=>getAction("/property-central/central/homepage/dataStatistics",params);
//角色管理
const addRole = (params)=>postAction("/sys/role/add",params);
const editRole = (params)=>putAction("/sys/role/edit",params);
......@@ -28,6 +31,7 @@ const getSystemSubmenu = (params)=>getAction("/sys/permission/getSystemSubmenu",
const getSystemSubmenuBatch = (params) => getAction('/sys/permission/getSystemSubmenuBatch', params)
const queryTreeList = (params)=>getAction("/sys/permission/queryTreeList",params);
const queryTreeListForRole = (params)=>getAction("/sys/role/queryTreeList",params);
const queryTreeListByTypeForRole = (params)=>getAction("/sys/role/queryTreeListByType",{...params, platformType: 'company'});
const queryListAsync = (params)=>getAction("/sys/permission/queryListAsync",params);
const queryRolePermission = (params)=>getAction("/sys/permission/queryRolePermission",params);
const saveRolePermission = (params)=>postAction("/sys/permission/saveRolePermission",params);
......@@ -40,9 +44,9 @@ const queryPermissionRule = (params)=>getAction("/sys/permission/queryPermission
const queryDepartTreeList = (params)=>getAction("/sys/sysDepart/queryTreeList",params);
const queryDepartTreeSync = (params)=>getAction("/sys/sysDepart/queryDepartTreeSync",params);
const queryIdTree = (params)=>getAction("/sys/sysDepart/queryIdTree",params);
const queryParentName = (params)=>getAction("/sys/sysDepart/queryParentName",params);
const searchByKeywords = (params)=>getAction("/sys/sysDepart/searchBy",params);
const deleteByDepartId = (params)=>deleteAction("/sys/sysDepart/delete",params);
const queryParentName = (params)=>getAction("/sys/sysDepart/queryParentName",params);
const searchByKeywords = (params)=>getAction("/sys/sysDepart/searchBy",params);
const deleteByDepartId = (params)=>deleteAction("/sys/sysDepart/delete",params);
//二级部门管理
const queryDepartPermission = (params)=>getAction("/sys/permission/queryDepartPermission",params);
......@@ -56,17 +60,6 @@ const queryMyDepartTreeList = (params)=>getAction("/sys/sysDepart/queryMyDeptTre
const deleteLog = (params)=>deleteAction("/sys/log/delete",params);
const deleteLogList = (params)=>deleteAction("/sys/log/deleteBatch",params);
//入驻管理
const getPropertyListApi = (params)=>getAction("/property/propertySettled/list",params);
const getPropertyDetailApi = (params)=>getAction("/property/propertySettled/queryById",params);
const AddUpdatePropertyApi = (params)=>postAction("/property/propertySettled/add",params);
//费用管理
const getCostListApi = (params)=>getAction("/property/propertyChargrule/list",params);
const getCostDetailApi = (params)=>getAction("/property/propertyChargrule/queryById",params);
const AddUpdateCostApi = (params)=>postAction("/property/propertyChargrule/add",params);
const AuditUpdateCostApi = (params)=>postAction("/property/propertyChargrule/audit",params);
//数据字典
const addDict = (params)=>postAction("/sys/dict/add",params);
const editDict = (params)=>putAction("/sys/dict/edit",params);
......@@ -110,7 +103,22 @@ export const transitRESTful = {
http: (url, parameter) => httpAction(getTransitURL(url), parameter),
}
//入驻管理
const getPropertyListApi = (params)=>getAction("/property-central/property/propertySettled/list",params);
const getPropertyDetailApi = (params)=>getAction("/property-central/property/propertySettled/queryById",params);
const AddUpdatePropertyApi = (params)=>postAction("/property-central/property/propertySettled/add",params);
const auditPropertyApi = (params)=>postAction("/property-central/property/propertySettled/audit",params);
const freezeOrPropertyApi = (params)=>getAction(`/property-central/property/propertySettled/freezeOrThaw/${params.id}/${params.status}`,{});
//费用管理
const getCostListApi = (params)=>getAction("/property-central/property/propertyChargrule/list",params);
const getCostDetailApi = (params)=>getAction("/property-central/property/propertyChargrule/queryById",params);
const AddUpdateCostApi = (params)=>postAction("/property-central/property/propertyChargrule/add",params);
const AuditUpdateCostApi = (params)=>postAction("/property-central/property/propertyChargrule/audit",params);
const getPropertyChargruleListApi = (params)=>getAction("/property-central/property/propertyChargrule/propertyChargruleList",params);
export {
getDataStatisticsApi,
addRole,
editRole,
checkRoleCode,
......@@ -153,6 +161,7 @@ export {
queryUserByDepId,
duplicateCheck,
queryTreeListForRole,
queryTreeListByTypeForRole,
getSystemMenuList,
getSystemSubmenu,
getSystemSubmenuBatch,
......@@ -169,11 +178,14 @@ export {
getPropertyListApi,
getPropertyDetailApi,
AddUpdatePropertyApi,
auditPropertyApi,
freezeOrPropertyApi,
getCostListApi,
getCostDetailApi,
AddUpdateCostApi,
AuditUpdateCostApi
AuditUpdateCostApi,
getPropertyChargruleListApi
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -183,7 +183,7 @@
* @param title 要修改的新标题
*/
changeTitle(title) {
let projectTitle = "Jeecg-Boot 企业级低代码平台"
let projectTitle = "湖北汉江之星科技有限公司"
// 首页特殊处理
if (this.$route.path === indexKey) {
document.title = projectTitle
......
......@@ -68,7 +68,7 @@
min-height: 100%;
background: #f0f2f5 url(~@/assets/background.svg) no-repeat 50%;
background-size: 100%;
padding: 110px 0 144px;
padding-top: 110px;
position: relative;
a {
......
......@@ -21,7 +21,7 @@
props: {
title: {
type: String,
default: '汉江之星',
default: '汉星科技',
required: false
},
showTitle: {
......
......@@ -26,6 +26,8 @@ import 'vue-photo-preview/dist/skin.css'
import SSO from '@/cas/sso.js'
import {
ACCESS_TOKEN,
PLATFORM_CODE,
PLATFORM_TYPE,
DEFAULT_COLOR,
DEFAULT_THEME,
DEFAULT_LAYOUT_MODE,
......@@ -81,6 +83,8 @@ function main() {
store.commit('TOGGLE_WEAK', Vue.ls.get(DEFAULT_COLOR_WEAK, config.colorWeak))
store.commit('TOGGLE_COLOR', Vue.ls.get(DEFAULT_COLOR, config.primaryColor))
store.commit('SET_TOKEN', Vue.ls.get(ACCESS_TOKEN))
store.commit('SET_TYPE', Vue.ls.get(PLATFORM_CODE))
store.commit('SET_CODE', Vue.ls.get(PLATFORM_TYPE))
store.commit('SET_MULTI_PAGE',Vue.ls.get(DEFAULT_MULTI_PAGE,config.multipage))
},
render: h => h(App)
......
import Vue from 'vue'
import { login, logout, phoneLogin, thirdLogin } from "@/api/login"
import { ACCESS_TOKEN, USER_NAME,USER_INFO,USER_AUTH,SYS_BUTTON_AUTH,UI_CACHE_DB_DICT_DATA,TENANT_ID,CACHE_INCLUDED_ROUTES } from "@/store/mutation-types"
import { ACCESS_TOKEN,PLATFORM_CODE,PLATFORM_TYPE, USER_NAME,USER_INFO,USER_AUTH,SYS_BUTTON_AUTH,UI_CACHE_DB_DICT_DATA,TENANT_ID,CACHE_INCLUDED_ROUTES } from "@/store/mutation-types"
import { welcome } from "@/utils/util"
import { queryPermissionsByUser } from '@/api/api'
import { getAction } from '@/api/manage'
......@@ -8,6 +8,8 @@ import { getAction } from '@/api/manage'
const user = {
state: {
token: '',
platformCode: '',
platformType: '',
username: '',
realname: '',
tenantid:'',
......@@ -23,6 +25,12 @@ const user = {
SET_TOKEN: (state, token) => {
state.token = token
},
SET_CODE: (state, platformCode) => {
state.platformCode = platformCode
},
SET_TYPE: (state, platformType) => {
state.platformType = platformType
},
SET_NAME: (state, { username, realname, welcome }) => {
state.username = username
state.realname = realname
......@@ -85,6 +93,8 @@ const user = {
Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(UI_CACHE_DB_DICT_DATA, result.sysAllDictItems, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(PLATFORM_CODE, result.userInfo.platformCode, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(PLATFORM_TYPE, result.userInfo.platformType, 7 * 24 * 60 * 60 * 1000)
commit('SET_TOKEN', result.token)
commit('SET_INFO', userInfo)
commit('SET_NAME', { username: userInfo.username,realname: userInfo.realname, welcome: welcome() })
......@@ -179,6 +189,8 @@ const user = {
commit('SET_TOKEN', '')
commit('SET_PERMISSIONLIST', [])
Vue.ls.remove(ACCESS_TOKEN)
Vue.ls.remove(PLATFORM_CODE)
Vue.ls.remove(PLATFORM_TYPE)
Vue.ls.remove(USER_INFO)
Vue.ls.remove(USER_NAME)
Vue.ls.remove(UI_CACHE_DB_DICT_DATA)
......
export const ACCESS_TOKEN = 'Access-Token'
export const PLATFORM_CODE = 'platformCode'
export const PLATFORM_TYPE = 'platformType'
export const SIDEBAR_TYPE = 'SIDEBAR_TYPE'
export const DEFAULT_THEME = 'DEFAULT_THEME'
export const DEFAULT_LAYOUT_MODE = 'DEFAULT_LAYOUT_MODE'
......
......@@ -3,7 +3,7 @@ import axios from 'axios'
import store from '@/store'
import { VueAxios } from './axios'
import router from '@/router/index'
import { ACCESS_TOKEN, TENANT_ID } from "@/store/mutation-types"
import { ACCESS_TOKEN, PLATFORM_CODE, PLATFORM_TYPE, TENANT_ID } from "@/store/mutation-types"
/**
* 【指定 axios的 baseURL】
......@@ -17,7 +17,7 @@ let apiBaseUrl = window._CONFIG['domianURL'] || "/jeecg-boot";
const service = axios.create({
//baseURL: '/jeecg-boot',
baseURL: apiBaseUrl, // api base_url
timeout: 15000 // 请求超时时间
timeout: 30000 // 请求超时时间
})
const err = (error) => {
......@@ -105,9 +105,17 @@ const err = (error) => {
// request interceptor
service.interceptors.request.use(config => {
const token = Vue.ls.get(ACCESS_TOKEN)
const platformCode = Vue.ls.get(PLATFORM_CODE)
const platformType = Vue.ls.get(PLATFORM_TYPE)
if (token) {
config.headers[ 'X-Access-Token' ] = token // 让每个请求携带自定义 token 请根据实际情况自行修改
}
if (platformCode) {
config.headers[ 'platform_code' ] = platformCode // 让每个请求携带platformCode
}
if (platformType) {
config.headers[ 'platform_type' ] = platformType // 让每个请求携带platformType
}
// update-begin--author:sunjianlei---date:20200723---for 如果当前在low-app环境,并且携带了appId,就向Header里传递appId
const $route = router.currentRoute
......
......@@ -155,7 +155,10 @@
{
title:'状态',
align:"center",
dataIndex: 'status'
dataIndex: 'status',
customRender: function(text) {
return filterDictTextByCache('advStatus', text);
}
},
{
title: '操作',
......@@ -167,10 +170,10 @@
}
],
url: {
list: "/property/propertyAdv/list",
delete: "/property/propertyAdv/delete",
deleteBatch: "/property/propertyAdv/deleteBatch",
exportXlsUrl: "/property/propertyAdv/exportXls"
list: "/property-central/property/propertyAdv/list",
delete: "/property-central/property/propertyAdv/delete",
deleteBatch: "/property-central/property/propertyAdv/deleteBatch",
exportXlsUrl: "/property-central/property/propertyAdv/exportXls"
},
dictOptions:{}
}
......
......@@ -103,9 +103,9 @@
releaseTime: [{ required: true, message: '请选择发布日期', trigger: 'change' }]
},
url: {
add: "/property/propertyAdv/add",
edit: "/property/propertyAdv/edit",
queryById: "/property/propertyAdv/queryById"
add: "/property-central/property/propertyAdv/add",
edit: "/property-central/property/propertyAdv/edit",
queryById: "/property-central/property/propertyAdv/queryById"
}
}
},
......
......@@ -158,10 +158,10 @@
showSizeChanger: true
},
url: {
list: "/property/propertyChargrule/list",
delete: '/property/propertyChargrule/delete',
deleteBatch: '/property/propertyChargrule/deleteBatch',
exportXlsUrl: "/property/propertyChargrule/exportXls"
list: "/property-central/property/propertyChargrule/list",
delete: '/property-central/property/propertyChargrule/delete',
deleteBatch: '/property-central/property/propertyChargrule/deleteBatch',
exportXlsUrl: "/property-central/property/propertyChargrule/exportXls"
},
dictOptions: [],
}
......
......@@ -82,9 +82,9 @@
chargingMoney: [{ required: true, message: '请输入收费金额', trigger: 'blur' }]
},
url: {
add: "/property/propertyChargrule/add",
edit: "/property/propertyChargrule/edit",
queryById: "/property/propertyChargrule/queryById"
add: "/property-central/property/propertyChargrule/add",
edit: "/property-central/property/propertyChargrule/edit",
queryById: "/property-central/property/propertyChargrule/queryById"
},
dictOptions: []
}
......
<template>
<div>
<index-chart v-if="indexStyle==1"></index-chart>
<index-bdc v-if="indexStyle==2"></index-bdc>
<index-task v-if="indexStyle==3"></index-task>
<div style="width: 100%;text-align: right;margin-top: 20px">
请选择首页样式:
<a-radio-group v-model="indexStyle">
<a-radio :value="1">统计图表</a-radio>
<a-radio :value="2">统计图表2</a-radio>
<a-radio :value="3">任务表格</a-radio>
</a-radio-group>
</div>
</div>
</template>
<script>
import IndexChart from './IndexChart'
import IndexTask from "./IndexTask"
import IndexBdc from './IndexBdc'
export default {
name: "Analysis",
components: {
IndexChart,
IndexTask,
IndexBdc
},
data() {
return {
indexStyle:1
}
},
created() {
},
methods: {
}
}
</script>
\ No newline at end of file
......@@ -3,14 +3,14 @@
<index-chart v-if="indexStyle==1"></index-chart>
<index-bdc v-if="indexStyle==2"></index-bdc>
<index-task v-if="indexStyle==3"></index-task>
<div style="width: 100%;text-align: right;margin-top: 20px">
<!-- <div style="width: 100%;text-align: right;margin-top: 20px">
请选择首页样式:
<a-radio-group v-model="indexStyle">
<a-radio :value="1">统计图表</a-radio>
<a-radio :value="2">统计图表2</a-radio>
<a-radio :value="3">任务表格</a-radio>
</a-radio-group>
</div>
</div> -->
</div>
</template>
......
......@@ -2,10 +2,8 @@
<div class="page-header-index-wide">
<a-row :gutter="24">
<a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
<chart-card :loading="loading" title="总销售额" total="¥126,560">
<a-tooltip title="指标说明" slot="action">
<a-icon type="info-circle-o" />
</a-tooltip>
<chart-card :loading="loading" title="入驻物业公司数量" :total="200 | NumberFormat">
<div>
<trend flag="up" style="margin-right: 16px;">
<span slot="term">周同比</span>
......@@ -20,7 +18,7 @@
</chart-card>
</a-col>
<a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
<chart-card :loading="loading" title="订单量" :total="8846 | NumberFormat">
<chart-card :loading="loading" title="累计物业社区数量" :total="8846 | NumberFormat">
<a-tooltip title="指标说明" slot="action">
<a-icon type="info-circle-o" />
</a-tooltip>
......@@ -31,7 +29,7 @@
</chart-card>
</a-col>
<a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
<chart-card :loading="loading" title="支付笔数" :total="6560 | NumberFormat">
<chart-card :loading="loading" title="累计小区数量" :total="6560 | NumberFormat">
<a-tooltip title="指标说明" slot="action">
<a-icon type="info-circle-o" />
</a-tooltip>
......@@ -42,7 +40,7 @@
</chart-card>
</a-col>
<a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
<chart-card :loading="loading" title="运营活动效果" total="78%">
<chart-card :loading="loading" title="累计业主数量" total="78%">
<a-tooltip title="指标说明" slot="action">
<a-icon type="info-circle-o" />
</a-tooltip>
......@@ -63,7 +61,21 @@
</a-col>
</a-row>
<a-card :loading="loading" :bordered="false" :body-style="{padding: '0'}">
<!-- <div class="map-box">
<h3>待处理事务</h3>
<div class="dealt-with">
<div class="box">
<h6>{{}}</h6>
</div>
</div>
</div> -->
<div class="map-box">
<h3>社区分布数量图</h3>
<div ref="mapEcharts" class="map-echart" style="height: 500px"></div>
</div>
<!-- <a-card :loading="loading" :bordered="false" :body-style="{padding: '0'}">
<div class="salesCard">
<a-tabs default-active-key="1" size="large" :tab-bar-style="{marginBottom: '24px', paddingLeft: '16px'}">
<div class="extra-wrapper" slot="tabBarExtraContent">
......@@ -97,9 +109,9 @@
</a-tab-pane>
</a-tabs>
</div>
</a-card>
</a-card> -->
<a-row>
<!-- <a-row>
<a-col :span="24">
<a-card :loading="loading" :bordered="false" title="最近一周访问量统计" :style="{ marginTop: '24px' }">
<a-row>
......@@ -131,11 +143,13 @@
<line-chart-multid :fields="visitFields" :dataSource="visitInfo"></line-chart-multid>
</a-card>
</a-col>
</a-row>
</a-row> -->
</div>
</template>
<script>
import * as echarts from "echarts";
import chinaData from "@/assets/china.json"; //地图包
import ChartCard from '@/components/ChartCard'
import ACol from "ant-design-vue/es/grid/Col"
import ATooltip from "ant-design-vue/es/tooltip/Tooltip"
......@@ -148,7 +162,7 @@
import HeadInfo from '@/components/tools/HeadInfo.vue'
import Trend from '@/components/Trend'
import { getLoginfo,getVisitInfo } from '@/api/api'
import { getDataStatisticsApi, getLoginfo,getVisitInfo } from '@/api/api'
const rankList = []
for (let i = 0; i < 7; i++) {
......@@ -181,6 +195,8 @@
},
data() {
return {
mapData: [],
waitAuditList: [],
loading: true,
center: null,
rankList,
......@@ -196,6 +212,7 @@
this.loading = !this.loading
}, 1000)
this.initLogInfo();
this.getDataStatistics()
},
methods: {
initLogInfo () {
......@@ -213,6 +230,84 @@
}
})
},
async getDataStatistics() {
let {result} = await getDataStatisticsApi();
this.mapData = result.propertySettledList.map(item=> {
return {
name: item.propertyName,
value: [item.longitude, item.latitude],
text: {...item}
}
}) || []
this.mapEcharts()
},
//地图
mapEcharts() {
// 获取地图数据
// 使用数据注册地图
echarts.registerMap("china", chinaData);
this.$nextTick(() => {
// 初始化地图
this.map = echarts.init(this.$refs["mapEcharts"]);
// 设置基础配置项
const option = {
areaColor: "#97bff7",
// 悬浮窗
tooltip: {
trigger: "item",
formatter: function (params) {
return `公司:${params.data.name}</br>注册地址:${params.data.text.provinceName}${params.data.text.cityName}${params.data.text.countyName}</br>详细地址:${params.data.text.addressInfo}</br>联系人:${params.data.text.contactName}</br>联系电话:${params.data.text.contactPhone}`;
},
borderColor: "#fff",
textStyle: {
//color: "#fff",
fontSize: "13"
}
},
geo: {
type: "map",
map: "china",
//height: "100%",
top: 0,
width: "50%",
roam: true,
zoom: 1,
scaleLimit: {
//滚轮缩放的极限控制
min: 0.6, //最小的缩放值
max: 20
},
// 地图区域的样式设置
itemStyle: {
borderColor: "#fff",
borderWidth: 1,
areaColor: "#c1dbff"
}
},
// 要显示的散点数据
series: [
{
name: "社区分布数量图",
type: "scatter",
coordinateSystem: "geo", //设置坐标系为 geo
data: this.mapData,
itemStyle: {
color: function (params) {
//根据不同数据显示不同颜色的标记
if (params.data.text.customerAccount >= 100) {
return "#67c23a";
} else {
return "#409eff";
}
}
}
}
]
};
// 将配置应用到地图上
this.map.setOption(option);
});
},
}
}
</script>
......@@ -265,4 +360,20 @@
}
}
}
.map-box {
background-color: #fff;
padding: 20px;
.dealt-with {
width: 100%;
max-width: 100%;
overflow-x: auto;
display: flex;
.box {
border: 1px solid #f5f5f5;
}
}
}
</style>
\ No newline at end of file
......@@ -110,7 +110,7 @@
const columns = [
{
title: '菜单名称111',
title: '菜单名称',
dataIndex: 'name',
key: 'name'
}, {
......
......@@ -6,21 +6,21 @@
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<a-form-item label="物业名称">
<a-input placeholder="请输入物业名称" v-model="queryParam.dataTable"></a-input>
<a-input placeholder="请输入物业名称" v-model="queryParam.propertyName"></a-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="入驻时间">
<a-input placeholder="请选择入驻时间" v-model="queryParam.dataId"></a-input>
<a-input placeholder="请选择入驻时间" v-model="queryParam.createTime"></a-input>
</a-form-item>
</a-col>
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a-button type="primary" @click="searchQuery">查询</a-button>
<a-button style="margin-left: 8px" @click="searchReset">重置</a-button>
</a-col>
</span>
<a-col :md="6" :sm="24">
<a-button type="primary" @click="searchQuery">查询</a-button>
<a-button style="margin-left: 8px" @click="searchReset">重置</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
......@@ -59,11 +59,11 @@
class="j-table-force-nowrap"
@change="handleTableChange"
>
<span slot="empowerDate" slot-scope="text, record">
<span>{{record.empowerBeginDate}}{{record.empowerEndDate}}</span>
<span slot="propertyStatus" slot-scope="text, record">
<span>{{record.propertyStatus === 'normal' ? '正常' : '冻结'}}</span>
</span>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a @click="onLoadDetail(record, 'edit')">编辑</a>
<a-divider type="vertical"/>
<a-dropdown>
......@@ -71,10 +71,18 @@
更多 <a-icon type="down"/>
</a>
<a-menu slot="overlay">
<a-menu-item v-if="record.auditStatus !== 'waitAudit'">
<a @click="handlePerssion(record.roleId)">授权</a>
</a-menu-item>
<a-menu-item>
<a href="javascript:;" @click="handleDetail(record)">详情</a>
<a href="javascript:;" @click="onLoadDetail(record)">详情</a>
</a-menu-item>
<a-menu-item v-if="record.auditStatus === 'waitAudit'">
<a href="javascript:;" @click="onExamine(record)">审核</a>
</a-menu-item>
<a-menu-item>
<a href="javascript:;" @click="onStatus(record)">{{record.propertyStatus === 'normal' ? '冻结' : '解冻'}}</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)" placement="topLeft">
<a>删除</a>
......@@ -83,14 +91,6 @@
</a-menu>
</a-dropdown>
</span>
<!-- 字符串超长截取省略号显示 -->
<span slot="url" slot-scope="text">
<j-ellipsis :value="text" :length="25"/>
</span>
<!-- 字符串超长截取省略号显示-->
<span slot="component" slot-scope="text">
<j-ellipsis :value="text"/>
</span>
</a-table>
</div>
......@@ -98,165 +98,16 @@
<property-settled-modal ref="modalForm" @ok="modalFormOk"></property-settled-modal>
<a-modal
:title="modalTitle + '入驻物业集团'"
width="60%"
:visible="visible"
:closable="false"
:maskClosable="false"
>
<template slot="footer">
<a-button @click="close">关闭</a-button>
<a-button type="primary" @click="onSubmit">确认</a-button>
</template>
<a-form-model
ref="ruleForm"
:model="form"
:rules="rules"
:label-col="labelCol"
:wrapper-col="wrapperCol"
>
<a-card title="物业集团基本信息">
<a-row>
<a-col :span="12">
<a-form-model-item label="物业集团名称" prop="propertyName">
<a-input
v-model="form.propertyName"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="统一信用代码" prop="propertyCode">
<a-input
v-model="form.propertyCode"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="法人代表" prop="legalName">
<a-input
v-model="form.legalName"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="注册资本" prop="registCapital">
<a-input-number id="inputNumber" v-model="form.registCapital" :min="1" />
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="联系人" prop="contactName">
<a-input
v-model="form.contactName"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="联系人电话" prop="contactPhone">
<a-input
v-model="form.contactPhone"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="注册地址" prop="registAdress">
<a-input
v-model="form.registAdress"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="详细地址" prop="adressInfo" :labelCol="{ span: 3 }">
<a-input
v-model="form.adressInfo"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="21" :offset="3">
<a-form-model-item label="" :labelCol="{ span: 3 }">
<div>
<div id="container" style="width:100%;height:100%"></div>
</div>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="集团LOGO" prop="logoUrl" :labelCol="{ span: 3 }">
<j-image-upload bizPath="scott/pic" v-model="form.logoUrl"></j-image-upload>
<span>只能上传jpg/png格式文件,文件不能超过50kb</span>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="集团介绍" prop="groupInfo" :labelCol="{ span: 3 }">
<a-textarea
v-model="form.groupInfo"
placeholder="请输入"
:auto-size="{ minRows: 3, maxRows: 5 }"
/>
</a-form-model-item>
</a-col>
</a-row>
</a-card>
<a-card title="授权信息">
<a-row>
<a-col :span="24">
<a-form-model-item label="授权日期" prop="empowerType" :labelCol="{ span: 3 }">
<a-radio-group v-model="form.empowerType">
<a-radio value="1">永久</a-radio>
<a-radio value="2">授权日期</a-radio>
</a-radio-group>
</a-form-model-item>
</a-col>
<a-col :span="21" :offset="3" v-if="form.empowerType === '2'">
<a-form-model-item label="" prop="empowerDate">
<a-range-picker v-model="form.empowerDate" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="授权物业数量" prop="empowerPropertyNum" :labelCol="{ span: 3 }">
<a-input-number id="inputNumber" v-model="form.empowerPropertyNum" :min="1" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="收费标准" prop="chargingStandardId" :labelCol="{ span: 3 }">
<a-select style="width: 120px" v-model="form.chargingStandardId">
<a-select-option value="lucy">Lucy</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
</a-row>
</a-card>
<a-card title="合同附件">
<a-row>
<a-col :span="24">
<a-form-model-item label="合同附件" prop="contractUrl" :labelCol="{ span: 3 }">
<j-upload v-model="form.contractUrl"></j-upload>
</a-form-model-item>
</a-col>
</a-row>
</a-card>
</a-form-model>
</a-modal>
<!-- 右侧的角色权限配置 -->
<user-role-modal ref="modalUserRole"></user-role-modal>
</a-card>
</template>
<script>
import { getPropertyListApi, getSystemSubmenu, getSystemSubmenuBatch } from '@/api/api'
import { auditPropertyApi, freezeOrPropertyApi } from '@/api/api'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import PropertySettledModal from './modules/PropertySettledModal'
import JEllipsis from '@/components/jeecg/JEllipsis'
import JImageUpload from '@/components/jeecg/JImageUpload'
import JUpload from '@/components/jeecg/JUpload'
import UserRoleModal from './modules/UserRoleModal'
import {filterDictTextByCache} from '@/components/dict/JDictSelectUtil'
const columns = [
......@@ -304,9 +155,10 @@
key: 'ontrialEndDate'
},
{
title: '冻结/解冻',
dataIndex: 'refuseDesc',
key: 'refuseDesc'
title: '状态',
dataIndex: 'propertyStatus',
scopedSlots: { customRender: 'propertyStatus' },
key: 'propertyStatus'
},
{
title: '操作',
......@@ -322,106 +174,80 @@
mixins: [JeecgListMixin],
components: {
PropertySettledModal,
JEllipsis,
JUpload,
JImageUpload
UserRoleModal
},
data() {
return {
// 表头
columns: columns,
loading: false,
pagination: {},
url: {
list: "/property/propertySettled/list",
delete: '/sys/permission/delete',
deleteBatch: '/sys/permission/deleteBatch'
pagination: {
total: 0,
current: 1,
pageSize: 10,
showSizeChanger: true
},
modalTitle: '新增',
visible: false,
labelCol: { span: 6 },
wrapperCol: { span: 14 },
other: '',
form: {
propertyName: '',
propertyCode: '',
legalName: '',
registCapital: undefined,
contactName: '',
contactPhone: '',
registAdress: '',
adressInfo: '',
logoUrl: [],
groupInfo: '',
empowerType: '1',
empowerDate: [],
empowerPropertyNum: undefined,
chargingStandardId: '',
contractUrl: []
},
rules: {
propertyName: [{ required: true, message: '请输入物业集团名称', trigger: 'blur' }],
propertyCode: [{ required: true, message: '请输入统一信用代码', trigger: 'blur' }],
legalName: [{ required: true, message: '请输入法人代表', trigger: 'blur' }],
registCapital: [{ required: true, message: '请输入注册资本', trigger: 'blur' }],
contactName: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
contactPhone: [{ required: true, message: '请输入联系人电话', trigger: 'blur' }],
registAdress: [{ required: true, message: '请选择注册地址', trigger: 'change' }],
adressInfo: [{ required: true, message: '请输入详细地址', trigger: 'blur' }],
logoUrl: [{ required: true, message: '请上传集团LOGO', trigger: 'change' }],
empowerPropertyNum: [{ required: true, message: '请输入授权物业数量', trigger: 'blur' }],
chargingStandardId: [{ required: true, message: '请选择收费标准', trigger: 'change' }],
contractUrl: [{ required: true, message: '请上传合同附件', trigger: 'change' }]
url: {
list: "/property-central/property/propertySettled/list",
delete: '/property-central/property/propertySettled/delete',
deleteBatch: '/property-central/property/propertySettled/deleteBatch'
},
uploadDisabled: false
}
},
methods: {
loadData() {
this.loading = true
getPropertyListApi({
pageNo: 1,
pageSize: 10
}).then((res) => {
if (res.success) {
const pagination = { ...this.pagination };
pagination.total = res.result.total
this.dataSource = res.result.records
}
}).finally(()=>{
this.loading = false
})
onLoadDetail(record, type) {
record['registAdress'] = [record.provinceCode, record.cityCode, record.countyCode]
if(type === 'edit') {
this.handleEdit(record)
} else {
this.handleDetail(record)
}
},
onSubmit() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
onExamine(record) {
let that = this
this.$confirm({
title: '确认审核此物业?',
closable: true,
okText: '审核通过',
cancelText: '审核驳回',
onOk() {
return auditPropertyApi({
id: record.id,
auditStatus: 'auditPass'
}).then(res=> {
that.searchQuery()
})
},
onCancel() {
return auditPropertyApi({
id: record.id,
auditStatus: 'refuse'
}).then(res=> {
that.searchQuery()
})
}
});
},
close() {
this.visible = false
},
handleSelectChange() {},
handleSubmit() {},
onSubmit() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
onStatus(record) {
let that = this
this.$confirm({
title: `确认${record.propertyStatus === 'normal' ? '冻结' : '解冻'}此物业?`,
closable: true,
okText: `${record.propertyStatus === 'normal' ? '冻结' : '解冻'}`,
onOk() {
return freezeOrPropertyApi({
id: record.id,
status: `${record.propertyStatus === 'normal' ? 'freeze' : 'normal'}`
}).then(res=> {
that.searchQuery()
})
},
onCancel() {}
});
},
resetForm() {
this.$refs.ruleForm.resetFields();
},
handlePerssion(roleId) {
this.$refs.modalUserRole.show(roleId);
}
}
}
</script>
......
......@@ -48,7 +48,7 @@
</a-col>
<a-col :span="24">
<a-form-model-item label="详细地址" :labelCol="{ xs:{ span: 24 }, sm:{ span: 3 } }" :wrapperCol="wrapperCol" prop="addressInfo">
<a-input v-model="model.addressInfo" placeholder="请输入详细地址" ></a-input>
<a-input v-model="model.addressInfo" placeholder="请输入详细地址" @blur="addressBlur" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
......@@ -128,9 +128,9 @@
<script>
const mapZoom = [5,8,10,12]
let timer = null;
import { getCostListApi } from '@/api/api'
import { getPropertyChargruleListApi } from '@/api/api'
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
import { isMobile } from '@/utils/validate'
export default {
name: 'PropertySettledForm',
......@@ -143,34 +143,41 @@
}
},
data () {
const validateToNextPhone = (rule, value, callback)=> {
if (value && isMobile(value)) {
callback();
} else {
callback('请输入正确的联系人电话!');
}
}
return {
pcaa: this.$Jpcaa,
model:{
propertyName: '恒大集团',
creditCode: '3452342342',
legalName: '张三',
registCapital: 100000,
contactName: '李四',
propertyName: '',
creditCode: '',
legalName: '',
registCapital: undefined,
contactName: '',
contactPhone: '',
registAdress: '',
registAdress: [],
provinceName: '',
provinceCode: '',
cityName: '',
cityCode: '',
countyName: '',
countyCode: '',
addressInfo: '三岩街道',
logoUrl: 'scott/pic/20230306163904_1683357843947.jpg',
groupInfo: '我们是海企业',
empowerBeginDate: '2023-05-04',
empowerEndDate: '2023-05-31',
ontrialCommunityNum: 12,
addressInfo: '',
logoUrl: '',
groupInfo: '',
empowerBeginDate: '',
empowerEndDate: '',
ontrialCommunityNum: undefined,
chargingStandardId: '',
contractUrl: 'temp/阿里开发手册_1683357897532.pdf',
contractUrl: '',
adminLoginName: '',
adminPassword: '123456',
longitude: '32.43324232',
latitude: '123.3453453'
longitude: '',
latitude: ''
},
labelCol: {
xs: { span: 24 },
......@@ -187,7 +194,10 @@
legalName: [{ required: true, message: '请输入法人代表', trigger: 'blur' }],
registCapital: [{ required: true, message: '请输入注册资本', trigger: 'blur' }],
contactName: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
contactPhone: [{ required: true, message: '请输入联系人电话', trigger: 'blur' }],
contactPhone: [
{ required: true, message: '请输入联系人电话', trigger: 'blur' },
{ validator: validateToNextPhone }
],
registAdress: [{ required: true, message: '请选择注册地址', trigger: 'change' }],
addressInfo: [{ required: true, message: '请输入详细地址', trigger: 'blur' }],
logoUrl: [{ required: true, message: '请上传集团LOGO', trigger: 'change' }],
......@@ -197,9 +207,9 @@
contractUrl: [{ required: true, message: '请上传合同附件', trigger: 'change' }]
},
url: {
add: "/property/propertySettled/add",
edit: "/propertySettled/propertySettled/edit",
queryById: "/propertySettled/propertySettled/queryById"
add: "/property-central/property/propertySettled/add",
edit: "/property-central/property/propertySettled/edit",
queryById: "/property-central/property/propertySettled/queryById"
},
costList: [],
mapRef: null,
......@@ -243,11 +253,8 @@
},
methods: {
async onLoadCostList() {
let data = await getCostListApi({
pageNo: 1,
pageSize: 10
})
this.costList = data.result.records
let data = await getPropertyChargruleListApi()
this.costList = data.result
},
add () {
this.edit(this.modelDefault);
......@@ -270,6 +277,11 @@
this.getLongitude(this.model.provinceName, (this.model.provinceName + this.model.cityName + this.model.countyName + this.model.addressInfo), mapZoom[3])
}
},
addressBlur(val) {
if(this.model.provinceName) {
this.getLongitude(this.model.provinceName, (this.model.provinceName + this.model.cityName + this.model.countyName + val.target.value), mapZoom[3])
}
},
getAddress(e) {
let _this = this;
// 创建地理编码实例
......@@ -315,6 +327,8 @@
myGeo.getPoint(address, function(point){
if(point){
_this.mapRef.clearOverlays();
_this.model.longitude = point.lng
_this.model.latitude = point.lat
_this.positionMap(point.lng, point.lat, zoom, address)
}else{
console.log('您选择的地址没有解析到结果!');
......@@ -336,7 +350,7 @@
httpurl+=this.url.edit;
method = 'put';
}
this.model.registAdress = null
this.model.registAdress = undefined
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
......
<template>
<a-drawer
title="数据规则/按钮权限配置"
width="365"
:closable="false"
@close="onClose"
:visible="visible"
>
<a-tabs defaultActiveKey="1">
<a-tab-pane tab="数据规则" key="1">
<a-checkbox-group v-model="dataruleChecked" v-if="dataruleList.length>0">
<a-row>
<a-col :span="24" v-for="(item,index) in dataruleList" :key=" 'dr'+index ">
<a-checkbox :value="item.id">{{ item.ruleName }}</a-checkbox>
</a-col>
<a-col :span="24">
<div style="width: 100%;margin-top: 15px">
<a-button @click="saveDataruleForRole" type="primary" size="small" icon="save">点击保存</a-button>
</div>
</a-col>
</a-row>
</a-checkbox-group>
<div v-else><h3>无配置信息!</h3></div>
</a-tab-pane>
<!--<a-tab-pane tab="按钮权限" key="2">敬请期待!!!</a-tab-pane>-->
</a-tabs>
</a-drawer>
</template>
<script>
import ARow from 'ant-design-vue/es/grid/Row'
import ACol from 'ant-design-vue/es/grid/Col'
import { getAction,postAction } from '@/api/manage'
export default {
name: 'RoleDataruleModal',
components: { ACol, ARow },
data(){
return {
functionId:'',
roleId:'',
visible:false,
tabList: [{
key: '1',
tab: '数据规则',
}, {
key: '2',
tab: '按钮权限',
}],
activeTabKey: '1',
url:{
datarule:"/sys/role/datarule",
},
dataruleList:[],
dataruleChecked:[]
}
},
methods:{
loadData(){
getAction(`${this.url.datarule}/${this.functionId}/${this.roleId}`).then(res=>{
console.log(res)
if(res.success){
this.dataruleList = res.result.datarule
let drChecked = res.result.drChecked
if(drChecked){
this.dataruleChecked = drChecked.split(",")
}
}
})
},
saveDataruleForRole(){
if(!this.dataruleChecked || this.dataruleChecked.length==0){
this.$message.warning("请注意,现未勾选任何数据权限!")
}
let params = {
permissionId:this.functionId,
roleId:this.roleId,
dataRuleIds:this.dataruleChecked.join(",")
}
console.log("保存数据权限",params)
postAction(this.url.datarule,params).then(res=>{
if(res.success){
this.$message.success(res.message)
}else{
this.$message.error(res.message)
}
})
},
show(functionId,roleId){
this.onReset()
this.functionId = functionId
this.roleId = roleId
this.visible=true
this.loadData()
},
onClose(){
this.visible=false
this.onReset()
},
onTabChange (key) {
this.activeTabKey = key
},
onReset(){
this.functionId=''
this.roleId=''
this.dataruleList=[]
this.dataruleChecked=[]
}
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<a-drawer
:title="title"
:maskClosable="true"
width=650
placement="right"
:closable="true"
@close="close"
:visible="visible"
style="overflow: auto;padding-bottom: 53px;">
<a-form>
<a-form-item label='所拥有的权限'>
<a-tree
checkable
@check="onCheck"
:checkedKeys="checkedKeys"
:treeData="treeData"
@expand="onExpand"
@select="onTreeNodeSelect"
:selectedKeys="selectedKeys"
:expandedKeys="expandedKeysss"
:checkStrictly="checkStrictly">
<span slot="hasDatarule" slot-scope="{slotTitle,ruleFlag}">
{{ slotTitle }}<a-icon v-if="ruleFlag" type="align-left" style="margin-left:5px;color: red;"></a-icon>
</span>
</a-tree>
</a-form-item>
</a-form>
<div class="drawer-bootom-button">
<a-dropdown style="float: left" :trigger="['click']" placement="topCenter">
<a-menu slot="overlay">
<a-menu-item key="1" @click="switchCheckStrictly(1)">父子关联</a-menu-item>
<a-menu-item key="2" @click="switchCheckStrictly(2)">取消关联</a-menu-item>
<a-menu-item key="3" @click="checkALL">全部勾选</a-menu-item>
<a-menu-item key="4" @click="cancelCheckALL">取消全选</a-menu-item>
<a-menu-item key="5" @click="expandAll">展开所有</a-menu-item>
<a-menu-item key="6" @click="closeAll">合并所有</a-menu-item>
</a-menu>
<a-button>
树操作 <a-icon type="up" />
</a-button>
</a-dropdown>
<a-popconfirm title="确定放弃编辑?" @confirm="close" okText="确定" cancelText="取消">
<a-button style="margin-right: .8rem">取消</a-button>
</a-popconfirm>
<a-button @click="handleSubmit(false)" type="primary" :loading="loading" ghost style="margin-right: 0.8rem">仅保存</a-button>
<a-button @click="handleSubmit(true)" type="primary" :loading="loading">保存并关闭</a-button>
</div>
<role-datarule-modal ref="datarule"></role-datarule-modal>
</a-drawer>
</template>
<script>
import {queryTreeListByTypeForRole,queryRolePermission,saveRolePermission} from '@/api/api'
import RoleDataruleModal from './RoleDataruleModal.vue'
export default {
name: "RoleModal",
components:{
RoleDataruleModal
},
data(){
return {
roleId:"",
treeData: [],
defaultCheckedKeys:[],
checkedKeys:[],
expandedKeysss:[],
allTreeKeys:[],
autoExpandParent: true,
checkStrictly: true,
title:"物业权限配置",
visible: false,
loading: false,
selectedKeys:[]
}
},
methods: {
onTreeNodeSelect(id){
if(id && id.length>0){
this.selectedKeys = id
}
this.$refs.datarule.show(this.selectedKeys[0],this.roleId)
},
onCheck (o) {
if(this.checkStrictly){
this.checkedKeys = o.checked;
}else{
this.checkedKeys = o
}
},
show(roleId){
this.roleId=roleId
this.visible = true;
},
close () {
this.reset()
this.$emit('close');
this.visible = false;
},
onExpand(expandedKeys){
this.expandedKeysss = expandedKeys;
this.autoExpandParent = false
},
reset () {
this.expandedKeysss = []
this.checkedKeys = []
this.defaultCheckedKeys = []
this.loading = false
},
expandAll () {
this.expandedKeysss = this.allTreeKeys
},
closeAll () {
this.expandedKeysss = []
},
checkALL () {
this.checkedKeys = this.allTreeKeys
},
cancelCheckALL () {
//this.checkedKeys = this.defaultCheckedKeys
this.checkedKeys = []
},
switchCheckStrictly (v) {
if(v==1){
this.checkStrictly = false
}else if(v==2){
this.checkStrictly = true
}
},
handleCancel () {
this.close()
},
handleSubmit(exit) {
let that = this;
let params = {
roleId:that.roleId,
permissionIds:that.checkedKeys.join(","),
lastpermissionIds:that.defaultCheckedKeys.join(","),
};
that.loading = true;
console.log("请求参数:",params);
saveRolePermission(params).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.loading = false;
if (exit) {
that.close()
}
}else {
that.$message.error(res.message);
that.loading = false;
if (exit) {
that.close()
}
}
this.loadData();
})
},
loadData(){
queryTreeListByTypeForRole().then((res) => {
this.treeData = res.result.treeList
this.allTreeKeys = res.result.ids
queryRolePermission({roleId:this.roleId}).then((res)=>{
this.checkedKeys = [...res.result];
this.defaultCheckedKeys = [...res.result];
this.expandedKeysss = this.allTreeKeys;
console.log(this.defaultCheckedKeys)
})
})
}
},
watch: {
visible () {
if (this.visible) {
this.loadData();
}
}
}
}
</script>
<style lang="less" scoped>
.drawer-bootom-button {
position: absolute;
bottom: 0;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
</style>
\ No newline at end of file
<template xmlns:background-color="http://www.w3.org/1999/xhtml">
<a-row :gutter="10">
<a-col :md="12" :sm="24">
<a-col :md="24" :sm="24">
<a-card :bordered="false">
<!-- 按钮操作区域 -->
......@@ -70,7 +70,7 @@
</div>
<!---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------>
</a-col>
<a-col :md="12" :sm="24">
<!-- <a-col :md="12" :sm="24">
<a-tabs defaultActiveKey="1">
<a-tab-pane tab="基本信息" key="1" >
<a-card :bordered="false" v-if="selectedKeys.length>0">
......@@ -142,7 +142,7 @@
</a-tab-pane>
</a-tabs>
</a-col>
</a-col> -->
<depart-modal ref="departModal" @ok="loadTree"></depart-modal>
</a-row>
</template>
......
......@@ -263,12 +263,12 @@
width: 180,
dataIndex: 'orgCodeTxt'
},
{
title: '负责部门',
align: "center",
width: 180,
dataIndex: 'departIds_dictText'
},
// {
// title: '负责部门',
// align: "center",
// width: 180,
// dataIndex: 'departIds_dictText'
// },
{
title: '状态',
align: "center",
......
......@@ -40,17 +40,17 @@
<a-input placeholder="请输入用户姓名" v-model="model.realname" />
</a-form-model-item>
<a-form-model-item label="工号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workNo">
<!-- <a-form-model-item label="工号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workNo">
<a-input placeholder="请输入工号" v-model="model.workNo" />
</a-form-model-item>
</a-form-model-item> -->
<a-form-model-item label="手机号码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="phone">
<a-input placeholder="请输入手机号码" v-model="model.phone" />
</a-form-model-item>
<a-form-model-item label="职务" :labelCol="labelCol" :wrapperCol="wrapperCol">
<!-- <a-form-model-item label="职务" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-select-position placeholder="请选择职务" :multiple="false" v-model="model.post"/>
</a-form-model-item>
</a-form-model-item> -->
<a-form-model-item label="角色分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!roleDisabled" >
<j-multi-select-tag
......@@ -67,21 +67,21 @@
</a-form-model-item>
<!--租户分配-->
<a-form-model-item label="租户分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!departDisabled">
<!-- <a-form-model-item label="租户分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!departDisabled">
<j-multi-select-tag
:disabled="disableSubmit"
v-model="model.relTenantIds"
:options="tenantsOptions"
placeholder="请选择租户">
</j-multi-select-tag>
</a-form-model-item>
</a-form-model-item> -->
<a-form-model-item label="身份" :labelCol="labelCol" :wrapperCol="wrapperCol">
<!-- <a-form-model-item label="身份" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-radio-group v-model="model.userIdentity" @change="identityChange">
<a-radio :value="1">普通用户</a-radio>
<a-radio :value="2">上级</a-radio>
</a-radio-group>
</a-form-model-item>
</a-form-model-item> -->
<a-form-model-item label="负责部门" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="departIdShow==true">
<j-multi-select-tag
:disabled="disableSubmit"
......@@ -119,9 +119,9 @@
<a-input placeholder="请输入座机" v-model="model.telephone" />
</a-form-model-item>
<a-form-model-item label="工作流引擎" :labelCol="labelCol" :wrapperCol="wrapperCol">
<!-- <a-form-model-item label="工作流引擎" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag v-model="model.activitiSync" placeholder="请选择是否同步工作流引擎" :type="'radio'" dictCode="activiti_sync"/>
</a-form-model-item>
</a-form-model-item> -->
</a-form-model>
</a-spin>
......@@ -171,8 +171,8 @@
phone: [{required: true, message: '请输入手机号!'}, {validator: this.validatePhone}],
email: [{validator: this.validateEmail}],
roles:{},
workNo:[ { required: true, message: '请输入工号' },
{ validator: this.validateWorkNo }],
// workNo:[ { required: true, message: '请输入工号' },
// { validator: this.validateWorkNo }],
telephone: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '请输入正确的座机号码' },]
},
departIdShow:false,
......@@ -206,7 +206,7 @@
const token = Vue.ls.get(ACCESS_TOKEN);
this.headers = {"X-Access-Token":token}
this.initRoleList()
this.initTenantList()
// this.initTenantList()
},
computed:{
uploadAction:function () {
......@@ -339,9 +339,9 @@
if (valid) {
that.confirmLoading = true;
//如果是上级择传入departIds,否则为空
if(this.model.userIdentity!==2){
this.model.departIds="";
}
// if(this.model.userIdentity!==2){
// this.model.departIds="";
// }
let obj;
if(!this.model.id){
this.model.id = this.userId;
......
......@@ -71,7 +71,7 @@
handleChangeCheckCode(){
this.currdatetime = new Date().getTime();
this.model.inputCode = ''
getAction(`/sys/randomImage/${this.currdatetime}`).then(res=>{
getAction(`/property-system/sys/randomImage/${this.currdatetime}`).then(res=>{
if(res.success){
this.randCodeImage = res.result
this.requestCodeSuccess=true
......@@ -131,6 +131,7 @@
captcha: this.model.inputCode,
checkKey: this.currdatetime,
remember_me: rememberMe,
platformType: 'central'
}
console.log("登录参数", loginParams)
this.Login(loginParams).then((res) => {
......
......@@ -25,7 +25,7 @@ module.exports = {
// }
// },
//打包app时放开该配置
publicPath: './',
// publicPath: './',
configureWebpack: config => {
//生产环境取消 console.log
if (process.env.NODE_ENV === 'production') {
......
......@@ -4573,6 +4573,14 @@ ecc-jsbn@~0.1.1:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
echarts@^5.4.2:
version "5.4.2"
resolved "https://registry.yarnpkg.com/echarts/-/echarts-5.4.2.tgz#9f38781c9c6ae323e896956178f6956952c77a48"
integrity sha512-2W3vw3oI2tWJdyAz+b8DuWS0nfXtSDqlDmqgin/lfzbkB01cuMEN66KWBlmur3YMp5nEDEEt5s23pllnAzB4EA==
dependencies:
tslib "2.3.0"
zrender "5.4.3"
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
......@@ -11019,6 +11027,11 @@ tsconfig-paths@^3.9.0:
minimist "^1.2.0"
strip-bom "^3.0.0"
tslib@2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
tslib@^1.10.0, tslib@^1.9.0:
version "1.13.0"
resolved "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
......@@ -12081,3 +12094,10 @@ yorkie@^2.0.0:
is-ci "^1.0.10"
normalize-path "^1.0.0"
strip-indent "^2.0.0"
zrender@5.4.3:
version "5.4.3"
resolved "https://registry.yarnpkg.com/zrender/-/zrender-5.4.3.tgz#41ffaf835f3a3210224abd9d6964b48ff01e79f5"
integrity sha512-DRUM4ZLnoaT0PBVvGBDO9oWIDBKFdAVieNWxWwK0niYzJCMwGchRk21/hsE+RKkIveH3XHCyvXcJDkgLVvfizQ==
dependencies:
tslib "2.3.0"
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论