张雄 3 years ago
parent eb381eda7d
commit d1dd18d7ef

@ -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,
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@ -17,10 +17,6 @@ export default {
type:String, type:String,
} }
}, },
data() {
return{
}
},
methods:{ methods:{
handleCancel() { handleCancel() {
this.$emit('handleCancel') this.$emit('handleCancel')

@ -54,6 +54,7 @@ export default {
}, },
}; };
}, },
//
methods: { methods: {
async handlePreview(file) { async handlePreview(file) {
if (!file.url && !file.preview) { if (!file.url && !file.preview) {

@ -65,7 +65,7 @@ export default [
path: '/BillManage/PayList', path: '/BillManage/PayList',
name: "PayList", name: "PayList",
title: "缴费明细", title: "缴费明细",
hide: false, hide: true,
component: resolve => require(['@/views/Payment/BillManage/_payList'], resolve), component: resolve => require(['@/views/Payment/BillManage/_payList'], resolve),
meta: {title: '缴费明细'}, meta: {title: '缴费明细'},
}, },
@ -73,7 +73,7 @@ export default [
path: '/BillManage/OweList', path: '/BillManage/OweList',
name: "OweList", name: "OweList",
title: "欠费明细", title: "欠费明细",
hide: false, hide: true,
component: resolve => require(['@/views/Payment/BillManage/_oweList'], resolve), component: resolve => require(['@/views/Payment/BillManage/_oweList'], resolve),
meta: {title: '欠费明细'}, meta: {title: '欠费明细'},
}, },
@ -81,7 +81,7 @@ export default [
path: '/BillManage/PayRateReport', path: '/BillManage/PayRateReport',
name: "PayRateReport", name: "PayRateReport",
title: "收缴率报表", title: "收缴率报表",
hide: false, hide: true,
component: resolve => require(['@/views/Payment/BillManage/_payRateReport'], resolve), component: resolve => require(['@/views/Payment/BillManage/_payRateReport'], resolve),
meta: {title: '收缴率报表'}, meta: {title: '收缴率报表'},
}, },
@ -89,7 +89,7 @@ export default [
path: '/BillManage/RefundRecord', path: '/BillManage/RefundRecord',
name: "RefundRecord", name: "RefundRecord",
title: "退款记录", title: "退款记录",
hide: false, hide: true,
component: resolve => require(['@/views/Payment/BillManage/_refundRecord'], resolve), component: resolve => require(['@/views/Payment/BillManage/_refundRecord'], resolve),
meta: {title: '退款记录'}, meta: {title: '退款记录'},
}, },
@ -97,7 +97,7 @@ export default [
path: '/BillManage/BillNotice', path: '/BillManage/BillNotice',
name: "BillNotice", name: "BillNotice",
title: "账单通知", title: "账单通知",
hide: false, hide: true,
component: resolve => require(['@/views/Payment/BillManage/_billNotice'], resolve), component: resolve => require(['@/views/Payment/BillManage/_billNotice'], resolve),
meta: {title: '账单通知'}, meta: {title: '账单通知'},
}, },

@ -32,9 +32,8 @@
v-model="checkedKeys" v-model="checkedKeys"
v-if="treeShow != undefined" v-if="treeShow != undefined"
checkable checkable
:defaultExpandAll="true" :expandedKeys="expandedKeys"
:replace-fields="replaceFields" :replace-fields="replaceFields"
:expanded-keys="expandedKeys"
:selected-keys="selectedKeys" :selected-keys="selectedKeys"
:tree-data="menus" :tree-data="menus"
@expand="onExpand" @expand="onExpand"
@ -78,6 +77,7 @@ export default {
data() { data() {
return { return {
roleId: null, roleId: null,
defaultExpandAll: true,
roleList: [], roleList: [],
expandedKeys: [], expandedKeys: [],
replaceFields: { replaceFields: {
@ -85,7 +85,10 @@ export default {
title: "name", title: "name",
key: "id", key: "id",
}, },
checkedKeys: [], checkedKeys: {
checked: [],
halfChecked: [],
},
selectedKeys: [], selectedKeys: [],
menus: [], // menus: [], //
actionsList: [], // actionsList: [], //
@ -105,12 +108,14 @@ export default {
}); });
}, },
rolechoose(data) { rolechoose(data) {
this.checkedKeys = []; this.checkedKeys = {
checked: [],
halfChecked: [],
};
if (data !== undefined) { if (data !== undefined) {
this.roleId = data; this.roleId = data;
FindAllMenus({ roleId: this.roleId }).then((res) => { FindAllMenus({ roleId: this.roleId }).then((res) => {
this.menus = res.data; this.menus = res.data;
// console.log(res.data)
this.defaultCheck(this.menus); this.defaultCheck(this.menus);
}); });
} else if (data === undefined) { } else if (data === undefined) {
@ -120,7 +125,10 @@ export default {
rolechange(data) { rolechange(data) {
this.treeShow = data; this.treeShow = data;
if (data != undefined) { if (data != undefined) {
this.checkedKeys = []; this.checkedKeys = {
checked: [],
halfChecked: [],
};
this.roleId = this.roleList[data].id; this.roleId = this.roleList[data].id;
FindAllMenus({ roleId: this.roleId }).then((res) => { FindAllMenus({ roleId: this.roleId }).then((res) => {
this.menus = res.data; this.menus = res.data;
@ -131,26 +139,68 @@ export default {
// this.menus = []; // 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) { defaultCheck(arr) {
for (let item of arr) { let res = {
if (item.childrenList !== null) { checked: [],
if(item.isShow === true){ halfChecked: [],
this.checkedKeys.push(item.id); };
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
} }
this.defaultCheck(item.childrenList); if( checkedNum == arr[x].childrenList[y].childrenList.length) {
} else if (item.isShow === true) { res.checked.push(arr[x].childrenList[y].id)
this.checkedKeys.push(item.id); } else if ( checkedNum != 0) {
res.halfChecked.push(arr[x].childrenList[y].id)
} else {
} }
} }
// console.log(this.checkedKeys) }
}, if(!item.childrenList) {
onExpand(expandedKeys) { if(item.isShow == true) {
this.expandedKeys = expandedKeys; res.checked.push(item.id);
this.autoExpandParent = false; 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) { onCheck(checkedKeys, e) {
this.checkedKeys = checkedKeys; this.checkedKeys = checkedKeys;
// console.log(e.node.eventKey);
changeMenuShow({ changeMenuShow({
roleId: this.roleId, roleId: this.roleId,
showMenusId: e.node.eventKey, showMenusId: e.node.eventKey,
@ -162,10 +212,11 @@ export default {
} }
}); });
}, },
onExpand(e) {
this.expandedKeys = e;
},
onSelect(selectedKeys, info) { onSelect(selectedKeys, info) {
// console.log('onSelect', info);
this.selectedKeys = selectedKeys; this.selectedKeys = selectedKeys;
// console.log(selectedKeys);
getActions({ roleId: this.roleId, menusId: this.selectedKeys[0] }).then( getActions({ roleId: this.roleId, menusId: this.selectedKeys[0] }).then(
(res) => { (res) => {
this.actionsList = res.data; this.actionsList = res.data;
@ -193,7 +244,6 @@ export default {
}, },
watch: { watch: {
checkedKeys(val) { checkedKeys(val) {
// console.log('onCheck', val);
}, },
roleList: { roleList: {
handler(val) { handler(val) {

@ -109,8 +109,7 @@
<a-tree <a-tree
v-model="tree.checkedKeys" v-model="tree.checkedKeys"
checkable checkable
:expanded-keys="tree.expandedKeys" defaultExpandAll
:auto-expand-parent="tree.autoExpandParent"
:selected-keys="tree.selectedKeys" :selected-keys="tree.selectedKeys"
:tree-data="roleList" :tree-data="roleList"
:checkStrictly="true" :checkStrictly="true"
@ -119,7 +118,6 @@
title: 'name', title: 'name',
key: 'id', key: 'id',
}" }"
@expand="onExpand"
@select="onSelect" @select="onSelect"
@check="onCheck" @check="onCheck"
/> />
@ -208,6 +206,7 @@ export default {
getData() { getData() {
getrolelist().then((res) => { getrolelist().then((res) => {
this.roleList = res.data; this.roleList = res.data;
console.log(res.data)
this.afterroleList = JSON.parse(JSON.stringify(this.roleList)); this.afterroleList = JSON.parse(JSON.stringify(this.roleList));
}); });
}, },

@ -94,10 +94,24 @@ export const form = {
accountType:undefined, accountType:undefined,
remake: "", remake: "",
}; };
const handleConfirm = (rule,value,callback) => {
if(!value){
callback();
}else{
// 正则判断失败抛出错误否则直接callback()
if(!/(^\d{18}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value)){
callback(new Error("身份证格式不正确!"));
}else{
callback();
}
}
}
export const rules = { export const rules = {
actualName: [{ required: true, message: "请输入真实姓名", trigger: "blur" }], actualName: [{ required: true, message: "请输入真实姓名", trigger: "blur" }],
sex: [{ required: true, message: "请选择性别", trigger: "change" }], sex: [{ required: true, message: "请选择性别", trigger: "change" }],
idCard: [{ required: true, message: "请输入身份证号", trigger: "blur" }], idCard: [{ required: true, message: "请输入身份证号", trigger: "blur" },{validator: (rule,value,callback) => handleConfirm(rule,value,callback)}],
tel: [ tel: [
{ required: true, message: "请输入手机号", trigger: "blur" }, { required: true, message: "请输入手机号", trigger: "blur" },
{ min: 11, max: 11, message: "手机号只能为11位", trigger: "blur" }, { min: 11, max: 11, message: "手机号只能为11位", trigger: "blur" },
@ -106,6 +120,10 @@ export const rules = {
{ type: "array", required: true, message: "请选择岗位", trigger: "change" }, { type: "array", required: true, message: "请选择岗位", trigger: "change" },
], ],
entryDate: [{ required: true, message: "请选择入职时间", trigger: "change" }], entryDate: [{ required: true, message: "请选择入职时间", trigger: "change" }],
emergencyContactNumber: [
{ required: true, message: "请输入手机号", trigger: "blur" },
{ min: 11, max: 11, message: "手机号只能为11位", trigger: "blur" },
],
}; };
export const options = { export const options = {
sex: [ sex: [

@ -52,6 +52,9 @@ export const pagination = {
current: 1, current: 1,
total: 0, total: 0,
pageSize: 10, pageSize: 10,
showTotal: (total) => `${total}`,
showSizeChanger: true,
showQuickJumper: true,
} }
export const ActionsList = [ export const ActionsList = [
{ {
@ -70,7 +73,7 @@ export const rules = {
export const unitColumns = [ export const unitColumns = [
{ {
title: "单元名称", title: "单元",
dataIndex: "name", dataIndex: "name",
width: "15%", width: "15%",
}, },

@ -77,7 +77,7 @@
<a-table :columns="unitColumns" :data-source="unitData" :row-key="record => record.id"> <a-table :columns="unitColumns" :data-source="unitData" :row-key="record => record.id">
<span slot="action" slot-scope="text, row"> <span slot="action" slot-scope="text, row">
<a-space><a @click="addUnit(text, row)">编辑</a> <a-space><a @click="addUnit(text, row)">编辑</a>
<a @click="delUnit(text, row)">删除</a></a-space> <a @click="delUnit(text, row)" style="color: red">删除</a></a-space>
</span> </span>
</a-table> </a-table>
</div> </div>
@ -106,7 +106,7 @@
:rules="unit.rules" :rules="unit.rules"
layout="vertical" layout="vertical"
> >
<a-form-model-item prop='name' label='单元名称'> <a-form-model-item prop='name' label='单元'>
<a-input placeholder='请输入' v-model="unit.unitForm.name"/> <a-input placeholder='请输入' v-model="unit.unitForm.name"/>
</a-form-model-item> </a-form-model-item>
<a-form-model-item prop='floor' label='楼层数'> <a-form-model-item prop='floor' label='楼层数'>
@ -257,7 +257,6 @@ export default {
}); });
}, },
addUnit(data,row){// addUnit(data,row){//
console.log(row);
if(row!==undefined){ if(row!==undefined){
this.unit.modalTitle='修改单元' this.unit.modalTitle='修改单元'
this.unit.unitForm= {...row} this.unit.unitForm= {...row}
@ -266,7 +265,6 @@ export default {
this.unit.modalTitle='新增单元' this.unit.modalTitle='新增单元'
} }
this.unit.showModal=true this.unit.showModal=true
console.log(this.unit.unitForm);
}, },
unitSubmit(){// unitSubmit(){//
this.$refs.unForm.validate(async valid => { this.$refs.unForm.validate(async valid => {

@ -10,32 +10,49 @@
<a-button @click='reset()'> </a-button> <a-button @click='reset()'> </a-button>
</a-space> </a-space>
</a-col> </a-col>
<a-col :span='4'>
<a-button class="add-btn" @click="addBuilding"></a-button>
</a-col>
</a-row> </a-row>
</div> </div>
<commonTable <div class="search-box">
<a-button class="add-btn" @click="addBuilding"></a-button>
</div>
<a-table
:columns="columns" :columns="columns"
:tableData="tableData" :data-source="tableData"
:ActionsList="ActionsList" :pagination="pagination"
@handleTableChange="handleTableChange" @change="handleTableChange"
@Actions="Actions" :row-selection="{
@selectionChoosed="selectionChoosed" selectedRowKeys: tableChoosed,
onChange: selectionChoosed,
}"
:row-key="
(record, index) => {
return record.id;
}"
> >
<template v-slot:actionBox="data"> <template slot="action" slot-scope="text,record">
<a-space size="small"> <a @click="detail(record.id)"></a>
<a class="ant-dropdown-link" @click='detail(data.data.id)'>详情</a> <a @click="del([record.id])" style="margin-left: 8px;color: red">删除</a>
<a class="ant-dropdown-link" @click='del([data.data.id])'>删除</a>
</a-space>
</template> </template>
</commonTable> </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> <curd-form :show='drawerConfig.show' :type="drawerConfig.type" @close='close' :editId='editId'></curd-form>
</div> </div>
</template> </template>
<script> <script>
import { columns,pagination,searchForm,ActionsList} from "./depend/config" import { columns,searchForm,ActionsList} from "./depend/config"
import { buildingList,buildingDel } from "@/api/basic/estate" import { buildingList,buildingDel } from "@/api/basic/estate"
import curdForm from './depend/form.vue' import curdForm from './depend/form.vue'
export default { export default {
@ -44,7 +61,14 @@ export default {
}, },
data() { data() {
return { return {
pagination, pagination: {
current: 1,
total: 0,
pageSize: 10,
showTotal: (total) => `${total}`,
showSizeChanger: true,
showQuickJumper: true,
},
columns, columns,
searchForm, searchForm,
ActionsList, ActionsList,
@ -61,6 +85,11 @@ export default {
created() { created() {
this.getData() this.getData()
}, },
computed: {
hasSelected() {
return this.tableChoosed.length > 0;
},
},
methods: { methods: {
async getData() { async getData() {
const res = await buildingList( const res = await buildingList(
@ -115,18 +144,12 @@ export default {
}, },
}); });
}, },
Actions(data) { handleMenuClick(data) {
let ids =[] if (data.key === "del") {
for(const item of this.tableChoosed){ this.del(this.tableChoosed);
ids.push(item.id)
}
//
if(data===1){
this.del(ids)
} }
}, },
selectionChoosed(data) { selectionChoosed(data) {
console.log(data);
this.tableChoosed = data; this.tableChoosed = data;
}, },
}, },

@ -194,8 +194,8 @@ export default {
estateReviewId: estateReviewId, estateReviewId: estateReviewId,
operate: operate, operate: operate,
}); });
if (res.code === 0) { if (res.code === 200) {
this.$message.success(res.msg); this.$message.success(res.msg + res.data);
} else { } else {
this.$message.error(res.msg); this.$message.error(res.msg);
} }
@ -206,8 +206,13 @@ export default {
Actions(data) { Actions(data) {
this.selectedRowKeys.forEach(ele => { this.selectedRowKeys.forEach(ele => {
let obj = {operate: data, estateReviewId: ele}; let obj = {operate: data, estateReviewId: ele};
review(obj); review(obj).then(res => {
this.$message.success('操作成功') if(res.code === 200){
this.$message.success(res.msg)
}else{
this.$message.error(res.msg)
}
});
}) })
this.activeAction = undefined; this.activeAction = undefined;
this.selectedRowKeys = []; this.selectedRowKeys = [];

@ -27,13 +27,27 @@ export const form = {
tenantName:undefined, tenantName:undefined,
tenantTel:undefined, tenantTel:undefined,
} }
const handleConfirm = (rule,value,callback) => {
if(!value){
callback();
}else{
// 正则判断失败抛出错误否则直接callback()
if(!/(^\d{18}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value)){
callback(new Error("身份证格式不正确!"));
}else{
callback();
}
}
}
export const rules = { export const rules = {
manageEstateId:[{required:true,message:'请选择房屋',trigger:'change'}], manageEstateId:[{required:true,message:'请选择房屋',trigger:'change'}],
identity:[{required:true,message:'请选择身份',trigger:'change'}], identity:[{required:true,message:'请选择身份',trigger:'change'}],
name:[{required:true,message:'请输入姓名',trigger:'blur'}], name:[{required:true,message:'请输入姓名',trigger:'blur'}],
tel:[{required:true,message:'请输入电话',trigger:'blur'}], tel:[{required:true,message:'请输入电话',trigger:'blur'}],
sex:[{required:true,message:'请选择性别',trigger:'change'}], sex:[{required:true,message:'请选择性别',trigger:'change'}],
idCard:[{required:true,message:'请输入身份证号',trigger:'blur'}], idCard:[{required:true,message:'请输入身份证号',trigger:'blur'},{validator: (rule,value,callback) => handleConfirm(rule,value,callback)}],
ownerName:[{required:true,message:'请输入业主姓名',trigger:'blur'}], ownerName:[{required:true,message:'请输入业主姓名',trigger:'blur'}],
ownerTel:[{required:true,message:'请输入业主电话',trigger:'blur'}], ownerTel:[{required:true,message:'请输入业主电话',trigger:'blur'}],
tenantName:[{required:true,message:'请输入租户姓名',trigger:'blur'}], tenantName:[{required:true,message:'请输入租户姓名',trigger:'blur'}],

@ -23,11 +23,11 @@
<a-button @click="reset"> </a-button> <a-button @click="reset"> </a-button>
</a-space> </a-space>
</a-col> </a-col>
<a-col :span="4">
<a-button class="add-btn" @click="show.add = true">添加住户</a-button>
</a-col>
</a-row> </a-row>
</div> </div>
<div class="search-box">
<a-button class="add-btn" @click="show.add = true">添加住户</a-button>
</div>
<div class="main"> <div class="main">
<!-- 表格 --> <!-- 表格 -->
<a-table <a-table

@ -37,6 +37,12 @@ export const rules = {
manageEstateTypeId: [ manageEstateTypeId: [
{ required: true, message: "请选择房屋类型", trigger: "change" }, { required: true, message: "请选择房屋类型", trigger: "change" },
], ],
indoorArea: [
{ required: true, message: "请输入室内面积", trigger: "blur" },
],
constructionArea: [
{ required: true, message: "请输入建筑面积", trigger: "blur" },
],
isEnableLease: [ isEnableLease: [
{ required: true, message: "请选择是否开启租赁", trigger: "change" }, { required: true, message: "请选择是否开启租赁", trigger: "change" },
], ],

@ -142,6 +142,10 @@ export default {
default:null, default:null,
type:Number type:Number
}, },
typeList: {
default: null,
type:Array
}
}, },
data() { data() {
return { return {
@ -309,6 +313,9 @@ export default {
if(val!==null){ if(val!==null){
this.getInfo(val) this.getInfo(val)
} }
},
typeList(val) {
this.options.houseType = val;
} }
} }
}; };

@ -16,13 +16,11 @@
<a-button @click="reset"> </a-button> <a-button @click="reset"> </a-button>
</a-space> </a-space>
</a-col> </a-col>
<a-col :span="4"> </a-row>
<a-space> </div>
<div class="search-box">
<a-button class="add-btn" @click="drawerConfig.addShow = true">添加房屋</a-button> <a-button class="add-btn" @click="drawerConfig.addShow = true">添加房屋</a-button>
<a-button @click="drawerConfig.houseType = true">房屋配置</a-button> <a-button @click="drawerConfig.houseType = true">房屋配置</a-button>
</a-space>
</a-col>
</a-row>
</div> </div>
<div class="main"> <div class="main">
<div style="margin-bottom: 16px"> <div style="margin-bottom: 16px">
@ -108,7 +106,7 @@
<div class="drawer-content"> <div class="drawer-content">
基本信息 基本信息
<a-divider></a-divider> <a-divider></a-divider>
<vue-form ref="form" @success='addSuccess' :editId="editId"></vue-form> <vue-form ref="form" @success='addSuccess' :typeList="typeList" :editId="editId"></vue-form>
</div> </div>
<div class="drawer-footer"> <div class="drawer-footer">
<a-button :style="{ marginRight: '8px' }" @click="addClose"> <a-button :style="{ marginRight: '8px' }" @click="addClose">
@ -271,10 +269,12 @@ export default {
}, },
addClose() { addClose() {
this.drawerConfig.addShow = false; this.drawerConfig.addShow = false;
this.getType();
this.editId = null; this.editId = null;
this.$refs.form.close() this.$refs.form.close()
}, },
edit(data){ edit(data){
this.getType();
this.editId = data.id this.editId = data.id
this.drawerConfig.addShow = true; this.drawerConfig.addShow = true;
}, },

@ -29,7 +29,7 @@
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="8" v-if="form.identity == 1"> <a-col :span="8" v-if="form.identity == 1">
<a-form-model-item label="选择房屋" prop="estateId"> <a-form-model-item label="选择房屋" prop="estateId" :rules="[{ required: true, message: '请选择房屋' }]">
<a-select v-model="form.estateId" placeholder="请选择房屋" @change="getAppName"> <a-select v-model="form.estateId" placeholder="请选择房屋" @change="getAppName">
<a-select-option v-for="(item, index) in options.estateId" :key="index" :value="item.id"> <a-select-option v-for="(item, index) in options.estateId" :key="index" :value="item.id">
{{item.name}} {{item.name}}
@ -38,7 +38,7 @@
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="8" v-else> <a-col :span="8" v-else>
<a-form-model-item label="选择岗位" prop="estateId"> <a-form-model-item label="选择岗位" prop="positionId" :rules="[{ required: true, message: '请选择岗位' }]">
<a-cascader v-model="form.positionId" :options="options.applicantId" @change="getDepartmentName" placeholder="请选择岗位"></a-cascader> <a-cascader v-model="form.positionId" :options="options.applicantId" @change="getDepartmentName" placeholder="请选择岗位"></a-cascader>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
@ -154,9 +154,11 @@ export default {
this.$emit("onClose"); this.$emit("onClose");
}, },
addClose(){ addClose(){
this.$refs.ruleForm.resetFields();
this.$emit('close'); this.$emit('close');
this.headList = []; this.headList = [];
this.$refs.ruleForm.resetFields();
this.form.estateId = undefined;
this.form.positionId = undefined;
}, },
success(){ success(){
this.$emit('success') this.$emit('success')
@ -192,7 +194,7 @@ export default {
} }
}) })
} }
}) });
}, },
// //
beforeUpload(f, l) { beforeUpload(f, l) {

@ -30,7 +30,7 @@
<a-input placeholder="请输入工单号/姓名/手机号" style="width:200px" v-model="form.keyword"> <a-input placeholder="请输入工单号/姓名/手机号" style="width:200px" v-model="form.keyword">
</a-input> </a-input>
<a-button type="primary" @click="onSearch"> </a-button> <a-button type="primary" @click="onSearch"> </a-button>
<a-button> </a-button> <a-button @click="onReset"> </a-button>
</a-space> </a-space>
</a-col> </a-col>
<a-col :span="4"> <a-col :span="4">
@ -512,6 +512,11 @@ export default {
onSearch() { onSearch() {
this.getData() this.getData()
}, },
onReset() {
this.form.workOrderTypeId = undefined;
this.form.keyword = undefined;
this.getData();
},
tabsChange(e){ tabsChange(e){
this.form.status = e.target.value this.form.status = e.target.value
this.getData() this.getData()

@ -85,7 +85,9 @@
style="width: 60%" style="width: 60%"
></a-input> ></a-input>
</span> </span>
<a-button type="primary" @click="getCode"></a-button> <a-button type="primary" @click="getCode" :disabled="inCodeGap">
{{inCodeGap == false ? '获取验证码' : codeGap+'s后再次获取'}}
</a-button>
<!-- <a-row> <!-- <a-row>
<a-col :span="12" style="margin-left: 23px" <a-col :span="12" style="margin-left: 23px"
><a-checkbox></a-checkbox>&nbsp;&nbsp;</a-col ><a-checkbox></a-checkbox>&nbsp;&nbsp;</a-col
@ -148,9 +150,9 @@
/> />
</a-col> </a-col>
<a-col :span="6"> <a-col :span="6">
<a-button type="primary" @click="getCode" <a-button type="primary" @click="getCode" :disabled="inCodeGap">
>获取验证码</a-button {{inCodeGap == false ? '获取验证码' : codeGap+'s后再次获取'}}
> </a-button>
</a-col> </a-col>
</a-row> </a-row>
</a-form-model-item> </a-form-model-item>
@ -198,9 +200,9 @@
/> />
</a-col> </a-col>
<a-col :span="6"> <a-col :span="6">
<a-button type="primary" @click="getCode" <a-button type="primary" @click="getCode" :disabled="inCodeGap">
>获取验证码</a-button {{inCodeGap == false ? '获取验证码' : codeGap+'s后再次获取'}}
> </a-button>
</a-col> </a-col>
</a-row> </a-row>
</a-form-model-item> </a-form-model-item>
@ -269,6 +271,8 @@ export default {
cityList: [], // cityList: [], //
cityvalue: [], // cityvalue: [], //
communityList: [], // communityList: [], //
inCodeGap: false,
codeGap: 60,
}; };
}, },
created() { created() {
@ -358,9 +362,19 @@ export default {
this.$message.error("先选择小区"); this.$message.error("先选择小区");
return; return;
} }
let num = setInterval(() => {
this.inCodeGap = true;
this.codeGap -= 1;
if(this.codeGap < 1) {
clearInterval(num);
if(this.codeGap < 1) {
this.inCodeGap = false;
this.codeGap = 60;
}
}
},1000)
sendTelCode(this.form).then((res) => { sendTelCode(this.form).then((res) => {
if (res) { if (res) {
console.log(res)
this.$message.success(res.msg); this.$message.success(res.msg);
} }
}); });

@ -98,12 +98,13 @@ export const columns = [
{ {
title: "主办方", title: "主办方",
dataIndex: "organizerName", dataIndex: "organizerName",
width: "8%", width: "6%",
}, },
{ {
title: "活动内容", title: "活动内容",
dataIndex: "content", dataIndex: "content",
width: "8%", width: "10%",
scopedSlots: { customRender: "content" },
}, },
{ {
title: "报名人数", title: "报名人数",

@ -75,6 +75,7 @@
v-model="form.content" v-model="form.content"
placeholder="请输入内容" placeholder="请输入内容"
style="width: 80%" style="width: 80%"
:autosize="{minRows: 10}"
></a-textarea> ></a-textarea>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
@ -238,7 +239,6 @@ export default {
this.$message.error(res.msg); this.$message.error(res.msg);
} }
} else { } else {
console.log(this.form);
let res = await activityUpdate(this.form); let res = await activityUpdate(this.form);
if (res.code === 200) { if (res.code === 200) {
this.$message.success(res.msg); this.$message.success(res.msg);
@ -250,12 +250,22 @@ export default {
} }
}); });
}, },
// handleChange(imgDataList) {
// this.fileList = imgDataList
// let arr = []
// imgDataList.forEach(ele => {
// arr.push(ele.response.data)
// })
// this.form.imgUrls = arr
// },
handleChange(data) { handleChange(data) {
this.fileList = data; this.fileList = data;
if (data[0].status === "done") { this.form.imgUrls = [];
console.log("-------done-------"); data.forEach(ele => {
this.form.imgUrls.push(data[0].response.data); if(ele.status == 'done') {
this.form.imgUrls.push(ele.response.data)
} }
})
}, },
}, },
watch: { watch: {
@ -266,9 +276,10 @@ export default {
this.form.id = val; this.form.id = val;
activityInfo({ activityId: val }).then((res) => { activityInfo({ activityId: val }).then((res) => {
this.form = res.data; this.form = res.data;
this.form.imgUrls = [];
if (res.data.imgList.length > 0) { if (res.data.imgList.length > 0) {
console.log(res.data.imgList);
const pic = []; const pic = [];
this.form.imgUrls.push(res.data.imgList[0].url)
for (let item of res.data.imgList) { for (let item of res.data.imgList) {
let obj = { let obj = {
name: item.url.split("_")[0] + "." + item.url.split(".")[1], name: item.url.split("_")[0] + "." + item.url.split(".")[1],

@ -21,6 +21,7 @@
} }
" "
> >
<span slot="action" slot-scope="text, row"> <span slot="action" slot-scope="text, row">
<a-space> <a-space>
<a class="ant-dropdown-link" @click="detail(row.id)"></a> <a class="ant-dropdown-link" @click="detail(row.id)"></a>
@ -28,6 +29,14 @@
<a class="ant-dropdown-link" @click="del([row.id])"></a> <a class="ant-dropdown-link" @click="del([row.id])"></a>
</a-space> </a-space>
</span> </span>
<span slot="content" slot-scope="text, record">
<a-popover>
<template slot="content">
<div style="width: 600px">{{record.content}}</div>
</template>
<div>{{doStr(record.content,15)}}</div>
</a-popover>
</span>
<span slot="imgpic" slot-scope="text, row"> <span slot="imgpic" slot-scope="text, row">
<img <img
v-if="row.imgList.length > 0" v-if="row.imgList.length > 0"
@ -189,6 +198,14 @@ export default {
this.detailId = null; this.detailId = null;
this.drawer.detail = false; this.drawer.detail = false;
}, },
//
doStr(str, number) {
if(str.length >= number) {
return str.substr(0,number-1) + '...'
} else {
return str
}
}
}, },
computed: { computed: {
hasSelected() { hasSelected() {

@ -8,12 +8,18 @@ export const form = {
remarks:undefined, remarks:undefined,
imgUrls:[], imgUrls:[],
} }
//身份证校验
const handleConfirm = (rule,value,callback) => { const handleConfirm = (rule,value,callback) => {
if(value.length != 18) { if(!value){
callback('请输入正确的格式') callback();
}; }else{
// 正则判断失败抛出错误否则直接callback()
if(!/(^\d{18}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value)){
callback(new Error("身份证格式不正确!"));
}else{
callback(); callback();
}
}
} }
export const rules = { export const rules = {

@ -149,13 +149,22 @@ export default {
} }
}); });
}, },
// handleChange(imgDataList) {
// this.fileList = imgDataList
// let arr = []
// imgDataList.forEach(ele => {
// arr.push(ele.response.data)
// })
// this.form.imgUrls = arr
// },
handleChange(data) { handleChange(data) {
this.fileList = data; this.fileList = data;
this.form.imgUrls=[] this.form.imgUrls = [];
if (data[0].status === "done") { data.forEach(ele => {
console.log('-------done-------'); if(ele.status == 'done') {
this.form.imgUrls.push(data[0].response.data); this.form.imgUrls.push(ele.response.data)
} }
})
}, },
}, },
watch: { watch: {
@ -166,9 +175,10 @@ export default {
this.form.id = val; this.form.id = val;
organizerInfo({ activityOrganizerId: val }).then((res) => { organizerInfo({ activityOrganizerId: val }).then((res) => {
this.form = res.data; this.form = res.data;
this.form.imgUrls = [];
if (res.data.imgList.length > 0) { if (res.data.imgList.length > 0) {
console.log(res.data.imgList);
const pic = []; const pic = [];
this.form.imgUrls.push(res.data.imgList[0].url)
for (let item of res.data.imgList) { for (let item of res.data.imgList) {
let obj = { let obj = {
name: item.url.split("_")[0] + "." + item.url.split(".")[1], name: item.url.split("_")[0] + "." + item.url.split(".")[1],

@ -31,7 +31,7 @@ export const columns = [
{ {
title: "标题", title: "标题",
dataIndex: "title", dataIndex: "title",
width: "16%", width: "21%",
}, },
{ {
title: "推送对象", title: "推送对象",
@ -62,7 +62,7 @@ export const columns = [
{ {
title: "状态", title: "状态",
dataIndex: "status", dataIndex: "status",
width: "10%", width: "8%",
customRender: function (status) { customRender: function (status) {
switch (status) { switch (status) {
case 1: case 1:
@ -79,17 +79,18 @@ export const columns = [
{ {
title: "内容", title: "内容",
dataIndex: "content", dataIndex: "content",
width: "13%", width: "21%",
scopedSlots: { customRender: "content" },
}, },
{ {
title: "阅读量", title: "阅读量",
dataIndex: "readingVolume", dataIndex: "readingVolume",
width: "10%", width: "7%",
}, },
{ {
title: "附件下载次数", title: "附件下载次数",
dataIndex: "downloadNum", dataIndex: "downloadNum",
width: "10%", width: "7%",
}, },
{ {
title: "更新时间", title: "更新时间",

@ -11,7 +11,7 @@ export const rules = {
title:[{required:true,message:'请输入标题',trigger:'blur'}], title:[{required:true,message:'请输入标题',trigger:'blur'}],
object:[{required:true,message:'请选择',trigger:'change'}], object:[{required:true,message:'请选择',trigger:'change'}],
status:[{required:true,message:'请选择',trigger:'change'}], status:[{required:true,message:'请选择',trigger:'change'}],
content:[{required:true,message:'请输入标题',trigger:'blur'}], content:[{required:true,message:'请输入内容',trigger:'blur'}],
} }
export const options = { export const options = {
status:[ status:[

@ -56,6 +56,7 @@
v-model="form.content" v-model="form.content"
placeholder="请输入内容" placeholder="请输入内容"
style="width: 80%" style="width: 80%"
:autosize="{ minRows: 12}"
></a-textarea> ></a-textarea>
</a-form-model-item> </a-form-model-item>
封面图片 封面图片
@ -197,13 +198,22 @@ export default {
this.$message.error(`${info.file.name} 上传失败`); this.$message.error(`${info.file.name} 上传失败`);
} }
}, },
// handleChange(data) {
// this.fileList = data;
// this.form.coverImgUrls = [];
// if (data[0].status === "done") {
// console.log("-------done-------");
// this.form.coverImgUrls.push(data[0].response.data);
// }
// },
handleChange(data) { handleChange(data) {
this.fileList = data; this.fileList = data;
this.form.coverImgUrls = []; this.form.coverImgUrls = [];
if (data[0].status === "done") { data.forEach(ele => {
console.log("-------done-------"); if(ele.status == 'done') {
this.form.coverImgUrls.push(data[0].response.data); this.form.coverImgUrls.push(ele.response.data)
} }
})
}, },
}, },
watch: { watch: {
@ -215,7 +225,8 @@ export default {
announcementInfo({ announcementId: val }).then((res) => { announcementInfo({ announcementId: val }).then((res) => {
this.form = res.data; this.form = res.data;
if (res.data.coverImgList.length > 0) { if (res.data.coverImgList.length > 0) {
console.log(res.data.coverImgList); // console.log(res.data.coverImgList);
// this.form.coverImgUrls.push(res.data.coverImgList[0].url)
const pic = []; const pic = [];
for (let item of res.data.coverImgList) { for (let item of res.data.coverImgList) {
let obj = { let obj = {

@ -9,7 +9,7 @@
:columns="columns" :columns="columns"
:data-source="tableData" :data-source="tableData"
:pagination="pagination" :pagination="pagination"
:scroll="{ x: 1600 }" :scroll="{ x: 1900 }"
@change="handleTableChange" @change="handleTableChange"
:row-selection="{ :row-selection="{
selectedRowKeys: selectedRowKeys, selectedRowKeys: selectedRowKeys,
@ -21,6 +21,14 @@
} }
" "
> >
<span slot="content" slot-scope="text, record">
<a-popover>
<template slot="content">
<div style="width: 600px">{{record.content}}</div>
</template>
<div>{{doStr(record.content,21)}}</div>
</a-popover>
</span>
<span slot="action" slot-scope="text, row"> <span slot="action" slot-scope="text, row">
<a-space> <a-space>
<a class="ant-dropdown-link" @click="edit(row.id)"></a> <a class="ant-dropdown-link" @click="edit(row.id)"></a>
@ -151,6 +159,14 @@ export default {
success() { success() {
this.getData(); this.getData();
}, },
//
doStr(str, number) {
if(str.length >= number) {
return str.substr(0,number-1) + '...'
} else {
return str
}
}
}, },
computed: { computed: {
hasSelected() { hasSelected() {

@ -201,7 +201,7 @@ export default {
}; };
}, },
mounted() { mounted() {
this.id = this.$route.params.data.id; this.id = this.$route.params.data;
this.getComment(); this.getComment();
this.getData(); this.getData();
}, },
@ -210,12 +210,14 @@ export default {
let res = await dynamicInfo({ let res = await dynamicInfo({
communityDynamicId: this.id, communityDynamicId: this.id,
}); });
console.log(res.data)
this.detailData = res.data; this.detailData = res.data;
}, },
async getComment() { async getComment() {
let res = await commentList({ let res = await commentList({
pageNum: this.pagination.current, pageNum: this.pagination.current,
size: this.pagination.pageSize, size: this.pagination.pageSize,
dynamicId: this.id,
}); });
this.tableData = res.data.rows; this.tableData = res.data.rows;
this.pagination.total = res.data.total; this.pagination.total = res.data.total;
@ -256,20 +258,17 @@ export default {
}); });
}, },
selectionChoosed(data) { selectionChoosed(data) {
console.log(data);
this.selectedRowKeys = data; this.selectedRowKeys = data;
}, },
handleTableChange(pagination) { handleTableChange(pagination) {
console.log(pagination);
const pager = { ...this.pagination }; const pager = { ...this.pagination };
pager.current = pagination.current; pager.current = pagination.current;
pager.pageSize = pagination.pageSize; pager.pageSize = pagination.pageSize;
this.pagination = pager; this.pagination = pager;
this.getData(); this.getData();
this.getComment();
}, },
Actions(data) { Actions(data) {
console.log(data);
console.log(this.selectedRowKeys);
this.activeAction = undefined; this.activeAction = undefined;
if (data === 1) { if (data === 1) {
this.del(this.selectedRowKeys); this.del(this.selectedRowKeys);

@ -166,7 +166,7 @@ export default {
} }
}, },
detail(data){ detail(data){
this.$router.push({name:'DynamicDetail',params:{data:data}}) this.$router.push({name:'DynamicDetail',params:{data:data.id}})
}, },
del(ids){ del(ids){
console.log(ids); console.log(ids);

@ -138,14 +138,25 @@ export default {
this.$message.error(res.msg) this.$message.error(res.msg)
} }
} }
} };
}); });
}, },
// handleChange(imgDataList) {
// this.fileList = imgDataList
// let arr = []
// imgDataList.forEach(ele => {
// arr.push(ele.response.data)
// })
// this.form.imgUrls = arr
// },
handleChange(data) { handleChange(data) {
this.fileList = data this.fileList = data;
if(data[0].status==='done'){ this.form.imgUrls = [];
this.form.imgUrls.push(data[0].response.data) data.forEach(ele => {
if(ele.status == 'done') {
this.form.imgUrls.push(ele.response.data)
} }
})
}, },
}, },
watch: { watch: {
@ -164,6 +175,7 @@ export default {
this.form.isRating = data.isRating this.form.isRating = data.isRating
if(data.imgList.length>0){ if(data.imgList.length>0){
const pic = [] const pic = []
this.form.imgUrls.push(data.imgList[0].url)
for(let item of data.imgList){ for(let item of data.imgList){
let obj = { let obj = {
name:item.url.split('_')[0] +'.'+ item.url.split('.')[1], name:item.url.split('_')[0] +'.'+ item.url.split('.')[1],
@ -175,7 +187,6 @@ export default {
pic.push(obj) pic.push(obj)
} }
this.fileList = pic this.fileList = pic
// this.form.imgUrls.push(pic[0].name)
} }
}) })
}else{ }else{

@ -70,6 +70,8 @@
placeholder="请选择开始时间" placeholder="请选择开始时间"
v-model="form.planBeginDate" v-model="form.planBeginDate"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
style="width: 30%"
showTime
/> />
</a-form-model-item> </a-form-model-item>
<a-form-model-item prop="isSort" label="是否按照顺序巡检"> <a-form-model-item prop="isSort" label="是否按照顺序巡检">

@ -64,6 +64,7 @@
v-model="form.content" v-model="form.content"
placeholder="请输入内容" placeholder="请输入内容"
style="width: 80%" style="width: 80%"
:autosize="{minRows: 10}"
></a-textarea> ></a-textarea>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
@ -155,10 +156,12 @@ export default {
}, },
handleChange(data) { handleChange(data) {
this.fileList = data; this.fileList = data;
if (data[0].status === "done") { this.form.imgUrls = [];
console.log("-------done-------"); data.forEach(ele => {
this.form.imgUrls.push(data[0].response.data); if(ele.status == 'done') {
this.form.imgUrls.push(ele.response.data)
} }
})
}, },
}, },
watch: { watch: {
@ -169,8 +172,10 @@ export default {
this.form.id = val; this.form.id = val;
newsInfo({ informationId: val }).then((res) => { newsInfo({ informationId: val }).then((res) => {
this.form = res.data; this.form = res.data;
this.form.imgUrls = []
if (res.data.imgList.length > 0) { if (res.data.imgList.length > 0) {
const pic = []; const pic = [];
this.form.imgUrls.push(res.data.imgList[0].url);
for (let item of res.data.imgList) { for (let item of res.data.imgList) {
let obj = { let obj = {
name: item.url.split("_")[0] + "." + item.url.split(".")[1], name: item.url.split("_")[0] + "." + item.url.split(".")[1],

@ -131,18 +131,20 @@ export default {
}, },
tabsChange(e) { tabsChange(e) {
if(e.target.value === '0'){ if(e.target.value === '0'){
this.searchForm.status =undefined this.searchForm.status = undefined
this.pagination.current = 1;
this.pagination.pageSize = 10;
this.getData(); this.getData();
} } else {
this.pagination.current = 1;
this.pagination.pageSize = 10;
this.searchForm.status = e.target.value; this.searchForm.status = e.target.value;
this.getData(); this.getData();
}
}, },
handleTableChange(pagination) { handleTableChange(pagination) {
console.log(pagination); this.pagination.current = pagination.current;
const pager = { ...this.pagination }; this.pagination.pageSize = pagination.pageSize;
pager.current = pagination.current;
pager.pageSize = pagination.pageSize;
this.pagination = pager;
this.getData(); this.getData();
}, },
Actions(data) { Actions(data) {

@ -268,15 +268,24 @@ export default {
}); });
}, },
// //
// handleChange(data) {
// console.log(data);
// this.fileList = data;
// //
// if (this.fileList.length === 0) {
// this.form.imgUrls = [];
// } else if (data[0].status === "done") {
// this.form.imgUrls.push(data[0].response.data);
// }
// },
handleChange(data) { handleChange(data) {
console.log(data);
this.fileList = data; this.fileList = data;
//
if (this.fileList.length === 0) {
this.form.imgUrls = []; this.form.imgUrls = [];
} else if (data[0].status === "done") { data.forEach(ele => {
this.form.imgUrls.push(data[0].response.data); if(ele.status == 'done') {
this.form.imgUrls.push(ele.response.data)
} }
})
}, },
}, },
}; };

@ -1,15 +1,61 @@
export const formItem = [ export const formItem = [
{ {
type: 'input', type: 'select',
label:'', label:'账单类型',
prop:'', prop:'',
placeholder:'请输入' option:[{ id:1,name:'手动生成'},{ id:2,name:'自动生成'}],
placeholder:'请选择'
}, },
] ]
export const columns = [ export const columns = [
{ {
title: "", title: "账单名称",
dataIndex: "", dataIndex: "name",
},
{
title: "账单状态",
dataIndex: "status",
customRender:function(status){
switch (status) {
case 1:
return '未缴纳'
case 2:
return '部分缴纳'
case 3:
return '已缴纳'
case 4:
return '已废除'
default:
break;
}
}
},
{
title: "关联房屋",
dataIndex: "unitName",
scopedSlots: { customRender: "unitName" },
},
{
title: "收费标准",
dataIndex: "chargesName"
},
{
title: "计费周期",
dataIndex: "billDateStart",
scopedSlots: { customRender: "billDateStart" },
width: 400
},
{
title: "应收金额",
dataIndex: "amountReceivable"
},
{
title: "违约金额",
dataIndex: "defaultAmount"
},
{
title: "实收金额",
dataIndex: "amountReceived"
}, },
{ {
title: "操作", title: "操作",

@ -2,32 +2,264 @@
<div> <div>
<div class="cardTitle">账单明细</div> <div class="cardTitle">账单明细</div>
<searchForm :formItem="formItem" @getSearch="search($event)"></searchForm> <searchForm :formItem="formItem" @getSearch="search($event)"></searchForm>
<a-table :columns="columns" :data-source="tableData" :pagination="pagination" :scroll="{x: 1900}" @change="handlerPage">
<template slot="unitName" slot-scope="text, record">
{{record.buildingName}}/{{record.unitName}}/{{record.estateName}}
</template>
<template slot="billDateStart" slot-scope="text, record">
{{record.billDateStart}} {{record.billDateEnd}}
</template>
<template slot="action" slot-scope="text, record">
<a v-if="record.status != 4" @click="billPay(record)"></a>
<a v-if="record.status != 4" style="margin-left: 8px;color: red" @click="billOff(record)"></a>
<a v-if="record.status == 4" @click="billRecover(record)"></a>
</template>
</a-table>
<a-drawer title="账单详情"
:width="720"
:visible="billShow"
:body-style="{ paddingBottom: '80px' }"
@close="billClose">
<div class="drawer-content">
<div style="padding: 16px">
<span class="billTitle">{{12786127846}}</span><a-tag style="margin-left: 24px">{{offDetail.status==1?'未缴纳':2?'部分缴纳':'已缴纳'}}</a-tag>
<span style="float: right">剩余未缴</span>
</div>
<div style="padding: 16px">
<span>{{offDetail.buildingName}}/{{offDetail.unitName}}/{{offDetail.estateName}}</span>
<span style="float: right;color: #D53131">¥{{offDetail.amountReceivable}}</span>
</div>
<a-divider></a-divider>
<div style="padding: 16px">
<a-descriptions layout="vertical">
<a-descriptions-item label="应收金额">
{{(offDetail.amountReceivable*1).toFixed(2)}}
</a-descriptions-item>
<a-descriptions-item label="实收金额">
{{(offDetail.amountReceived*1).toFixed(2)}}
</a-descriptions-item>
<a-descriptions-item label="计费周期">
{{offDetail.billDateStart}} {{offDetail.billDateEnd}}
</a-descriptions-item>
<a-descriptions-item label="剩余应收">
{{(offDetail.amountReceivable*1 - offDetail.amountReceived*1).toFixed(2)}}
</a-descriptions-item>
<a-descriptions-item label="违约金">
{{(offDetail.defaultAmount * 1).toFixed(2)}}
</a-descriptions-item>
<a-descriptions-item label="创建时间">
</a-descriptions-item>
</a-descriptions>
</div>
<div class="tableTitle">缴费记录</div>
<a-divider></a-divider>
<a-table :columns="billColumns" :data-source="billDetail" :pagination="false">
</a-table>
</div>
<div class="drawer-footer">
<a-button :style="{ marginRight: '8px' }" @click="billClose">
关闭
</a-button>
<a-button type="primary" @click="billPayment"> </a-button>
</div>
</a-drawer>
<a-modal title="账单废除确认" :visible="offShow" @ok="offComfirm" @cancel="offCancel">
<div>房屋号{{offDetail.buildingName}}/{{offDetail.unitName}}/{{offDetail.estateName}}</div>
<div>收费标准{{offDetail.chargesName}}</div>
<div>剩余应收<span style="color: #D53131">{{offDetail.amountReceivable}}</span></div>
<div>创建时间{{offDetail.billDateStart}}</div>
<h4 style="margin-top: 32px">请确认是否废除该账单</h4>
</a-modal>
<a-modal title="账单结清" :visible="paymentShow" @ok="paymentConfirm" @cancel="paymentCancel">
<div style="padding: 24px 0px 24px 0px">总计金额<span style="color: #D53131">{{(offDetail.amountReceivable*1).toFixed(2)}}</span></div>
<div>房屋号{{offDetail.buildingName}}/{{offDetail.unitName}}/{{offDetail.estateName}}</div>
<div>剩余应收<span>{{(offDetail.amountReceivable*1 - offDetail.amountReceived*1).toFixed(2)}}</span></div>
<div>违约金{{(offDetail.defaultAmount * 1).toFixed(2)}}</div>
<div>创建时间{{offDetail.billDateStart}}</div>
<h4 style="margin-top: 32px">请确认是否结清该账单</h4>
</a-modal>
</div> </div>
</template> </template>
<script> <script>
import { formItem, columns, pagination } from "./depend/config"
import { getBillList, abolition, recover, findBillOrderList, offlinePayments } from "@/api/payment/billManagement"
export default { export default {
name: 'payInfo', name: 'payInfo',
data() { data() {
return { return {
searchForm: { form: {
type: undefined,
estateId: undefined,
chargesIds: undefined
}, },
formItem: [] tableData:[],
formItem,
columns,
pagination,
billShow: false,
offShow: false,
billColumns: [
{
title: "操作人",
dataIndex: "createName"
},
{
title: "身份类型",
dataIndex: "identity",
customRender:function(identity){
switch (identity) {
case 1: return '物业'
case 2: return '业主'
case 3: return '租户'
case 4: return '业主亲属'
case 5: return '租户亲属'
default:
break;
}
} }
}, },
{
title: "实缴金额",
dataIndex: "payAmount"
},
{
title: "支付类型",
dataIndex: "payType",
customRender:function(payType){
switch (payType) {
case 1: return '自动扣费'
case 2: return '线下支付'
case 3: return '支付宝支付'
default:
break;
}
}
},
],
//
currentId: undefined,
billDetail: [],
offDetail: {},
//
paymentShow: false,
}
},
mounted() {
this.getData()
},
methods: { methods: {
getData() { getData() {
let obj = Object.assign({pageNum: this.pagination.current, size: this.pagination.pageSize},this.form)
getBillList(obj).then(res => {
let data = res.data;
this.tableData = data.rows;
this.pagination.total = data.total
})
}, },
search(data) { search(data) {
this.searchForm = data; this.form = data;
this.getData() this.getData()
}, },
handlerPage(val) {
this.pagination.current = val.current;
this.pagination.pageSize = val.pageSize;
this.getData()
},
//
billPay(record) {
this.currentId = record.id
this.offDetail = record;
let obj = {billId: record.id}
findBillOrderList(obj).then(res => {
let data = res.data
this.billDetail = data;
})
this.billShow = true
},
//
billPayment() {
this.paymentShow = true;
},
paymentConfirm() {
let obj = {billId: this.currentId, payAmount: (this.offDetail.amountReceivable - this.offDetail.amountReceived)*1.00}
offlinePayments(obj).then(res => {
if (res.code === 200) {
this.$message.success(res.msg);
this.paymentShow = false;
this.billShow = false;
this.getData();
} else {
this.$message.error(res.msg);
}
})
},
paymentCancel() {
this.paymentShow = false;
},
//
billOff(record) {
this.currentId = record.id
this.offDetail = record;
this.offShow = true;
},
offComfirm() {
abolition({billId: this.currentId}).then(res => {
if (res.code === 200) {
this.$message.success(res.msg);
this.offShow = false;
this.getData();
} else {
this.$message.error(res.msg);
}
})
},
//
billRecover(record) {
let obj = {billId : record.id}
this.$confirm({
title: "是否恢复?",
icon: "redo",
onOk: () => {
recover(obj).then(
(res) => {
if (res.code === 200) {
this.$message.success(res.msg);
this.getData();
} else {
this.$message.error(res.msg);
}
}
);
},
});
},
//
billClose() {
this.billShow = false
},
offCancel() {
this.offShow = false
}
} }
} }
</script> </script>
<style> <style lang="less">
.billTitle {
font-family: 'PingFang SC';
font-style: normal;
font-weight: 600;
font-size: 18px;
}
.tableTitle {
padding-left: 16px;
font-family: 'PingFang SC';
font-style: normal;
font-weight: 500;
font-size: 16px;
line-height: 22px;
}
</style> </style>

@ -1,11 +1,45 @@
export const columns = [ export const columns = [
{
title: "费用名称",
dataIndex: "name",
},
{ {
title: "计费方式", title: "计费方式",
dataIndex: "billingType", dataIndex: "billingType",
customRender: function (billingType) {
switch (billingType) {
case 1:
return "单价*计量方式";
case 2:
return "固定金额";
default:
break;
}
},
}, },
{ {
title: "计量方式", title: "计量方式",
dataIndex: "calculateType", dataIndex: "calculateType",
customRender: function (calculateType) {
switch (calculateType) {
case 1:
return "建筑面积";
case 2:
return "使用面积";
case 3:
return "公摊面积";
case 5:
return "仪表用量";
case 6:
return "房屋数分摊";
case 7:
return "房屋建筑面积分摊";
case 8:
return "房屋在住人口分摊";
default:
break;
}
},
}, },
{ {
title: "单价", title: "单价",

@ -248,10 +248,12 @@ export default {
} }
} }
this.estateIds = ids; this.estateIds = ids;
if (ids.length > 0) { if (ids.length != 0) {
bindList({ estateIds: ids }).then((res) => { bindList({ estateIds: ids }).then((res) => {
this.tableData = res.data; this.tableData = res.data;
}); });
} else {
this.tableData = []
} }
}, },
}, },

@ -49,7 +49,7 @@ export const rules = {
isTieredBilling: [ isTieredBilling: [
{ {
required: true, required: true,
message: "请选择", message: "请选择阶梯计费",
trigger: "change", trigger: "change",
}, },
], ],
@ -70,35 +70,35 @@ export const rules = {
choiceType: [ choiceType: [
{ {
required: true, required: true,
message: "请选择", message: "请选择取舍方式",
trigger: "change", trigger: "change",
}, },
], ],
isCollectLiquidatedDamages: [ isCollectLiquidatedDamages: [
{ {
required: true, required: true,
message: "请选择", message: "请选择收取违约金",
trigger: "change", trigger: "change",
}, },
], ],
paymentTerm: [ paymentTerm: [
{ {
required: true, required: true,
message: "请输入", message: "请输入支付期限",
trigger: "blur", trigger: "blur",
}, },
], ],
chargeRate: [ chargeRate: [
{ {
required: true, required: true,
message: "请输入", message: "请输入收取比率",
trigger: "blur", trigger: "blur",
}, },
], ],
chargeMax: [ chargeMax: [
{ {
required: true, required: true,
message: "请输入", message: "请输入收取上限",
trigger: "blur", trigger: "blur",
}, },
], ],

@ -95,14 +95,14 @@
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-model-item prop="fileStandard" label="定档标准"> <a-form-model-item prop="isTieredBilling" label="是否阶梯计费">
<a-select <a-select
v-model="form.fileStandard" v-model="form.isTieredBilling"
placeholder="请选择定档标准" placeholder="请选择是否阶梯计费"
style="width: 60%" style="width: 60%"
> >
<a-select-option <a-select-option
v-for="item in options.fileStandard" v-for="item in options.isTrue"
:key="item.id" :key="item.id"
:value="item.id" :value="item.id"
>{{ item.name }}</a-select-option >{{ item.name }}</a-select-option
@ -110,15 +110,15 @@
</a-select> </a-select>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12" v-if="form.isTieredBilling === 1">
<a-form-model-item prop="isTieredBilling" label="是否阶梯计费"> <a-form-model-item prop="fileStandard" label="定档标准">
<a-select <a-select
v-model="form.isTieredBilling" v-model="form.fileStandard"
placeholder="请选择是否阶梯计费" placeholder="请选择定档标准"
style="width: 60%" style="width: 60%"
> >
<a-select-option <a-select-option
v-for="item in options.isTrue" v-for="item in options.fileStandard"
:key="item.id" :key="item.id"
:value="item.id" :value="item.id"
>{{ item.name }}</a-select-option >{{ item.name }}</a-select-option

@ -1,8 +1,8 @@
<template> <template>
<div> <div>
<div class="cardTitle">商品分类</div> <div class="cardTitle">商品分类</div>
<div class="content flexbox"> <div class="shop-content">
<div class="tree"> <div class="shop-tree">
<a-button class="add-btn" style="margin-left: 10px" @click="addCate" <a-button class="add-btn" style="margin-left: 10px" @click="addCate"
>新增商品分类</a-button >新增商品分类</a-button
> >
@ -249,14 +249,12 @@ export default {
this.form.parentId = value[value.length - 1]; this.form.parentId = value[value.length - 1];
}, },
edit(data) { edit(data) {
console.log(data);
this.drawer.show = true; this.drawer.show = true;
this.drawer.title = "修改分类"; this.drawer.title = "修改分类";
this.form.name = data.name; this.form.name = data.name;
this.form.categoryId = data.id; this.form.categoryId = data.id;
// this.fileList.push // this.fileList.push
if (data.imgUrls.length > 0) { if (data.imgUrls.length > 0) {
console.log(data.imgUrls);
this.form.imgList.push(data.imgUrls[0].url); this.form.imgList.push(data.imgUrls[0].url);
const pic = []; const pic = [];
for (let item of data.imgUrls) { for (let item of data.imgUrls) {
@ -277,10 +275,15 @@ export default {
handleChange(data) { handleChange(data) {
this.fileList = data; this.fileList = data;
this.form.imgList = []; this.form.imgList = [];
if (data[0].status === "done") { data.forEach(ele => {
console.log("-------done-------"); if(ele.status == 'done') {
this.form.imgList.push(data[0].response.data); this.form.imgList.push(ele.response.data)
} }
})
// if (data[0].status === "done") {
// console.log("-------done-------");
// this.form.imgList.push(data[0].response.data);
// }
}, },
selectionChoosed(data) { selectionChoosed(data) {
this.selectedRowKeys = data; this.selectedRowKeys = data;
@ -324,6 +327,13 @@ export default {
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.shop-content {
padding: 13px 13px 13px 0px;
display: flex;
.shop-tree {
padding: 0px 60px 0px 0px
}
}
.table-img { .table-img {
width: 40px; width: 40px;
height: 40px; height: 40px;

@ -25,7 +25,7 @@
> >
<span slot="action" slot-scope="text, row"> <span slot="action" slot-scope="text, row">
<a-space> <a-space>
<a v-if="row.status == 0 && row.appShopPush == 0" class="ant-dropdown-link" @click="push(row.id)"></a> <a v-if="row.status == 1 && row.appShopPush == 0" class="ant-dropdown-link" @click="push(row.id)"></a>
</a-space> </a-space>
</span> </span>
<span slot="mainPhoto" slot-scope="text, row"> <span slot="mainPhoto" slot-scope="text, row">

@ -8,24 +8,30 @@
</a-space> </a-space>
<a-card class="gray-content"> <a-card class="gray-content">
<a-row> <a-row>
<a-col :span="12"> <a-col :span="4">
<div class="tradeStatus"> <div class="tradeStatus">
{{infoData.tradeStatus|tradeStatus}} {{infoData.tradeStatus|tradeStatus}}
</div> </div>
<div style='margin-bottom:10px' v-if="infoData.tradeStatus===2">退</div> <div style='margin-bottom:10px' v-if="infoData.tradeStatus===2">退</div>
<a-space size='large'><a-button type="primary" v-if="infoData.tradeStatus===2"></a-button><a v-if="infoData.tradeStatus===2||infoData.tradeStatus===4"></a></a-space> <a-space size='large'><a-button type="primary" v-if="infoData.tradeStatus===2"></a-button><a v-if="infoData.tradeStatus===2||infoData.tradeStatus===4"></a></a-space>
</a-col> </a-col>
<a-col :span="12" style="margin-top:20px"> <a-col :span="20" style="margin-top:20px">
<a-steps :current="1" style=""> <a-steps :current="
<a-step> infoData.tradeStatus == 0?0 : infoData.tradeStatus == 1?0 :
<!-- <span slot="title">Finished</span> --> infoData.tradeStatus == 2?1 : infoData.tradeStatus == 3?1 :
<template slot="title"> infoData.tradeStatus == 4?2 : infoData.tradeStatus == 5?3 : 3 " style="">
Finished <a-step v-if="infoData.tradeStatus == 1" title="交易超时/已退款" />
</template> <a-step v-else title="买家下单" description="等待买家付款." />
<span slot="description">This is a description.</span> <a-step v-if="infoData.tradeStatus == 3" title="买家付款" description="交易支付成功." />
</a-step> <a-step v-else title="买家付款" description="交易支付成功." />
<a-step title="In Progress" description="This is a 1description." /> <a-step title="商家发货" description="已成功发货." />
<a-step title="Waiting" description="This is a description." /> <a-step v-if="infoData.tradeStatus == 5" title="完成订单" />
<a-step v-else-if="infoData.tradeStatus == 6" title="申请取消" status="error" />
<a-step v-else-if="infoData.tradeStatus == 7" title="申请拒收" />
<a-step v-else-if="infoData.tradeStatus == 8" title="取消订单失败" />
<a-step v-else-if="infoData.tradeStatus == 9" title="取消订单成功" status="finish" />
<a-step v-else-if="infoData.tradeStatus == 10" title="发生拆单" />
<a-step v-else-if="infoData.tradeStatus == 11" title="售后换新" />
</a-steps> </a-steps>
</a-col> </a-col>
</a-row> </a-row>
@ -58,7 +64,7 @@
<span class="box"> <span class="box">
<a-descriptions title="付款信息" :column="1"> <a-descriptions title="付款信息" :column="1">
<a-descriptions-item label="实付金额"> <a-descriptions-item label="实付金额">
{{'¥'+infoData.payPrice}} {{'¥'+(infoData.payPrice*1).toFixed(2)}}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="付款方式"> <a-descriptions-item label="付款方式">
{{infoData.payType | payType}} {{infoData.payType | payType}}
@ -92,14 +98,14 @@
<a-card class="gray-content right"> <a-card class="gray-content right">
<a-descriptions :column="1"> <a-descriptions :column="1">
<a-descriptions-item label="商品总价"> <a-descriptions-item label="商品总价">
{{'¥'+(infoData.payPrice - infoData.freightFee)}} {{'¥'+(infoData.payPrice - infoData.freightFee).toFixed(2)}}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="运费"> <a-descriptions-item label="运费">
{{'¥'+infoData.freightFee}} {{'¥'+(infoData.freightFee*1).toFixed(2)}}
</a-descriptions-item> </a-descriptions-item>
</a-descriptions> </a-descriptions>
<span style='color:#000000D9;font-size:20px;line-height:28px;font-weight:500'>实付款</span> <span style='color:#000000D9;font-size:20px;line-height:28px;font-weight:500'>实付款</span>
<span style='color:#CF1322;font-size:20px;line-height:26px;font-weight:500;font-style: normal;'>{{'¥'+infoData.payPrice}}</span> <span style='color:#CF1322;font-size:20px;line-height:26px;font-weight:500;font-style: normal;'>{{'¥'+(infoData.payPrice*1).toFixed(2)}}</span>
</a-card> </a-card>
</div> </div>
</template> </template>
@ -115,7 +121,7 @@ export default {
detailColumns detailColumns
} }
}, },
mounted() { created() {
if(this.$route.params.id){ if(this.$route.params.id){
this.getInfo(this.$route.params.id) this.getInfo(this.$route.params.id)
} }
@ -184,6 +190,7 @@ export default {
getInfo(id){ getInfo(id){
orderInfo({orderId:id}).then(res=>{ orderInfo({orderId:id}).then(res=>{
this.infoData = res.data this.infoData = res.data
console.log(res.data)
this.skuList = res.data.skuList this.skuList = res.data.skuList
}) })
}, },

@ -35,6 +35,7 @@
:rowKey="(record) => record.id" :rowKey="(record) => record.id"
tableLayout="auto" tableLayout="auto"
:pagination="pagination" :pagination="pagination"
@change="handlerPage"
> >
<div slot="expandedRowRender" slot-scope="record" style="margin: 0"> <div slot="expandedRowRender" slot-scope="record" style="margin: 0">
<a-descriptions title="订单信息"> <a-descriptions title="订单信息">
@ -228,6 +229,12 @@ export default {
detail(data) { detail(data) {
this.$router.push({ name: "OrderDetail", params: { id: data.id } }); this.$router.push({ name: "OrderDetail", params: { id: data.id } });
}, },
//
handlerPage(value) {
this.pagination.current = value.current;
this.pagination.pageSize = value.pageSize;
this.getData()
}
}, },
}; };
</script> </script>

Binary file not shown.
Loading…
Cancel
Save