提交 6dd0b4b4 authored 作者: 赵明's avatar 赵明

小区商铺

上级 cb4d61a7
......@@ -48,6 +48,7 @@ const loadAllRoleIds = (params)=>getAction("/sys/permission/loadAllRoleIds",para
const getPermissionRuleList = (params)=>getAction("/sys/permission/getPermRuleListByPermId",params);
const queryPermissionRule = (params)=>getAction("/sys/permission/queryPermissionRule",params);
const queryTreeListByTypeForRole = (params)=>getAction("/sys/role/queryTreeListByType",{...params, platformType: 'committee'});
const queryTreeListByTypeForRoles = (params)=>getAction("/sys/role/queryTreeListByType",{...params, platformType: 'shop'});
// 部门管理
const queryDepartTreeList = (params)=>getAction("/sys/sysDepart/queryTreeList",params);
......@@ -117,7 +118,12 @@ const getAccountListByIdApi = (params)=>getAction("/property-community/property/
const communityAuditAccountPageApi = (params)=>postAction("/property-community/property/communityReconciliation/communityAudit",params);
const getCommunityRecordListApi = (params)=>getAction("/property-central/property/auditRecord/getRecordList",params);
const communitySubCompanyApi = (params)=>getAction("/property-community/property/communityReconciliation/communitySubCompany",params);
// 商铺管理
const shopAuditApi = (params)=>postAction("/property-central/shop/shopInfo/audit",params);
const shopDeleteApi = (params)=>deleteAction("/property-central/shop/shopCommunity/delete",params);
const shopDetailApi = (params)=>getAction("/property-central/shop/shopInfo/queryById",params);
const freezeOrThawApi = (params)=>getAction(`/property-central/shop/shopInfo/freezeOrThaw/${params.id}/${params.status}`,params);
const shopCommunityApi = (params)=>getAction("/property-central/shop/shopCommunity/list",params);
// 分利规则管理
const getRuleDayDetailApi = (params)=>getAction("/property-central/sharerule/settlementSet/queryById?id=1",params);
// 分利对账管理
......@@ -200,6 +206,7 @@ export {
getPermissionRuleList,
queryPermissionRule,
queryTreeListByTypeForRole,
queryTreeListByTypeForRoles,
queryDepartTreeList,
queryDepartTreeSync,
queryIdTree,
......@@ -272,7 +279,12 @@ export {
geCommunityDeleteApi,
getRuleDayDetailApi,
getshareBenefitApi,
getshareBalanceApi
getshareBalanceApi,
shopAuditApi,
shopDeleteApi,
shopDetailApi,
freezeOrThawApi,
shopCommunityApi
}
......
......@@ -47,3 +47,7 @@ export const isValidPermit = permit=> {
const reg = /^[HMhm]{1}([0-9]{10}|[0-9]{8})$/; //港澳通行证
return reg.test(permit)
}
/* 校验字母*/
export function alphanumeric(s) {
return /^[a-zA-Z]+$/.test(s)
}
差异被折叠。
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<a-form-item label="商铺名称">
<a-input placeholder="请输入商铺名称" v-model="queryParam.shopName"></a-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="入驻时间">
<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-row>
</a-form>
</div>
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="shopDetails(1)" type="primary" icon="plus">添加</a-button>
</div>
<!-- table区域-begin -->
<div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="pagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange"
>
<span slot="buildingName" slot-scope="text, record">
<span>{{`${record.buildingName}-${record.unitName}-${record.roomName}`}}</span>
</span>
<span slot="shopStatus" slot-scope="text, record">
<span v-if="record.shopStatus=='normal'" class="success">正常</span>
<span v-if="record.shopStatus=='freeze'" class="error">冻结</span>
</span>
<span slot="action" slot-scope="text, record">
<a href="javascript:;"
@click="onShopStatus(record)">{{record.shopStatus === 'normal' ? '冻结' : '解冻'}}</a>
<a-divider type="vertical"/>
<a-dropdown>
<a class="ant-dropdown-link">
更多 <a-icon type="down"/>
</a>
<a-menu slot="overlay">
<a-menu-item v-if="record.auditStatus === 'auditPass'">
<a @click="handlePerssion(record.roleId)">授权</a>
</a-menu-item>
<a-menu-item>
<a @click="shopDetails(4,record.id )">详情</a>
</a-menu-item>
<a-menu-item v-if="record.auditStatus != 'auditPass'">
<a @click="shopDetails(3, record.id)">编辑</a>
</a-menu-item>
<a-menu-item v-if="record.auditStatus != 'auditPass'">
<a @click="shopDetails(2, record.id)">审核</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDeletes(record.shopCode)" placement="topLeft">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
<!-- 字符串超长截取省略号显示 -->
</a-table>
</div>
<!-- table区域-end -->
<!-- 右侧的角色权限配置 -->
<user-role-modal ref="modalUserRole"></user-role-modal>
</a-card>
</template>
<script>
import {freezeOrThawApi, shopDeleteApi, shopAuditApi} from '@/api/api'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import JEllipsis from '@/components/jeecg/JEllipsis'
import JUpload from '@/components/jeecg/JUpload'
import UserRoleModal from './modules/UserRoleModal'
import {filterDictTextByCache} from '@/components/dict/JDictSelectUtil'
const columns = [
{
title: '商铺名称',
dataIndex: 'shopName',
key: 'shopName',
align: 'center',
},
{
title: '营业执照编码',
dataIndex: 'creditCode',
key: 'creditCode',
align: 'center',
},
{
title: '法人',
dataIndex: 'legalName',
key: 'legalName',
align: 'center',
},
{
title: '电话',
dataIndex: 'contactPhone',
key: 'contactPhone',
align: 'center',
},
{
title: '房屋编号',
dataIndex: 'buildingName',
key: 'buildingName',
align: 'center',
scopedSlots: { customRender: 'buildingName' },
},
{
title: '添加时间',
dataIndex: 'createTime',
key: 'createTime',
align: 'center',
},
{
title: '审核状态',
dataIndex: 'auditStatus',
key: 'auditStatus',
align: 'center',
customRender: function(text) {
return filterDictTextByCache('auditStatus', text);
}
},
{
title: '冻结/解冻',
dataIndex: 'shopStatus',
key: 'shopStatus',
align: 'center',
scopedSlots: { customRender: 'shopStatus' },
},
{
title: '操作',
dataIndex: 'action',
scopedSlots: { customRender: 'action' },
align: 'center',
width: 150
}
]
export default {
name: 'PermissionListAsync',
mixins: [JeecgListMixin],
components: {
JEllipsis,
JUpload,
UserRoleModal
},
data() {
return {
// 表头
columns: columns,
loading: false,
pagination: {
total: 0,
current: 1,
pageSize: 10,
showSizeChanger: true
},
url: {
list: "/property-central/shop/shopInfo/list",
audit: "/property-central/shop/shopInfo/audit",
},
labelCol: { span: 6 },
wrapperCol: { span: 14 },
other: '',
uploadDisabled: false
}
},
methods: {
onLoadDetail(record, type) {
record['registAdress'] = [record.provinceCode, record.cityCode, record.countyCode]
if(type === 'edit') {
this.handleEdit(record)
} else {
this.handleDetail(record)
}
},
shopDetails(type, id) {
if (type == 1) {
this.$router.push({
path: '/shops/ShopDetail?type=add',
})
} else if (type == 2) {
this.$router.push({
path: '/shops/ShopDetail?type=audit&id=' + id,
})
}else if (type == 3) {
this.$router.push({
path: '/shops/ShopDetail?type=edit&id=' + id,
})
}else if (type == 4) {
this.$router.push({
path: '/shops/ShopDetail?type=detail&id=' + id,
})
}
},
handleDeletes(id) {
shopDeleteApi({shopCode:id}).then(res=> {
this.$message.success(res.message);
this.loadData()
})
},
onShopStatus(record) {
let that = this
this.$confirm({
title: `确认${record.shopStatus === 'normal' ? '冻结' : '解冻'}?`,
closable: true,
okText: `${record.shopStatus === 'normal' ? '冻结' : '解冻'}`,
onOk() {
return freezeOrThawApi({
id: record.id,
status: `${record.shopStatus === 'normal' ? 'freeze' : 'normal'}`,
}).then((res) => {
that.searchQuery()
})
},
onCancel() {},
})
},
handlePerssion(roleId) {
this.$refs.modalUserRole.show(roleId)
},
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>
<style>
.success{
color: #52c41a;
}
.warning{
color: #fa8c16;
}
.error{
color: #f5222d;
}
</style>
\ No newline at end of file
<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>
<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 {queryTreeListByTypeForRoles,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: false,
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(){
queryTreeListByTypeForRoles({platformType: 'shop'}).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>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论