提交 ec807fc5 authored 作者: 赵明's avatar 赵明

联调更新

上级 88901a12
{ {
"name": "vue-antd-jeecg", "name": "vue-antd-jeecg",
"version": "3.4.3", "version": "3.4.3",
"private": true, "private": true,
......
...@@ -4,7 +4,7 @@ import {UI_CACHE_DB_DICT_DATA } from "@/store/mutation-types" ...@@ -4,7 +4,7 @@ import {UI_CACHE_DB_DICT_DATA } from "@/store/mutation-types"
export const loginUrlCheck = (params)=>postAction("/sys/loginUrlCheck",params); export const loginUrlCheck = (params)=>postAction("/sys/loginUrlCheck",params);
// 首页统计 // 首页统计
const homeDataStatistics = (params)=>getAction("/community/homepage/dataStatistics",params); const homeDataStatistics = (params)=>getAction("/property-central/shop/shopInfo/getIndexSta",params);
const companyNoticeList = (params)=>getAction("/property-company/notice/companyNotice/list",params); const companyNoticeList = (params)=>getAction("/property-company/notice/companyNotice/list",params);
// 报表统计 // 报表统计
...@@ -116,7 +116,7 @@ function getDictItemsFromCache(dictCode) { ...@@ -116,7 +116,7 @@ function getDictItemsFromCache(dictCode) {
return dictItems; return dictItems;
} }
} }
const getPropertyDetailApi= (params)=>getAction("/property-community/order/paymentOrder/queryById",params);
//分利-申请对账 //分利-申请对账
const settlementApi = (params)=>postAction("/property-central/partners/shareBenefit/reconciliation",params); const settlementApi = (params)=>postAction("/property-central/partners/shareBenefit/reconciliation",params);
//分利-对账详情 //分利-对账详情
...@@ -234,7 +234,8 @@ export { ...@@ -234,7 +234,8 @@ export {
auditCommunityComplaintApi, auditCommunityComplaintApi,
settlementApi, settlementApi,
settlementDetailApi, settlementDetailApi,
shareBalanceByDepId shareBalanceByDepId,
getPropertyDetailApi
} }
......
...@@ -58,16 +58,22 @@ export const COMPLAINT_STATUS = [ ...@@ -58,16 +58,22 @@ export const COMPLAINT_STATUS = [
] ]
// 订单状态 // 订单状态
export const ORDER_STATUS = [ export const ORDER_STATUS = [
{label: '已付款', value: 1}, {label: '已付款', value: 'paid'},
{label: '退款驳回', value: 2}, {label: '退款待审核', value: 'refundWaitAudit'},
{label: '退款待审核', value: 3}, {label: '退款驳回', value: 'refundReject'},
{label: '已退款', value: 4}, {label: '退款中', value: 'refundRunning'},
{label: '已完成', value: 5} {label: '已退款', value: 'refunded'}
]
// 订单来源
export const PAYTYPE = [
{label: '业主支付', value: 'owner'},
{label: '游客', value: 'noowner'},
] ]
// 支付方式 // 支付方式
export const PAYMENT_METOD = [ export const PAYMENT_METOD = [
{label: '未支付', value: 1}, {label: '未支付', value: null},
{label: '微信', value: 2}, {label: '微信', value: 'wechat'},
{label: '小程序', value: 'miniapp'},
] ]
//对账状态 //对账状态
export const RECONCILIATION_STATUS = [ export const RECONCILIATION_STATUS = [
......
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<a-form-item label="小区名称">
<j-input placeholder="请输入小区名称" v-model="queryParam.communityName"></j-input>
</a-form-item>
</a-col>
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a-button type="primary" @click="searchQuery">查询</a-button>
<a-button style="margin-left: 8px" @click="searchReset">重置</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<!-- <a-button type="primary" icon="download" @click="handleExportXls('t_property_settled')">导出</a-button> -->
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDels">
<a-icon type="delete"/>
删除关联
</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px">批量操作
<a-icon type="down"/>
</a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i>已选择&nbsp;<a style="font-weight: 600">{{
selectedRowKeys.length
}}</a>&nbsp;&nbsp;
<a style="margin-left: 24px" v-if="selectedRowKeys.length > 0" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="communityCode"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange"
>
<span slot="empowerDate" slot-scope="text, record">
<span>{{ record.empowerBeginDate }}{{ record.empowerEndDate }}</span>
</span>
<span slot="action" slot-scope="text, record">
<a @click="showDeleteConfirm(record)">删除关联</a>
</span>
<!-- 字符串超长截取省略号显示 -->
<span slot="url" slot-scope="text">
<j-ellipsis :value="text" :length="25"/>
</span>
<!-- 字符串超长截取省略号显示-->
<span slot="component" slot-scope="text">
<j-ellipsis :value="text"/>
</span>
</a-table>
</div>
<!-- table区域-end -->
<notice-modal ref="modalForm" @ok="modalFormOk"></notice-modal>
<!-- 删除关联 -->
</a-card>
</template>
<script>
// import { getPropertyListApi, getSystemSubmenu, getSystemSubmenuBatch } from '@/api/api'
import {JeecgListMixin} from '@/mixins/JeecgListMixin'
import NoticeModal from './modules/NoticeModal'
import {deleteAction} from '@/api/manage'
import {filterDictTextByCache} from '@/components/dict/JDictSelectUtil'
const columns = [
{
title: '小区名称',
dataIndex: 'communityName',
key: 'communityName',
align: 'center'
},
{
title: '所属区域',
dataIndex: 'communityArea',
key: 'communityArea',
align: 'center'
},
{
title: '占地面积(㎡)',
dataIndex: 'coverArea',
key: 'coverArea',
align: 'center'
},
{
title: '总栋数',
dataIndex: 'buildingNum',
key: 'buildingNum',
align: 'center'
},
{
title: '房屋数量',
dataIndex: 'houseNum',
key: 'houseNum',
align: 'center'
},
{
title: '联系人',
dataIndex: 'adminName',
key: 'adminName',
align: 'center'
},
{
title: '联系方式',
dataIndex: 'adminPhone',
key: 'adminPhone',
align: 'center'
},
{
title: '创建时间',
dataIndex: 'updateTime',
key: 'updateTime',
align: 'center'
},
{
title: '操作',
dataIndex: 'action',
scopedSlots: {customRender: 'action'},
align: 'center',
width: 150
}
]
export default {
name: 'PermissionListAsync',
mixins: [JeecgListMixin],
components: {
NoticeModal
},
data() {
return {
// 表头
columns: columns,
deteleId: '',
url: {
list: "/property-central/shop/shopCommunity/getShopCommunity",
delete: '/property-central/shop/shopCommunity/deleteByCommunityCode',
deleteBatch: '/property-central/shop/shopCommunity/deleteBatch'
},
}
},
methods: {
handlePerssion(roleId) {
this.$refs.modalUserRole.show(roleId);
},
showDeleteConfirm(record) {
var that = this;
this.$confirm({
title: '确定是否删除关联小区?',
okText: '删除',
okType: 'danger',
cancelText: '否',
onOk() {
return deleteAction(that.url.delete, {communityCode: record.communityCode}).then((res) => {
if (res.success) {
that.$message.success(res.message)
that.searchQuery()
}
})
},
onCancel() {
console.log('Cancel');
},
});
},
batchDels() {
if (this.selectedRowKeys.length <= 0) {
this.$message.warning('请选择一条记录!');
return;
} else {
var ids = "";
for (var a = 0; a < this.selectedRowKeys.length; a++) {
ids += this.selectedRowKeys[a] + ",";
}
var that = this;
this.$confirm({
title: "确认删除",
content: "是否删除选中数据?",
onOk: function () {
that.loading = true;
deleteAction(that.url.deleteBatch, {communityCodes: ids}).then((res) => {
if (res.success) {
//重新计算分页问题
that.reCalculatePage(that.selectedRowKeys.length)
that.$message.success(res.message);
that.loadData();
that.onClearSelected();
} else {
that.$message.warning(res.message);
}
}).finally(() => {
that.loading = false;
});
}
});
}
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="true">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="12">
<a-form-model-item label="小区名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="communityName">
<a-input v-model="model.communityName" placeholder="请输入小区名称"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="用途" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="useTo">
<a-select style="width: 100%" v-model="model.useTo" placeholder="请选择用途">
<a-select-option v-for="item in dictOptions" :key="item.value" :value="item.value">{{item.label}}</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="所属地区" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="communityArea">
<a-input v-model="model.communityArea" placeholder="请输入所属地区"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="详细地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="addressInfo">
<a-input v-model="model.addressInfo" placeholder="请输入详细地址"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="建成日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="completedDate">
<j-date placeholder="请选择建成日期" v-model="model.completedDate" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="占地面积" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="coverArea">
<a-input v-model="model.coverArea" placeholder="请输入占地面积" addon-after="㎡" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="楼栋数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="buildingNum">
<a-input v-model="model.buildingNum" placeholder="请输入楼栋数量" addon-after="栋" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="房屋数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="houseNum">
<a-input v-model="model.houseNum" placeholder="请输入房屋数量" addon-after="间" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="停车位" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="parkingSpace">
<a-input v-model="model.parkingSpace" placeholder="请输入停车位" addon-after="个" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="充电桩" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="chargingStation">
<a-input type="number" v-model="model.chargingStation" placeholder="请输入充电桩" addon-after="个" ></a-input>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
<a-form-model-item label="小区图片" :labelCol="{ xs:{ span: 24 }, sm:{ span: 3 } }" :wrapperCol="wrapperCol" prop="communityImage">
<j-image-upload :isMultiple="true" text="点击上传" bizPath="scott/pic" v-model="model.communityImage"></j-image-upload>
<p style="line-height:1;margin:0">建议尺寸640*320,小于10M的JPG、PNG格式图片,可上传多张</p>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="小区简介" :labelCol="{ xs:{ span: 24 }, sm:{ span: 3 } }" :wrapperCol="wrapperCol" prop="communityIntro">
<a-textarea placeholder="小区简介" v-model="model.communityIntro" allow-clear />
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-model-item label="小区管理员" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="adminName">
<a-input v-model="model.adminName" placeholder="请输入小区管理员"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="管理员联系电话" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="adminPhone">
<a-input v-model="model.adminPhone" placeholder="请输入管理员联系电话"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="管理员登录密码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="adminPassword">
<a-input v-model="model.adminPassword" placeholder="请输入管理员登录密码"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="访问域名前缀" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="accessAddress"
>
<a-input v-model="model.accessAddress" placeholder="请输入访问域名前缀"
addon-after=".group.hjxbc.cn"></a-input>
<p v-if="model.accessAddress">访问域名:{{ model.accessAddress }}.group.hjxbc.cn</p>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
<a-form-model-item label="管理员头像" :labelCol="{ xs:{ span: 24 }, sm:{ span: 3 } }" :wrapperCol="wrapperCol" prop="adminAvatar">
<j-image-upload :isMultiple="false" text="点击上传" bizPath="scott/pic" v-model="model.adminAvatar"></j-image-upload>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
import {ajaxGetDictItems,getDictItemsFromCache} from '@/api/api'
import { isMobile,alphanumeric } from '@/utils/validate'
export default {
name: 'PropertyChargruleForm',
components: {
},
props: {
//表单禁用
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
const validateToNextPhone = (rule, value, callback)=> {
if (value && isMobile(value)) {
callback();
} else {
callback('请输入正确的联系人电话!');
}
}
const isAlphanumeric = (rule, value, callback) => {
if (value && alphanumeric(value)) {
callback()
} else {
callback('请输入带字母的域名前缀')
}
}
return {
model:{
communityName: '',
useTo: '',
communityArea: '',
addressInfo: '',
completedDate: '',
coverArea: '',
buildingNum: '',
houseNum: '',
parkingSpace: '',
chargingStation: '',
communityImage: '',
communityIntro: '',
adminName: '',
adminPhone: '',
adminPassword: '',
adminAvatar: '',
accessAddress: '',
},
labelCol: {
xs: { span: 24 },
sm: { span: 6 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
communityName: [{ required: true, message: '请输入小区名称', trigger: 'blur' }],
useTo: [{ required: true, message: '请选择用途', trigger: 'change' }],
communityArea: [{ required: true, message: '请输入所属地区', trigger: 'blur' }],
coverArea: [{ required: true, message: '请输入占地面积', trigger: 'blur' }],
buildingNum: [{ required: true, message: '请输入楼栋数量', trigger: 'blur' }],
houseNum: [{ required: true, message: '请输入房屋数量', trigger: 'blur' }],
communityImage: [{ required: true, message: '请至少上传一张小区图片', trigger: 'change' }],
adminName: [{ required: true, message: '请输入小区管理员', trigger: 'blur' }],
adminPhone: [
{ required: true, message: '请输入管理员联系电话', trigger: 'blur' },
{ validator: validateToNextPhone }
],
adminPassword: [{ required: true, message: '请输入管理员登录密码', trigger: 'blur' }],
accessAddress: [
{ required: true, message: '请输入访问域名前缀', trigger: 'blur' },
{ validator: isAlphanumeric },
],
adminAvatar: [{ required: true, message: '请上传管理员头像', trigger: 'blur' }]
},
url: {
add: "/property-central/shop/shopCommunity/add"
},
dictOptions: [
{label: '商用', value: 1},
{label: '普通住宅', value: 2},
{label: '商住合一', value: 3}
]
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//备份model原始值
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
ruleNumberInput(event) {
let rateValue = event.target.value.replace(/[^\d]/g,"");//清除"数字"和"."和"-"以外的字符
this.model['empowerDays'] = rateValue
},
add () {
this.edit(this.modelDefault);
},
edit (record) {
console.log(record)
this.model = Object.assign({}, record);
this.visible = true;
},
submitForm () {
const that = this;
// 触发表单验证
this.$refs.form.validate(valid => {
console.log(this.model)
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
httpurl+=this.url.add;
method = 'post';
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>
\ No newline at end of file
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<a-button class="bbtn" @click="updateCurrentDepart">小区查找</a-button>
<property-settled-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></property-settled-form>
<login-switch-house ref="loginSelect" :closable="true" title="小区查找" @success="loginSelectOk" ></login-switch-house>
</j-modal>
</template>
<script>
import PropertySettledForm from './NoticeForm'
import { httpAction, getAction } from '@/api/manage'
import LoginSwitchHouse from '@/components/tools/LoginSwitchHouse'
export default {
name: 'PropertySettledModal',
components: {
PropertySettledForm,
LoginSwitchHouse
},
data () {
return {
title:'',
width: '70%',
visible: false,
disableSubmit: true
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
async updateCurrentDepart(){
let { result } = await getAction('/property-company/community/companyCommunity/getList',{ })
this.$refs.loginSelect.show(result)
},
loginSelectOk(res) {
this.$refs.realForm.edit(res);
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>
<style lang="less">
.bbtn{
position: absolute;
right: 120px;
top: 12px;
z-index: 333;
}
</style>
\ No newline at end of file
<!--
* @Author: zm
* @Date: 2023-08-20 10:54:31
* @Descripttion:
-->
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<a-form-item label="输入搜索">
<j-input placeholder="请输入单号" v-model="queryParam.balanceNum"></j-input>
</a-form-item>
</a-col>
<a-col :md="4" :sm="8">
<a-form-item label="订单时间:">
<a-date-picker placeholder="订单时间" valueFormat="YYYY-MM-DD 00:00:00" v-model="queryParam.balanceDate"></a-date-picker>
</a-form-item>
<span slot="balanceStatus" slot-scope="text, record">
<a-tag v-if="record.balanceStatus === 1">未对账</a-tag>
<a-tag v-else-if="record.balanceStatus === 2">对账待审核</a-tag>
<a-tag v-else-if="record.balanceStatus === 3">已对账</a-tag>
<a-tag v-else-if="record.balanceStatus === 4">对账驳回</a-tag>
</span>
</a-col>
</a-row>
</a-form>
</div>
<!-- table区域-begin -->
<div>
<a-table ref="table" size="middle" :scroll="{x:true}" bordered rowKey="id" :columns="columns"
:dataSource="dataSource" :pagination="ipagination" :loading="loading" class="j-table-force-nowrap"
@change="handleTableChange">
</a-table>
</div>
</a-card>
</template>
<script>
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
export default {
name: 'CommunityLlist',
mixins: [JeecgListMixin, mixinDevice],
data() {
return {
columns: [
{
title: '序号',
align: 'center',
dataIndex: 'num',
},
{
title: '结算单号',
align: 'center',
dataIndex: 'balanceNum',
},
{
title: '提交时间',
align: 'center',
dataIndex: 'balanceDate',
},
{
title: '提交人',
align: 'center',
dataIndex: 'createBy',
},
{
title: '结算总金额',
align: 'center',
dataIndex: 'balanceMoney',
},
{
title: '结算方式',
align: 'center',
dataIndex: 'balanceWay',
},
{
title: '结算状态',
align: 'center',
dataIndex: 'balanceStatus',
scopedSlots: { customRender: 'balanceStatus' },
key: 'balanceStatus',
},
{
title: '备注',
dataIndex: 'remarks',
align: 'center',
},
],
dataSource: [],
url: {
list: '/property-central/partners/shareBalance/list?balanceStatus=3',
},
}
},
methods: {},
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
<!-- <img class="icon" src="~@/assets/guaz.png" alt=""> --> <!-- <img class="icon" src="~@/assets/guaz.png" alt=""> -->
<div> <div>
<p style="color:#666;margin-bottom:5px;">关联小区数量</p> <p style="color:#666;margin-bottom:5px;">关联小区数量</p>
<p style="margin-bottom:0;color:#333;font-size:28px;line-height:1;">{{pageForm.roomNum}}</p> <p style="margin-bottom:0;color:#333;font-size:28px;line-height:1;">{{pageForm.bindCom}}</p>
<span v-if="pageForm.roomNum > 0"><a-icon type="arrow-up" <span v-if="pageForm.bindCom > 0"><a-icon type="arrow-up"
color="#1890ff" />{{ pageForm.pageForm }}</span> color="#1890ff" />{{ pageForm.bindCom }}</span>
</div> </div>
</div> </div>
</a-col> </a-col>
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
<div class="icon" style="background-color:#7262fd;"><a-icon type="bar-chart" /></div> <div class="icon" style="background-color:#7262fd;"><a-icon type="bar-chart" /></div>
<div> <div>
<p style="color:#666;margin-bottom:5px;">累积交易金额</p> <p style="color:#666;margin-bottom:5px;">累积交易金额</p>
<p style="margin-bottom:0;color:#333;font-size:28px;line-height:1;">¥{{pageForm.roomNum}}</p> <p style="margin-bottom:0;color:#333;font-size:28px;line-height:1;">¥{{pageForm.totalMoney}}</p>
</div> </div>
</div> </div>
</a-col> </a-col>
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
<div class="icon" style="background-color:#ffaa00;"><a-icon type="bar-chart" /></div> <div class="icon" style="background-color:#ffaa00;"><a-icon type="bar-chart" /></div>
<div> <div>
<p style="color:#666;margin-bottom:5px;">待对账金额</p> <p style="color:#666;margin-bottom:5px;">待对账金额</p>
<p style="margin-bottom:0;color:#333;font-size:28px;line-height:1;">¥{{pageForm.buildingNum}}</p> <p style="margin-bottom:0;color:#333;font-size:28px;line-height:1;">¥{{pageForm.notBalance}}</p>
</div> </div>
</div> </div>
</a-col> </a-col>
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
<div class="icon" style="background-color:#52c41a;"><a-icon type="pay-circle" /></div> <div class="icon" style="background-color:#52c41a;"><a-icon type="pay-circle" /></div>
<div> <div>
<p style="color:#666;margin-bottom:5px;">待结算金额</p> <p style="color:#666;margin-bottom:5px;">待结算金额</p>
<p style="margin-bottom:0;color:#333;font-size:28px;line-height:1;">¥{{pageForm.propertyYearFee}}</p> <p style="margin-bottom:0;color:#333;font-size:28px;line-height:1;">¥{{pageForm.notBenefit}}</p>
</div> </div>
</div> </div>
</a-col> </a-col>
...@@ -113,7 +113,7 @@ export default { ...@@ -113,7 +113,7 @@ export default {
}, },
methods: { methods: {
async onDetail(typeCode) { async onDetail(typeCode) {
let { result } = await homeDataStatistics({ typeCode: typeCode }) let { result } = await homeDataStatistics({ })
this.pageForm = { ...result } this.pageForm = { ...result }
this.loading = !this.loading this.loading = !this.loading
}, },
...@@ -128,11 +128,11 @@ export default { ...@@ -128,11 +128,11 @@ export default {
this.clickQRcode() this.clickQRcode()
} else if (type == 2) { } else if (type == 2) {
this.$router.push({ this.$router.push({
path: '/information/owner', path: '/paymentorder/payment',
}) })
} else if (type == 3) { } else if (type == 3) {
this.$router.push({ this.$router.push({
path: '/information/house', path: '/settlement/SettlementDetails?type=add',
}) })
} else if (type == 4) { } else if (type == 4) {
this.$router.push({ this.$router.push({
......
<template> <template>
<div class="">
<div class="map-box"> <a-row :gutter="24">
<h3 class="box-title">社区分布数量图</h3> <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '20px' }">
<div ref="mapEcharts" class="map-echart" style="height: 500px"></div> <div class="t-box">
<h3 class="box-title">月成交订单数量</h3>
<div>
<line-chart-multid :dataSource="dayData" :fields="dayFields" style="padding: 0;" />
</div>
</div>
</a-col>
<a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '20px' }">
<div class="t-box">
<h3 class="box-title">月成交金额</h3>
<line-chart-multid :dataSource="dayData1" :fields="dayFields1" style="padding: 0;" />
</div>
</a-col>
</a-row>
</div> </div>
</template> </template>
<script> <script>
import * as echarts from 'echarts'
import chinaData from '@/assets/china.json' //地图包
import ChartCard from '@/components/ChartCard'
import ACol from 'ant-design-vue/es/grid/Col'
import ATooltip from 'ant-design-vue/es/tooltip/Tooltip'
import MiniArea from '@/components/chart/MiniArea'
import MiniBar from '@/components/chart/MiniBar'
import MiniProgress from '@/components/chart/MiniProgress'
import RankList from '@/components/chart/RankList'
import Bar from '@/components/chart/Bar' import Bar from '@/components/chart/Bar'
import LineChartMultid from '@/components/chart/LineChartMultid' import LineChartMultid from '@/components/chart/LineChartMultid'
import HeadInfo from '@/components/tools/HeadInfo.vue' import vueSeamlessScroll from 'vue-seamless-scroll'
import { getAction } from '@api/manage'
import Trend from '@/components/Trend'
// import { getDataStatisticsApi, getLoginfo, getVisitInfo, auditPropertyApi } from '@/api/api'
const rankList = []
for (let i = 0; i < 7; i++) {
rankList.push({
name: '白鹭岛 ' + (i + 1) + ' 号店',
total: 1234.56 - i * 100,
})
}
const barData = []
for (let i = 0; i < 12; i += 1) {
barData.push({
x: `${i + 1}月`,
y: Math.floor(Math.random() * 1000) + 200,
})
}
export default { export default {
name: 'IndexChart', name: 'statistical',
components: { components: {
ATooltip,
ACol,
ChartCard,
MiniArea,
MiniBar,
MiniProgress,
RankList,
Bar, Bar,
Trend,
LineChartMultid, LineChartMultid,
HeadInfo, vueSeamlessScroll,
}, },
data() { data() {
return { return {
detail:{},
mapData: [], time:'',
waitAuditList: [],
loading: true, loading: true,
center: null, dayFields: ['月成交订单数量'],
rankList, dayData: [],
barData, dayFields1: ['月成订单交金额'],
loginfo: {}, dayData1: [],
visitFields: ['ip', 'visit'],
visitInfo: [],
indicator: <a-icon type="loading" style="font-size: 24px" spin />,
} }
}, },
created() { created() {
this.searchQuery()
setTimeout(() => { setTimeout(() => {
this.loading = !this.loading this.loading = !this.loading
}, 1000) }, 1000)
// this.initLogInfo()
this.getDataStatistics()
}, },
methods: { computed: {
initLogInfo() { defineScroll() {
getLoginfo(null).then((res) => { return {
if (res.success) { step: 0.5, // 数值越大速度滚动越快
Object.keys(res.result).forEach((key) => { limitMoveNum: 2, // 开始无缝滚动的数据量 this.dataList.length
res.result[key] = res.result[key] + '' hoverStop: true, // 是否开启鼠标悬停stop
}) direction: 1, // 0向下 1向上 2向左 3向右
this.loginfo = res.result openWatch: true, // 开启数据实时监控刷新dom
} singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
}) singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
getVisitInfo().then((res) => { waitTime: 1000, // 单步运动停止的时间(默认值1000ms)
if (res.success) { }
this.visitInfo = res.result
}
})
}, },
async getDataStatistics() { },
// let { result } = await getDataStatisticsApi() methods: {
let result= { onChangeData(date, dateString) {
propertySettledList: [ if (dateString){
{ this.time = dateString.slice(0,4)+dateString.slice(5,7)
accessAddress: "hanxingkeji", }else {
addressInfo: "湖北省十堰市郧阳区茶店镇天马大道385号", this.time = ''
adminLoginName: "18165711227",
adminPassword: "123456",
auditStatus: "auditPass",
chargingStandardId: "1674008710072737794",
cityCode: "420300",
cityName: "十堰市",
contactName: "王国学",
contactPhone: "13812345678",
contractUrl: "temp/4081686986887_.pic_1687950032469.jpg",
countyCode: "420304",
countyName: "郧阳区",
createBy: "管理员",
createTime: "2023-06-28 00:00:00",
creditCode: "91420304MA49KXW724",
}
]
} }
this.waitAuditList = result.waitAuditList
this.mapData =
result.propertySettledList.map((item) => {
return {
name: item.propertyName,
value: [item.longitude, item.latitude],
text: { ...item },
}
}) || []
this.mapEcharts()
}, },
toOperation(record) { insertStr(soure, start, newStr){
this.$router.push({ return soure.slice(0, start) + newStr + soure.slice(start);
path: '/settled/propertyDetails?type=audit&id=' + record.id,
})
}, },
//地图 searchQuery() {
mapEcharts() { getAction('/property-community/order/paymentOrder/shareBoard?platformType=shop&date='+this.time, ).then((res) => {
// 获取地图数据 if (res.success) {
// 使用数据注册地图 this.detail = res.result
echarts.registerMap('china', chinaData) this.dayData = []
this.$nextTick(() => { this.dayData1 = []
// 初始化地图 res.result.shareByMonth.map((item) => {
this.map = echarts.init(this.$refs['mapEcharts']) this.dayData1.push({
// 设置基础配置项 type: this.insertStr(item.MONTH,4,'-'),
const option = { 月成订单交金额:'¥'+item.shareMoney
areaColor: '#97bff7', })
// 悬浮窗 })
tooltip: { res.result.orderCountByMonth.map((item) => {
trigger: 'item', this.dayData.push({
formatter: function (params) { type: this.insertStr(item.MONTH,4,'-'),
return `物业名称:${params.data.name}</br>统一社会信用代码:${ 月成交订单数量:item.orderCount
params.data.text.creditCode })
}</br>注册地址:${params.data.text.cityName}${params.data.text.countyName}</br>详细地址:${ })
params.data.text.addressInfo
}</br>联系人:${params.data.text.contactName}</br>联系电话:${
params.data.text.contactPhone
}</br>授权物业数量:${params.data.text.ontrialCommunityNum || 0}`
},
borderColor: '#fff',
textStyle: {
//color: "#fff",
fontSize: '13',
},
},
geo: {
type: 'map',
map: 'china',
//height: "100%",
top: 0,
width: '50%',
roam: true,
zoom: 1,
scaleLimit: {
//滚轮缩放的极限控制
min: 0.6, //最小的缩放值
max: 20,
},
// 地图区域的样式设置
itemStyle: {
borderColor: '#fff',
borderWidth: 1,
areaColor: '#c1dbff',
},
},
// 要显示的散点数据
series: [
{
name: '社区分布数量图',
type: 'scatter',
coordinateSystem: 'geo', //设置坐标系为 geo
data: this.mapData,
itemStyle: {
color: function (params) {
//根据不同数据显示不同颜色的标记
if (params.data.text.customerAccount >= 100) {
return '#67c23a'
} else {
return '#409eff'
}
},
},
},
],
} }
// 将配置应用到地图上
this.map.setOption(option)
}) })
}, },
}, },
...@@ -210,76 +104,76 @@ export default { ...@@ -210,76 +104,76 @@ export default {
<style lang="less" scoped> <style lang="less" scoped>
.page-header-index-wide { .page-header-index-wide {
padding: 16px; padding: 16px;
.query-box {
background: #fff;
padding: 20px;
margin-bottom: 20px;
}
.data-box {
display: flex;
margin-bottom: 20px;
justify-content: space-between;
}
.statistics { .statistics {
// flex: none;
background: #fff; background: #fff;
width: 100%; width: 13.5%;
height: 90px;
box-sizing: border-box; box-sizing: border-box;
border: 1px solid #e0dfdf; border: 1px solid #e0dfdf;
display: flex; padding: 25px 10px;
align-items: center; max-height: 100px;
padding-left: 20px; text-align: center;
.icon {
width: 60px;
height: 60px;
border-radius: 60px;
margin-right: 12px;
display: flex;
text-align: center;
align-items: center;
justify-content: center;
.anticon {
font-size: 50px;
}
}
span {
font-size: 14px;
color: #1890ff;
}
} }
} }
.map-box { .t-box {
background-color: #fff; background: #fff;
padding: 20px; padding: 15px;
border: 1px solid #e0dfdf;
.dealt-with { height: 340px;
width: 100%;
max-width: 100%;
overflow-x: auto;
display: flex;
.box {
border: 1px solid #f5f5f5;
}
}
} }
.box-title { .box-title {
font-weight: bold; font-weight: bold;
padding-bottom: 10px; margin-bottom: 15px;
margin-bottom: 10px; display: inline-block;
border-bottom: 1px solid #f1f1f1; padding-left: 10px;
border-left: 3px solid #1890ff;
height: 20px;
line-height: 20px;
} }
.wait-box { .order {
background-color: #fff; margin: 0 10px;
padding: 20px; .order-title {
.content { background: #fafafa;
width: 100%; height: 40px;
//height: 400px; line-height: 40px;
max-height: 400px; display: flex;
overflow-y: auto; border-left: 1px solid #e8e8e8;
span {
width: 25%;
border-right: 1px solid #e8e8e8;
border-top: 1px solid #e8e8e8;
text-align: center;
font-weight: bold;
}
}
.seamless-warp {
border: 1px solid #e8e8e8;
border-right: none;
.item { .item {
padding: 10px 15px; height: 40px;
box-sizing: border-box; line-height: 40px;
border-radius: 5px; display: flex;
border: 1px solid #f1f1f1; span {
width: 31.33%; width: 25%;
margin: 1%; border-right: 1px solid #e8e8e8;
float: left; border-top: 1px solid #e8e8e8;
p { text-align: center;
margin-bottom: 0.4em;
} }
} }
} }
} }
</style> .seamless-warp {
\ No newline at end of file height: 220px;
overflow: hidden;
}
</style>
...@@ -6,12 +6,12 @@ ...@@ -6,12 +6,12 @@
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :md="6" :sm="8"> <a-col :md="6" :sm="8">
<a-form-item label="输入搜索"> <a-form-item label="输入搜索">
<j-input placeholder="订单编号/商品货号" v-model="queryParam.id"></j-input> <j-input placeholder="订单编号/商品货号" v-model="queryParam.orderNo"></j-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="6" :sm="8"> <a-col :md="6" :sm="8">
<a-form-item label="收货人"> <a-form-item label="收货人">
<j-input placeholder="收货人" v-model="queryParam.userAccount"></j-input> <j-input placeholder="收货人" v-model="queryParam.ownerName"></j-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="7" :sm="10"> <a-col :md="7" :sm="10">
...@@ -34,10 +34,9 @@ ...@@ -34,10 +34,9 @@
<a-table ref="table" size="middle" :scroll="{x:true}" bordered rowKey="id" :columns="columns" <a-table ref="table" size="middle" :scroll="{x:true}" bordered rowKey="id" :columns="columns"
:dataSource="dataSource" :pagination="ipagination" :loading="loading" class="j-table-force-nowrap" :dataSource="dataSource" :pagination="ipagination" :loading="loading" class="j-table-force-nowrap"
@change="handleTableChange"> @change="handleTableChange">
<span slot="action" slot-scope="text, record"> <span slot="action" slot-scope="text, record">
<a @click="onDetail(record.id, 'detail')">详情</a> <a @click="onDetail(record.id, 'detail')">详情</a>
<template v-if="record.orderStatus === 1"> <template v-if="(record.orderStatus === 'paid'|| record.orderStatus === 'refundReject')&& record.canRefund === 'can'">
<a-divider type="vertical"/> <a-divider type="vertical"/>
<a @click="onDetail(record.id, 'audit')">申请退款</a> <a @click="onDetail(record.id, 'audit')">申请退款</a>
</template> </template>
...@@ -50,15 +49,15 @@ ...@@ -50,15 +49,15 @@
<script> <script>
import { JeecgListMixin } from '@/mixins/JeecgListMixin' import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import {ORDER_STATUS,PAYMENT_METOD, filterDictTextByStatic} from '@/assets/static.js' import {PAYTYPE,ORDER_STATUS,PAYMENT_METOD, filterDictTextByStatic} from '@/assets/static.js'
// import NoticeModal from "@views/property/property/modules/NoticeModal.vue"; // import NoticeModal from "@views/property/property/modules/NoticeModal.vue";
// import CPopupOnlReport from "@comp/custom/modal/JPopupOnlReport.vue"; // import CPopupOnlReport from "@comp/custom/modal/JPopupOnlReport.vue";
const columns = [ const columns = [
{ {
title: '订单编号', title: '订单编号',
dataIndex: 'id', dataIndex: 'orderNo',
key: 'id', key: 'orderNo',
align: 'center', align: 'center',
}, },
{ {
...@@ -69,8 +68,8 @@ const columns = [ ...@@ -69,8 +68,8 @@ const columns = [
}, },
{ {
title: '用户账号', title: '用户账号',
dataIndex: 'userAccount', dataIndex: 'ownerName',
key: 'userAccount', key: 'ownerName',
align: 'center', align: 'center',
}, },
{ {
...@@ -81,8 +80,8 @@ const columns = [ ...@@ -81,8 +80,8 @@ const columns = [
}, },
{ {
title: '支付方式', title: '支付方式',
dataIndex: 'paymentMethod', dataIndex: 'paySource',
key: 'paymentMethod', key: 'paySource',
align: 'center', align: 'center',
customRender: function(text) { customRender: function(text) {
return filterDictTextByStatic(PAYMENT_METOD, text); return filterDictTextByStatic(PAYMENT_METOD, text);
...@@ -90,9 +89,12 @@ const columns = [ ...@@ -90,9 +89,12 @@ const columns = [
}, },
{ {
title: '订单来源', title: '订单来源',
dataIndex: 'orderSource', dataIndex: 'payType',
key: 'orderSource', key: 'payType',
align: 'center', align: 'center',
customRender: function(text) {
return filterDictTextByStatic(PAYTYPE, text);
}
}, },
{ {
title: '订单状态', title: '订单状态',
...@@ -105,20 +107,20 @@ const columns = [ ...@@ -105,20 +107,20 @@ const columns = [
}, },
{ {
title: '退款说明', title: '退款说明',
dataIndex: 'refundInstructions', dataIndex: 'refundDes',
key: 'refundInstructions', key: 'refundDes',
align: 'center', align: 'center',
}, },
{ {
title: '所属平台', title: '所属平台',
dataIndex: 'ownPlatform', dataIndex: 'propertyName',
key: 'ownPlatform', key: 'propertyName',
align: 'center', align: 'center',
}, },
{ {
title: '所属小区', title: '所属小区',
dataIndex: 'propertyName', dataIndex: 'communityName',
key: 'propertyName', key: 'communityName',
align: 'center', align: 'center',
}, },
{ {
...@@ -143,33 +145,9 @@ export default { ...@@ -143,33 +145,9 @@ export default {
showSizeChanger: true, showSizeChanger: true,
}, },
url: { url: {
list: '/property-central/property/communityReconciliation/list', list: '/property-community/order/paymentOrder/list?platformType=shop',
}, },
dataSource:[ dataSource:[
{
id: 1,
userAccount: 'admin',
orderAmount: 100,
orderSource: '微信',
paymentMethod: 1,
orderStatus: 1,
refundInstructions: '退款说明',
ownPlatform: '微信',
propertyName: '小区名称',
createTime: '2018-01-01'
},
{
id: 2,
userAccount: 'admin',
orderAmount: 100,
orderSource: '微信',
paymentMethod: 1,
orderStatus: 1,
refundInstructions: '退款说明',
ownPlatform: '微信',
propertyName: '小区名称',
createTime: '2018-01-01'
},
] ]
} }
}, },
......
<template> <template>
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<div class="title-top"> <div class="title-top" v-if="dataSource.length > 0">
<h3>当前订单状态:{{status(dataSource[0].orderStatus)}}</h3> <h3>当前订单状态:{{status(dataSource)}}</h3>
<div class="button"> <div class="button">
<a-button @click="onCancel">返回</a-button> <a-button @click="onCancel">返回</a-button>
<a-button type="danger" @click="onExamine(2)" v-if="pageType == 'audit'">退款</a-button> <a-button type="danger" @click="onExamine(2)" v-if="pageType == 'audit'">退款</a-button>
...@@ -21,17 +21,33 @@ ...@@ -21,17 +21,33 @@
<a-card title="操作信息"> <a-card title="操作信息">
<a-row> <a-row>
<div> <div>
<a-table ref="table" size="middle" bordered :columns="columns2" :pagination="false" <a-table ref="table" size="middle" bordered :columns="columns2" :pagination="false" rowKey="id"
:dataSource="dataSource" :loading="loading" class="j-table-force-nowrap" > :dataSource="dataSource" :loading="loading" class="j-table-force-nowrap" >
<span slot="paymentStatus" slot-scope="text, record">
<template v-if="record.paymentStatus === 'success'">成功</template>
</span>
</a-table> </a-table>
</div> </div>
</a-row> </a-row>
</a-card> </a-card>
<!-- table区域-end -->
<a-modal centered title="退款确认" :visible="visible" :confirm-loading="confirmLoadings" @ok="handleOk"
@cancel="handleCancel" width="60%">
<a-form>
<a-row>
<a-col :span="24">
<a-form-model-item label="退款备注" :labelCol="labelCol" :wrapperCol="wrapperCol" style="width: 100%;">
<a-textarea v-model="model.refundDes" :auto-size="{ minRows: 4, maxRows: 6 }" />
</a-form-model-item>
</a-col>
</a-row>
</a-form>
</a-modal>
</a-spin> </a-spin>
</template> </template>
<script> <script>
import {filterDictTextByStatic, ORDER_STATUS, PAYMENT_METOD} from "@assets/static"; import {PAYTYPE,ORDER_STATUS,PAYMENT_METOD, filterDictTextByStatic} from '@/assets/static.js'
const mapZoom = [5, 8, 10, 12] const mapZoom = [5, 8, 10, 12]
let timer = null let timer = null
...@@ -43,32 +59,32 @@ import { isMobile, validateCreditCode } from '@/utils/validate' ...@@ -43,32 +59,32 @@ import { isMobile, validateCreditCode } from '@/utils/validate'
const columns = [ const columns = [
{ {
title: '订单编号', title: '订单编号',
dataIndex: 'id', dataIndex: 'orderNo',
key: 'id', key: 'orderNo',
align: 'center', align: 'center',
}, },
{ {
title: '所属小区', title: '所属小区',
dataIndex: 'propertyName', dataIndex: 'communityName',
key: 'propertyName', key: 'communityName',
align: 'center', align: 'center',
}, },
{ {
title: '业主名称', title: '业主名称',
dataIndex: 'userName', dataIndex: 'partnersName',
key: 'userName', key: 'partnersName',
align: 'center', align: 'center',
}, },
{ {
title: '用户账号', title: '用户账号',
dataIndex: 'userAccount', dataIndex: 'ownerName',
key: 'userAccount', key: 'ownerName',
align: 'center', align: 'center',
}, },
{ {
title: '支付方式', title: '支付方式',
dataIndex: 'paymentMethod', dataIndex: 'paySource',
key: 'paymentMethod', key: 'paySource',
align: 'center', align: 'center',
customRender: function(text) { customRender: function(text) {
return filterDictTextByStatic(PAYMENT_METOD, text); return filterDictTextByStatic(PAYMENT_METOD, text);
...@@ -76,9 +92,12 @@ const columns = [ ...@@ -76,9 +92,12 @@ const columns = [
}, },
{ {
title: '订单来源', title: '订单来源',
dataIndex: 'orderSource', dataIndex: 'payType',
key: 'orderSource', key: 'payType',
align: 'center', align: 'center',
customRender: function(text) {
return filterDictTextByStatic(PAYTYPE, text);
}
} }
] ]
const columns2 = [ const columns2 = [
...@@ -90,8 +109,8 @@ const columns2 = [ ...@@ -90,8 +109,8 @@ const columns2 = [
}, },
{ {
title: '操作时间', title: '操作时间',
dataIndex: 'creditCode', dataIndex: 'createTime',
key: 'creditCode', key: 'createTime',
align: 'center', align: 'center',
}, },
{ {
...@@ -106,13 +125,14 @@ const columns2 = [ ...@@ -106,13 +125,14 @@ const columns2 = [
{ {
title: '付款状态', title: '付款状态',
dataIndex: 'paymentStatus', dataIndex: 'paymentStatus',
scopedSlots: { customRender: 'paymentStatus' },
key: 'paymentStatus', key: 'paymentStatus',
align: 'center', align: 'center',
}, },
{ {
title: '备注', title: '备注',
dataIndex: 'refundInstructions', dataIndex: 'refundDes',
key: 'refundInstructions', key: 'refundDes',
align: 'center', align: 'center',
} }
] ]
...@@ -125,31 +145,36 @@ export default { ...@@ -125,31 +145,36 @@ export default {
title: '', title: '',
pageType: '', pageType: '',
confirmLoading: false, confirmLoading: false,
confirmLoadings: false,
costList: [], costList: [],
mapRef: null, mapRef: null,
visible:false,
model:{
refundDes:'',
id:''
},
url: {
refundOrder:'/property-community/order/paymentOrder/refundOrder'
},
labelCol: {
xs: { span: 24 },
sm: { span: 6 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
columns: columns, columns: columns,
columns2: columns2, columns2: columns2,
loading: false, loading: false,
dataSource: [ dataSource: [
{
id: 1,
userAccount: 'admin',
orderAmount: 100,
orderSource: '微信',
paymentMethod: 1,
orderStatus: 1,
refundInstructions: '退款说明',
ownPlatform: '微信',
propertyName: '小区名称',
createTime: '2018-01-01'
},
] ]
} }
}, },
created() { created() {
this.pageType = this.$route.query.type this.pageType = this.$route.query.type
this.getPageDetail()
}, },
methods: { methods: {
async onLoadCostList() { async onLoadCostList() {
...@@ -158,25 +183,44 @@ export default { ...@@ -158,25 +183,44 @@ export default {
}, },
async getPageDetail() { async getPageDetail() {
let { result } = await getPropertyDetailApi({ id: this.$route.query.id }) let { result } = await getPropertyDetailApi({ id: this.$route.query.id })
this.edit(result) this.dataSource.push(result)
if (result.provinceName) {
this.getLongitude(
result.provinceName,
result.provinceName + result.cityName + result.countyName + result.addressInfo,
mapZoom[3]
)
}
}, },
status(text){ status(text){
return filterDictTextByStatic(ORDER_STATUS, text); if(text){
return filterDictTextByStatic(ORDER_STATUS, text[0].orderStatus);
}
}, },
onCancel() { onCancel() {
this.closeCurrent() this.closeCurrent()
}, },
onExamine(type) { onExamine(type) {
this.closeCurrent() this.visible = true
this.model.id = this.$route.query.id
},
handleOk(e) {
const that = this
this.confirmLoadings = true
let method = 'post'
httpAction(this.url.refundOrder, this.model, method)
.then((res) => {
if (res.success) {
that.$message.success(res.message)
that.$emit('ok')
} else {
that.$message.warning(res.message)
}
this.closeCurrent()
this.visible = false
this.confirmLoadings = false
this.model = {}
})
.finally(() => {
that.confirmLoadings = false
})
},
handleCancel(e) {
this.visible = false
}, },
loadData() { loadData() {
console.log('不请求') console.log('不请求')
......
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<a-form-item label="表名">
<a-input placeholder="请输入表名" v-model="queryParam.dataTable"></a-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="数据ID">
<a-input placeholder="请输入ID" v-model="queryParam.dataId"></a-input>
</a-form-item>
</a-col>
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a-button type="primary" @click="searchQuery">查询</a-button>
<a-button style="margin-left: 8px" @click="searchReset">重置</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button
@click="batchDel"
v-if="selectedRowKeys.length > 0"
ghost
type="primary"
icon="delete">批量删除
</a-button>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i>已选择&nbsp;<a style="font-weight: 600">{{
selectedRowKeys.length }}</a>&nbsp;&nbsp;
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
:columns="columns"
size="middle"
:dataSource="dataSource"
:loading="loading"
:pagination="pagination"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical"/>
<a-dropdown>
<a class="ant-dropdown-link">
更多 <a-icon type="down"/>
</a>
<a-menu slot="overlay">
<a-menu-item>
<a href="javascript:;" @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a href="javascript:;" @click="handleAddSub(record)">添加下级</a>
</a-menu-item>
<a-menu-item>
<a href="javascript:;" @click="handleDataRule(record)">数据规则</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)" placement="topLeft">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
<!-- 字符串超长截取省略号显示 -->
<span slot="url" slot-scope="text">
<j-ellipsis :value="text" :length="25"/>
</span>
<!-- 字符串超长截取省略号显示-->
<span slot="component" slot-scope="text">
<j-ellipsis :value="text"/>
</span>
</a-table>
</div>
<!-- table区域-end -->
<!-- <permission-modal ref="modalForm" @ok="modalFormOk"></permission-modal> -->
<!-- <permission-data-rule-list ref="PermissionDataRuleList" @ok="modalFormOk"></permission-data-rule-list> -->
</a-card>
</template>
<script>
// import PermissionModal from './modules/PermissionModal'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
// import PermissionDataRuleList from './PermissionDataRuleList'
import JEllipsis from '@/components/jeecg/JEllipsis'
const columns = [
{
title: '菜单名称',
dataIndex: 'name',
key: 'name'
}, {
title: '菜单类型',
dataIndex: 'menuType',
key: 'menuType',
customRender: function(text) {
if (text == 0) {
return '菜单'
} else if (text == 1) {
return '菜单'
} else if (text == 2) {
return '按钮/权限'
} else {
return text
}
}
},/*{
title: '权限编码',
dataIndex: 'perms',
key: 'permissionCode',
},*/{
title: 'icon',
dataIndex: 'icon',
key: 'icon'
},
{
title: '组件',
dataIndex: 'component',
key: 'component',
scopedSlots: { customRender: 'component' }
},
{
title: '路径',
dataIndex: 'url',
key: 'url',
scopedSlots: { customRender: 'url' }
},
{
title: '排序',
dataIndex: 'sortNo',
key: 'sortNo'
},
{
title: '操作',
dataIndex: 'action',
scopedSlots: { customRender: 'action' },
align: 'center',
width: 150
}
]
export default {
name: 'PermissionListAsync',
mixins: [JeecgListMixin],
components: {
// PermissionDataRuleList,
// PermissionModal,
JEllipsis
},
data() {
return {
description: '这是菜单管理页面',
// 表头
columns: columns,
loading: false,
pagination: {},
url: {
list: '/property/propertySettled/list',
delete: '/sys/permission/delete',
deleteBatch: '/sys/permission/deleteBatch'
}
}
},
methods: {
loadData() {
this.loading = true
getPropertyListApi({
pageNo: 1,
pageSize: 10
}).then((res) => {
if (res.success) {
const pagination = { ...this.pagination };
pagination.total = res.result.total
this.dataSource = res.result.records
}
}).finally(()=>{
this.loading = false
})
},
// 打开数据规则编辑
handleDataRule(record) {
this.$refs.PermissionDataRuleList.edit(record)
},
handleAddSub(record) {
this.$refs.modalForm.title = "添加子菜单";
this.$refs.modalForm.disableSubmit = false;
this.$refs.modalForm.edit({status:'1',permsType:'1',route:true,'parentId':record.id,menuType:1});
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>
\ No newline at end of file
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<a-form-item label="物业名称">
<a-input placeholder="请输入物业名称" v-model="queryParam.propertyName"></a-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="入驻时间">
<a-input placeholder="请选择入驻时间" v-model="queryParam.createTime"></a-input>
</a-form-item>
</a-col>
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a-button type="primary" @click="searchQuery">查询</a-button>
<a-button style="margin-left: 8px" @click="searchReset">重置</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('t_property_settled')">导出</a-button>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i>已选择&nbsp;<a style="font-weight: 600">{{
selectedRowKeys.length }}</a>&nbsp;&nbsp;
<a style="margin-left: 24px" v-if="selectedRowKeys.length > 0" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="pagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange"
>
<span slot="empowerDate" slot-scope="text, record">
<span>{{record.empowerBeginDate}}{{record.empowerEndDate}}</span>
</span>
<span slot="action" slot-scope="text, record">
<a @click="onLoadDetail(record, 'edit')">编辑</a>
<a-divider type="vertical"/>
<a-dropdown>
<a class="ant-dropdown-link">
更多 <a-icon type="down"/>
</a>
<a-menu slot="overlay">
<a-menu-item>
<a href="javascript:;" @click="onLoadDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)" placement="topLeft">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
<!-- 字符串超长截取省略号显示 -->
<span slot="url" slot-scope="text">
<j-ellipsis :value="text" :length="25"/>
</span>
<!-- 字符串超长截取省略号显示-->
<span slot="component" slot-scope="text">
<j-ellipsis :value="text"/>
</span>
</a-table>
</div>
<!-- table区域-end -->
<property-settled-modal ref="modalForm" @ok="modalFormOk"></property-settled-modal>
<a-modal
:title="modalTitle + '入驻物业集团'"
width="60%"
:visible="visible"
:closable="false"
:maskClosable="false"
>
<template slot="footer">
<a-button @click="close">关闭</a-button>
<a-button type="primary" @click="onSubmit">确认</a-button>
</template>
<a-form-model
ref="ruleForm"
:model="form"
:rules="rules"
:label-col="labelCol"
:wrapper-col="wrapperCol"
>
<a-card title="物业集团基本信息">
<a-row>
<a-col :span="12">
<a-form-model-item label="物业集团名称" prop="propertyName">
<a-input
v-model="form.propertyName"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="统一信用代码" prop="propertyCode">
<a-input
v-model="form.propertyCode"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="法人代表" prop="legalName">
<a-input
v-model="form.legalName"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="注册资本" prop="registCapital">
<a-input-number id="inputNumber" v-model="form.registCapital" :min="1" />
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="联系人" prop="contactName">
<a-input
v-model="form.contactName"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="联系人电话" prop="contactPhone">
<a-input
v-model="form.contactPhone"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="注册地址" prop="registAdress">
<a-input
v-model="form.registAdress"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="详细地址" prop="adressInfo" :labelCol="{ span: 3 }">
<a-input
v-model="form.adressInfo"
placeholder="请输入"
/>
</a-form-model-item>
</a-col>
<a-col :span="21" :offset="3">
<a-form-model-item label="" :labelCol="{ span: 3 }">
<div>
<div id="container" style="width:100%;height:100%"></div>
</div>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="集团LOGO" prop="logoUrl" :labelCol="{ span: 3 }">
<j-image-upload bizPath="scott/pic" v-model="form.logoUrl"></j-image-upload>
<span>只能上传jpg/png格式文件,文件不能超过50kb</span>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="集团介绍" prop="groupInfo" :labelCol="{ span: 3 }">
<a-textarea
v-model="form.groupInfo"
placeholder="请输入"
:auto-size="{ minRows: 3, maxRows: 5 }"
/>
</a-form-model-item>
</a-col>
</a-row>
</a-card>
<a-card title="授权信息">
<a-row>
<a-col :span="24">
<a-form-model-item label="授权日期" prop="empowerType" :labelCol="{ span: 3 }">
<a-radio-group v-model="form.empowerType">
<a-radio value="1">永久</a-radio>
<a-radio value="2">授权日期</a-radio>
</a-radio-group>
</a-form-model-item>
</a-col>
<a-col :span="21" :offset="3" v-if="form.empowerType === '2'">
<a-form-model-item label="" prop="empowerDate">
<a-range-picker v-model="form.empowerDate" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="授权物业数量" prop="empowerPropertyNum" :labelCol="{ span: 3 }">
<a-input-number id="inputNumber" v-model="form.empowerPropertyNum" :min="1" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="收费标准" prop="chargingStandardId" :labelCol="{ span: 3 }">
<a-select style="width: 120px" v-model="form.chargingStandardId">
<a-select-option value="lucy">Lucy</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
</a-row>
</a-card>
<a-card title="合同附件">
<a-row>
<a-col :span="24">
<a-form-model-item label="合同附件" prop="contractUrl" :labelCol="{ span: 3 }">
<j-upload v-model="form.contractUrl"></j-upload>
</a-form-model-item>
</a-col>
</a-row>
</a-card>
</a-form-model>
</a-modal>
</a-card>
</template>
<script>
// import { getPropertyListApi, getSystemSubmenu, getSystemSubmenuBatch } from '@/api/api'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import PropertySettledModal from './modules/PropertySettledModal'
import JEllipsis from '@/components/jeecg/JEllipsis'
import JImageUpload from '@/components/jeecg/JImageUpload'
import JUpload from '@/components/jeecg/JUpload'
import {filterDictTextByCache} from '@/components/dict/JDictSelectUtil'
const columns = [
{
title: '物业名称',
dataIndex: 'propertyName',
key: 'propertyName'
},
{
title: '统一社会信用代码',
dataIndex: 'creditCode',
key: 'creditCode'
},
{
title: '联系人',
dataIndex: 'contactName',
key: 'contactName'
},
{
title: '电话',
dataIndex: 'contactPhone',
key: 'contactPhone'
},
{
title: '授权时间',
dataIndex: 'empowerDate',
key: 'empowerDate'
},
{
title: '授权物业数量',
dataIndex: 'ontrialCommunityNum',
key: 'ontrialCommunityNum'
},
{
title: '审核状态',
dataIndex: 'auditStatus',
key: 'auditStatus',
customRender: function(text) {
return filterDictTextByCache('auditStatus', text);
}
},
{
title: '到期提示',
dataIndex: 'ontrialEndDate',
key: 'ontrialEndDate'
},
{
title: '冻结/解冻',
dataIndex: 'refuseDesc',
key: 'refuseDesc'
},
{
title: '操作',
dataIndex: 'action',
scopedSlots: { customRender: 'action' },
align: 'center',
width: 150
}
]
export default {
name: 'PermissionListAsync',
mixins: [JeecgListMixin],
components: {
PropertySettledModal,
JEllipsis,
JUpload,
JImageUpload
},
data() {
return {
// 表头
columns: columns,
loading: false,
pagination: {
total: 0,
current: 1,
pageSize: 10,
showSizeChanger: true
},
url: {
list: "/property-community/property/propertySettled/list",
delete: '/property-community/sys/permission/delete',
deleteBatch: '/property-community/sys/permission/deleteBatch'
},
modalTitle: '新增',
visible: false,
labelCol: { span: 6 },
wrapperCol: { span: 14 },
other: '',
form: {
propertyName: '',
propertyCode: '',
legalName: '',
registCapital: undefined,
contactName: '',
contactPhone: '',
registAdress: '',
adressInfo: '',
logoUrl: [],
groupInfo: '',
empowerType: '1',
empowerDate: [],
empowerPropertyNum: undefined,
chargingStandardId: '',
contractUrl: []
},
rules: {
propertyName: [{ required: true, message: '请输入物业集团名称', trigger: 'blur' }],
propertyCode: [{ required: true, message: '请输入统一信用代码', trigger: 'blur' }],
legalName: [{ required: true, message: '请输入法人代表', trigger: 'blur' }],
registCapital: [{ required: true, message: '请输入注册资本', trigger: 'blur' }],
contactName: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
contactPhone: [{ required: true, message: '请输入联系人电话', trigger: 'blur' }],
registAdress: [{ required: true, message: '请选择注册地址', trigger: 'change' }],
adressInfo: [{ required: true, message: '请输入详细地址', trigger: 'blur' }],
logoUrl: [{ required: true, message: '请上传集团LOGO', trigger: 'change' }],
empowerPropertyNum: [{ required: true, message: '请输入授权物业数量', trigger: 'blur' }],
chargingStandardId: [{ required: true, message: '请选择收费标准', trigger: 'change' }],
contractUrl: [{ required: true, message: '请上传合同附件', trigger: 'change' }]
},
uploadDisabled: false
}
},
methods: {
onLoadDetail(record, type) {
record['registAdress'] = [record.provinceCode, record.cityCode, record.countyCode]
if(type === 'edit') {
this.handleEdit(record)
} else {
this.handleDetail(record)
}
},
onSubmit() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
});
},
close() {
this.visible = false
},
onSubmit() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm() {
this.$refs.ruleForm.resetFields();
},
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>
\ No newline at end of file
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-card title="物业集团基本信息">
<a-row>
<a-col :span="12">
<a-form-model-item label="物业集团名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="propertyName">
<a-input v-model="model.propertyName" placeholder="请输入物业集团名称" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="统一信用代码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="creditCode">
<a-input v-model="model.creditCode" placeholder="请输入统一信用代码" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="法人姓名" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="legalName">
<a-input v-model="model.legalName" placeholder="请输入法人姓名" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="注册资本" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="registCapital">
<a-input-number v-model="model.registCapital" :min="1" placeholder="请输入注册资本" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="联系人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="contactName">
<a-input v-model="model.contactName" placeholder="请输入联系人" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="联系人电话" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="contactPhone">
<a-input v-model="model.contactPhone" placeholder="请输入联系人电话" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="注册地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="registAdress">
<area-cascader
v-model="model.registAdress"
:data="pcaa"
:level="1"
type="all"
@change="addressChange"
style="width:100%"
/>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="详细地址" :labelCol="{ xs:{ span: 24 }, sm:{ span: 3 } }" :wrapperCol="wrapperCol" prop="addressInfo">
<a-input v-model="model.addressInfo" placeholder="请输入详细地址" @blur="addressBlur" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="" :offset="3" :pull="3" :labelCol="{ xs:{ span: 24 }, sm:{ span: 3 } }">
<div class="hhh">
<div id="container" style="width:100%;height:200px"></div>
</div>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="集团logo" :labelCol="{ xs:{ span: 24 }, sm:{ span: 3 } }" :wrapperCol="wrapperCol" prop="logoUrl">
<j-image-upload bizPath="scott/pic" v-model="model.logoUrl"></j-image-upload>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="集团介绍" :labelCol="{ xs:{ span: 24 }, sm:{ span: 3 } }" :wrapperCol="wrapperCol" prop="groupInfo">
<a-textarea v-model="model.groupInfo" placeholder="请输入集团介绍" :auto-size="{ minRows: 3, maxRows: 5 }" />
</a-form-model-item>
</a-col>
</a-row>
</a-card>
<a-card title="授权信息">
<a-row>
<!-- <a-col :span="12">
<a-form-model-item label="试用日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="empowerType">
<a-range-picker v-model="model.empowerDate" placeholder="请选择试用日期" />
</a-form-model-item>
</a-col> -->
<a-col :span="12">
<a-form-model-item label="授权开始日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="empowerBeginDate">
<j-date placeholder="请选择授权开始日期" v-model="model.empowerBeginDate" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="授权结束日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="empowerEndDate">
<j-date placeholder="请选择授权结束日期" v-model="model.empowerEndDate" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="试用小区数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ontrialCommunityNum">
<a-input-number v-model="model.ontrialCommunityNum" placeholder="请输入试用小区数量" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="收费标准" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="chargingStandardId">
<a-select v-model="model.chargingStandardId" placeholder="请选择收费标准" style="width: 100%">
<a-select-option v-for="item in costList" :key="item.id" :value="item.id">{{item.chargingName}}</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="管理员账户" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="adminLoginName">
<a-input v-model="model.adminLoginName" placeholder="请输入管理员账户" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="管理员密码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="adminPassword">
<a-input v-model="model.adminPassword" placeholder="请输入管理员密码" ></a-input>
</a-form-model-item>
</a-col>
</a-row>
</a-card>
<a-card title="合同附件">
<a-row>
<a-col :span="24">
<a-form-model-item label="合同附件" :labelCol="{ xs:{ span: 24 }, sm:{ span: 3 } }" :wrapperCol="wrapperCol" prop="contractUrl">
<j-upload v-model="model.contractUrl"></j-upload>
</a-form-model-item>
</a-col>
</a-row>
</a-card>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
const mapZoom = [5,8,10,12]
let timer = null;
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
export default {
name: 'PropertySettledForm',
props: {
//表单禁用
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
pcaa: this.$Jpcaa,
model:{
propertyName: '',
creditCode: '',
legalName: '',
registCapital: undefined,
contactName: '',
contactPhone: '',
registAdress: [],
provinceName: '',
provinceCode: '',
cityName: '',
cityCode: '',
countyName: '',
countyCode: '',
addressInfo: '',
logoUrl: '',
groupInfo: '',
empowerBeginDate: '',
empowerEndDate: '',
ontrialCommunityNum: undefined,
chargingStandardId: '',
contractUrl: '',
adminLoginName: '',
adminPassword: '123456',
longitude: '',
latitude: ''
},
labelCol: {
xs: { span: 24 },
sm: { span: 6 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
propertyName: [{ required: true, message: '请输入物业集团名称', trigger: 'blur' }],
creditCode: [{ required: true, message: '请输入统一信用代码', trigger: 'blur' }],
legalName: [{ required: true, message: '请输入法人代表', trigger: 'blur' }],
registCapital: [{ required: true, message: '请输入注册资本', trigger: 'blur' }],
contactName: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
contactPhone: [{ required: true, message: '请输入联系人电话', trigger: 'blur' }],
registAdress: [{ required: true, message: '请选择注册地址', trigger: 'change' }],
addressInfo: [{ required: true, message: '请输入详细地址', trigger: 'blur' }],
logoUrl: [{ required: true, message: '请上传集团LOGO', trigger: 'change' }],
chargingStandardId: [{ required: true, message: '请选择收费标准', trigger: 'change' }],
adminLoginName: [{ required: true, message: '请输入管理员账号', trigger: 'blur' }],
adminPassword: [{ required: true, message: '请输入管理员密码', trigger: 'blur' }],
contractUrl: [{ required: true, message: '请上传合同附件', trigger: 'change' }]
},
url: {
add: "/property-community/property/propertySettled/add",
edit: "/property-community/property/propertySettled/edit",
queryById: "/property-community/property/propertySettled/queryById"
},
costList: [],
mapRef: null,
}
},
computed: {
formDisabled(){
return this.disabled
},
},
watch: {
'model.contactPhone': {
handler(newV, oldV) {
this.model.adminLoginName = newV
}
},
'model.addressInfo': {
handler(newV) {
if(newV) {
clearTimeout(timer)
timer = setTimeout(()=> {
// this.getLongitude(this.model.categoryCodes[0], this.model.categoryCodes.join('') + newV, mapZoom[3])
}, 1000)
}
}
}
},
created () {
//备份model原始值
this.modelDefault = JSON.parse(JSON.stringify(this.model));
this.onLoadCostList()
},
mounted() {
this.mapRef = new BMapGL.Map("container"); // 创建地图实例
var point = new BMapGL.Point(108.5525, 34.3237); // 创建点坐标
this.mapRef.centerAndZoom(point, mapZoom[0]);
// var zoomCtrl = new BMapGL.ZoomControl(); // 添加缩放控件
// this.mapRef.addControl(zoomCtrl);
this.mapRef.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
this.mapRef.addEventListener('click', e=>this.getAddress(e));
},
methods: {
async onLoadCostList() {
let data = await getCostListApi({
pageNo: 1,
pageSize: 10
})
this.costList = data.result.records
},
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record);
this.visible = true;
},
addressChange(val) {
const province = Object.keys(val[0])[0]
const city = Object.keys(val[1])[0]
const county = Object.keys(val[2])[0]
this.model.provinceName = val[0][province]
this.model.provinceCode = province
this.model.cityName = val[1][city]
this.model.cityCode = city
this.model.countyName = val[2][county]
this.model.countyCode = county
if(this.model.addressInfo) {
this.getLongitude(this.model.provinceName, (this.model.provinceName + this.model.cityName + this.model.countyName + this.model.addressInfo), mapZoom[3])
}
},
addressBlur(val) {
if(this.model.provinceName) {
this.getLongitude(this.model.provinceName, (this.model.provinceName + this.model.cityName + this.model.countyName + val.target.value), mapZoom[3])
}
},
getAddress(e) {
let _this = this;
// 创建地理编码实例
var myGeo = new BMapGL.Geocoder();
// 根据坐标得到地址描述
myGeo.getLocation(new BMapGL.Point(e.latlng.lng, e.latlng.lat), function(result){
if(result) {
_this.mapRef.clearOverlays();
_this.model.registAdress = [result.addressComponents.province, result.addressComponents.city, result.addressComponents.district]
_this.model.addressInfo = result.addressComponents.street + result.addressComponents.streetNumber
_this.model.longitude = result.point.lng
_this.model.latitude = result.point.lat
_this.positionMap(e.latlng.lng, e.latlng.lat, mapZoom[3], result.address)
console.log(result)
}
});
},
positionMap(mapCenterLng, mapCenterLat, mapzoom, address) {
var point = new BMapGL.Point(mapCenterLng, mapCenterLat); // 创建点坐标
this.mapRef.centerAndZoom(point, mapzoom);
var marker = new BMapGL.Marker(point, {title: address}); // 创建标注
this.mapRef.addOverlay(marker); // 将标注添加到地图中
let _this = this;
// marker.addEventListener("click", function(){
var label = new BMapGL.Label(address, { // 创建文本标注
position: point, // 设置标注的地理位置
offset: new BMapGL.Size(0, -55) // 设置标注的偏移量
})
_this.mapRef.addOverlay(label); // 将标注添加到地图中
label.setStyle({ // 设置label的样式
color: '#333',
fontSize: '14px',
padding: '4px 10px',
border: '1px solid #1E90FF',
borderRadius: '4px',
transform: 'translateX(-40%)'
})
// });
},
getLongitude(city, address, zoom) {
let _this = this
var myGeo = new BMapGL.Geocoder();
myGeo.getPoint(address, function(point){
if(point){
_this.mapRef.clearOverlays();
_this.positionMap(point.lng, point.lat, zoom, address)
}else{
console.log('您选择的地址没有解析到结果!');
}
}, city)
},
submitForm () {
const that = this;
// 触发表单验证
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
this.model.registAdress = undefined
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
},
beforeDestroy() {
clearTimeout(timer)
this.mapRef.removeEventListener('click', e=>this.getAddress(e));
}
}
</script>
\ No newline at end of file
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<property-settled-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></property-settled-form>
</j-modal>
</template>
<script>
import PropertySettledForm from './PropertySettledForm'
export default {
name: 'PropertySettledModal',
components: {
PropertySettledForm
},
data () {
return {
title:'',
width: '70%',
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>
\ No newline at end of file
...@@ -23,8 +23,11 @@ ...@@ -23,8 +23,11 @@
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="7" :sm="10"> <a-col :md="7" :sm="10">
订单时间:
<a-range-picker @change="onChangeData" /> <a-form-item label="订单时间:">
<a-date-picker placeholder="订单时间" valueFormat="YYYY-MM-DD 00:00:00" v-model="queryParam.createTime"></a-date-picker>
</a-form-item>
</a-col> </a-col>
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-col :md="5" :sm="24"> <a-col :md="5" :sm="24">
......
...@@ -18,8 +18,10 @@ ...@@ -18,8 +18,10 @@
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="7" :sm="10"> <a-col :md="7" :sm="10">
订单时间:
<a-range-picker @change="onChangeData" /> <a-form-item label="订单时间:">
<a-date-picker placeholder="订单时间" valueFormat="YYYY-MM-DD 00:00:00" v-model="queryParam.createTime"></a-date-picker>
</a-form-item>
</a-col> </a-col>
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-col :md="5" :sm="24"> <a-col :md="5" :sm="24">
......
<template> <template>
<div class="page-header-index-wide"> <div class="page-header-index-wide">
<div class="query-box"> <div class="query-box">
<a-range-picker @change="onChangeData" /> <a-month-picker @change="onChangeData" />
<a-button type="primary" @click="searchQuery" style="margin-left: 20px;">查询</a-button> <a-button type="primary" @click="searchQuery" style="margin-left: 20px;">查询</a-button>
</div> </div>
<div class="data-box"> <div class="data-box">
<div class="statistics"> <div class="statistics">
<p style="color:#666;margin-bottom:5px;">绑定商铺数量</p> <p style="color:#666;margin-bottom:5px;">绑定小区数量</p>
<p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">100</p> <p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">{{ detail.bindComm }}</p>
</div> </div>
<div class="statistics"> <div class="statistics">
<p style="color:#666;margin-bottom:5px;">平台总小区数量</p> <p style="color:#666;margin-bottom:5px;">平台总小区数量</p>
<p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">100</p> <p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">{{ detail.bindCommunity }}</p>
</div> </div>
<div class="statistics"> <div class="statistics">
<p style="color:#666;margin-bottom:5px;">平台总业主数量</p> <p style="color:#666;margin-bottom:5px;">平台总业主数量</p>
<p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">100</p> <p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">{{ detail.bindOwner }}</p>
</div>
<div class="statistics">
<p style="color:#666;margin-bottom:5px;">合作伙伴分利</p>
<p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">¥100.00</p>
</div> </div>
<div class="statistics"> <div class="statistics">
<p style="color:#666;margin-bottom:5px;">新增订单数量</p> <p style="color:#666;margin-bottom:5px;">新增订单数量</p>
<p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">100</p> <p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">{{ detail.newOrderAmount }}</p>
</div> </div>
<div class="statistics"> <div class="statistics">
<p style="color:#666;margin-bottom:5px;">总营收</p> <p style="color:#666;margin-bottom:5px;">总营收</p>
<p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">¥100.00</p> <p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">¥{{ detail.totalMoney }}</p>
</div> </div>
<div class="statistics"> <div class="statistics">
<p style="color:#666;margin-bottom:5px;">本月营收</p> <p style="color:#666;margin-bottom:5px;">本月营收</p>
<p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">¥100.00</p> <p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">¥{{ detail.monthMoney }}</p>
</div> </div>
<div class="statistics" style="margin-right: 0;"> <div class="statistics" style="margin-right: 0;">
<p style="color:#666;margin-bottom:5px;">今日营收</p> <p style="color:#666;margin-bottom:5px;">今日营收</p>
<p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">¥100.00</p> <p style="margin-bottom:0;color:#333;font-size:24px;line-height:1;">¥{{ detail.todayMoney }}</p>
</div> </div>
</div> </div>
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '20px' }"> <a-col :sm="24" :md="24" :xl="24" :style="{ marginBottom: '20px' }">
<div class="t-box"> <div class="t-box">
<h3 class="box-title">最新成交订单</h3> <h3 class="box-title">最新成交订单</h3>
<div class="order"> <div class="order">
<div class="order-title"><span <div class="order-title"><span
style="width: 30%;">订单编号</span><span>提交时间</span><span>用户账号</span><span>订单金额</span></div> style="width: 30%;">订单编号</span><span>提交时间</span><span>用户账号</span><span>订单金额</span></div>
<vue-seamless-scroll :data="listData" class="seamless-warp" :class-option="defineScroll"> <vue-seamless-scroll :data="detail.shareOrder" class="seamless-warp" :class-option="defineScroll">
<div v-for="(item, index) in listData" :key="index" class="item"> <div v-for="(item, index) in detail.shareOrder" :key="index" class="item">
<span <span
style="width: 30%;">{{ item.num }}</span><span>{{ item.date }}</span><span>{{ item.account }}</span><span>{{ item.amount }}</span> style="width: 30%;">{{ item.order_num }}</span><span>{{ item.create_time }}</span><span>{{ item.buyer_name }}</span><span>{{ item.share_money }}</span>
</div> </div>
</vue-seamless-scroll> </vue-seamless-scroll>
</div> </div>
</div> </div>
</a-col> </a-col>
<a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '20px' }">
<div class="t-box">
<h3 class="box-title">月成交金额</h3>
<line-chart-multid :dataSource="dayData" :fields="dayFields" style="padding: 0;" />
</div>
</a-col>
</a-row> </a-row>
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '20px' }"> <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '20px' }">
...@@ -75,23 +65,7 @@ ...@@ -75,23 +65,7 @@
</a-col> </a-col>
<a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '20px' }"> <a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '20px' }">
<div class="t-box"> <div class="t-box">
<h3 class="box-title">入驻商铺新增数量</h3> <h3 class="box-title">月成交金额</h3>
<bar :dataSource="barData" style="padding: 0;" />
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '20px' }">
<div class="t-box">
<h3 class="box-title">巡报订单数量</h3>
<div>
<line-chart-multid :dataSource="dayData1" :fields="dayFields1" style="padding: 0;" />
</div>
</div>
</a-col>
<a-col :sm="24" :md="12" :xl="12" :style="{ marginBottom: '20px' }">
<div class="t-box">
<h3 class="box-title">巡报订单金额</h3>
<line-chart-multid :dataSource="dayData1" :fields="dayFields1" style="padding: 0;" /> <line-chart-multid :dataSource="dayData1" :fields="dayFields1" style="padding: 0;" />
</div> </div>
</a-col> </a-col>
...@@ -103,7 +77,8 @@ ...@@ -103,7 +77,8 @@
import Bar from '@/components/chart/Bar' import Bar from '@/components/chart/Bar'
import LineChartMultid from '@/components/chart/LineChartMultid' import LineChartMultid from '@/components/chart/LineChartMultid'
import vueSeamlessScroll from 'vue-seamless-scroll' import vueSeamlessScroll from 'vue-seamless-scroll'
import { getDataStatisticsApi, getLoginfo, getVisitInfo, auditPropertyApi } from '@/api/api' import { getAction } from '@api/manage'
export default { export default {
name: 'statistical', name: 'statistical',
components: { components: {
...@@ -113,100 +88,20 @@ export default { ...@@ -113,100 +88,20 @@ export default {
}, },
data() { data() {
return { return {
detail:{},
time:'',
loading: true, loading: true,
payData: [],
barData: [],
dayFields: ['月成交订单数量'], dayFields: ['月成交订单数量'],
dayData: [ dayData: [],
{ type: '1月', 月成交订单数量: 71 }, dayFields1: ['月成订单交金额'],
{ type: '2月', 月成交订单数量: 61.9 }, dayData1: [],
{ type: '3月', 月成交订单数量: 19.5 },
{ type: '4月', 月成交订单数量: 141.5 },
{ type: '5月', 月成交订单数量: 118.4 },
{ type: '6月', 月成交订单数量: 211.5 },
{ type: '7月', 月成交订单数量: 251.2 },
{ type: '8月', 月成交订单数量: 216.5 },
{ type: '9月', 月成交订单数量: 213.3 },
{ type: '10月', 月成交订单数量: 181.3 },
{ type: '11月', 月成交订单数量: 131.9 },
{ type: '12月', 月成交订单数量: 91.6 },
],
listData: [
{
num: '201707196398345',
date: '2023-07-19',
account: '18000000000',
amount: '¥200.00',
},
{
num: '201707196398345',
date: '2023-07-19',
account: '18000000000',
amount: '¥200.00',
},
{
num: '201707196398345',
date: '2023-07-19',
account: '18000000000',
amount: '¥200.00',
},
{
num: '201707196398345',
date: '2023-07-19',
account: '18000000000',
amount: '¥200.00',
},
{
num: '201707196398345',
date: '2023-07-19',
account: '18000000000',
amount: '¥200.00',
},
{
num: '201707196398345',
date: '2023-07-19',
account: '18000000000',
amount: '¥200.00',
},
{
num: '201707196398345',
date: '2023-07-19',
account: '18000000000',
amount: '¥200.00',
},
{
num: '201707196398345',
date: '2023-07-19',
account: '18000000000',
amount: '¥200.00',
},
],
dayFields1: ['巡报订单数量'],
dayFields2: ['巡报订单金额'],
dayData1: [
{ type: '7月1日', 巡报订单数量: 171 },
{ type: '7月10日', 巡报订单数量: 161.9 },
{ type: '7月20日', 巡报订单数量: 119.5 },
{ type: '7月30日', 巡报订单数量: 141.5 },
{ type: '8月10日', 巡报订单数量: 118.4 },
{ type: '8月20日', 巡报订单数量: 211.5 },
{ type: '8月30日', 巡报订单数量: 251.2 },
{ type: '9月10日', 巡报订单数量: 216.5 },
{ type: '9月20日', 巡报订单数量: 213.3 },
{ type: '9月30日', 巡报订单数量: 81.3 },
],
} }
}, },
created() { created() {
this.searchQuery()
setTimeout(() => { setTimeout(() => {
this.loading = !this.loading this.loading = !this.loading
}, 1000) }, 1000)
for (let i = 0; i < 12; i += 1) {
this.barData.push({
x: `${i + 1}月`,
y: i + 10,
})
}
}, },
computed: { computed: {
defineScroll() { defineScroll() {
...@@ -224,15 +119,37 @@ export default { ...@@ -224,15 +119,37 @@ export default {
}, },
methods: { methods: {
onChangeData(date, dateString) { onChangeData(date, dateString) {
if (dateString.length > 0) { if (dateString){
this.queryParam.createTime_begin = dateString[0] this.time = dateString.slice(0,4)+dateString.slice(5,7)
this.queryParam.createTime_end = dateString[1] }else {
} else { this.time = ''
this.queryParam.createTime_begin = ''
this.queryParam.createTime_end = ''
} }
},
insertStr(soure, start, newStr){
return soure.slice(0, start) + newStr + soure.slice(start);
},
searchQuery() {
getAction('/property-community/order/paymentOrder/shareBoard?platformType=shop&date='+this.time, ).then((res) => {
if (res.success) {
this.detail = res.result
this.dayData = []
this.dayData1 = []
res.result.shareByMonth.map((item) => {
this.dayData1.push({
type: this.insertStr(item.MONTH,4,'-'),
月成订单交金额:'¥'+item.shareMoney
})
})
res.result.orderCountByMonth.map((item) => {
this.dayData.push({
type: this.insertStr(item.MONTH,4,'-'),
月成交订单数量:item.orderCount
})
})
}
})
}, },
searchQuery() {},
}, },
} }
</script> </script>
...@@ -253,7 +170,7 @@ export default { ...@@ -253,7 +170,7 @@ export default {
} }
.statistics { .statistics {
background: #fff; background: #fff;
width: 11.5%; width: 13.5%;
box-sizing: border-box; box-sizing: border-box;
border: 1px solid #e0dfdf; border: 1px solid #e0dfdf;
padding: 25px 10px; padding: 25px 10px;
......
...@@ -87,6 +87,7 @@ module.exports = { ...@@ -87,6 +87,7 @@ module.exports = {
devServer: { devServer: {
port: 3000, port: 3000,
disableHostCheck: true,
// hot: true, // hot: true,
// disableHostCheck: true, // disableHostCheck: true,
// overlay: { // overlay: {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论