Compare commits
80 Commits
c7654e5560
...
f2262e056d
@ -0,0 +1,3 @@
|
||||
NODE_ENV = 'development'
|
||||
VUE_APP_URL = 'http://121.41.26.225:8004/'
|
||||
VUE_APP_STATIC = 'https://saas.kaidalai.cn/resource/'
|
@ -0,0 +1,3 @@
|
||||
NODE_ENV = 'production'
|
||||
VUE_APP_URL = 'https://saas.kaidalai.cn/api/'
|
||||
VUE_APP_STATIC = 'https://saas.kaidalai.cn/resource/'
|
@ -0,0 +1,24 @@
|
||||
module.exports = {
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es6": true
|
||||
},
|
||||
"extends": [
|
||||
"plugin:vue/essential",
|
||||
],
|
||||
"globals": {
|
||||
"Atomics": "readonly",
|
||||
"SharedArrayBuffer": "readonly"
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2018,
|
||||
"sourceType": "module"
|
||||
},
|
||||
"plugins": [
|
||||
"vue"
|
||||
],
|
||||
"rules": {
|
||||
// indent: ['error', 'tab'],
|
||||
'no-console': 'off',
|
||||
}
|
||||
};
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 2.8 KiB |
@ -0,0 +1,180 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 工单
|
||||
// list
|
||||
export function name(params) {
|
||||
return httpService({
|
||||
url: ` `,
|
||||
method: 'get/post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 所有的工单类型
|
||||
export function getAllWorkOrderType(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrderType/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 添加工单类型
|
||||
export function AddWorkOrderType(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrderType/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 修改工单类型
|
||||
export function EditWorkOrderType(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrderType/update`,
|
||||
method: 'POST',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 删除工单类型
|
||||
export function DelWorkOrderType(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrderType/delete`,
|
||||
method: 'POST',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 所有的工单信息
|
||||
export function getAllWorkOrder(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 查询后台工单详情
|
||||
export function getDetail(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/detail`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 添加工单信息
|
||||
export function addWorkOrder(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 取消后台工单信息
|
||||
export function cancelWorkOrder(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/cancel`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 加入工单池
|
||||
export function joinTicketPool(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/joinTicketPool`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 转移至待分配
|
||||
export function moveToAssignment(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/moveToAssignment`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 指派人员
|
||||
export function designate(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/designate`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 转派人员
|
||||
export function updateDesignate(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/updateDesignate`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 工单处理
|
||||
export function process(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/process`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 完成工单
|
||||
export function finish(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/finish`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 确认工单
|
||||
export function confirm(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/confirm`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 工单结算账单
|
||||
export function workOrderCostList(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/workOrderCostList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 结算工单
|
||||
export function settlement(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/settlement`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 汇报
|
||||
export function report(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/report`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 查询工单记录
|
||||
export function orderSchedule(params) {
|
||||
return httpService({
|
||||
url: `/user/workOrder/orderSchedule`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,91 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 组织
|
||||
// 所有的组织架构
|
||||
export function departmentList(params) {
|
||||
return httpService({
|
||||
url: `/user/department/list`,
|
||||
method: 'get',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 添加组织
|
||||
export function departmentInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/department/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 组织删除
|
||||
export function departmentDel(params) {
|
||||
return httpService({
|
||||
url: `/user/department/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 组织修改
|
||||
export function departmentUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/department/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 组织员工
|
||||
export function findToUser(params) {
|
||||
return httpService({
|
||||
url: `/user/department/findToUser`,
|
||||
method: 'GET',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 新增员工
|
||||
export function insertManageUser(params) {
|
||||
return httpService({
|
||||
url: `/user/manageUser/insertManageUser`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 上传身份证照片
|
||||
export function uploadManageUserIdCard(params) {
|
||||
return httpService({
|
||||
url: `/user/upload/uploadManageUserIdCard`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 员工info
|
||||
export function manageUserInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/manageUser/findById`,
|
||||
method: 'GET',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 员工edit
|
||||
export function EditManageUser(params) {
|
||||
return httpService({
|
||||
url: `/user/manageUser/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 员工开启关闭
|
||||
export function userEnable(params) {
|
||||
return httpService({
|
||||
url: `/user/manageUser/isEnable`,
|
||||
method: 'GET',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 重置密码
|
||||
export function rePassword(params) {
|
||||
return httpService({
|
||||
url: `/user/manageUser/rePassword`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,182 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 房产 楼栋
|
||||
// 楼栋列表
|
||||
export function buildingList(params) {
|
||||
return httpService({
|
||||
url: `/user/building/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 楼栋新增
|
||||
export function buildInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/building/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 楼栋详情
|
||||
export function buildInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/building/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 楼栋修改
|
||||
export function buildUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/building/updateBuilding`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 楼栋删除
|
||||
export function buildingDel(params) {
|
||||
return httpService({
|
||||
url: `/user/building/deleteBuilding`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 全部楼栋
|
||||
export function allBuilding(params) {
|
||||
return httpService({
|
||||
url: `/user/building/findAllBuilding`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 楼栋查单元
|
||||
export function findByBuildingId(params) {
|
||||
return httpService({
|
||||
url: `/user/unit/findByBuildingId`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 单元
|
||||
* list update del
|
||||
*/
|
||||
export function unitAdd(params) {
|
||||
return httpService({
|
||||
url: `/user/unit/insertUnit`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function unitUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/unit/updateUnit`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function unitDel(params) {
|
||||
return httpService({
|
||||
url: `/user/unit/deleteUnit`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 房屋
|
||||
// 房屋列表
|
||||
export function houseList(params) {
|
||||
return httpService({
|
||||
url: `/user/estate/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 房屋新增
|
||||
export function houseInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/estate/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 房屋修改
|
||||
export function houseInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/estate/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 房屋修改
|
||||
export function houseUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/estate/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 房屋删除
|
||||
export function houseDel(params) {
|
||||
return httpService({
|
||||
url: `/user/estate/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 房屋租赁切换
|
||||
export function isEnableLease(params) {
|
||||
return httpService({
|
||||
url: `/user/estate/isEnableLease`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 房屋设置 房屋类型
|
||||
export function estateType(params) {
|
||||
return httpService({
|
||||
url: `/user/estateType/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 类型新增
|
||||
export function estateTypeInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/estateType/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 类型修改
|
||||
export function estateTypeUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/estateType/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 类型删除
|
||||
export function estateTypeDel(params) {
|
||||
return httpService({
|
||||
url: `/user/estateType/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 房屋列表级联
|
||||
export function estate(params) {
|
||||
return httpService({
|
||||
url: `/user/estate/findEstateCascade`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 房屋列表级联
|
||||
export function findEstateCascade(params) {
|
||||
return httpService({
|
||||
url: `/user/estate/findEstateCascade`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,89 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
/**
|
||||
*
|
||||
* 住户
|
||||
* @param {*} params
|
||||
* @returns
|
||||
*
|
||||
* 住户列表
|
||||
*/
|
||||
export function residentList(params) {
|
||||
return httpService({
|
||||
url: `/user/resident/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 新增住户
|
||||
export function residentInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/resident/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 修改住户
|
||||
export function residentUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/resident/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function residentInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/resident/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 迁出
|
||||
export function moveOut(params) {
|
||||
return httpService({
|
||||
url: `/user/resident/moveOut`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 迁入
|
||||
export function moveIn(params) {
|
||||
return httpService({
|
||||
url: `/user/resident/moveIn`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 根据房屋查租户
|
||||
export function findTenantByEstateId(params) {
|
||||
return httpService({
|
||||
url: `/user/resident/findTenantByEstateId`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 住户详情
|
||||
export function residentDetail(params) {
|
||||
return httpService({
|
||||
url: `/user/resident/findDetail`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 住户审核
|
||||
// 审核列表
|
||||
export function reviewList(params) {
|
||||
return httpService({
|
||||
url: `/user/review/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 审核通过 不通过
|
||||
export function review(params) {
|
||||
return httpService({
|
||||
url: `/user/review/review`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,88 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 权限 角色
|
||||
// 角色列表
|
||||
export function getrolelist(params) {
|
||||
return httpService({
|
||||
url: `/user/role/list`,
|
||||
method: 'get',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 新增角色
|
||||
export function roleInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/role/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 编辑角色
|
||||
export function roleUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/role/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 分配角色
|
||||
export function assignRoles(params) {
|
||||
return httpService({
|
||||
url: `/user/role/assignRoles`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 删除角色
|
||||
export function roleDel(params) {
|
||||
return httpService({
|
||||
url: `user/role/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 角色-----员工列表
|
||||
export function listByRole(params) {
|
||||
return httpService({
|
||||
url: `/user/role/listByRole`,
|
||||
method: 'GET',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 查询当前角色下的所有的菜单权限信息 roleId
|
||||
export function FindAllMenus(params) {
|
||||
return httpService({
|
||||
url: `/user/jurisdiction/findAllMenus`,
|
||||
method: 'GET',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function changeMenuShow(params) {
|
||||
return httpService({
|
||||
url: `/user/jurisdiction/isShowMenus`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function getActions(params) {
|
||||
return httpService({
|
||||
url: `/user/jurisdiction/findOperationByMId`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function changeActions(params) {
|
||||
return httpService({
|
||||
url: `/user/jurisdiction/isCheckOperation`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 当前用户菜单
|
||||
export function getMenu(params) {
|
||||
return httpService({
|
||||
url: `/user/manageUser/findAllMenusByUser`,
|
||||
method: 'GET',
|
||||
params: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 活动列表
|
||||
export function activityList(params) {
|
||||
return httpService({
|
||||
url: `/user/activity/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function organizerSelect(params) {
|
||||
return httpService({
|
||||
url: `/user/activityOrganizer/allList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 报名人
|
||||
export function registrationList(params) {
|
||||
return httpService({
|
||||
url: `/user/activity/registrationList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function activityInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/activity/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function activityInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/activity/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function activityUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/activity/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function activityDel(params) {
|
||||
return httpService({
|
||||
url: `/user/activity/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 主办方列表
|
||||
export function organizerList(params) {
|
||||
return httpService({
|
||||
url: `/user/activityOrganizer/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function organizerInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/activityOrganizer/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function organizerInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/activityOrganizer/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function organizerUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/activityOrganizer/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function organizerDel(params) {
|
||||
return httpService({
|
||||
url: `/user/activityOrganizer/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 公告列表
|
||||
export function announcementList(params) {
|
||||
return httpService({
|
||||
url: `/user/announcement/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function announcementInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/announcement/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function announcementInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/announcement/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function announcementDel(params) {
|
||||
return httpService({
|
||||
url: `/user/announcement/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function announcementUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/announcement/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 动态列表
|
||||
export function dynamicList(params) {
|
||||
return httpService({
|
||||
url: `/user/dynamic/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function dynamicInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/dynamic/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 删除
|
||||
export function dynamicDel(params) {
|
||||
return httpService({
|
||||
url: `/user/dynamic/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 恢复
|
||||
export function dynamicRecover(params) {
|
||||
return httpService({
|
||||
url: `/user/dynamic/recover`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 评论list
|
||||
export function commentList(params) {
|
||||
return httpService({
|
||||
url: `/user/comment/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 删除
|
||||
export function commentDel(params) {
|
||||
return httpService({
|
||||
url: `/user/comment/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 恢复
|
||||
export function commentRecover(params) {
|
||||
return httpService({
|
||||
url: `/user/comment/recover`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 话题列表
|
||||
export function topicList(params) {
|
||||
return httpService({
|
||||
url: `/user/topic/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 话题新增
|
||||
export function topicInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/topic/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 话题信息
|
||||
export function topicInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/topic/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 话题修改
|
||||
export function topicUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/topic/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 话题删除
|
||||
export function topicDelete(params) {
|
||||
return httpService({
|
||||
url: `/user/topic/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
export function planList(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionPlan/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function planisEnable(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionPlan/isEnable`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function routeSelect(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionRoute/allList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function planInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionPlan/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function planInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionPlan/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function planDel(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionPlan/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function planUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionPlan/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 巡检记录
|
||||
export function inspectionExecute(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionExecute/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 巡检点
|
||||
// list
|
||||
export function pointList(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionPoint/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function pointInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionPoint/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function pointInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionPoint/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function pointDel(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionPoint/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function pointUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionPoint/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
|
||||
// 路线
|
||||
export function routeList(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionRoute/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function routeisEnable(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionRoute/isEnable`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function pointSelect(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionPoint/allList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function routeInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionRoute/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function routeInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionRoute/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function routeDel(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionRoute/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function routeUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/inspectionRoute/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
@ -0,0 +1,45 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 资讯
|
||||
export function newsList(params) {
|
||||
return httpService({
|
||||
url: `/user/information/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function newsInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/information/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function itemSelect(params) {
|
||||
return httpService({
|
||||
url: `/user/informationCategory/allList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function newsUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/information/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function newsDel(params) {
|
||||
return httpService({
|
||||
url: `/user/information/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function newsInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/information/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 资讯分类
|
||||
export function newsItemList(params) {
|
||||
return httpService({
|
||||
url: `/user/informationCategory/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function newsItemUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/informationCategory/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function newsItemDel(params) {
|
||||
return httpService({
|
||||
url: `/user/informationCategory/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function newsItemInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/informationCategory/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 轮播图列表
|
||||
export function swiperList(params) {
|
||||
return httpService({
|
||||
url: `/user/homepageCarousel/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 删除
|
||||
export function swiperDel(params) {
|
||||
return httpService({
|
||||
url: `/user/homepageCarousel/delete`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 新增
|
||||
export function swiperInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/homepageCarousel/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 修改
|
||||
export function swiperUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/homepageCarousel/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
@ -0,0 +1,58 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 任务列表
|
||||
export function taskList(params) {
|
||||
return httpService({
|
||||
url: `/user/taskRelease/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 置顶
|
||||
export function topTask(params) {
|
||||
return httpService({
|
||||
url: `/user/taskRelease/topTask`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 取消
|
||||
export function cancelTask(params) {
|
||||
return httpService({
|
||||
url: `/user/taskRelease/cancel`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 撤回
|
||||
export function withdrawTask(params) {
|
||||
return httpService({
|
||||
url: `/user/taskRelease/withdraw`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 确认
|
||||
export function confirmTask(params) {
|
||||
return httpService({
|
||||
url: `/user/taskRelease/confirm`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 获取任务设置
|
||||
export function getSetting(params) {
|
||||
return httpService({
|
||||
url: `/user/settingTaskRelease/getSetting`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 保存任务设置
|
||||
export function Setting(params) {
|
||||
return httpService({
|
||||
url: `/user/settingTaskRelease/setting`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 后台账单list
|
||||
export function getBillList(params) {
|
||||
return httpService({
|
||||
url: `/user/bill/billList`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 账单废除
|
||||
export function abolition(params) {
|
||||
return httpService({
|
||||
url: `/user/bill/abolition`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 账单恢复
|
||||
export function recover(params) {
|
||||
return httpService({
|
||||
url: `/user/bill/recover`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 账单线下支付
|
||||
export function offlinePayments(params) {
|
||||
return httpService({
|
||||
url: `/user/bill/offlinePayments`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 根据账单主键id查询账单订单
|
||||
export function findBillOrderList(params) {
|
||||
return httpService({
|
||||
url: `/user/bill/findBillOrderList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 收费标准列表
|
||||
export function bindList(params) {
|
||||
return httpService({
|
||||
url: `/user/chargesBind/list`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function bind(params) {
|
||||
return httpService({
|
||||
url: `/user/chargesBind/bind`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function unbind(params) {
|
||||
return httpService({
|
||||
url: `/user/chargesBind/unbind`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 收费标准列表
|
||||
export function chargesList(params) {
|
||||
return httpService({
|
||||
url: `/user/charges/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function chargesInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/charges/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function chargesInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/charges/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function chargesUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/charges/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function chargesDel(params) {
|
||||
return httpService({
|
||||
url: `/user/charges/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,100 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 手动生成后台账单
|
||||
export function manuallyGenerateBills(params) {
|
||||
return httpService({
|
||||
url: `/user/bill/manuallyGenerateBills`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 自动生成后台账单计划
|
||||
export function autoGenerateBills(params) {
|
||||
return httpService({
|
||||
url: `/user/billAuto/autoGenerateBills`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 后台自动生成账单List
|
||||
export function billAutoList(params) {
|
||||
return httpService({
|
||||
url: `/user/billAuto/billAutoList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 删除后台自动生成账单计划
|
||||
export function deleteAutoGenerateBills(params) {
|
||||
return httpService({
|
||||
url: `/user/billAuto/deleteAutoGenerateBills`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 生成后台账单自动扣费计划
|
||||
export function autoDeductionBills(params) {
|
||||
return httpService({
|
||||
url: `/user/billAutoDeduction/autoDeductionBills`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 后台自动扣费账单list
|
||||
export function getAutoDeductionBills(params) {
|
||||
return httpService({
|
||||
url: `/user/billAutoDeduction/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 删除后台自动扣费账单计划
|
||||
export function deleteAutoDeductionBills(params) {
|
||||
return httpService({
|
||||
url: `/user/billAutoDeduction/deleteAutoDeductionBills`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 根据账单自动生成主键id获取账单自动生成信息
|
||||
export function findByIdByBillAutoId(params) {
|
||||
return httpService({
|
||||
url: `/user/billAuto/findByIdByBillAutoId`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 根据账单自动扣费主键id获取账单自动扣费信息
|
||||
export function findById(params) {
|
||||
return httpService({
|
||||
url: `/user/billAutoDeduction/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 修改自动生成后台账单计划
|
||||
export function updateAutoGenerateBills(params) {
|
||||
return httpService({
|
||||
url: `/user/billAuto/updateAutoGenerateBills`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 修改自动扣费后台账单计划
|
||||
export function updateAutoDeductionBills(params) {
|
||||
return httpService({
|
||||
url: `/user/billAutoDeduction/updateAutoDeductionBills`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 预缴列表
|
||||
export function prepaymentList(params) {
|
||||
return httpService({
|
||||
url: `/user/prepayment/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function rechargeList(params) {
|
||||
return httpService({
|
||||
url: `/user/prepayment/rechargeList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function recharge(params) {
|
||||
return httpService({
|
||||
url: `/user/prepayment/recharge`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 发送验证码
|
||||
export function sendTelCode(params) {
|
||||
return httpService({
|
||||
url: `/sendTelCode`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 登录
|
||||
export function loginTel(params) {
|
||||
return httpService({
|
||||
url: `/loginTelCode`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
// 退出登录
|
||||
export function quit(params) {
|
||||
return httpService({
|
||||
url: `/user/quit`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 商品
|
||||
// 品牌
|
||||
export function brandList(params) {
|
||||
return httpService({
|
||||
url: `/user/shopBrand/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function brandInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/shopBrand/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function brandDel(params) {
|
||||
return httpService({
|
||||
url: `/user/shopBrand/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function brandUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/shopBrand/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 商品
|
||||
// 品牌
|
||||
export function cateList(params) {
|
||||
return httpService({
|
||||
url: `/user/shopCategory/listAll`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function cateShow(params) {
|
||||
return httpService({
|
||||
url: `/user/shopCategory/isShow`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function cateInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/shopCategory/listByParentId`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function cateUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/shopCategory/updateCategory`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function cateInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/shopCategory/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function cateDel(params) {
|
||||
return httpService({
|
||||
url: `/user/shopCategory/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,93 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 商品
|
||||
// list
|
||||
export function shopPushList(params) {
|
||||
return httpService({
|
||||
url: `/user/shop/shopPushList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function jcookGoodsList(params) {
|
||||
return httpService({
|
||||
url: `/user/shop/jcookGoodsList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function offShelf(params) {
|
||||
return httpService({
|
||||
url: `/user/shop/offShelf`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function onShelf(params) {
|
||||
return httpService({
|
||||
url: `/user/shop/onShelf`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function jcookGoodsBatchPush(params) {
|
||||
return httpService({
|
||||
url: `/user/shop/jcookGoodsBatchPush`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function jcookGoodsPush(params) {
|
||||
return httpService({
|
||||
url: `/user/shop/jcookGoodsPush`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function goodsEdit(params) {
|
||||
return httpService({
|
||||
url: `/user/shop/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function goodsInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/shop/findById`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 分类
|
||||
export function cateSelect(params) {
|
||||
return httpService({
|
||||
url: `/user/shopCategory/listAll`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 店铺
|
||||
export function shopSelect(params) {
|
||||
return httpService({
|
||||
url: `/user/shopShop/allList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 供应商
|
||||
export function vendorSelect(params) {
|
||||
return httpService({
|
||||
url: `/user/shopVendor/allList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 品牌
|
||||
export function brandSelect(params) {
|
||||
return httpService({
|
||||
url: `/user/shopBrand/allList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 订单
|
||||
// list
|
||||
export function orderList(params) {
|
||||
return httpService({
|
||||
url: `/user/shopOrder/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 订单详情
|
||||
export function orderInfo(params) {
|
||||
return httpService({
|
||||
url: `/user/shopOrder/findDetail`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 取消订单
|
||||
export function shopOrderCancel(params) {
|
||||
return httpService({
|
||||
url: `/user/shopOrder/cancel`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 获取任务设置
|
||||
export function getSetting(params) {
|
||||
return httpService({
|
||||
url: `/user/pointsSetting/earnPointsSettingInfo`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
// 保存任务设置
|
||||
export function Setting(params) {
|
||||
return httpService({
|
||||
url: `/user/pointsSetting/savePintsSetting`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 商品
|
||||
// 店铺
|
||||
export function shopList(params) {
|
||||
return httpService({
|
||||
url: `/user/shopShop/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function shopInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/shopShop/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function shopDel(params) {
|
||||
return httpService({
|
||||
url: `/user/shopShop/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function shopUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/shopShop/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 商品
|
||||
// 轮播图
|
||||
export function swiperList(params) {
|
||||
return httpService({
|
||||
url: `/user/shopRotation/findRotationList`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function swiperDel(params) {
|
||||
return httpService({
|
||||
url: `/user/shopRotation/delete`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function swiperUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/shopRotation/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function swiperInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/shopRotation/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
import httpService from "@/request"
|
||||
|
||||
// 商品
|
||||
// 供应商
|
||||
export function vendorList(params) {
|
||||
return httpService({
|
||||
url: `/user/shopVendor/list`,
|
||||
method: 'get',
|
||||
params: params,
|
||||
})
|
||||
}
|
||||
export function vendorInsert(params) {
|
||||
return httpService({
|
||||
url: `/user/shopVendor/insert`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function vendorDel(params) {
|
||||
return httpService({
|
||||
url: `/user/shopVendor/delete`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
export function vendorUpdate(params) {
|
||||
return httpService({
|
||||
url: `/user/shopVendor/update`,
|
||||
method: 'post',
|
||||
data: params,
|
||||
})
|
||||
}
|
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 5.2 MiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 6.7 KiB |
@ -1,58 +0,0 @@
|
||||
<template>
|
||||
<div class="hello">
|
||||
<h1>{{ msg }}</h1>
|
||||
<p>
|
||||
For a guide and recipes on how to configure / customize this project,<br>
|
||||
check out the
|
||||
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
|
||||
</p>
|
||||
<h3>Installed CLI Plugins</h3>
|
||||
<ul>
|
||||
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
|
||||
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
|
||||
</ul>
|
||||
<h3>Essential Links</h3>
|
||||
<ul>
|
||||
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
|
||||
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
|
||||
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
|
||||
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
|
||||
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
|
||||
</ul>
|
||||
<h3>Ecosystem</h3>
|
||||
<ul>
|
||||
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
|
||||
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
|
||||
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
|
||||
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
|
||||
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'HelloWorld',
|
||||
props: {
|
||||
msg: String
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||
<style scoped>
|
||||
h3 {
|
||||
margin: 40px 0 0;
|
||||
}
|
||||
ul {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
}
|
||||
li {
|
||||
display: inline-block;
|
||||
margin: 0 10px;
|
||||
}
|
||||
a {
|
||||
color: #42b983;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,45 @@
|
||||
<template>
|
||||
<a-cascader
|
||||
:options="cityList"
|
||||
placeholder="请选择"
|
||||
:field-names="{
|
||||
label: 'name',
|
||||
value: 'id',
|
||||
children: 'cityList',
|
||||
}"
|
||||
@change="change"
|
||||
style="width: 60%"
|
||||
></a-cascader>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import store from "@/store";
|
||||
export default {
|
||||
data(){
|
||||
return{
|
||||
cityList:[]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
change(data){
|
||||
this.$emit('onchange',data)
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
if(store.getters.getCity.length===0){
|
||||
this.$axios({
|
||||
method:'get',
|
||||
url:process.env.VUE_APP_URL+'manage/city/allCity',//【api不需要communityCode】
|
||||
}).then((response) =>{
|
||||
this.cityList = response.data.data
|
||||
this.setCity(response.data.data);
|
||||
}).catch((error) =>{
|
||||
console.log(error) //请求失败返回的数据
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
@ -0,0 +1,36 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-drawer
|
||||
title="抽屉"
|
||||
:width="720"
|
||||
:visible="visible"
|
||||
:body-style="{ paddingBottom: '80px' }"
|
||||
@close="onClose"
|
||||
>
|
||||
<div class="drawer-content"></div>
|
||||
<div class="drawer-footer">
|
||||
<a-button :style="{ marginRight: '8px' }" @click="onClose">
|
||||
关闭
|
||||
</a-button>
|
||||
<a-button type="primary" @click="onClose"> 提交 </a-button>
|
||||
</div>
|
||||
</a-drawer>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
showDrawer() {
|
||||
this.visible = true;
|
||||
},
|
||||
onClose() {
|
||||
this.visible = false;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
@ -0,0 +1,13 @@
|
||||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
@ -0,0 +1,110 @@
|
||||
<template>
|
||||
<div class="form-box">
|
||||
<a-form-model ref="ruleForm" :model="form" layout='inline' v-if="itemList.length > 0">
|
||||
<a-form-model-item
|
||||
v-for="item in itemList"
|
||||
:key="item.prop"
|
||||
:label="item.label"
|
||||
:prop="item.prop"
|
||||
style="margin-left:32px"
|
||||
>
|
||||
<a-input v-if="item.type === 'input'" v-model="form[item.prop]" :placeholder="item.placeholder" />
|
||||
<a-select
|
||||
v-model="form[item.prop]"
|
||||
v-else-if="item.type === 'select'"
|
||||
:placeholder="item.placeholder"
|
||||
>
|
||||
<a-select-option
|
||||
v-for="option in item.option"
|
||||
:key="option.id"
|
||||
:value="option.id"
|
||||
>{{ option.name }}</a-select-option
|
||||
>
|
||||
</a-select>
|
||||
<a-range-picker v-else-if="item.type === 'time'" v-model="form[item.prop]" value-format="YYYY/MM/DD HH:mm:ss" @change="changeTime($event,item.start,item.end)" />
|
||||
</a-form-model-item>
|
||||
</a-form-model>
|
||||
<div class="btn-box"><a-button type="primary" @click="getSearch"> 查询 </a-button>
|
||||
<a-button style="margin-left: 10px" @click="resetForm"> 重置 </a-button></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
formItem:{
|
||||
type:Array,
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
formItem: {
|
||||
handler(val){
|
||||
this.itemList = val
|
||||
let obj = {}
|
||||
for(let k of val){
|
||||
if(k.type==='time'){
|
||||
obj[k.start] = undefined
|
||||
obj[k.end] = undefined
|
||||
}else{
|
||||
obj[k.prop] = undefined;
|
||||
}
|
||||
}
|
||||
this.form = obj;
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
itemList: [],
|
||||
form: {},
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
getSearch() {
|
||||
let obj = {}
|
||||
for(let k in this.form){
|
||||
if (!Array.isArray(this.form[k])) {
|
||||
obj[k] = this.form[k]
|
||||
}else{
|
||||
console.log(k);
|
||||
let start = k + 'StartTime'
|
||||
let end = k + 'EndTime'
|
||||
obj[start] = this.form[k][0]
|
||||
obj[end] = this.form[k][1]
|
||||
}
|
||||
}
|
||||
let obj1 = Object.assign({}, obj)
|
||||
console.log(obj1);
|
||||
this.$emit('getSearch', obj1)
|
||||
},
|
||||
resetForm() {
|
||||
this.$refs.ruleForm.resetFields();
|
||||
this.getSearch()
|
||||
},
|
||||
changeTime(data,start,end){
|
||||
this.$emit('changeTime', data,start,end)
|
||||
this.form[start] = data[0]
|
||||
this.form[end] = data[1]
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.form-box {
|
||||
text-align: left;
|
||||
background: #f9f9f9;
|
||||
padding-top: 25px;
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
.btn-box{
|
||||
margin:10px 0 15px 100px;
|
||||
}
|
||||
/deep/.ant-input{
|
||||
min-width: 150px;
|
||||
}
|
||||
/deep/.ant-select{
|
||||
min-width: 150px;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,30 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
|
||||
<img alt="example" style="width: 100%" :src="previewImage" />
|
||||
</a-modal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props:{
|
||||
previewVisible:{
|
||||
type:Boolean,
|
||||
default:false,
|
||||
},
|
||||
previewImage:{
|
||||
type:String,
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
handleCancel() {
|
||||
this.$emit('handleCancel')
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
@ -0,0 +1,86 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-upload
|
||||
:action="`${$upload}`"
|
||||
accept=".jpg,.JPG,.png,.PNG,.jpeg,.JPEG"
|
||||
list-type="picture-card"
|
||||
:headers="uploadHeaders"
|
||||
:file-list="fileList"
|
||||
@preview="handlePreview"
|
||||
@change="handleChange"
|
||||
:beforeUpload="beforeUpload"
|
||||
>
|
||||
<div v-if="fileList.length < limit">
|
||||
<a-icon type="plus" />
|
||||
<div class="ant-upload-text">上传图片</div>
|
||||
</div>
|
||||
</a-upload>
|
||||
<imgModal
|
||||
:previewVisible="previewVisible"
|
||||
:previewImage="previewImage"
|
||||
@handleCancel="handleCancel"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import imgModal from "./imgModal.vue";
|
||||
function getBase64(file) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const reader = new FileReader();
|
||||
reader.readAsDataURL(file);
|
||||
reader.onload = () => resolve(reader.result);
|
||||
reader.onerror = (error) => reject(error);
|
||||
});
|
||||
}
|
||||
import store from "@/store";
|
||||
export default {
|
||||
components: {
|
||||
imgModal,
|
||||
},
|
||||
props: {
|
||||
fileList: Array,
|
||||
limit: {
|
||||
type: Number,
|
||||
default: 1,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
previewVisible: false,
|
||||
previewImage: "",
|
||||
uploadHeaders: {
|
||||
"manage-login-token": store.getters.getToken,
|
||||
},
|
||||
};
|
||||
},
|
||||
//
|
||||
methods: {
|
||||
async handlePreview(file) {
|
||||
if (!file.url && !file.preview) {
|
||||
file.preview = await getBase64(file.originFileObj);
|
||||
}
|
||||
this.previewImage = file.url || file.preview;
|
||||
this.previewVisible = true;
|
||||
},
|
||||
handleCancel() {
|
||||
this.previewVisible = false;
|
||||
},
|
||||
handleChange({ fileList }) {
|
||||
this.$emit("handleChange", fileList);
|
||||
},
|
||||
// 限制50mb
|
||||
beforeUpload(f, l) {
|
||||
const isLt50M = f.size / 1024 / 1024 < 50;
|
||||
if (!isLt50M) {
|
||||
this.$message.error(f.name + "文件大小超出限制,请修改后重新上传");
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style></style>
|
@ -1,144 +1,139 @@
|
||||
/*
|
||||
* @Author: your name
|
||||
* @Date: 2021-11-24 14:45:04
|
||||
* @LastEditTime: 2021-11-26 16:15:03
|
||||
* @LastEditors: Please set LastEditors
|
||||
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
* @FilePath: /LittleBeeSaas/src/router/basic.js
|
||||
*/
|
||||
|
||||
export default [
|
||||
// {
|
||||
// path: '/Console',
|
||||
// name: "Console",
|
||||
// title: "控制台",
|
||||
// hide: false,
|
||||
// icon: 'container',
|
||||
// component: resolve => require(['@/views/Basic/Console'], resolve),
|
||||
// meta: {title: '控制台'}
|
||||
// },
|
||||
{
|
||||
path: '/Basic/Console',
|
||||
name: "Console",
|
||||
title: "控制台",
|
||||
hide: false,
|
||||
icon: 'container',
|
||||
component: resolve => require(['@/views/Basic/Console'], resolve),
|
||||
meta: {title: '控制台'}
|
||||
},
|
||||
{
|
||||
path: '/Basic/Employee',
|
||||
path: '/Employee',
|
||||
name: "Employee",
|
||||
title: "员工管理",
|
||||
icon: 'database',
|
||||
icon: 'team',
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Basic/Employee'], resolve),
|
||||
meta: {title: '员工管理'}
|
||||
},
|
||||
{
|
||||
path: '/Basic/Authority',
|
||||
path: '/authority',
|
||||
name: "Authority",
|
||||
title: "权限管理",
|
||||
icon: 'profile',
|
||||
icon: 'appstore',
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Basic/Authority'], resolve),
|
||||
meta: {title: '权限管理'},
|
||||
children: [
|
||||
{
|
||||
path: '/Basic/Authority/_member',
|
||||
name: "Authority_member",
|
||||
title: "成员管理",
|
||||
icon: 'profile',
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Basic/Authority/_member'], resolve),
|
||||
meta: {title: '成员管理'},
|
||||
// children: [
|
||||
// {
|
||||
// path: '/Authority/_details',
|
||||
// name: "Authority_details",
|
||||
// title: "账单管理-详情",
|
||||
// icon: 'profile',
|
||||
// hide: true,
|
||||
// component: resolve => require(['@/views/Basic/Authority/_details'], resolve),
|
||||
// meta: {title: '账单管理-详情'},
|
||||
// }
|
||||
// ]
|
||||
},
|
||||
{
|
||||
path: '/Basic/Authority/_role',
|
||||
name: "Authority_role",
|
||||
title: "角色管理",
|
||||
icon: 'profile',
|
||||
path: '/EstateInfo',
|
||||
name: "EstateInfo",
|
||||
title: "小区信息",
|
||||
icon: 'home',
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Basic/Authority/_role'], resolve),
|
||||
meta: {title: '角色管理'},
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/Basic/Attendance',
|
||||
name: "Attendance",
|
||||
title: "考勤管理",
|
||||
icon: 'profile',
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Basic/Attendance'], resolve),
|
||||
meta: {title: '考勤管理'},
|
||||
component: resolve => require(['@/views/Basic/EstateInfo'], resolve),
|
||||
redirect: '/EstateInfo/BuildingManage',
|
||||
meta: {title: '小区信息'},
|
||||
children: [
|
||||
{
|
||||
path: '/Basic/Attendance/record',
|
||||
name: "Attendance_record",
|
||||
title: "考勤记录",
|
||||
icon: 'profile',
|
||||
path: '/EstateInfo/BuildingManage',
|
||||
name: "BuildingManage",
|
||||
title: "楼栋管理",
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Basic/Attendance/_record'], resolve),
|
||||
meta: {title: '考勤记录'},
|
||||
component: resolve => require(['@/views/Basic/EstateInfo/_buildingManage'], resolve),
|
||||
meta: {title: '楼栋管理'},
|
||||
},
|
||||
{
|
||||
path: '/Basic/Attendance/application',
|
||||
name: "Attendance_application",
|
||||
title: "申请记录",
|
||||
icon: 'profile',
|
||||
path: '/EstateInfo/HouseManage',
|
||||
name: "HouseManage",
|
||||
title: "房屋管理",
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Basic/Attendance/_application'], resolve),
|
||||
meta: {title: '申请记录'},
|
||||
component: resolve => require(['@/views/Basic/EstateInfo/_houseManage'], resolve),
|
||||
meta: {title: '房屋管理'},
|
||||
},
|
||||
{
|
||||
path: '/Basic/Attendance/attendanceteam',
|
||||
name: "Attendance_attendanceteam",
|
||||
title: "考勤小组",
|
||||
icon: 'profile',
|
||||
path: '/EstateInfo/HouseHoldInfo',
|
||||
name: "HouseHoldInfo",
|
||||
title: "住户信息",
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Basic/Attendance/_attendanceteam'], resolve),
|
||||
meta: {title: '考勤小组'},
|
||||
component: resolve => require(['@/views/Basic/EstateInfo/_houseHoldInfo'], resolve),
|
||||
meta: {title: '住户信息'},
|
||||
},
|
||||
{
|
||||
path: '/Basic/Attendance/scheduling',
|
||||
name: "Attendance_scheduling",
|
||||
title: "排班计划",
|
||||
icon: 'profile',
|
||||
path: '/EstateInfo/HouseHoldAudit',
|
||||
name: "HouseHoldAudit",
|
||||
title: "住户审核",
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Basic/Attendance/_scheduling'], resolve),
|
||||
meta: {title: '排班计划'},
|
||||
component: resolve => require(['@/views/Basic/EstateInfo/_houseHoldAudit'], resolve),
|
||||
meta: {title: '住户审核'},
|
||||
},
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/Basic/Community',
|
||||
name: "Community",
|
||||
title: "社区档案",
|
||||
icon: 'profile',
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Basic/Community'], resolve),
|
||||
meta: {title: '社区档案'},
|
||||
children: [
|
||||
{
|
||||
path: '/Basic/Community/_balcony',
|
||||
name: "Community_balcony",
|
||||
title: "楼座管理",
|
||||
icon: 'profile',
|
||||
path: '/Workorder',
|
||||
name: "Workorder",
|
||||
title: "工单管理",
|
||||
icon: 'solution',
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Basic/Community/_balcony'], resolve),
|
||||
meta: {title: '楼座管理'},
|
||||
},
|
||||
{
|
||||
path: '/Basic/Community/_house',
|
||||
name: "Community_house",
|
||||
title: "房屋管理",
|
||||
icon: 'profile',
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Basic/Community/_house'], resolve),
|
||||
meta: {title: '房屋管理'},
|
||||
},
|
||||
{
|
||||
path: '/Basic/Community/owner',
|
||||
name: "Community_owner",
|
||||
title: "业主管理",
|
||||
icon: 'profile',
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Basic/Community/_owner'], resolve),
|
||||
meta: {title: '业主管理'},
|
||||
component: resolve => require(['@/views/Basic/WorkOrder'], resolve),
|
||||
meta: {title: '工单管理'}
|
||||
},
|
||||
// {
|
||||
// path: '/attendance',
|
||||
// name: "Attendance",
|
||||
// title: "考勤管理",
|
||||
// icon: 'reconciliation',
|
||||
// hide: false,
|
||||
// redirect: '/attendance/record',
|
||||
// component: resolve => require(['@/views/Basic/Attendance'], resolve),
|
||||
// meta: {title: '考勤管理'},
|
||||
// children: [
|
||||
// {
|
||||
// path: '/attendance/record',
|
||||
// name: "Attendance_record",
|
||||
// title: "考勤记录",
|
||||
// hide: false,
|
||||
// component: resolve => require(['@/views/Basic/Attendance/_record'], resolve),
|
||||
// meta: {title: '考勤记录'},
|
||||
// },
|
||||
// {
|
||||
// path: '/attendance/application',
|
||||
// name: "Attendance_application",
|
||||
// title: "申请记录",
|
||||
// hide: false,
|
||||
// component: resolve => require(['@/views/Basic/Attendance/application'], resolve),
|
||||
// meta: {title: '申请记录'},
|
||||
// },
|
||||
// {
|
||||
// path: '/attendance/attendanceteam',
|
||||
// name: "Attendance_attendanceteam",
|
||||
// title: "考勤小组",
|
||||
// hide: false,
|
||||
// component: resolve => require(['@/views/Basic/Attendance/_attendanceteam'], resolve),
|
||||
// meta: {title: '考勤小组'},
|
||||
// },
|
||||
// {
|
||||
// path: '/attendance/scheduling',
|
||||
// name: "Attendance_scheduling",
|
||||
// title: "排班计划",
|
||||
// hide: false,
|
||||
// component: resolve => require(['@/views/Basic/Attendance/_scheduling'], resolve),
|
||||
// meta: {title: '排班计划'},
|
||||
// },
|
||||
|
||||
]
|
||||
}
|
||||
// ]
|
||||
// }
|
||||
]
|
@ -1,9 +0,0 @@
|
||||
/*
|
||||
* @Author: your name
|
||||
* @Date: 2021-11-24 14:55:05
|
||||
* @LastEditTime: 2021-11-24 14:55:06
|
||||
* @LastEditors: Please set LastEditors
|
||||
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
* @FilePath: /LittleBeeSaas/src/router/set.js
|
||||
*/
|
||||
export default []
|
@ -0,0 +1,11 @@
|
||||
export default [
|
||||
{
|
||||
path: '/basicSet',
|
||||
name: "basicSet",
|
||||
title: "基础设置",
|
||||
hide: false,
|
||||
icon: 'container',
|
||||
component: resolve => require(['@/views/Set/basicSet'], resolve),
|
||||
meta: {title: '基础设置'}
|
||||
},
|
||||
]
|
@ -0,0 +1,116 @@
|
||||
/*
|
||||
* @Author: your name
|
||||
* @Date: 2021-11-24 14:50:31
|
||||
* @LastEditTime: 2021-11-24 14:50:31
|
||||
* @LastEditors: Please set LastEditors
|
||||
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
* @FilePath: /LittleBeeSaas/src/router/smartMall.js
|
||||
*/
|
||||
export default [
|
||||
{
|
||||
path: '/GoodsManage',
|
||||
name: "GoodsManage",
|
||||
title: "商品管理",
|
||||
icon: 'home',
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Shop/GoodsManage'], resolve),
|
||||
redirect: '/GoodsManage/GoodsList',
|
||||
meta: {title: '商品管理'},
|
||||
children: [
|
||||
{
|
||||
path: '/GoodsManage/GoodsList',
|
||||
name: "GoodsList",
|
||||
title: "商品列表",
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Shop/GoodsManage/_goodsList'], resolve),
|
||||
meta: {title: '商品列表'},
|
||||
},
|
||||
{
|
||||
path: '/GoodsManage/JcookList',
|
||||
name: "JcookList",
|
||||
title: "jcook商品库",
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Shop/GoodsManage/_jcookList'], resolve),
|
||||
meta: {title: 'jcook商品库'},
|
||||
},
|
||||
{
|
||||
path: '/GoodsManage/GoodsCate',
|
||||
name: "GoodsCate",
|
||||
title: "商品分类",
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Shop/GoodsManage/_goodsCate'], resolve),
|
||||
meta: {title: '商品分类'},
|
||||
},
|
||||
// {
|
||||
// path: '/GoodsManage/GoodsCate',
|
||||
// name: "GoodsCate",
|
||||
// title: "商品审核",
|
||||
// hide: false,
|
||||
// component: resolve => require(['@/views/Shop/GoodsManage/_goodsCate'], resolve),
|
||||
// meta: {title: '商品分类'},
|
||||
// },
|
||||
{
|
||||
path: '/GoodsManage/Brand',
|
||||
name: "Brand",
|
||||
title: "品牌资质",
|
||||
hide: false,
|
||||
component: resolve => require(['@/views/Shop/GoodsManage/_brand'], resolve),
|
||||
meta: {title: '品牌资质'},
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/OrderManage',
|
||||
name: "OrderManage",
|
||||
title: "订单列表",
|
||||
hide: false,
|
||||
icon: 'container',
|
||||
component: resolve => require(['@/views/Shop/OrderManage'], resolve),
|
||||
meta: {title: '订单列表'}
|
||||
},
|
||||
{
|
||||
path: '/OrderDetail',
|
||||
name: "OrderDetail",
|
||||
title: "订单详情",
|
||||
hide: true,
|
||||
icon: 'container',
|
||||
component: resolve => require(['@/views/Shop/OrderManage/depend/detail'], resolve),
|
||||
meta: {title: '订单详情'}
|
||||
},
|
||||
{
|
||||
path: '/SupplierManage',
|
||||
name: "SupplierManage",
|
||||
title: "供应商管理",
|
||||
hide: false,
|
||||
icon: 'contacts',
|
||||
component: resolve => require(['@/views/Shop/SupplierManage'], resolve),
|
||||
meta: {title: '供应商管理'}
|
||||
},
|
||||
{
|
||||
path: '/StoreManage',
|
||||
name: "StoreManage",
|
||||
title: "店铺管理",
|
||||
hide: false,
|
||||
icon: 'shop',
|
||||
component: resolve => require(['@/views/Shop/StoreManage'], resolve),
|
||||
meta: {title: '店铺管理'}
|
||||
},
|
||||
{
|
||||
path: '/SwiperManage',
|
||||
name: "SwiperManage",
|
||||
title: "商城轮播图管理",
|
||||
hide: false,
|
||||
icon: 'bars',
|
||||
component: resolve => require(['@/views/Shop/SwiperManage'], resolve),
|
||||
meta: {title: '商城轮播图管理'}
|
||||
},
|
||||
{
|
||||
path: '/ScoreSetting',
|
||||
name: "ScoreSetting",
|
||||
title: "积分设置",
|
||||
hide: false,
|
||||
icon: 'crown',
|
||||
component: resolve => require(['@/views/Shop/ScoreSetting'], resolve),
|
||||
meta: {title: '积分设置'}
|
||||
},
|
||||
]
|
@ -1,9 +0,0 @@
|
||||
/*
|
||||
* @Author: your name
|
||||
* @Date: 2021-11-24 14:50:31
|
||||
* @LastEditTime: 2021-11-24 14:50:31
|
||||
* @LastEditors: Please set LastEditors
|
||||
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
* @FilePath: /LittleBeeSaas/src/router/smartMall.js
|
||||
*/
|
||||
export default []
|
@ -1 +1,77 @@
|
||||
@import "./antd.less";
|
||||
|
||||
// 公共样式
|
||||
#app {
|
||||
background: #E5E5E5;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding: 13px;
|
||||
}
|
||||
|
||||
.main {
|
||||
padding : 13px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.cardTitle {
|
||||
border-left : 8px solid #205FBD;
|
||||
padding-left : 10px;
|
||||
margin-left : 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.back-btn{
|
||||
font-size: 16px;
|
||||
line-height: 22px;
|
||||
color: #000000D9;
|
||||
font-weight: 500;
|
||||
cursor: pointer;
|
||||
}
|
||||
// 表格
|
||||
#commonTable {
|
||||
margin: 24px;
|
||||
}
|
||||
.action {
|
||||
margin-top: -50px;
|
||||
}
|
||||
.search-box {
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
.add-btn{
|
||||
background-color: #1890FF !important;
|
||||
color: rgba(255, 255, 255, 1) !important;
|
||||
}
|
||||
.footer {
|
||||
height : 84px;
|
||||
width : 100%;
|
||||
background : #fff;
|
||||
position : fixed;
|
||||
bottom : 0;
|
||||
z-index : 999;
|
||||
line-height : 84px;
|
||||
box-shadow : 0px -2px 4px 0px rgba(0, 0, 0, 0.35);
|
||||
border-radius: 4px 4px 0px 0px;
|
||||
border : 1px solid #e8e8e8;
|
||||
left : 200px;
|
||||
}
|
||||
|
||||
// 抽屉
|
||||
.drawer-content {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.drawer-footer {
|
||||
position : absolute;
|
||||
right : 0;
|
||||
bottom : 0;
|
||||
width : 100%;
|
||||
border-top: 1px solid #e9e9e9;
|
||||
padding : 10px 16px;
|
||||
background: #fff;
|
||||
text-align: right;
|
||||
z-index : 1;
|
||||
}
|
||||
.ant-modal-content{
|
||||
margin-top:100px;
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
import store from '@/store'
|
||||
import axios from 'axios'
|
||||
import qs from 'qs'
|
||||
export default {
|
||||
install: function (Vue) {
|
||||
//axios
|
||||
Vue.prototype.$axios = axios
|
||||
Vue.prototype.qs = qs
|
||||
// 上传
|
||||
Vue.prototype.$upload = process.env.VUE_APP_URL + store.getters.getCommunityCode + '/manage/user/upload/uploadImg'
|
||||
// 静态地址
|
||||
Vue.prototype.$ImgUrl = (src) => {
|
||||
return process.env.VUE_APP_STATIC + store.getters.getCommunityCode + '/' + src
|
||||
}
|
||||
// 时间格式化
|
||||
Vue.prototype.formatDate = (time, fmt) => {
|
||||
if (time > 0) {
|
||||
let date = new Date(time * 1000)
|
||||
if (/(y+)/.test(fmt)) {
|
||||
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
|
||||
}
|
||||
let o = {
|
||||
'M+': date.getMonth() + 1,
|
||||
'd+': date.getDate(),
|
||||
'h+': date.getHours(),
|
||||
'm+': date.getMinutes(),
|
||||
's+': date.getSeconds()
|
||||
}
|
||||
for (let k in o) {
|
||||
if (new RegExp(`(${k})`).test(fmt)) {
|
||||
let str = o[k] + ''
|
||||
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : ('00' + str).substr(str.length))
|
||||
}
|
||||
}
|
||||
return fmt
|
||||
} else {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
<template>
|
||||
<div></div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
@ -0,0 +1,13 @@
|
||||
<template>
|
||||
<div>test</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
@ -0,0 +1,13 @@
|
||||
<template>
|
||||
<div>test</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
@ -0,0 +1,14 @@
|
||||
<template>
|
||||
<div>application</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name:'application'
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
@ -0,0 +1,55 @@
|
||||
/**
|
||||
* 配置
|
||||
* 表格列
|
||||
*/
|
||||
export const columns = [
|
||||
{
|
||||
title: "真实姓名",
|
||||
dataIndex: "actualName",
|
||||
width: "20%",
|
||||
},
|
||||
{
|
||||
title: "手机号",
|
||||
dataIndex: "tel",
|
||||
width: "20%",
|
||||
},
|
||||
{
|
||||
title: "角色",
|
||||
dataIndex: "roleNameList",
|
||||
width: "20%",
|
||||
customRender: function (roleNameList) {
|
||||
let arr = []
|
||||
for (let item of roleNameList) {
|
||||
arr.push(item.name)
|
||||
}
|
||||
return arr.toString()
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "备注",
|
||||
dataIndex: "remake",
|
||||
width: "20%",
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
dataIndex: "action",
|
||||
key: "action",
|
||||
width: "180",
|
||||
fixed: "right",
|
||||
scopedSlots: { customRender: "action" },
|
||||
},
|
||||
]
|
||||
// 搜索项
|
||||
export const searchForm = {
|
||||
roleId: null,
|
||||
keyword: '',
|
||||
}
|
||||
// 分页
|
||||
export const pagination = {
|
||||
current: 1,
|
||||
total: 0,
|
||||
pageSize: 10,
|
||||
showTotal: (total) => `共 ${total} 条`,
|
||||
showSizeChanger: true,
|
||||
showQuickJumper: true,
|
||||
}
|
@ -0,0 +1,139 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-modal :title="title" :visible="show" @ok="addSubmit" @cancel="addClose">
|
||||
<div>
|
||||
<a-form-model
|
||||
layout="vertical"
|
||||
ref="ruleForm"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
>
|
||||
<a-form-model-item label="角色名称" prop="name">
|
||||
<a-input v-model="form.name" placeholder="请输入角色名称" />
|
||||
</a-form-model-item>
|
||||
<a-form-model-item label="上级角色" prop="parentId">
|
||||
<a-select v-model="form.parentId" placeholder="请选择" >
|
||||
<a-select-option :key="0" :value="0">无上级</a-select-option>
|
||||
<a-select-option v-for="item in rolelist" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
<a-form-model-item label="权限等级" prop="authorityLevel">
|
||||
<a-input v-model.number="form.authorityLevel" placeholder="请选择" />
|
||||
</a-form-model-item>
|
||||
<a-form-model-item label="备注" prop="remakes">
|
||||
<a-textarea v-model="form.remakes" placeholder="请输入" />
|
||||
</a-form-model-item>
|
||||
</a-form-model>
|
||||
</div>
|
||||
</a-modal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { roleInsert, roleUpdate } from "@/api/basic/role";
|
||||
export default {
|
||||
props: {
|
||||
show: Boolean,
|
||||
title: String,
|
||||
id: Number,
|
||||
list:Array
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
rules:{
|
||||
name: [{ required: true, message: '请输入', trigger: 'blur' }],
|
||||
parentId: [{ required: true, message: '请选择', trigger: 'change' }],
|
||||
authorityLevel: [{ required: true, message: '请输入', trigger: 'blur' }],
|
||||
remakes: [{ required: true, message: '请输入', trigger: 'blur' }],
|
||||
},
|
||||
form:{
|
||||
id: undefined,
|
||||
name: '',
|
||||
parentId: undefined,
|
||||
authorityLevel: '',
|
||||
remakes: '',
|
||||
},
|
||||
rolelist:[],
|
||||
editInfo:null
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
addSubmit() {
|
||||
if(this.form.id === undefined){
|
||||
this.$refs.ruleForm.validate(async valid => {
|
||||
if (valid) {
|
||||
const res = await roleInsert(this.form)
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg)
|
||||
this.addClose()
|
||||
this.success()
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
}
|
||||
});
|
||||
}else{
|
||||
this.$refs.ruleForm.validate(async valid => {
|
||||
if (valid) {
|
||||
const res = await roleUpdate(this.form)
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg)
|
||||
this.addClose()
|
||||
this.success()
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
},
|
||||
findId(list,id){
|
||||
list.forEach(item => {
|
||||
if(item.id === id){
|
||||
this.editInfo = item
|
||||
}else if(item.childrenList !== null && item.childrenList ){
|
||||
this.findId(item.childrenList,id)
|
||||
}else{
|
||||
return
|
||||
}
|
||||
})
|
||||
},
|
||||
success(){
|
||||
this.$emit('success')
|
||||
},
|
||||
addClose() {
|
||||
this.$emit("close");
|
||||
this.$refs.ruleForm.resetFields();
|
||||
this.form.id = undefined;
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
list:{
|
||||
handler(val){
|
||||
this.rolelist = []
|
||||
this.rolelist = val
|
||||
},
|
||||
deep:true
|
||||
},
|
||||
id:{
|
||||
handler(val){
|
||||
if(val){
|
||||
this.form.id = val
|
||||
this.findId(this.rolelist,val)
|
||||
// console.log(this.editInfo);
|
||||
this.form.name = this.editInfo.name
|
||||
this.form.parentId = this.editInfo.parentId
|
||||
this.form.authorityLevel = this.editInfo.authorityLevel
|
||||
this.form.remakes = this.editInfo.remakes
|
||||
}else if( val === undefined ){
|
||||
this.form.id = undefined
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
@ -0,0 +1,295 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-row>
|
||||
<!-- 角色列表 -->
|
||||
<a-col :span="5">
|
||||
<div class="cardTitle">所有角色</div>
|
||||
<a-collapse accordion @change="rolechange">
|
||||
<a-collapse-panel
|
||||
v-for="(item, index) in roleList"
|
||||
:key="index"
|
||||
:header="item.name"
|
||||
>
|
||||
<div
|
||||
v-for="(rolechild, indexs) in item.childrenList"
|
||||
class="role-card"
|
||||
:key="indexs"
|
||||
@click="rolechoose(rolechild.id)"
|
||||
>
|
||||
<span class="role-li">
|
||||
<span>{{ rolechild.name || "无" }}</span>
|
||||
<span v-show="rolechild.name"> </span>
|
||||
</span>
|
||||
</div>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
</a-col>
|
||||
<!-- 功能表格 -->
|
||||
<a-col :span="19">
|
||||
<div class="treebox">
|
||||
<a-tree
|
||||
class="tree"
|
||||
v-model="checkedKeys"
|
||||
v-if="treeShow != undefined"
|
||||
checkable
|
||||
:expandedKeys="expandedKeys"
|
||||
:replace-fields="replaceFields"
|
||||
:selected-keys="selectedKeys"
|
||||
:tree-data="menus"
|
||||
@expand="onExpand"
|
||||
@select="onSelect"
|
||||
@check="onCheck"
|
||||
/>
|
||||
</div>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-drawer
|
||||
title="配置操作"
|
||||
placement="right"
|
||||
:closable="false"
|
||||
:visible="actions.show"
|
||||
@close="onClose"
|
||||
>
|
||||
<div class="content">
|
||||
<div v-if="actionsList.length === 0">无可配置操作</div>
|
||||
<a-checkbox
|
||||
v-for="action in actionsList"
|
||||
:checked="action.isCheck"
|
||||
:key="action.id"
|
||||
@change="onChange($event, action.id)"
|
||||
>
|
||||
{{ action.name }}</a-checkbox
|
||||
>
|
||||
</div>
|
||||
</a-drawer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
getrolelist,
|
||||
FindAllMenus,
|
||||
changeMenuShow,
|
||||
getActions,
|
||||
changeActions,
|
||||
} from "@/api/basic/role";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
roleId: null,
|
||||
defaultExpandAll: true,
|
||||
roleList: [],
|
||||
expandedKeys: [],
|
||||
replaceFields: {
|
||||
children: "childrenList",
|
||||
title: "name",
|
||||
key: "id",
|
||||
},
|
||||
checkedKeys: {
|
||||
checked: [],
|
||||
halfChecked: [],
|
||||
},
|
||||
selectedKeys: [],
|
||||
menus: [], //页面菜单
|
||||
actionsList: [], //操作
|
||||
actions: {
|
||||
show: false,
|
||||
},
|
||||
treeShow: undefined,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getData();
|
||||
},
|
||||
methods: {
|
||||
getData() {
|
||||
getrolelist().then((res) => {
|
||||
this.roleList = res.data;
|
||||
});
|
||||
},
|
||||
rolechoose(data) {
|
||||
this.checkedKeys = {
|
||||
checked: [],
|
||||
halfChecked: [],
|
||||
};
|
||||
if (data !== undefined) {
|
||||
this.roleId = data;
|
||||
FindAllMenus({ roleId: this.roleId }).then((res) => {
|
||||
this.menus = res.data;
|
||||
this.defaultCheck(this.menus);
|
||||
});
|
||||
} else if (data === undefined) {
|
||||
this.roleId = null;
|
||||
}
|
||||
},
|
||||
rolechange(data) {
|
||||
this.treeShow = data;
|
||||
if (data != undefined) {
|
||||
this.checkedKeys = {
|
||||
checked: [],
|
||||
halfChecked: [],
|
||||
};
|
||||
this.roleId = this.roleList[data].id;
|
||||
FindAllMenus({ roleId: this.roleId }).then((res) => {
|
||||
this.menus = res.data;
|
||||
this.defaultCheck(this.menus);
|
||||
});
|
||||
} else {
|
||||
this.roleId = null;
|
||||
// this.menus = [];
|
||||
}
|
||||
},
|
||||
// defaultCheck(arr) {
|
||||
// for (let item of arr) {
|
||||
// if (item.childrenList != null) {
|
||||
// if(item.isShow == true){
|
||||
// this.checkedKeys.push(item.id);
|
||||
// }
|
||||
// this.defaultCheck(item.childrenList);
|
||||
// } else if (item.isShow == true) {
|
||||
// this.checkedKeys.push(item.id);
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
defaultCheck(arr) {
|
||||
let res = {
|
||||
checked: [],
|
||||
halfChecked: [],
|
||||
};
|
||||
for(let x = 0; x<arr.length; x++) {
|
||||
let item = arr[x];
|
||||
for(let y = 0; y<arr[x].childrenList.length; y++) {
|
||||
let item = arr[x].childrenList[y];
|
||||
let checkedNum = 0
|
||||
if(item.childrenList) {
|
||||
for(let z = 0; z<arr[x].childrenList[y].childrenList.length; z++) {
|
||||
let item = arr[x].childrenList[y].childrenList[z];
|
||||
let checkedNum = 0
|
||||
if(item.isShow == true) {
|
||||
res.checked.push(item.id)
|
||||
checkedNum = checkedNum + 1
|
||||
}
|
||||
if( checkedNum == arr[x].childrenList[y].childrenList.length) {
|
||||
res.checked.push(arr[x].childrenList[y].id)
|
||||
} else if ( checkedNum != 0) {
|
||||
res.halfChecked.push(arr[x].childrenList[y].id)
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!item.childrenList) {
|
||||
if(item.isShow == true) {
|
||||
res.checked.push(item.id);
|
||||
checkedNum = checkedNum + 1
|
||||
}
|
||||
if(checkedNum == arr[x].childrenList.length) {
|
||||
res.checked.push(arr[x].id)
|
||||
} else if (checkedNum != 0) {
|
||||
res.halfChecked.push(arr[x].id)
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!item.childrenList) {
|
||||
if(item.isShow == true) {
|
||||
res.checked.push(item.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
this.expandedKeys = res.halfChecked.concat(res.checked)
|
||||
this.checkedKeys = res
|
||||
},
|
||||
onCheck(checkedKeys, e) {
|
||||
this.checkedKeys = checkedKeys;
|
||||
changeMenuShow({
|
||||
roleId: this.roleId,
|
||||
showMenusId: e.node.eventKey,
|
||||
}).then((res) => {
|
||||
if (res.code === 200) {
|
||||
this.$message.success(res.msg);
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
onExpand(e) {
|
||||
this.expandedKeys = e;
|
||||
},
|
||||
onSelect(selectedKeys, info) {
|
||||
this.selectedKeys = selectedKeys;
|
||||
getActions({ roleId: this.roleId, menusId: this.selectedKeys[0] }).then(
|
||||
(res) => {
|
||||
this.actionsList = res.data;
|
||||
this.actions.show = true;
|
||||
}
|
||||
);
|
||||
},
|
||||
onChange(e, id) {
|
||||
changeActions({
|
||||
roleId: this.roleId,
|
||||
menusId: this.selectedKeys[0],
|
||||
operationId: id,
|
||||
}).then((res) => {
|
||||
if (res.code === 200) {
|
||||
this.$message.success(res.msg);
|
||||
this.onSelect(this.selectedKeys)
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
onClose() {
|
||||
this.actions.show = false;
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
checkedKeys(val) {
|
||||
},
|
||||
roleList: {
|
||||
handler(val) {
|
||||
val.forEach((ele, index) => {
|
||||
if (ele.childrenList === undefined || ele.childrenList === null) {
|
||||
this.roleList[index].childrenList = [{}];
|
||||
}
|
||||
});
|
||||
},
|
||||
deep: true,
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.role-card {
|
||||
line-height: 30px;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
border-bottom: 1px solid #d9d9d9;
|
||||
margin-bottom: 10px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.treebox {
|
||||
padding-left: 30px;
|
||||
}
|
||||
.tree {
|
||||
display: flex;
|
||||
}
|
||||
.role-card {
|
||||
line-height: 30px;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
border-bottom: 1px solid #d9d9d9;
|
||||
margin-bottom: 10px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.role-li {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
}
|
||||
/deep/.ant-checkbox-wrapper + .ant-checkbox-wrapper {
|
||||
margin: 0px;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,117 @@
|
||||
/**
|
||||
* 配置
|
||||
* 表格列
|
||||
*/
|
||||
export const columns = [
|
||||
{
|
||||
title: "楼栋名称",
|
||||
dataIndex: "name",
|
||||
width: "20%",
|
||||
},
|
||||
{
|
||||
title: "房屋总数",
|
||||
dataIndex: "estateTotals",
|
||||
width: "20%",
|
||||
},
|
||||
{
|
||||
title: "租赁房屋数",
|
||||
dataIndex: "leaseEstateNums",
|
||||
width: "20%"
|
||||
},
|
||||
{
|
||||
title: "租赁率",
|
||||
dataIndex: "leaseRate",
|
||||
width: "20%",
|
||||
customRender:function(leaseRate){
|
||||
return ( leaseRate*100 )+'%'
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "入住率",
|
||||
dataIndex: "occupancyRate",
|
||||
width: "20%",
|
||||
customRender:function(occupancyRate){
|
||||
return ( occupancyRate*100 )+'%'
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
dataIndex: "action",
|
||||
key: "action",
|
||||
width: "180",
|
||||
fixed: "right",
|
||||
scopedSlots: { customRender: "action" },
|
||||
},
|
||||
]
|
||||
// 搜索项
|
||||
export const searchForm = {
|
||||
name: "",
|
||||
}
|
||||
// 分页
|
||||
export const pagination = {
|
||||
current: 1,
|
||||
total: 0,
|
||||
pageSize: 10,
|
||||
showTotal: (total) => `共 ${total} 条`,
|
||||
showSizeChanger: true,
|
||||
showQuickJumper: true,
|
||||
}
|
||||
export const ActionsList = [
|
||||
{
|
||||
label: "批量删除",
|
||||
value: 1,
|
||||
},
|
||||
]
|
||||
export const form = {
|
||||
id:undefined,
|
||||
name: '',
|
||||
buildingInfoImgUrls:[]
|
||||
}
|
||||
export const rules = {
|
||||
name:[{required:true,message:'请输入楼栋',trigger:'blur'}],
|
||||
}
|
||||
|
||||
export const unitColumns = [
|
||||
{
|
||||
title: "单元号",
|
||||
dataIndex: "name",
|
||||
width: "15%",
|
||||
},
|
||||
{
|
||||
title: "楼层数",
|
||||
dataIndex: "floor",
|
||||
width: "15%",
|
||||
},
|
||||
{
|
||||
title: "公共楼层数",
|
||||
dataIndex: "publicFloor",
|
||||
width: "18%",
|
||||
},
|
||||
{
|
||||
title: "是否有电梯",
|
||||
dataIndex: "elevator",
|
||||
width: "18%",
|
||||
customRender:function( elevator ){
|
||||
switch (elevator) {
|
||||
case 1:
|
||||
return '有'
|
||||
case 0:
|
||||
return '无'
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
dataIndex: "action",
|
||||
key: "action",
|
||||
width: "180",
|
||||
fixed: "right",
|
||||
scopedSlots: { customRender: "action" },
|
||||
},
|
||||
]
|
||||
import store from "@/store";
|
||||
export const uploadHeaders = {
|
||||
"manage-login-token": store.getters.getToken,
|
||||
}
|
@ -0,0 +1,369 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-drawer
|
||||
:title="formTitle"
|
||||
:width="720"
|
||||
:visible="show"
|
||||
:body-style="{ paddingBottom: '80px' }"
|
||||
@close="close"
|
||||
>
|
||||
<div class="drawer-content" v-if="formType !== 3">
|
||||
楼栋信息
|
||||
<a-divider></a-divider>
|
||||
<a-form-model
|
||||
layout="vertical"
|
||||
ref="ruleForm"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
>
|
||||
<a-form-model-item label="楼栋号" prop="name">
|
||||
<a-input
|
||||
v-model="form.name"
|
||||
placeholder="请输入楼栋号"
|
||||
style="width: 50%"
|
||||
/>
|
||||
</a-form-model-item>
|
||||
<a-form-model-item
|
||||
label="上传照片"
|
||||
style="width: 70%"
|
||||
prop="fileList"
|
||||
>
|
||||
<a-upload
|
||||
:action="`${$upload}`"
|
||||
:headers="uploadHeaders"
|
||||
accept='.jpg,.JPG,.png,.PNG'
|
||||
list-type="picture"
|
||||
:file-list="fileList"
|
||||
@preview="handlePreview"
|
||||
@change="fileChange"
|
||||
:beforeUpload='beforeUpload'
|
||||
>
|
||||
<a-button> <a-icon type="upload" /> 点击上传 </a-button>
|
||||
</a-upload>
|
||||
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
|
||||
<img alt="example" style="width: 100%" :src="previewImage" />
|
||||
</a-modal>
|
||||
</a-form-model-item>
|
||||
</a-form-model>
|
||||
</div>
|
||||
<!-- 详情 -->
|
||||
<div class="drawer-content detail" v-else-if="formType===3">
|
||||
楼栋信息
|
||||
<a-divider></a-divider>
|
||||
<a-form layout="vertical">
|
||||
<a-form-item label="楼栋号" prop="name">
|
||||
<span>{{form.name}}</span>
|
||||
</a-form-item>
|
||||
<a-form-item label="楼栋照片" style="width: 70%" v-if="fileList.length>0">
|
||||
<a-upload
|
||||
:action="`${$upload}`"
|
||||
:headers="uploadHeaders"
|
||||
accept='.jpg,.JPG,.png,.PNG'
|
||||
list-type="picture"
|
||||
:file-list="fileList"
|
||||
@preview="handlePreview"
|
||||
@change="fileChange"
|
||||
:beforeUpload='beforeUpload'
|
||||
>
|
||||
</a-upload>
|
||||
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
|
||||
<img alt="example" style="width: 100%" :src="previewImage" />
|
||||
</a-modal>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
单元信息
|
||||
<a-divider></a-divider>
|
||||
<a-button class='add-btn' @click='addUnit' style="margin-bottom:5px">新增单元</a-button>
|
||||
<a-table :columns="unitColumns" :data-source="unitData" :row-key="record => record.id">
|
||||
<span slot="action" slot-scope="text, row">
|
||||
<a-space><a @click="addUnit(text, row)">编辑</a>
|
||||
<a @click="delUnit(text, row)" style="color: red">删除</a></a-space>
|
||||
</span>
|
||||
</a-table>
|
||||
</div>
|
||||
<!-- foot -->
|
||||
<div class="drawer-footer">
|
||||
<a-button :style="{ marginRight: '8px' }" @click="close">
|
||||
关闭
|
||||
</a-button>
|
||||
<a-button type="primary" @click="submit" v-if="formType !==3">
|
||||
提交
|
||||
</a-button>
|
||||
<a-button type="primary" @click="edit" v-else> 编辑 </a-button>
|
||||
</div>
|
||||
</a-drawer>
|
||||
<!-- 单元 -->
|
||||
<a-modal
|
||||
:title="unit.modalTitle"
|
||||
:visible="unit.showModal"
|
||||
@ok="unitSubmit"
|
||||
@cancel="unitClose"
|
||||
>
|
||||
<div>
|
||||
<a-form-model
|
||||
ref="unForm"
|
||||
:model="unit.unitForm"
|
||||
:rules="unit.rules"
|
||||
layout="vertical"
|
||||
>
|
||||
<a-form-model-item prop='name' label='单元号'>
|
||||
<a-input placeholder='请输入' v-model="unit.unitForm.name"/>
|
||||
</a-form-model-item>
|
||||
<a-form-model-item prop='floor' label='楼层数'>
|
||||
<a-input placeholder='请输入' v-model.number="unit.unitForm.floor"/>
|
||||
</a-form-model-item>
|
||||
<a-form-model-item prop='publicFloor' label='公共楼层数'>
|
||||
<a-input placeholder='请输入' v-model.number="unit.unitForm.publicFloor"/>
|
||||
</a-form-model-item>
|
||||
<a-form-model-item prop='elevator' label='是否有电梯'>
|
||||
<a-select placeholder='请选择' v-model="unit.unitForm.elevator">
|
||||
<a-select-option :value='1'>有</a-select-option>
|
||||
<a-select-option :value='0'>无</a-select-option>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
</a-form-model>
|
||||
</div>
|
||||
</a-modal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { form, rules, unitColumns,uploadHeaders } from "./config";
|
||||
import { buildInsert,buildUpdate, buildInfo, unitAdd, unitUpdate, unitDel } from '@/api/basic/estate'
|
||||
function getBase64(file) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const reader = new FileReader();
|
||||
reader.readAsDataURL(file);
|
||||
reader.onload = () => resolve(reader.result);
|
||||
reader.onerror = (error) => reject(error);
|
||||
});
|
||||
}
|
||||
export default {
|
||||
props: {
|
||||
show: Boolean,
|
||||
type: Number,
|
||||
editId: Number,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form,
|
||||
rules,
|
||||
unitColumns,
|
||||
uploadHeaders,
|
||||
previewVisible: false,
|
||||
previewImage: "",
|
||||
imgLoading: false,
|
||||
formTitle:'新增楼栋',
|
||||
fileList: [], //图片list
|
||||
unitData: [], //单元数据
|
||||
formType: 1, //1 add 2edit 3detail
|
||||
unit:{// 单元
|
||||
showModal:false, //弹窗
|
||||
modalTitle:'',
|
||||
unitForm:{ //表单
|
||||
id:null,
|
||||
name:'',
|
||||
floor:null,
|
||||
elevator:undefined,
|
||||
publicFloor:null,
|
||||
manageBuildingId:null
|
||||
},
|
||||
rules:{
|
||||
name:[{required:true,message:'请输入单元名称',trigger:'blur'}],
|
||||
floor:[{required:true,message:'请输入楼层数',trigger:'blur'}],
|
||||
elevator:[{required:true,message:'是否有电梯',trigger:'change'}],
|
||||
publicFloor:[{required:true,message:'公共楼层数',trigger:'blur'}],
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
getInfo(){
|
||||
buildInfo({buildingId:this.form.id}).then(res=>{
|
||||
this.form.name =res.data.name
|
||||
this.unitData =res.data.manageUnitFBIVoList
|
||||
if(!res.data.buildingInfoImgList.length){
|
||||
this.fileList=[]
|
||||
}
|
||||
const file = []
|
||||
for(let item of res.data.buildingInfoImgList){
|
||||
let obj = {
|
||||
name:item.url.split('_')[0] +'.'+ item.url.split('.')[1],
|
||||
url: this.$ImgUrl(item.url),
|
||||
uid:item.url.split('_')[1],
|
||||
status:'done',
|
||||
thumbUrl: this.$ImgUrl(item.url),
|
||||
}
|
||||
file.push(obj)
|
||||
}
|
||||
this.fileList = file
|
||||
})
|
||||
},
|
||||
close() {// 楼栋drawer关闭的回调
|
||||
this.$emit('close');
|
||||
this.form = {
|
||||
id:null,
|
||||
name: '',
|
||||
buildingInfoImgUrls:[]
|
||||
}
|
||||
this.unitData =[]
|
||||
this.fileList = []
|
||||
},
|
||||
edit(){// 楼栋修改
|
||||
this.formType = 2;
|
||||
},
|
||||
beforeUpload(f, l) {
|
||||
const isLt50M = f.size / 1024 / 1024 < 50;
|
||||
if (!isLt50M) {
|
||||
this.$message.error(f.name + "文件大小超出限制,请修改后重新上传");
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
submit(){// 楼栋提交
|
||||
let file = []
|
||||
for(let item of this.fileList){
|
||||
// 新增的照片
|
||||
if(item.response){
|
||||
file.push(item.response.data)
|
||||
}else{
|
||||
// 已添加的照片
|
||||
file.push(item.url.split('/')[item.url.split('/').length-1])
|
||||
}
|
||||
}
|
||||
this.form.buildingInfoImgUrls = file
|
||||
this.$refs.ruleForm.validate(async valid => {
|
||||
if (valid) {
|
||||
if(this.formType ===1){
|
||||
const res = await buildInsert(this.form)
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg)
|
||||
this.close()
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
}else if(this.formType ===2){
|
||||
const res = await buildUpdate(this.form)
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg)
|
||||
this.close()
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
},
|
||||
addUnit(data,row){//新增单元
|
||||
if(row!==undefined){
|
||||
this.unit.modalTitle='修改单元'
|
||||
this.unit.unitForm= {...row}
|
||||
this.unit.unitForm.manageBuildingId = this.form.id
|
||||
}else{
|
||||
this.unit.modalTitle='新增单元'
|
||||
}
|
||||
this.unit.showModal=true
|
||||
},
|
||||
unitSubmit(){//单元提交
|
||||
this.$refs.unForm.validate(async valid => {
|
||||
if (valid) {
|
||||
if(this.unit.modalTitle==='新增单元'){
|
||||
let res = await unitAdd(this.unit.unitForm)
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg)
|
||||
this.getInfo()
|
||||
this.unitClose()
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
}else{
|
||||
let res = await unitUpdate(this.unit.unitForm)
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg)
|
||||
this.getInfo()
|
||||
this.unitClose()
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
delUnit(data,row){
|
||||
this.$confirm({
|
||||
title: "是否删除",
|
||||
icon: "delete",
|
||||
onOk: async() => {
|
||||
let res = await unitDel({unitIds:[row.id]})
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg)
|
||||
this.getInfo()
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
unitClose(){
|
||||
this.unit.showModal = false;
|
||||
this.$refs.unForm.resetFields()
|
||||
},
|
||||
async handlePreview(file) {
|
||||
if (!file.url && !file.preview) {
|
||||
file.preview = await getBase64(file.originFileObj);
|
||||
}
|
||||
this.previewImage = file.url || file.preview;
|
||||
this.previewVisible = true;
|
||||
},
|
||||
handleCancel() {
|
||||
this.previewVisible = false;
|
||||
},
|
||||
fileChange(info) {
|
||||
this.fileList = info.fileList
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
type: {
|
||||
handler(val) {
|
||||
this.formType = val;
|
||||
},
|
||||
},
|
||||
editId:{
|
||||
handler(val) {
|
||||
this.form.id = val;
|
||||
this.unit.unitForm.manageBuildingId = val
|
||||
if(this.formType !== 1){
|
||||
this.getInfo()
|
||||
}
|
||||
},
|
||||
},
|
||||
formType:{
|
||||
handler(val) {
|
||||
switch (val) {
|
||||
case 1:
|
||||
this.formTitle ='新增楼栋'
|
||||
break;
|
||||
case 2:
|
||||
this.formTitle ='修改楼栋'
|
||||
break;
|
||||
case 3:
|
||||
this.formTitle ='楼栋详情'
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.detail{
|
||||
/deep/.anticon svg{
|
||||
display:none;
|
||||
}
|
||||
}
|
||||
</style>
|
@ -0,0 +1,169 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="cardTitle">楼栋管理</div>
|
||||
<div class="search-box">
|
||||
<a-row>
|
||||
<a-col :span='20'>
|
||||
<a-space size="large">
|
||||
<a-input v-model="searchForm.name" placeholder="请输入楼栋名称" />
|
||||
<a-button type="primary" @click='getData()'>查 询</a-button>
|
||||
<a-button @click='reset()'>重 置</a-button>
|
||||
</a-space>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div class="search-box">
|
||||
<a-button class="add-btn" @click="addBuilding">添加楼栋</a-button>
|
||||
</div>
|
||||
<a-table
|
||||
:columns="columns"
|
||||
:data-source="tableData"
|
||||
:pagination="pagination"
|
||||
@change="handleTableChange"
|
||||
:row-selection="{
|
||||
selectedRowKeys: tableChoosed,
|
||||
onChange: selectionChoosed,
|
||||
}"
|
||||
:row-key="
|
||||
(record, index) => {
|
||||
return record.id;
|
||||
}"
|
||||
>
|
||||
<template slot="action" slot-scope="text,record">
|
||||
<a @click="detail(record.id)">详情</a>
|
||||
<a @click="del([record.id])" style="margin-left: 8px;color: red">删除</a>
|
||||
</template>
|
||||
</a-table>
|
||||
<div class="action">
|
||||
<a-dropdown :disabled="!hasSelected" >
|
||||
<a-menu slot="overlay" @click="handleMenuClick">
|
||||
<a-menu-item key="del"> 批量删除 </a-menu-item>
|
||||
</a-menu>
|
||||
<a-button> 批量操作 <a-icon type="down" /> </a-button>
|
||||
</a-dropdown>
|
||||
<span style="margin-left: 8px">
|
||||
<template v-if="hasSelected">
|
||||
{{ `已选择 ${tableChoosed.length} 条` }}
|
||||
</template>
|
||||
</span>
|
||||
</div>
|
||||
<curd-form :show='drawerConfig.show' :type="drawerConfig.type" @close='close' :editId='editId'></curd-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { columns,searchForm,ActionsList} from "./depend/config"
|
||||
import { buildingList,buildingDel } from "@/api/basic/estate"
|
||||
import curdForm from './depend/form.vue'
|
||||
export default {
|
||||
components: {
|
||||
curdForm
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
pagination: {
|
||||
current: 1,
|
||||
total: 0,
|
||||
pageSize: 10,
|
||||
showTotal: (total) => `共 ${total} 条`,
|
||||
showSizeChanger: true,
|
||||
showQuickJumper: true,
|
||||
},
|
||||
columns,
|
||||
searchForm,
|
||||
ActionsList,
|
||||
drawerConfig:{
|
||||
type:1,
|
||||
show:false,
|
||||
},
|
||||
tableChoosed: [],
|
||||
// 数据
|
||||
tableData: [],
|
||||
editId:undefined,
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getData()
|
||||
},
|
||||
computed: {
|
||||
hasSelected() {
|
||||
return this.tableChoosed.length > 0;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
const res = await buildingList(
|
||||
{
|
||||
pageNum:this.pagination.current,
|
||||
size:this.pagination.pageSize,
|
||||
...this.searchForm
|
||||
}
|
||||
)
|
||||
this.tableData = res.data.rows
|
||||
this.pagination.total = res.data.total
|
||||
},
|
||||
addBuilding(){
|
||||
this.drawerConfig.show = true
|
||||
this.drawerConfig.type = 1
|
||||
},
|
||||
close(){
|
||||
this.drawerConfig.show = false
|
||||
this.drawerConfig.type = 1;
|
||||
this.editId = null
|
||||
this.getData()
|
||||
},
|
||||
detail(data){
|
||||
this.drawerConfig.show = true;
|
||||
this.drawerConfig.type = 3;
|
||||
this.editId = data
|
||||
},
|
||||
reset(){
|
||||
this.searchForm.name =''
|
||||
this.getData()
|
||||
},
|
||||
handleTableChange(pagination) {
|
||||
const pager = { ...this.pagination };
|
||||
pager.current = pagination.current;
|
||||
pager.pageSize = pagination.pageSize;
|
||||
this.pagination = pager;
|
||||
this.getData()
|
||||
},
|
||||
del(ids) {
|
||||
this.$confirm({
|
||||
title: "是否删除",
|
||||
icon: "delete",
|
||||
onOk: ()=>{
|
||||
buildingDel({buildingIds:ids}).then(res=>{
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg)
|
||||
this.getData()
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
});
|
||||
},
|
||||
handleMenuClick(data) {
|
||||
if (data.key === "del") {
|
||||
this.del(this.tableChoosed);
|
||||
}
|
||||
},
|
||||
selectionChoosed(data) {
|
||||
this.tableChoosed = data;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.role-card{
|
||||
line-height: 30px;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
border-bottom: 1px solid #d9d9d9;
|
||||
margin-bottom: 10px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,90 @@
|
||||
/**
|
||||
* 配置
|
||||
* 表格列
|
||||
*/
|
||||
export const columns = [
|
||||
{
|
||||
title: "申请人姓名",
|
||||
dataIndex:"name",
|
||||
width:'12%'
|
||||
},
|
||||
{
|
||||
title: "申请人身份",
|
||||
key: "tags",
|
||||
width: "12%",
|
||||
dataIndex: "identity",
|
||||
scopedSlots: { customRender: "tags" },
|
||||
},
|
||||
{
|
||||
title: "房屋名称",
|
||||
dataIndex: "manageBuildingName",
|
||||
scopedSlots: { customRender: "name" },
|
||||
width: "20%",
|
||||
},
|
||||
{
|
||||
title: "申请人手机号",
|
||||
dataIndex:"tel",
|
||||
width:'10%'
|
||||
},
|
||||
{
|
||||
title: "申请人身份证号",
|
||||
dataIndex:"idCard",
|
||||
width:'14%'
|
||||
},
|
||||
{
|
||||
title: "状态",
|
||||
dataIndex:"status",
|
||||
width:'10%',
|
||||
customRender:function(status){
|
||||
switch (status) {
|
||||
case 1:
|
||||
return '审核中'
|
||||
case 2:
|
||||
return '已驳回'
|
||||
case 3:
|
||||
return '已通过'
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "房屋类型",
|
||||
dataIndex:"estateTypeName",
|
||||
width:'10%'
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
dataIndex: "action",
|
||||
key: "action",
|
||||
width: "100",
|
||||
fixed: "right",
|
||||
scopedSlots: { customRender: "action" },
|
||||
},
|
||||
]
|
||||
// 搜索项
|
||||
export const searchForm = {
|
||||
identity: undefined,
|
||||
}
|
||||
export function reset() {
|
||||
this.searchForm = {
|
||||
identity: undefined,
|
||||
}
|
||||
this.getData()
|
||||
}
|
||||
export function handleTableChange(pagination) {
|
||||
const pager = { ...this.pagination };
|
||||
pager.current = pagination.current;
|
||||
pager.pageSize = pagination.pageSize;
|
||||
this.pagination = pager;
|
||||
this.getData()
|
||||
}
|
||||
// 分页
|
||||
export const pagination = {
|
||||
current: 1,
|
||||
total: 0,
|
||||
pageSize: 10,
|
||||
showTotal: (total) => `共 ${total} 条`,
|
||||
showSizeChanger: true,
|
||||
showQuickJumper: true,
|
||||
}
|
@ -0,0 +1,236 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="cardTitle">
|
||||
<a-space size="large">
|
||||
<span>住户审核</span>
|
||||
<a-radio-group
|
||||
default-value="1"
|
||||
button-style="solid"
|
||||
@change="tabsChange"
|
||||
v-model="activeName"
|
||||
>
|
||||
<a-radio-button value="1"> 待审核 </a-radio-button>
|
||||
<a-radio-button value="3"> 已通过 </a-radio-button>
|
||||
<a-radio-button value="2"> 已驳回 </a-radio-button>
|
||||
<a-radio-button> 全部 </a-radio-button>
|
||||
</a-radio-group>
|
||||
</a-space>
|
||||
</div>
|
||||
<div class="search-box">
|
||||
<a-row>
|
||||
<a-col :span="20">
|
||||
<a-space size="large">
|
||||
<a-select placeholder="请选择用户身份" v-model="searchForm.identity" style="width: 200px" >
|
||||
<a-select-option v-for="item in options.identity" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
<a-button type="primary" @click="getData()">查 询</a-button>
|
||||
<a-button @click="reset">重 置</a-button>
|
||||
</a-space>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div class="main">
|
||||
<div style="margin-bottom: 16px">
|
||||
<!-- 批量操作 -->
|
||||
<a-select
|
||||
type="primary"
|
||||
v-model="activeAction"
|
||||
:disabled="!hasSelected"
|
||||
:loading="loading"
|
||||
style="width: 120px"
|
||||
@change="Actions"
|
||||
placeholder="请选择操作"
|
||||
>
|
||||
批量
|
||||
<a-select-option v-for="item in ActionsList" :key="item.value">
|
||||
{{ item.label }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
<span style="margin-left: 8px">
|
||||
<template v-if="hasSelected">
|
||||
{{ `已选择 ${selectedRowKeys.length} 条` }}
|
||||
</template>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<a-table
|
||||
:columns="columns"
|
||||
:data-source="tableData"
|
||||
:pagination="pagination"
|
||||
@change="handleTableChange"
|
||||
:row-selection="{
|
||||
selectedRowKeys: selectedRowKeys,
|
||||
onChange: selectionChoosed,
|
||||
}"
|
||||
:row-key="
|
||||
(record, index) => {
|
||||
return record.estateReviewId;
|
||||
}
|
||||
"
|
||||
>
|
||||
<span slot="name" slot-scope="text, row">
|
||||
{{
|
||||
row.buildingName +
|
||||
"栋/" +
|
||||
row.unitName +
|
||||
"单元/" +
|
||||
row.estateName +
|
||||
"室"
|
||||
}}
|
||||
</span>
|
||||
<span slot="action" slot-scope="text, row">
|
||||
<a-space>
|
||||
<a class="ant-dropdown-link" @click="audit(row.estateReviewId, 1)" :disabled="row.status!==1"
|
||||
>通过</a
|
||||
>
|
||||
<a class="ant-dropdown-link" @click="audit(row.estateReviewId, 2)" :disabled="row.status!==1"
|
||||
>驳回</a
|
||||
>
|
||||
</a-space>
|
||||
</span>
|
||||
<span slot="tags" slot-scope="tag">
|
||||
<a-tag
|
||||
:color="
|
||||
tag === 1
|
||||
? 'volcano'
|
||||
: tag === 2
|
||||
? 'geekblue'
|
||||
: tag === 3
|
||||
? 'geekblue'
|
||||
: 'red'
|
||||
"
|
||||
>
|
||||
{{
|
||||
tag === 1
|
||||
? "业主"
|
||||
: tag === 2
|
||||
? "业主亲属"
|
||||
: tag === 3
|
||||
? "租户"
|
||||
: tag === 4
|
||||
? "租户亲属"
|
||||
: "-"
|
||||
}}
|
||||
</a-tag>
|
||||
</span>
|
||||
</a-table>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
columns,
|
||||
pagination,
|
||||
searchForm,
|
||||
reset,
|
||||
handleTableChange,
|
||||
} from "./depend/config";
|
||||
import { reviewList, review } from "@/api/basic/resident";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
pagination: pagination,
|
||||
searchForm: searchForm,
|
||||
columns: columns,
|
||||
activeAction: undefined,
|
||||
loading: false,
|
||||
// 选择的index
|
||||
selectedRowKeys: [],
|
||||
tableData: [],
|
||||
ActionsList: [
|
||||
{ value: 1, label: '批量通过'},
|
||||
{ value: 2, label: '批量驳回'}
|
||||
],
|
||||
activeName:'1',
|
||||
options:{
|
||||
identity:[
|
||||
{
|
||||
id:1,
|
||||
name:'业主'
|
||||
},
|
||||
{
|
||||
id:2,
|
||||
name:'业主亲属'
|
||||
},
|
||||
{
|
||||
id:3,
|
||||
name:'租户'
|
||||
},
|
||||
{
|
||||
id:4,
|
||||
name:'租户亲属'
|
||||
},
|
||||
]
|
||||
}
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getData();
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
const res = await reviewList({
|
||||
pageNum: this.pagination.current,
|
||||
size: this.pagination.pageSize,
|
||||
status:this.activeName,
|
||||
...this.searchForm
|
||||
});
|
||||
this.tableData = res.data.rows;
|
||||
this.pagination.total = res.data.total
|
||||
},
|
||||
tabsChange() {
|
||||
this.getData();
|
||||
},
|
||||
// 审核 1通过 2驳回
|
||||
audit(estateReviewId, operate) {
|
||||
this.$confirm({
|
||||
title: "是否" + (operate === 1 ? "通过" : "驳回"),
|
||||
// okText:'删除',
|
||||
// cancelText:'取消',
|
||||
icon: "form",
|
||||
onOk: async() =>{
|
||||
const res = await review({
|
||||
estateReviewId: estateReviewId,
|
||||
operate: operate,
|
||||
});
|
||||
if (res.code === 200) {
|
||||
this.$message.success(res.msg + res.data);
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
handleTableChange:handleTableChange,
|
||||
Actions(data) {
|
||||
this.selectedRowKeys.forEach(ele => {
|
||||
let obj = {operate: data, estateReviewId: ele};
|
||||
review(obj).then(res => {
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg)
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
});
|
||||
})
|
||||
this.activeAction = undefined;
|
||||
this.selectedRowKeys = [];
|
||||
this.getData();
|
||||
},
|
||||
selectionChoosed(data) {
|
||||
this.selectedRowKeys = data;
|
||||
},
|
||||
reset: reset,
|
||||
},
|
||||
computed: {
|
||||
// 是否选择selection
|
||||
hasSelected() {
|
||||
return this.selectedRowKeys.length > 0;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
</style>
|
@ -0,0 +1,499 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- add -->
|
||||
<a-drawer
|
||||
:title="title"
|
||||
:width="720"
|
||||
:visible="show"
|
||||
:body-style="{ paddingBottom: '80px' }"
|
||||
@close="addClose"
|
||||
>
|
||||
<div class="drawer-content">
|
||||
基本信息
|
||||
<a-divider></a-divider>
|
||||
<a-form-model
|
||||
ref="ruleForm"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
layout="vertical"
|
||||
>
|
||||
<a-row>
|
||||
<a-col :span="8" v-if="form.id===null">
|
||||
<a-form-model-item label="关联房屋" prop="manageEstateId">
|
||||
<a-cascader
|
||||
:options="estateData"
|
||||
v-model="estateArr"
|
||||
:field-names="{ label: 'name', value: 'id', children: 'childList' }"
|
||||
placeholder="楼栋/单元/房间号"
|
||||
@change="onChange"
|
||||
style="width: 90%"
|
||||
/>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="8" v-if="form.id===null">
|
||||
<a-form-model-item label="房屋类型" prop="type">
|
||||
<a-input
|
||||
v-model="form.type"
|
||||
placeholder="请先选择关联房屋"
|
||||
disabled
|
||||
style="width: 90%"
|
||||
/>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="8" v-if="form.id===null">
|
||||
<a-form-model-item label="住户身份" prop="identity">
|
||||
<a-select v-model="form.identity" placeholder="请选择住户身份" style="width: 90%">
|
||||
<a-select-option v-for="item in options.identity" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="姓名" prop="name">
|
||||
<a-input placeholder="请输入姓名" v-model="form.name" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="手机号" prop="tel">
|
||||
<a-input placeholder="请输入手机号" v-model="form.tel" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="性别" prop="sex">
|
||||
<a-select placeholder="请选择性别" v-model="form.sex" style="width: 90%" >
|
||||
<a-select-option v-for="item in options.sex" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="身份证号" prop="idCard">
|
||||
<a-input placeholder="请输入身份证号" v-model="form.idCard" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="入住时间" prop="checkTime">
|
||||
<a-date-picker v-model="form.checkTime" value-format="YYYY-MM-DD HH:mm:ss"/>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="户籍所在地" prop="domicile">
|
||||
<a-input placeholder="户籍所在地" v-model="form.domicile" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
身份证头像照
|
||||
<!-- head -->
|
||||
<a-upload
|
||||
list-type="picture-card"
|
||||
:action="`${$upload}`"
|
||||
:headers="uploadHeaders"
|
||||
accept='.jpg,.JPG,.png,.PNG,.jpeg,.JPEG'
|
||||
@preview="handlePreview"
|
||||
@change="headChange"
|
||||
:file-list="headList"
|
||||
:beforeUpload="beforeUpload"
|
||||
>
|
||||
<div v-if="headList.length < 1">
|
||||
<a-icon type="plus" />
|
||||
<div class="ant-upload-text">
|
||||
上传照片
|
||||
</div>
|
||||
</div>
|
||||
</a-upload>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
身份证徽面照
|
||||
<!-- back -->
|
||||
<a-upload
|
||||
list-type="picture-card"
|
||||
:action="`${$upload}`"
|
||||
:headers="uploadHeaders"
|
||||
accept='.jpg,.JPG,.png,.PNG,.jpeg,.JPEG'
|
||||
@preview="handlePreview"
|
||||
@change="backChange"
|
||||
:file-list="backList"
|
||||
:beforeUpload="beforeUpload"
|
||||
>
|
||||
<div v-if="backList.length < 1">
|
||||
<a-icon type="plus" />
|
||||
<div class="ant-upload-text">
|
||||
上传照片
|
||||
</div>
|
||||
</div>
|
||||
</a-upload>
|
||||
</a-col>
|
||||
<div v-show=" form.identity === 4">
|
||||
关联信息
|
||||
<a-divider></a-divider>
|
||||
</div>
|
||||
<div v-if="form.identity === 2">
|
||||
<!-- <a-col :span="12">
|
||||
<a-form-model-item label="业主姓名" prop="ownerName">
|
||||
<a-input placeholder="请输入业主姓名" v-model="form.ownerName" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="业主电话" prop="ownerTel">
|
||||
<a-input placeholder="请输入业主电话" v-model="form.ownerTel" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col> -->
|
||||
</div>
|
||||
<div v-else-if="form.identity === 4">
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="租户姓名" prop="tenantName">
|
||||
<a-input placeholder="请输入租户姓名" v-model="form.tenantName" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="租户电话" prop="tenantTel">
|
||||
<a-input placeholder="请输入租户电话" v-model="form.tenantTel" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
</div>
|
||||
联系信息
|
||||
<a-divider></a-divider>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="紧急联系人" prop="emergencyContact">
|
||||
<a-input placeholder="请输入紧急联系人" v-model="form.emergencyContact" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item
|
||||
label="紧急联系人电话"
|
||||
prop="emergencyContactNumber"
|
||||
>
|
||||
<a-input
|
||||
placeholder="请输入紧急联系人电话"
|
||||
style="width: 90%"
|
||||
v-model="form.emergencyContactNumber"
|
||||
/>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
其他信息
|
||||
<a-divider></a-divider>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="婚姻状况" prop="maritalStatus">
|
||||
<a-select v-model="form.maritalStatus" placeholder="请选择婚姻状况" style="width: 90%">
|
||||
<a-select-option v-for="item in options.maritalStatus" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="民族" prop="nation">
|
||||
<a-input placeholder="请输入民族" v-model="form.tenantTel" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="政治面貌" prop="politicalOutlook">
|
||||
<a-select placeholder="请选择婚姻状况" v-model="form.politicalOutlook" style="width: 90%" >
|
||||
<a-select-option v-for="item in options.politicalOutlook" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="户口类型" prop="accountType">
|
||||
<a-select placeholder="请选择户口类型" v-model="form.accountType" style="width: 90%" >
|
||||
<a-select-option v-for="item in options.accountType" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="从事职业" prop="occupation">
|
||||
<a-input placeholder="请输入从事职业" v-model="form.occupation" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="工作单位" prop="employer">
|
||||
<a-input placeholder="请输入工作单位" v-model="form.employer" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-model-item label="工作单位地址" prop="employerAddress">
|
||||
<a-input placeholder="请输入工作单位地址" v-model="form.employerAddress" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
住户照片
|
||||
<!-- pic -->
|
||||
<a-upload
|
||||
list-type="picture-card"
|
||||
:action="`${$upload}`"
|
||||
:headers="uploadHeaders"
|
||||
accept='.jpg,.JPG,.png,.PNG,.jpeg,.JPEG'
|
||||
@preview="handlePreview"
|
||||
@change="picChange"
|
||||
:beforeUpload="beforeUpload"
|
||||
:file-list="picList"
|
||||
>
|
||||
<div v-if="picList.length < 4">
|
||||
<a-icon type="plus" />
|
||||
<div class="ant-upload-text">
|
||||
上传照片
|
||||
</div>
|
||||
</div>
|
||||
</a-upload>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-model-item label="备注" prop="remarks">
|
||||
<a-textarea placeholder="请输入备注" v-model="form.remarks" style="width: 90%" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form-model>
|
||||
</div>
|
||||
<div class="drawer-footer">
|
||||
<a-button
|
||||
:style="{ marginRight: '8px' }"
|
||||
@click="addClose"
|
||||
>
|
||||
关闭
|
||||
</a-button>
|
||||
<a-button type="primary" @click="submit"> 提交 </a-button>
|
||||
</div>
|
||||
</a-drawer>
|
||||
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
|
||||
<img alt="example" style="width: 100%" :src="previewImage" />
|
||||
</a-modal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { form, rules, options, uploadHeaders } from "./form.js"
|
||||
import { estate } from '@/api/basic/estate'
|
||||
import { residentInsert, residentUpdate, residentInfo } from '@/api/basic/resident'
|
||||
function getBase64(file) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const reader = new FileReader();
|
||||
reader.readAsDataURL(file);
|
||||
reader.onload = () => resolve(reader.result);
|
||||
reader.onerror = error => reject(error);
|
||||
});
|
||||
}
|
||||
export default {
|
||||
props:{
|
||||
show:{
|
||||
default:false,
|
||||
type:Boolean,
|
||||
},
|
||||
editId:Number,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form,
|
||||
rules,
|
||||
options,
|
||||
loading: false,
|
||||
estateArr:[],
|
||||
estateData:[],
|
||||
title:'新增住户',
|
||||
previewVisible:false,
|
||||
uploadHeaders,
|
||||
previewImage:'',
|
||||
headList: [],
|
||||
backList: [],
|
||||
picList: [],
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.getEstate()
|
||||
},
|
||||
methods: {
|
||||
async getEstate(){
|
||||
let res = await estate()
|
||||
this.estateData = res.data
|
||||
this.estateDisable(this.estateData)
|
||||
},
|
||||
estateDisable(arr){
|
||||
arr.forEach((item,index)=>{
|
||||
if(!item.manageEstateTypeName && item.childList.length === 0){
|
||||
arr[index].disabled = true
|
||||
}else if(item.manageEstateTypeName || item.childList.length > 0){
|
||||
arr[index].disabled = false
|
||||
}else{
|
||||
this.estateDisable(item.childList)
|
||||
}
|
||||
})
|
||||
},
|
||||
submit(){
|
||||
// 照片
|
||||
// 头像
|
||||
let head = []
|
||||
for(let item of this.headList){
|
||||
// 新增的照片
|
||||
if(item.response){
|
||||
head.push(item.response.data)
|
||||
}else{
|
||||
// 已添加的照片
|
||||
head.push(item.url.split('/')[item.url.split('/').length-1])
|
||||
}
|
||||
}
|
||||
this.form.idCardFrontImgUrls = head
|
||||
// 徽面
|
||||
let back = []
|
||||
for(let item of this.backList){
|
||||
// 新增的照片
|
||||
if(item.response){
|
||||
back.push(item.response.data)
|
||||
}else{
|
||||
// 已添加的照片
|
||||
back.push(item.url.split('/')[item.url.split('/').length-1])
|
||||
}
|
||||
}
|
||||
this.form.idCardBackImgUrls = back
|
||||
// 照片
|
||||
let pic = []
|
||||
for(let item of this.picList){
|
||||
// 新增的照片
|
||||
if(item.response){
|
||||
pic.push(item.response.data)
|
||||
}else{
|
||||
// 已添加的照片
|
||||
pic.push(item.url.split('/')[item.url.split('/').length-1])
|
||||
}
|
||||
}
|
||||
this.form.residentImgUrls = pic
|
||||
this.$refs.ruleForm.validate(async valid => {
|
||||
if(valid){
|
||||
if(this.title === '新增住户'){
|
||||
let res = await residentInsert(this.form)
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg)
|
||||
this.success()
|
||||
this.addClose()
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
}else if(this.title === '修改住户信息'){
|
||||
let res = await residentUpdate(this.form)
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg)
|
||||
this.success()
|
||||
this.addClose()
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
beforeUpload(f, l) {
|
||||
const isLt50M = f.size / 1024 / 1024 < 50;
|
||||
if (!isLt50M) {
|
||||
this.$message.error(f.name + "文件大小超出限制,请修改后重新上传");
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
addClose(){
|
||||
this.$refs.ruleForm.resetFields();
|
||||
this.$emit('close')
|
||||
this.estateArr = []
|
||||
this.headList = []
|
||||
this.backList = []
|
||||
this.picList = []
|
||||
},
|
||||
success(){
|
||||
this.$emit('success')
|
||||
},
|
||||
async handlePreview(file) {
|
||||
if (!file.url && !file.preview) {
|
||||
file.preview = await getBase64(file.originFileObj);
|
||||
}
|
||||
this.previewImage = file.url || file.preview;
|
||||
this.previewVisible = true;
|
||||
},
|
||||
headChange(info){
|
||||
this.headList = info.fileList
|
||||
},
|
||||
backChange(info){
|
||||
this.backList = info.fileList
|
||||
},
|
||||
picChange(info){
|
||||
this.picList = info.fileList
|
||||
},
|
||||
handleCancel() {
|
||||
this.previewVisible = false;
|
||||
},
|
||||
onChange(value, selectedOptions){
|
||||
if(value.length > 0){
|
||||
this.form.manageEstateId = value[value.length - 1];
|
||||
this.form.type = selectedOptions[selectedOptions.length - 1].manageEstateTypeName;
|
||||
}else{
|
||||
this.form.manageEstateId = undefined;
|
||||
this.form.type = ''
|
||||
}
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
editId(val){
|
||||
if(val){
|
||||
this.form.id = val
|
||||
this.title = '修改住户信息'
|
||||
residentInfo({id:val}).then(res=>{
|
||||
this.form.name = res.data.name
|
||||
this.form.tel = res.data.tel
|
||||
this.form.sex = res.data.sex
|
||||
this.form.idCard = res.data.idCard
|
||||
this.form.checkTime = res.data.checkTime
|
||||
this.form.domicile = res.data.domicile
|
||||
this.form.emergencyContact = res.data.emergencyContact
|
||||
this.form.emergencyContactNumber = res.data.emergencyContactNumber
|
||||
this.form.maritalStatus = res.data.maritalStatus
|
||||
this.form.nation = res.data.nation
|
||||
this.form.politicalOutlook = res.data.politicalOutlook
|
||||
this.form.accountType = res.data.accountType
|
||||
this.form.occupation = res.data.occupation
|
||||
this.form.employer = res.data.employer
|
||||
this.form.employerAddress = res.data.employerAddress
|
||||
this.form.remarks = res.data.remarks
|
||||
// idCardFrontImgUrls
|
||||
// idCardBackImgUrls
|
||||
// residentImgUrls
|
||||
const head = []
|
||||
for(let item of res.data.idCardFrontImgUrls){
|
||||
let obj = {
|
||||
name:item.url.split('_')[0] +'.'+ item.url.split('.')[1],
|
||||
url: this.$ImgUrl(item.url),
|
||||
uid:item.url.split('_')[1],
|
||||
status:'done',
|
||||
thumbUrl: this.$ImgUrl(item.url),
|
||||
}
|
||||
head.push(obj)
|
||||
}
|
||||
this.headList = head
|
||||
const back = []
|
||||
for(let item of res.data.idCardBackImgUrls){
|
||||
let obj = {
|
||||
name:item.url.split('_')[0] +'.'+ item.url.split('.')[1],
|
||||
url: this.$ImgUrl(item.url),
|
||||
uid:item.url.split('_')[1],
|
||||
status:'done',
|
||||
thumbUrl: this.$ImgUrl(item.url),
|
||||
}
|
||||
back.push(obj)
|
||||
}
|
||||
this.backList = back
|
||||
const pic = []
|
||||
for(let item of res.data.residentImgUrls){
|
||||
let obj = {
|
||||
name:item.url.split('_')[0] +'.'+ item.url.split('.')[1],
|
||||
url: this.$ImgUrl(item.url),
|
||||
uid:item.url.split('_')[1],
|
||||
status:'done',
|
||||
thumbUrl: this.$ImgUrl(item.url),
|
||||
}
|
||||
pic.push(obj)
|
||||
}
|
||||
this.picList = pic
|
||||
})
|
||||
}else{
|
||||
this.form.id = null
|
||||
this.title = '新增住户'
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
|
||||
</style>
|
@ -0,0 +1,123 @@
|
||||
/**
|
||||
* 配置
|
||||
* 表格列
|
||||
*/
|
||||
export const columns = [
|
||||
{
|
||||
title: "住户姓名",
|
||||
dataIndex: "name",
|
||||
width: 100
|
||||
},
|
||||
{
|
||||
title: "住户手机号",
|
||||
dataIndex: "tel",
|
||||
width: 160
|
||||
},
|
||||
{
|
||||
title: "居住房屋",
|
||||
dataIndex: "build",
|
||||
scopedSlots: { customRender: "build" },
|
||||
width: 380
|
||||
},
|
||||
{
|
||||
title: "住户身份",
|
||||
dataIndex: "ids",
|
||||
width: 120,
|
||||
scopedSlots: { customRender: "ids" },
|
||||
},
|
||||
{
|
||||
title: "房屋类型",
|
||||
dataIndex: "type",
|
||||
width: 120,
|
||||
scopedSlots: { customRender: "type" },
|
||||
},
|
||||
{
|
||||
title: "住户性别",
|
||||
dataIndex: "sex",
|
||||
width: 120,
|
||||
customRender:function(sex){
|
||||
switch (sex) {
|
||||
case 1:
|
||||
return '男'
|
||||
case 2:
|
||||
return '女'
|
||||
case 3:
|
||||
return '保密'
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "住户身份证号",
|
||||
dataIndex: "idCard",
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
dataIndex: "action",
|
||||
key: "action",
|
||||
width: "180",
|
||||
fixed: "right",
|
||||
scopedSlots: { customRender: "action" },
|
||||
},
|
||||
]
|
||||
export const columns_house = [
|
||||
{
|
||||
title: "房屋名称",
|
||||
dataIndex: "manageBuildingName",
|
||||
scopedSlots: { customRender: "name" },
|
||||
width: "44%",
|
||||
},
|
||||
{
|
||||
title: "房屋类型",
|
||||
dataIndex: "manageEstateTypeName",
|
||||
width: "20%",
|
||||
},
|
||||
{
|
||||
title: "住户身份",
|
||||
dataIndex: "identity",
|
||||
customRender:function(identity){
|
||||
switch (identity) {
|
||||
case 1:
|
||||
return '业主'
|
||||
case 2:
|
||||
return '业主亲属'
|
||||
case 3:
|
||||
return '租户'
|
||||
case 4:
|
||||
return '租户亲属'
|
||||
default:
|
||||
break;
|
||||
}
|
||||
},width: "20%",
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
dataIndex: "action",
|
||||
key: "action",
|
||||
width: "180",
|
||||
fixed: "right",
|
||||
scopedSlots: { customRender: "action" },
|
||||
},
|
||||
]
|
||||
// 搜索项
|
||||
export const searchForm = {
|
||||
keyword: "",
|
||||
sex: undefined,
|
||||
}
|
||||
// 分页
|
||||
export const pagination = {
|
||||
current: 1,
|
||||
total: 0,
|
||||
pageSize: 10,
|
||||
showTotal: (total) => `共 ${total} 条`,
|
||||
showSizeChanger: true,
|
||||
showQuickJumper: true,
|
||||
}
|
||||
export const rules = {
|
||||
estateId:[{required:true,message:'请选择房屋',trigger:'change'}],
|
||||
identity:[{required:true,message:'请选择身份',trigger:'change'}],
|
||||
linkUserId :[{required:true,message:'请输入姓名',trigger:'change'}],
|
||||
}
|
||||
export const politicalOutlook = ["群众","中共党员","共青团","民革党员","民盟盟员",
|
||||
"民建会员","民进会员","农工党党员","致公党党员","九三学社社员","台盟盟员","无党派人士",]
|
@ -0,0 +1,481 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="cardTitle">住户信息</div>
|
||||
<div class="search-box">
|
||||
<a-row>
|
||||
<a-col :span="20">
|
||||
<a-space size="large">
|
||||
<a-select
|
||||
v-model="searchForm.sex"
|
||||
style="width: 200px"
|
||||
placeholder="请选择性别"
|
||||
>
|
||||
<a-select-option :value="1">男</a-select-option>
|
||||
<a-select-option :value="2">女</a-select-option>
|
||||
<a-select-option :value="3">保密</a-select-option>
|
||||
</a-select>
|
||||
<a-input
|
||||
v-model="searchForm.keyword"
|
||||
style="width: 200px"
|
||||
placeholder="请输入关键字(姓名/手机号)"
|
||||
/>
|
||||
<a-button type="primary" @click="getData">查 询</a-button>
|
||||
<a-button @click="reset">重 置</a-button>
|
||||
</a-space>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div class="search-box">
|
||||
<a-button class="add-btn" @click="show.add = true">添加住户</a-button>
|
||||
</div>
|
||||
<div class="main">
|
||||
<!-- 表格 -->
|
||||
<a-table
|
||||
:columns="columns"
|
||||
:data-source="tableData"
|
||||
:pagination="pagination"
|
||||
:scroll="{ x: 1400 }"
|
||||
@change="handleTableChange"
|
||||
:row-selection="{
|
||||
selectedRowKeys: selectedRowKeys,
|
||||
onChange: selectionChoosed,
|
||||
}"
|
||||
:row-key="
|
||||
(record, index) => {
|
||||
return record.id;
|
||||
}
|
||||
"
|
||||
>
|
||||
<span slot="build" slot-scope="text, row">
|
||||
<div v-for="(item,index) in row.residentListEstateVoList" :key="index">
|
||||
{{item.manageBuildingName}}-{{item.manageUnitName}}-{{item.floorLocation}}-{{item.manageEstateName}}
|
||||
</div>
|
||||
</span>
|
||||
<span slot="ids" slot-scope="text, row">
|
||||
<a-tag v-for="(item,index) in row.residentListEstateVoList" :key="index">
|
||||
{{item.identity==3?'租户':1?'业主':2?'业主亲属':'租户亲属'}}
|
||||
</a-tag>
|
||||
</span>
|
||||
<span slot="type" slot-scope="text, row">
|
||||
<div v-for="(item,index) in row.residentListEstateVoList" :key="index">
|
||||
{{item.manageEstateTypeName}}
|
||||
</div>
|
||||
</span>
|
||||
<span slot="action" slot-scope="text, row">
|
||||
<a-space>
|
||||
<a class="ant-dropdown-link" @click="houseManage(row)">房屋管理</a>
|
||||
<a class="ant-dropdown-link" @click="edit(row)">编辑</a>
|
||||
<a
|
||||
class="ant-dropdown-link"
|
||||
@click="(show.in = true), (inform.residentId = row.id)"
|
||||
>迁入</a
|
||||
>
|
||||
</a-space>
|
||||
</span>
|
||||
</a-table>
|
||||
</div>
|
||||
<!-- 新增住户 -->
|
||||
<add-form
|
||||
:show="show.add"
|
||||
:editId="editId"
|
||||
@close="close"
|
||||
@success="success"
|
||||
></add-form>
|
||||
<!-- 迁入提交 -->
|
||||
<a-modal title="迁入" :visible="show.in" @ok="insubmit" @cancel="inclose">
|
||||
<div>
|
||||
<a-form-model
|
||||
ref="ruleForm"
|
||||
:model="inform"
|
||||
:rules="rules"
|
||||
layout="vertical"
|
||||
>
|
||||
<a-form-model-item label="关联房屋" prop="estateId">
|
||||
<a-cascader
|
||||
:options="estateData"
|
||||
v-model="estateArr"
|
||||
:field-names="{
|
||||
label: 'name',
|
||||
value: 'id',
|
||||
children: 'childList',
|
||||
}"
|
||||
placeholder="楼栋/单元/房间号"
|
||||
@change="onChange"
|
||||
style="width: 90%"
|
||||
/>
|
||||
</a-form-model-item>
|
||||
<a-form-model-item label="住户身份" prop="identity">
|
||||
<a-select
|
||||
v-model="inform.identity"
|
||||
placeholder="请选择住户身份"
|
||||
style="width: 90%"
|
||||
>
|
||||
<a-select-option
|
||||
v-for="item in options.identity"
|
||||
:key="item.id"
|
||||
:value="item.id"
|
||||
>{{ item.name }}</a-select-option
|
||||
>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
<a-form-model-item
|
||||
label="房屋租户"
|
||||
prop="linkUserId"
|
||||
v-if="inform.identity === 4"
|
||||
>
|
||||
<a-select
|
||||
v-model="inform.linkUserId"
|
||||
placeholder="请选择住户身份"
|
||||
style="width: 90%"
|
||||
>
|
||||
<a-select-option
|
||||
v-for="item in options.tenant"
|
||||
:key="item.id"
|
||||
:value="item.id"
|
||||
>{{ item.name }}</a-select-option
|
||||
>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
</a-form-model>
|
||||
</div>
|
||||
</a-modal>
|
||||
<!-- 住户房屋管理 -->
|
||||
<a-drawer
|
||||
title="住户详情"
|
||||
:width="1000"
|
||||
:visible="show.detail"
|
||||
:body-style="{ paddingBottom: '80px' }"
|
||||
@close="onClose"
|
||||
>
|
||||
<div class="drawer-content">
|
||||
<a-avatar :size="64" icon="user" :src="imgUrl" />
|
||||
<span>
|
||||
{{holderDetail.name}}
|
||||
{{holderDetail.sex == 1 ? '男' : (holderDetail.sex == 2)?'女':'保密'}}
|
||||
</span>
|
||||
<img style="height: 81px;width: 131px;margin-left: 24px;float: right" :src="idCardFront" />
|
||||
<img style="height: 81px;width: 131px;float: right" :src="idCardBack" />
|
||||
<a-divider></a-divider>
|
||||
<a-descriptions layout="vertical">
|
||||
<a-descriptions-item label="手机号">
|
||||
{{holderDetail.tel}}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="身份证号" >
|
||||
{{holderDetail.idCard}}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="入住时间">
|
||||
{{holderDetail.checkTime}}
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
<div style="margin-top: 24px">房屋信息</div>
|
||||
<a-divider></a-divider>
|
||||
<a-table
|
||||
:columns="columns_house"
|
||||
:data-source="table_house"
|
||||
:pagination="false"
|
||||
:row-key="
|
||||
(record, index) => {
|
||||
return index;
|
||||
}
|
||||
"
|
||||
>
|
||||
<span slot="name" slot-scope="text, row">
|
||||
{{
|
||||
row.manageBuildingName +
|
||||
"栋/" +
|
||||
row.manageUnitName +
|
||||
"单元/" +
|
||||
row.floorLocation +
|
||||
"层-" +
|
||||
row.manageEstateName +
|
||||
"室"
|
||||
}}
|
||||
</span>
|
||||
<span slot="action" slot-scope="text, row">
|
||||
<a-space>
|
||||
<a class="ant-dropdown-link" @click="out(row)">迁出</a>
|
||||
</a-space>
|
||||
</span>
|
||||
</a-table>
|
||||
</div>
|
||||
<div style="margin-top: 24px">其他信息</div>
|
||||
<a-divider></a-divider>
|
||||
<a-descriptions layout="vertical">
|
||||
<a-descriptions-item label="婚姻状况">
|
||||
{{holderDetail.maritalStatus == 1 ? '未婚' : '已婚'}}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="民族">
|
||||
{{holderDetail.nation}}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="政治面貌">
|
||||
{{holderDetail.politicalOutlook == -1 ? '' : politicalOutlook[holderDetail.politicalOutlook-1] }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="从事职业">
|
||||
{{holderDetail.occupation}}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="工作单位">
|
||||
{{holderDetail.employer}}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="户口类型">
|
||||
{{holderDetail.accountType == 1 ? '农村' : '城市'}}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="工作单位地址">
|
||||
{{holderDetail.employerAddress}}
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
<a-descriptions layout="vertical" :column="1">
|
||||
<a-descriptions-item label="备注">
|
||||
{{holderDetail.remarks}}
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
<div class="drawer-footer">
|
||||
<a-button :style="{ marginRight: '8px' }" @click="onClose">
|
||||
关闭
|
||||
</a-button>
|
||||
</div>
|
||||
</a-drawer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
columns,
|
||||
pagination,
|
||||
searchForm,
|
||||
rules,
|
||||
columns_house,
|
||||
politicalOutlook,
|
||||
} from "./depend/config.js";
|
||||
import { estate } from "@/api/basic/estate";
|
||||
import {
|
||||
residentList,
|
||||
moveIn,
|
||||
moveOut,
|
||||
findTenantByEstateId,
|
||||
residentDetail,
|
||||
} from "@/api/basic/resident";
|
||||
import addForm from "./depend/addForm.vue";
|
||||
export default {
|
||||
components: {
|
||||
addForm,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
columns_house,
|
||||
editId: null,
|
||||
inform: {
|
||||
estateId: undefined,
|
||||
residentId: undefined,
|
||||
identity: undefined,
|
||||
linkUserId: undefined,
|
||||
},
|
||||
estateArr: [],
|
||||
estateData: [],
|
||||
rules,
|
||||
show: {
|
||||
add: false,
|
||||
in: false,
|
||||
detail: false,
|
||||
},
|
||||
pagination,
|
||||
searchForm,
|
||||
selectedRowKeys: [],
|
||||
// 分页
|
||||
// 列
|
||||
columns,
|
||||
holderInfo: {},
|
||||
// 数据
|
||||
tableData: [],
|
||||
table_house: [],
|
||||
holderDetail: {},
|
||||
imgUrl: '', //住户图片
|
||||
idCardFront: '',
|
||||
idCardBack: '',
|
||||
politicalOutlook: politicalOutlook,
|
||||
options: {
|
||||
identity: [
|
||||
{ id: 1, name: "业主" },
|
||||
{ id: 2, name: "业主亲属" },
|
||||
{ id: 3, name: "租户" },
|
||||
{ id: 4, name: "租户亲属" },
|
||||
],
|
||||
tenant: [],
|
||||
},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getData();
|
||||
this.getEstate();
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
const res = await residentList({
|
||||
pageNum: this.pagination.current,
|
||||
size: this.pagination.pageSize,
|
||||
...this.searchForm,
|
||||
});
|
||||
this.tableData = res.data.rows;
|
||||
this.pagination.total = res.data.total;
|
||||
},
|
||||
houseManage(data) {
|
||||
this.holderInfo = data;
|
||||
this.table_house = data.residentListEstateVoList;
|
||||
residentDetail({id: data.id}).then(res => {
|
||||
this.holderDetail = res.data;
|
||||
if(res.data.residentImgUrls.length != 0) {
|
||||
this.imgUrl = this.$ImgUrl(res.data.residentImgUrls[0].url)
|
||||
} else {
|
||||
this.imgUrl = ''
|
||||
}
|
||||
if(res.data.idCardFrontImgUrls.length != 0) {
|
||||
this.idCardFront = this.$ImgUrl(res.data.idCardFrontImgUrls[0].url)
|
||||
} else {
|
||||
this.idCardFront = ''
|
||||
}
|
||||
if(res.data.idCardBackImgUrls.length != 0) {
|
||||
this.idCardBack = this.$ImgUrl(res.data.idCardBackImgUrls[0].url)
|
||||
} else {
|
||||
this.idCardBack = ''
|
||||
}
|
||||
})
|
||||
this.show.detail = true;
|
||||
},
|
||||
// 所有房屋
|
||||
async getEstate() {
|
||||
let res = await estate();
|
||||
this.estateData = res.data;
|
||||
this.estateDisable(this.estateData);
|
||||
},
|
||||
estateDisable(arr) {
|
||||
arr.forEach((item, index) => {
|
||||
if (!item.manageEstateTypeName && item.childList.length === 0) {
|
||||
arr[index].disabled = true;
|
||||
} else if (item.manageEstateTypeName || item.childList.length > 0) {
|
||||
arr[index].disabled = false;
|
||||
} else {
|
||||
this.estateDisable(item.childList);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 重置
|
||||
reset() {
|
||||
this.searchForm = {
|
||||
keyword: "",
|
||||
sex: undefined,
|
||||
};
|
||||
this.getData();
|
||||
},
|
||||
// 编辑住户
|
||||
edit(data) {
|
||||
this.editId = data.id;
|
||||
this.show.add = true;
|
||||
},
|
||||
// form提交成功的回调
|
||||
close() {
|
||||
this.show.add = false;
|
||||
this.editId = null;
|
||||
},
|
||||
// form提交成功的回调
|
||||
success() {
|
||||
this.getData();
|
||||
},
|
||||
handleTableChange(pagination) {
|
||||
const pager = { ...this.pagination };
|
||||
pager.current = pagination.current;
|
||||
pager.pageSize = pagination.pageSize;
|
||||
this.pagination = pager;
|
||||
this.getData();
|
||||
},
|
||||
selectionChoosed(data) {
|
||||
this.selectedRowKeys = data;
|
||||
},
|
||||
async insubmit() {
|
||||
// 迁入提交
|
||||
console.log(this.inform);
|
||||
this.$refs.ruleForm.validate(async (valid) => {
|
||||
if (valid) {
|
||||
let res = await moveIn(this.inform);
|
||||
if (res.code === 200) {
|
||||
this.$message.success(res.msg);
|
||||
this.getData();
|
||||
this.inclose();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
onClose() {
|
||||
this.show.detail = false;
|
||||
},
|
||||
inclose() {
|
||||
this.$refs.ruleForm.resetFields();
|
||||
this.estateArr = [];
|
||||
this.show.in = false;
|
||||
},
|
||||
out(data) {
|
||||
console.log(data);
|
||||
// 迁出
|
||||
this.$confirm({
|
||||
title: "是否迁出",
|
||||
// okText:'删除',
|
||||
// cancelText:'取消',
|
||||
icon: "logout",
|
||||
onOk: async () => {
|
||||
let res = await moveOut({
|
||||
estateId: data.id,
|
||||
residentId: this.holderInfo.id,
|
||||
});
|
||||
if (res.code === 200) {
|
||||
this.$message.success(res.msg);
|
||||
this.getData();
|
||||
this.onClose();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
onChange(value, selectedOptions) {
|
||||
if (value.length > 0) {
|
||||
this.inform.estateId = value[value.length - 1];
|
||||
findTenantByEstateId({ estateId: this.inform.estateId }).then((res) => {
|
||||
this.options.tenant = res.data;
|
||||
});
|
||||
} else {
|
||||
this.inform.estateId = undefined;
|
||||
}
|
||||
},
|
||||
//切换居住房屋
|
||||
handlerBuilding(index) {
|
||||
console.log(index);
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
// 是否选择selection
|
||||
hasSelected() {
|
||||
return this.selectedRowKeys.length > 0;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
/deep/.ant-upload.ant-upload-select-picture-card {
|
||||
width: 240px;
|
||||
height: 160px;
|
||||
}
|
||||
/deep/.avatar-uploader > .ant-upload {
|
||||
width: 240px;
|
||||
height: 160px;
|
||||
}
|
||||
.ant-upload-select-picture-card i {
|
||||
font-size: 32px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.ant-upload-select-picture-card .ant-upload-text {
|
||||
margin-top: 8px;
|
||||
color: #666;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,72 @@
|
||||
/**
|
||||
* 配置
|
||||
* 表格列
|
||||
*/
|
||||
export const columns = [
|
||||
{
|
||||
title: "房屋名称",
|
||||
dataIndex: "manageBuildingName",
|
||||
scopedSlots: { customRender: "name" },
|
||||
width: "20%",
|
||||
},
|
||||
{
|
||||
title: "室内面积",
|
||||
dataIndex: "indoorArea",
|
||||
width: "15%",
|
||||
},
|
||||
{
|
||||
title: "建筑面积",
|
||||
dataIndex: "constructionArea",
|
||||
width: "15%",
|
||||
},
|
||||
{
|
||||
title: "房屋类型",
|
||||
dataIndex: "manageEstateTypeName",
|
||||
width: "15%",
|
||||
},
|
||||
{
|
||||
title: "居住状态",
|
||||
key: "tags",
|
||||
dataIndex: "residenceStatus",
|
||||
scopedSlots: { customRender: "tags" },
|
||||
},
|
||||
{
|
||||
title: "是否开启租赁",
|
||||
dataIndex: "isEnableLease",
|
||||
scopedSlots: { customRender: "switch" },
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
dataIndex: "action",
|
||||
key: "action",
|
||||
width: "180",
|
||||
fixed: "right",
|
||||
scopedSlots: { customRender: "action" },
|
||||
},
|
||||
]
|
||||
// 搜索项
|
||||
export const searchForm = {
|
||||
name: "",
|
||||
isEnableLease: undefined,
|
||||
manageEstateTypeId:undefined
|
||||
}
|
||||
// 分页
|
||||
export const pagination = {
|
||||
current: 1,
|
||||
total: 0,
|
||||
pageSize: 10,
|
||||
showTotal: (total) => `共 ${total} 条`,
|
||||
showSizeChanger: true,
|
||||
showQuickJumper: true,
|
||||
}
|
||||
// 操作
|
||||
export const ActionsList = [
|
||||
{
|
||||
label: "批量删除",
|
||||
value: 1,
|
||||
},
|
||||
// {
|
||||
// label: "批量导出",
|
||||
// value: 2,
|
||||
// },
|
||||
]
|
@ -0,0 +1,54 @@
|
||||
/**
|
||||
* 表单
|
||||
*
|
||||
*/
|
||||
|
||||
// 表单
|
||||
export const form = {
|
||||
id:undefined,
|
||||
manageBuildingId:undefined,
|
||||
manageUnitId:undefined,
|
||||
floorLocation:undefined,
|
||||
name:undefined,
|
||||
indoorArea:undefined,
|
||||
constructionArea:undefined,
|
||||
manageEstateTypeId:undefined,
|
||||
isEnableLease:undefined,
|
||||
houseTypeHall:undefined,
|
||||
houseTypeRoom:undefined,
|
||||
houseTypeBathroom:undefined,
|
||||
estateImgUrls:[],
|
||||
remarks:undefined,
|
||||
}
|
||||
// 校验
|
||||
export const rules = {
|
||||
manageBuildingId:[
|
||||
{ required: true, message: "请选择楼栋", trigger: "change" },
|
||||
],
|
||||
manageUnitId:[
|
||||
{ required: true, message: "请选择单元", trigger: "change" },
|
||||
],
|
||||
floorLocation: [
|
||||
{ required: true, message: "请输入楼层位置", trigger: "blur" },
|
||||
],
|
||||
name: [
|
||||
{ required: true, message: "请输入房屋名称", trigger: "blur" },
|
||||
],
|
||||
manageEstateTypeId: [
|
||||
{ required: true, message: "请选择房屋类型", trigger: "change" },
|
||||
],
|
||||
indoorArea: [
|
||||
{ required: true, message: "请输入室内面积", trigger: "blur" },
|
||||
],
|
||||
constructionArea: [
|
||||
{ required: true, message: "请输入建筑面积", trigger: "blur" },
|
||||
],
|
||||
isEnableLease: [
|
||||
{ required: true, message: "请选择是否开启租赁", trigger: "change" },
|
||||
],
|
||||
}
|
||||
// 请求头
|
||||
import store from "@/store";
|
||||
export const uploadHeaders = {
|
||||
"manage-login-token": store.getters.getToken,
|
||||
}
|
@ -0,0 +1,325 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-form-model
|
||||
layout="vertical"
|
||||
ref="ruleForm"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
:wrapper-col="{ span: 18 }"
|
||||
>
|
||||
<a-row>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="楼栋" prop="manageBuildingId">
|
||||
<a-select
|
||||
v-model="form.manageBuildingId"
|
||||
placeholder="请选择楼栋"
|
||||
@change='changeBuild'
|
||||
>
|
||||
<a-select-option v-for="item in options.building" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="单元" prop="manageUnitId">
|
||||
<a-select v-model="form.manageUnitId" placeholder="请选择单元" @change='changeUnit'>
|
||||
<a-select-option v-for="item in options.unit" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="楼层" prop="floorLocation">
|
||||
<a-input-number v-model.number="form.floorLocation" placeholder="楼层" :min='0' :max='options.floor'/>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="房屋名称" prop="name">
|
||||
<a-input v-model="form.name" placeholder="请输入房屋名称" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="室内面积" prop="indoorArea">
|
||||
<a-input
|
||||
type="number"
|
||||
v-model="form.indoorArea"
|
||||
placeholder="请输入室内面积"
|
||||
suffix="㎡"
|
||||
:min='0'
|
||||
/>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="建筑面积" prop="constructionArea">
|
||||
<a-input
|
||||
v-model="form.constructionArea"
|
||||
type="number"
|
||||
suffix="㎡"
|
||||
placeholder="请输入建筑面积"
|
||||
:min='0'
|
||||
/>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="房屋类型" prop="manageEstateTypeId">
|
||||
<a-select
|
||||
v-model="form.manageEstateTypeId"
|
||||
placeholder="请选择房屋类型"
|
||||
>
|
||||
<a-select-option v-for="item in options.houseType" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="是否开启租赁" prop="isEnableLease">
|
||||
<a-select placeholder='请选择是否开启租赁' v-model="form.isEnableLease" >
|
||||
<a-select-option v-for="item in options.isEnableLease" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<div>房屋户型</div>
|
||||
</a-col>
|
||||
<a-col :span="4">
|
||||
<a-form-model-item label="厅" prop="houseTypeHall">
|
||||
<a-input type="number" :min="0" v-model="form.houseTypeHall" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="4">
|
||||
<a-form-model-item label="室" prop="houseTypeRoom">
|
||||
<a-input type="number" :min="0" v-model="form.houseTypeRoom" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="4">
|
||||
<a-form-model-item label="卫" prop="houseTypeBathroom">
|
||||
<a-input type="number" :min="0" v-model="form.houseTypeBathroom" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<div>房屋照片</div>
|
||||
<a-upload
|
||||
:action="`${$upload}`"
|
||||
:headers="uploadHeaders"
|
||||
list-type="picture-card"
|
||||
accept='.jpg,.JPG,.png,.PNG,.jpeg,.JPEG'
|
||||
:file-list="fileList"
|
||||
@preview="handlePreview"
|
||||
@change="fileChange"
|
||||
:beforeUpload="beforeUpload"
|
||||
>
|
||||
<div v-if="fileList.length < 2">
|
||||
<!-- <a-icon type="plus" /> -->
|
||||
<a-icon :type="imgLoading ? 'loading' : 'plus'" />
|
||||
<div class="ant-upload-text">点击上传</div>
|
||||
</div>
|
||||
</a-upload>
|
||||
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
|
||||
<img alt="example" style="width: 100%" :src="previewImage" />
|
||||
</a-modal>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-model-item label="备注" prop="remarks">
|
||||
<a-textarea v-model="form.remarks" :rows="4" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form-model>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { form, rules, uploadHeaders } from "./form.js";
|
||||
import { allBuilding, findByBuildingId, estateType, houseInsert, houseUpdate, houseInfo } from "@/api/basic/estate"
|
||||
function getBase64(file) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const reader = new FileReader();
|
||||
reader.readAsDataURL(file);
|
||||
reader.onload = () => resolve(reader.result);
|
||||
reader.onerror = error => reject(error);
|
||||
});
|
||||
}
|
||||
export default {
|
||||
props: {
|
||||
editId: {
|
||||
default:null,
|
||||
type:Number
|
||||
},
|
||||
typeList: {
|
||||
default: null,
|
||||
type:Array
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form,
|
||||
rules,
|
||||
uploadHeaders,
|
||||
fileList: [],
|
||||
previewVisible: false,
|
||||
imgLoading: false,
|
||||
previewImage: "",
|
||||
formType:'add',
|
||||
options:{
|
||||
building:[],//楼栋
|
||||
unit:[],//单元
|
||||
floor:0,//楼层
|
||||
houseType:[],//房屋类型
|
||||
isEnableLease:[//开启租赁
|
||||
{
|
||||
id:1,
|
||||
name:'开启'
|
||||
},
|
||||
{
|
||||
id:2,
|
||||
name:'关闭'
|
||||
},
|
||||
],
|
||||
}
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
allBuilding().then(res=>{
|
||||
this.options.building = res.data
|
||||
})
|
||||
estateType().then(res=>{
|
||||
this.options.houseType = res.data
|
||||
})
|
||||
if(this.editId !== null){
|
||||
this.getInfo(this.editId)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getInfo(id){
|
||||
this.formType = 'edit'
|
||||
let res = await houseInfo({estateId:id})
|
||||
this.form.id = id
|
||||
this.form.manageBuildingId = res.data.manageBuildingId
|
||||
// 楼栋改变
|
||||
await this.changeBuild(res.data.manageBuildingId)
|
||||
this.form.manageUnitId = res.data.manageUnitId
|
||||
for(let item of this.options.unit){
|
||||
if(item.id === res.data.manageUnitId){
|
||||
this.options.floor = item.floor
|
||||
this.form.floorLocation = res.data.floorLocation
|
||||
}
|
||||
}
|
||||
this.form.name = res.data.name
|
||||
this.form.manageEstateTypeId = res.data.manageEstateTypeId
|
||||
this.form.indoorArea = res.data.indoorArea
|
||||
this.form.constructionArea = res.data.constructionArea
|
||||
this.form.houseTypeHall = res.data.houseTypeHall
|
||||
this.form.houseTypeRoom = res.data.houseTypeRoom
|
||||
this.form.houseTypeBathroom = res.data.houseTypeBathroom
|
||||
this.form.remarks = res.data.remarks
|
||||
this.form.isEnableLease = res.data.isEnableLease
|
||||
// this.form.estateImgUrls = res.data.estateImgUrls
|
||||
const file = []
|
||||
for(let item of res.data.estateImgList){
|
||||
let obj = {
|
||||
name:item.url.split('_')[0] +'.'+ item.url.split('.')[1],
|
||||
url: this.$ImgUrl(item.url),
|
||||
uid:item.url.split('_')[1],
|
||||
status:'done',
|
||||
thumbUrl: this.$ImgUrl(item.url),
|
||||
}
|
||||
file.push(obj)
|
||||
}
|
||||
this.fileList = file
|
||||
},
|
||||
async handlePreview(file) {
|
||||
if (!file.url && !file.preview) {
|
||||
file.preview = await getBase64(file.originFileObj);
|
||||
}
|
||||
this.previewImage = file.url || file.preview;
|
||||
this.previewVisible = true;
|
||||
},
|
||||
async changeBuild(data){
|
||||
this.form.manageUnitId = undefined
|
||||
this.options.floor = 0
|
||||
let res = await findByBuildingId({buildingId:data})
|
||||
this.options.unit = res.data
|
||||
},
|
||||
changeUnit(data){
|
||||
this.options.floor = 0
|
||||
for(let item of this.options.unit){
|
||||
if(item.id === data){
|
||||
console.log(item);
|
||||
this.options.floor = item.floor
|
||||
}
|
||||
}
|
||||
},
|
||||
addSubmit(){
|
||||
let file = []
|
||||
for(let item of this.fileList){
|
||||
// 新增的照片
|
||||
if(item.response){
|
||||
file.push(item.response.data)
|
||||
}else{
|
||||
// 已添加的照片
|
||||
file.push(item.url.split('/')[item.url.split('/').length-1])
|
||||
}
|
||||
}
|
||||
this.form.estateImgUrls = file
|
||||
this.$refs.ruleForm.validate(async valid => {
|
||||
if (valid) {
|
||||
if(this.formType==='add'){
|
||||
let res = await houseInsert(this.form)
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg)
|
||||
this.success()
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
}else if(this.formType==='edit'){
|
||||
let res = await houseUpdate(this.form)
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg)
|
||||
this.success()
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
success(){
|
||||
this.$emit('success')
|
||||
},
|
||||
close(){
|
||||
this.$refs.ruleForm.resetFields();
|
||||
this.fileList = []
|
||||
this.formType = 'add'
|
||||
},
|
||||
handleCancel() {
|
||||
this.previewVisible = false;
|
||||
},
|
||||
fileChange(info) {
|
||||
this.fileList = info.fileList
|
||||
},
|
||||
handleChange({ fileList }) {
|
||||
this.fileList = fileList;
|
||||
console.log(this.fileList);
|
||||
},
|
||||
beforeUpload(f, l) {
|
||||
const isLt50M = f.size / 1024 / 1024 < 50;
|
||||
if (!isLt50M) {
|
||||
this.$message.error(f.name + "文件大小超出限制,请修改后重新上传");
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
editId(val){
|
||||
if(val!==null){
|
||||
this.getInfo(val)
|
||||
}
|
||||
},
|
||||
typeList(val) {
|
||||
this.options.houseType = val;
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
</style>
|
@ -0,0 +1,412 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="cardTitle">房屋管理</div>
|
||||
<div class="search-box">
|
||||
<a-row>
|
||||
<a-col :span="20">
|
||||
<a-space size="large">
|
||||
<a-input v-model="searchForm.name" placeholder="请输入房间号" />
|
||||
<a-select style="width: 200px" v-model='searchForm.manageEstateTypeId' placeholder="请选择房屋类型" >
|
||||
<a-select-option v-for="item in options.houseType" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
<a-select style="width: 200px" v-model='searchForm.isEnableLease' placeholder="请选择是否开启租赁" >
|
||||
<a-select-option v-for="item in options.isEnableLease" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
<a-button type="primary" @click="getData">查 询</a-button>
|
||||
<a-button @click="reset">重 置</a-button>
|
||||
</a-space>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div class="search-box">
|
||||
<a-button class="add-btn" @click="drawerConfig.addShow = true">添加房屋</a-button>
|
||||
<a-button @click="drawerConfig.houseType = true">房屋配置</a-button>
|
||||
</div>
|
||||
<div class="main">
|
||||
<div style="margin-bottom: 16px">
|
||||
<!-- 批量操作 -->
|
||||
<a-select
|
||||
type="primary"
|
||||
v-model="activeAction"
|
||||
:disabled="!hasSelected"
|
||||
:loading="loading"
|
||||
style="width: 120px"
|
||||
@change="Actions"
|
||||
placeholder="请选择操作"
|
||||
>
|
||||
批量
|
||||
<a-select-option v-for="item in ActionsList" :key="item.value">
|
||||
{{ item.label }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
<span style="margin-left: 8px">
|
||||
<template v-if="hasSelected">
|
||||
{{ `已选择 ${selectedRowKeys.length} 条` }}
|
||||
</template>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<a-table
|
||||
:columns="columns"
|
||||
:data-source="tableData"
|
||||
:pagination="pagination"
|
||||
:scroll="{ x: 1400 }"
|
||||
@change="handleTableChange"
|
||||
:row-selection="{
|
||||
selectedRowKeys: selectedRowKeys,
|
||||
onChange: onSelectChange,
|
||||
}"
|
||||
:row-key="
|
||||
(record, index) => {
|
||||
return record.id;
|
||||
}
|
||||
"
|
||||
>
|
||||
<span slot="name" slot-scope="text, row">
|
||||
{{
|
||||
row.manageBuildingName +
|
||||
"栋/" +
|
||||
row.manageUnitName +
|
||||
"单元/" +
|
||||
row.floorLocation +
|
||||
"层-" +
|
||||
row.name +
|
||||
"室"
|
||||
}}
|
||||
</span>
|
||||
<span slot="action" slot-scope="text, row">
|
||||
<a-space>
|
||||
<a class="ant-dropdown-link" @click="edit(row)">编辑</a>
|
||||
<a class="ant-dropdown-link" @click="del([row.id])">删除</a>
|
||||
</a-space>
|
||||
</span>
|
||||
<span slot="tags" slot-scope="tag">
|
||||
<a-tag
|
||||
:color="tag === 1 ? 'volcano' : tag === 2 ? 'geekblue' : 'green'"
|
||||
>
|
||||
{{ tag === 1 ? "闲置" : tag === 2 ? "在住" : "在租" }}
|
||||
</a-tag>
|
||||
</span>
|
||||
<span slot="switch" slot-scope="switchV, row">
|
||||
<a-switch
|
||||
checked-children="开" un-checked-children="关"
|
||||
:checked="switchV === 1"
|
||||
@change="handleEnable(row)"
|
||||
></a-switch>
|
||||
</span>
|
||||
</a-table>
|
||||
</div>
|
||||
<a-drawer
|
||||
title="添加房屋"
|
||||
:width="720"
|
||||
:visible="drawerConfig.addShow"
|
||||
:body-style="{ paddingBottom: '80px' }"
|
||||
@close="addClose"
|
||||
>
|
||||
<div class="drawer-content">
|
||||
基本信息
|
||||
<a-divider></a-divider>
|
||||
<vue-form ref="form" @success='addSuccess' :typeList="typeList" :editId="editId"></vue-form>
|
||||
</div>
|
||||
<div class="drawer-footer">
|
||||
<a-button :style="{ marginRight: '8px' }" @click="addClose">
|
||||
关闭
|
||||
</a-button>
|
||||
<a-button type="primary" @click="addHouse"> 提交 </a-button>
|
||||
</div>
|
||||
</a-drawer>
|
||||
<!-- 房屋类型 -->
|
||||
<a-drawer
|
||||
title="房屋设置"
|
||||
:width="720"
|
||||
:visible="drawerConfig.houseType"
|
||||
:body-style="{ paddingBottom: '80px' }"
|
||||
@close="drawerConfig.houseType=false"
|
||||
>
|
||||
<div class="drawer-content">
|
||||
房屋类型
|
||||
<a-divider></a-divider>
|
||||
<!-- tags -->
|
||||
<span v-for="item,index in typeList" :key="item.id">
|
||||
<a-input
|
||||
v-if="item.show==true"
|
||||
ref="input"
|
||||
v-focus
|
||||
type="text"
|
||||
size="small"
|
||||
:style="{ width: '78px','padding-bottom':'3px','margin-right':'7px' }"
|
||||
v-model="item.name"
|
||||
@blur="editType(item)"
|
||||
@keyup.enter="editType(item)"
|
||||
/>
|
||||
<a-tag
|
||||
v-else-if="item.show==false" closable @close.prevent="delType(item.id)"
|
||||
@click="editInput(item,index)" >
|
||||
{{item.name}}
|
||||
</a-tag>
|
||||
</span>
|
||||
<!-- addTag -->
|
||||
<span>
|
||||
<a-input
|
||||
v-if="inputVisible"
|
||||
ref="addInput"
|
||||
type="text"
|
||||
size="small"
|
||||
:style="{ width: '78px','padding-bottom':'3px'}"
|
||||
:value="typeForm.name"
|
||||
@change="handleInputChange"
|
||||
@blur="handleInputConfirm"
|
||||
@keyup.enter="handleInputConfirm"
|
||||
/>
|
||||
<a-tag v-else style="background: #fff; borderStyle: dashed;" @click="addShow">
|
||||
<a-icon type="plus" /> 新增类型
|
||||
</a-tag>
|
||||
</span>
|
||||
</div>
|
||||
<div class="drawer-footer">
|
||||
<a-button :style="{ marginRight: '8px' }" @click="drawerConfig.houseType=false">
|
||||
关闭
|
||||
</a-button>
|
||||
</div>
|
||||
</a-drawer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { columns, pagination, searchForm, ActionsList } from "./depend/config";
|
||||
import { houseList, houseDel, isEnableLease, estateType, estateTypeInsert, estateTypeDel, estateTypeUpdate } from "@/api/basic/estate";
|
||||
import vueForm from "./depend/form.vue";
|
||||
export default {
|
||||
components: {
|
||||
vueForm,
|
||||
},
|
||||
directives: {
|
||||
focus: {
|
||||
// 指令的定义
|
||||
inserted: function (el) {
|
||||
el.focus()
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
drawerConfig: {
|
||||
addShow: false,
|
||||
houseType: false
|
||||
},
|
||||
pagination,
|
||||
searchForm,
|
||||
columns,
|
||||
ActionsList,
|
||||
inputVisible: false,
|
||||
typeForm:{
|
||||
id: null,
|
||||
name: ''
|
||||
},
|
||||
editId:null,
|
||||
activeAction: undefined,
|
||||
loading: false,
|
||||
// 选择的index
|
||||
selectedRowKeys: [],
|
||||
tableChoosed: [],
|
||||
tableData: [],
|
||||
typeList:[],
|
||||
options:{
|
||||
houseType:[],//房屋类型
|
||||
isEnableLease:[//开启租赁
|
||||
{
|
||||
id:1,
|
||||
name:'开启'
|
||||
},
|
||||
{
|
||||
id:2,
|
||||
name:'关闭'
|
||||
},
|
||||
],
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getData();
|
||||
this.getType()
|
||||
},
|
||||
methods: {
|
||||
// 获取房屋
|
||||
async getData() {
|
||||
const res = await houseList({
|
||||
pageNum: this.pagination.current,
|
||||
size: this.pagination.pageSize,
|
||||
...this.searchForm
|
||||
});
|
||||
this.tableData = res.data.rows;
|
||||
this.pagination.total = res.data.total
|
||||
},
|
||||
// 获取类型
|
||||
async getType() {
|
||||
this.typeList = []
|
||||
const res = await estateType();
|
||||
this.options.houseType = res.data
|
||||
const arr = res.data;
|
||||
arr.forEach(ele => {
|
||||
ele.show = false;
|
||||
})
|
||||
this.typeList = arr;
|
||||
},
|
||||
reset(){
|
||||
this.searchForm.name= "",
|
||||
this.searchForm.isEnableLease = undefined,
|
||||
this.searchForm.manageEstateTypeId = undefined
|
||||
this.getData()
|
||||
},
|
||||
// 调用表单组件的提交
|
||||
addHouse() {
|
||||
this.$refs.form.addSubmit()
|
||||
},
|
||||
// 新增房屋后的回调
|
||||
addSuccess(){
|
||||
this.getData()
|
||||
this.addClose()
|
||||
},
|
||||
addClose() {
|
||||
this.drawerConfig.addShow = false;
|
||||
this.getType();
|
||||
this.editId = null;
|
||||
this.$refs.form.close()
|
||||
},
|
||||
edit(data){
|
||||
this.getType();
|
||||
this.editId = data.id
|
||||
this.drawerConfig.addShow = true;
|
||||
},
|
||||
// 新增类型
|
||||
addShow(){
|
||||
this.inputVisible = true;
|
||||
this.$nextTick(function() {
|
||||
this.$refs.addInput.focus();
|
||||
});
|
||||
},
|
||||
// 删除
|
||||
delType(id){
|
||||
this.$confirm({
|
||||
title: "是否删除",
|
||||
icon:'delete',
|
||||
onOk:async()=>{
|
||||
let res = await estateTypeDel({manageEstateTypeIds:[id]})
|
||||
if(res.code=== 200){
|
||||
this.$message.success(res.msg);
|
||||
this.getType()
|
||||
}else{
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
// 打开编辑框 聚焦input
|
||||
editInput(obj,i) {
|
||||
this.$set(this.typeList[i],'show',true)
|
||||
this.$forceUpdate()
|
||||
},
|
||||
// 离开编辑框的回调
|
||||
async editType(item){
|
||||
let res = await estateTypeUpdate({
|
||||
id: item.id,
|
||||
name: item.name
|
||||
})
|
||||
if(res.code === 200){
|
||||
item.show = false
|
||||
this.$forceUpdate()
|
||||
this.$message.success(res.msg)
|
||||
}else{
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
},
|
||||
handleInputChange(e) {
|
||||
this.typeForm.name = e.target.value;
|
||||
},
|
||||
async handleInputConfirm() {
|
||||
if(this.typeForm.name === ''){
|
||||
this.inputVisible = false;
|
||||
return
|
||||
}
|
||||
let res = await estateTypeInsert({
|
||||
name:this.typeForm.name,
|
||||
})
|
||||
if(res.code === 200){
|
||||
this.$message.success(res.msg);
|
||||
this.inputVisible = false;
|
||||
this.typeForm.name = ''
|
||||
this.getType()
|
||||
}else{
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
},
|
||||
// 租赁
|
||||
handleEnable: async function (data) {
|
||||
const res = await isEnableLease({
|
||||
estateId: data.id,
|
||||
});
|
||||
if (res.code === 200) {
|
||||
this.$message.success(res.msg);
|
||||
this.getData();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
},
|
||||
handleTableChange(pagination) {
|
||||
console.log(pagination);
|
||||
const pager = { ...this.pagination };
|
||||
pager.current = pagination.current;
|
||||
pager.pageSize = pagination.pageSize;
|
||||
this.pagination = pager;
|
||||
this.getData()
|
||||
},
|
||||
del(ids) {
|
||||
this.$confirm({
|
||||
title: "是否删除",
|
||||
icon: "delete",
|
||||
onOk: () => {
|
||||
houseDel({ estateIds: ids }).then((res) => {
|
||||
if (res.code === 200) {
|
||||
this.$message.success(res.msg);
|
||||
this.getData();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
},
|
||||
Actions(data) {
|
||||
// 批量删除
|
||||
if (data === 1) {
|
||||
this.del(this.selectedRowKeys);
|
||||
this.activeAction = undefined;
|
||||
}
|
||||
},
|
||||
onSelectChange(selectedRowKeys) {
|
||||
this.selectedRowKeys = selectedRowKeys;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
// 是否选择selection
|
||||
hasSelected() {
|
||||
return this.selectedRowKeys.length > 0;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.role-card {
|
||||
line-height: 30px;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
border-bottom: 1px solid #d9d9d9;
|
||||
margin-bottom: 10px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
/deep/.ant-tag{
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,13 @@
|
||||
<template>
|
||||
<router-view></router-view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|