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

二期功能提交

上级 515bcd55
NODE_ENV=development
# VUE_APP_API_BASE_URL='http://192.168.0.119:9999'
# VUE_APP_API_BASE_URL='http://192.168.0.102:9999'
VUE_APP_API_BASE_URL='http://220.203.25.212:9999'
VUE_APP_API_BASE_URL='http://220.203.25.212:9998'
# VUE_APP_API_BASE_URL='http://192.168.0.100:9999'
# VUE_APP_API_BASE_URL='http://220.203.25.212:9999'
VUE_APP_CAS_BASE_URL=http://cas.example.org:8443/cas
VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview
......
差异被折叠。
......@@ -42,6 +42,7 @@
"vue-photo-preview": "^1.1.3",
"vue-print-nb-jeecg": "^1.0.12",
"vue-router": "^3.0.1",
"vue-seamless-scroll": "^1.1.23",
"vue-splitpane": "^1.0.4",
"vuedraggable": "^2.20.0",
"vuex": "^3.1.0",
......
......@@ -4,6 +4,7 @@ import {UI_CACHE_DB_DICT_DATA } from "@/store/mutation-types"
// 首页统计数据
const getDataStatisticsApi = (params)=>getAction("/property-central/central/homepage/dataStatistics",params);
const shareBoardApi = (params)=>getAction("/property-community/order/paymentOrder/shareBoard",params);
//角色管理
const addRole = (params)=>postAction("/sys/role/add",params);
......@@ -121,10 +122,44 @@ const AddUpdateCostApi = (params)=>postAction("/property-central/property/proper
const AuditUpdateCostApi = (params)=>postAction("/property-central/property/propertyChargrule/audit",params);
const getPropertyChargruleListApi = (params)=>getAction("/property-central/property/propertyChargrule/propertyChargruleList",params);
// 对账管理
const getDetailReconciliationApi = (params)=>getAction("/property-community/property/communityReconciliation/queryById",params);
const getAccountListByIdApi = (params)=>getAction("/property-community/property/communityReconciliation/getAccountListById",params);
const companyAuditAccountPageApi = (params)=>postAction("/property-community/property/communityReconciliation/centralAudit",params);
const getCommunityRecordListApi = (params)=>getAction("/property-central/property/auditRecord/getRecordList",params);
const appropriationApi = (params)=>getAction("/property-community/property/communityReconciliation/appropriation",params);
// 分利规则管理
const getRuleDayDetailApi = (params)=>getAction("/property-central/sharerule/settlementSet/queryById",params);
const editRuleDayDetailApi = (params)=>postAction("/property-central/sharerule/settlementSet/edit",params);
const addRuleDayDetailApi = (params)=>postAction("/property-central/sharerule/shareRule/add",params);
const editShareRuleDetailApi = (params)=>postAction("/property-central/sharerule/shareRule/edit",params);
const getShareRuleDetailApi = (params)=>getAction("/property-central/sharerule/shareRule/queryById",params);
const updateRuleStatusApi = (id, status)=>getAction(`/property-central/sharerule/shareRule/updateRuleStatus/${id}/${status}`, {});
// 分利对账管理
const getshareBenefitApi = (params)=>getAction("/property-central/partners/shareBenefit/queryById",params);
const auditshareBenefitApi = (params)=>postAction("/property-central/partners/shareBenefit/audit",params);
// 分利对账结算
const getshareBalanceApi = (params)=>getAction("/property-central/partners/shareBalance/queryById",params);
const auditshareBalanceApi = (params)=>postAction("/property-central/partners/shareBalance/audit",params);
// 积分管理
const editIntegralApi = (params)=>postAction("/property-central/integral/ownerIntegral/editIntegral",params);
const freezeIntegral = (params)=>getAction(`/property-central/integral/ownerIntegral/freezeIntegral/${params.id}/${params.status}`,{});
const ownerIntegralListApi = (params)=>getAction("/property-central/integral/integralRecord/ownerIntegralList",params);
const queryByIdIntegralDetailApi = (params)=>getAction("/property-central/integral/ownerIntegral/queryById",params);
// 退款
const refundQueryByIdApi = (params)=>getAction("/property-community/order/paymentOrder/queryById",params);
const auditRefundOrderApi = (params)=>postAction("/property-community/order/paymentOrder/auditRefundOrder",params);
const confirmRefundOrderApi = (params)=>getAction(`/property-community/order/paymentOrder/confirmRefundOrder/${params.id}/${params.status}`,{});
const getPropertyAdvEditApi = (params)=>postAction("/property-central/property/propertyAdv/edit",params);
const proPertyChargruleApi = (params)=>getAction(`/property-central/property/propertyChargrule/freezeOrThaw/${params.id}/${params.status}`,{});
export {
getDataStatisticsApi,
shareBoardApi,
addRole,
editRole,
checkRoleCode,
......@@ -196,6 +231,28 @@ export {
getCouncilsDetailApi,
auditCouncilsApi,
freezeOrCouncilsApi,
getDetailReconciliationApi,
getAccountListByIdApi,
companyAuditAccountPageApi,
getCommunityRecordListApi,
appropriationApi,
getRuleDayDetailApi,
editRuleDayDetailApi,
addRuleDayDetailApi,
getShareRuleDetailApi,
editShareRuleDetailApi,
updateRuleStatusApi,
getshareBenefitApi,
auditshareBenefitApi,
getshareBalanceApi,
auditshareBalanceApi,
editIntegralApi,
freezeIntegral,
ownerIntegralListApi,
queryByIdIntegralDetailApi,
refundQueryByIdApi,
auditRefundOrderApi,
confirmRefundOrderApi
}
......
// 与业主关系
export const RELATION_SHIP = [
{label: '业主', value: 'self'},
{label: '租户', value: 'tenant'},
{label: '亲人', value: 'relative'},
{label: '朋友', value: 'friend'},
{label: '其他', value: 'other'}
]
// 紧急程度
export const URGENT_DEGREE = [
{label: '一般', value: 'usual'},
{label: '紧急', value: 'urgent'}
]
// 是否定时发布
export const SCHEDULED_RELEASE = [
{label: '是', value: 1},
{label: '否', value: 0}
]
// 公告状态
export const NOTICE_STATUS = [
{label: '已发布', value: 'published'},
{label: '待发布', value: 'waitPublish'}
]
// 付费周期
export const CHARGING_CYCLE = [
{label: '每月', value: '1'},
{label: '每季度', value: '2'},
{label: '每年', value: '3'},
{label: '一次性付清', value: '4'},
{label: '预付', value: '5'}
]
// 物业对账审核状态
export const COMPANY_AUDIT_STATUS = [
{label: '物业待审核', value: 'companyWaitAudit'},
{label: '物业审核通过', value: 'companyAuditPass'},
{label: '物业审核驳回', value: 'companyRefuse'}
]
// 总平台对账审核状态
export const CENTRAL_AUDIT_STATUS = [
{label: '总平台待审核', value: 'centralWaitAudit'},
{label: '总平台审核通过', value: 'centralAuditPass'},
{label: '总平台审核驳回', value: 'centralRefuse'}
]
// 分利对账审核状态
export const FENLICENTRAL_AUDIT_STATUS = [
{label: '未对账', value: '1'},
{label: '对账待审核', value: '2'},
{label: '对账完成', value: '3'},
{label: '对账拒绝', value: '4'}
]
// 分利对账結算状态
export const BALANCE_STATUS = [
{label: '结算待审核', value: '2'},
{label: '已结算', value: '3'},
{label: '结算驳回', value: '4'}
]
// 总平台拨款状态
export const APPROPRIATION_STATUS = [
{label: '待拨款', value: 'waitAppropriation'},
{label: '拨款成功', value: 'appropriationed'}
]
// 退款状态
export const REFUND_STATUS = [
{label: '已付款', value: 'paid'},
{label: '退款待审核', value: 'refundWaitAudit'},
{label: '退款驳回', value: 'refundReject'},
{label: '退款中', value: 'refundRunning'},
{label: '已退款', value: 'refunded'}
]
/**
* 翻译字段值对应的文本
* @param children
* @returns string
*/
export function filterDictTextByStatic(dictList, value) {
if(!dictList || dictList.length === 0){
return;
}
let obj = dictList.find(item=>item.value == value)
return obj ? obj.label : ''
}
\ No newline at end of file
......@@ -3,7 +3,7 @@
<h4 :style="{ marginBottom: '20px' }">{{ title }}</h4>
<v-chart :forceFit="true" :height="height" :data="dataSource" :scale="scale" :padding="padding">
<v-tooltip/>
<v-axis/>
<v-axis position="right" />
<v-bar position="x*y"/>
</v-chart>
</div>
......@@ -33,7 +33,7 @@
}
},
data() {
return { padding: ['auto', 'auto', '40', '50'] }
return { padding: ['auto', 'auto', '50', '40'] }
},
computed: {
scale() {
......
......@@ -5,7 +5,7 @@
height="254"
:data="datasource"
:forceFit="true"
:padding="['auto', 'auto', '40', '50']">
:padding="['auto', 'auto', '50', '40']">
<v-tooltip />
<v-axis />
<v-bar position="x*y"/>
......
<template>
<div :style="{ padding: '0 0 32px 32px' }">
<div :style="{ padding: '0 0 32px 0' }">
<h4 :style="{ marginBottom: '20px' }">{{ title }}</h4>
<v-chart :force-fit="true" :height="height" :data="data" :scale="scale" :onClick="handleClick">
<v-chart :force-fit="true" :height="height" :data="data" :scale="scale" :onClick="handleClick" :padding="padding">
<v-tooltip/>
<v-axis/>
<v-legend/>
......@@ -62,7 +62,8 @@
min: 0,
max: 1
}],
style: { stroke: '#fff', lineWidth: 1 }
style: { stroke: '#fff', lineWidth: 1 },
padding: ['auto', 'auto', '60', '30']
}
},
computed: {
......
<template>
<div class="components-input-demo-presuffix">
<!---->
<a-input v-if="showModal" @click="openModal" :placeholder="placeholder" v-model="showText" readOnly :disabled="disabled">
<a-icon slot="prefix" :type="icon" :title="title"/>
<a-icon v-if="showText" slot="suffix" type="close-circle" @click="handleEmpty" title="清空"/>
</a-input>
<j-popup-onl-report
ref="jPopupOnlReport"
:url="url"
:title="title"
:columns="columns"
:multi="multi"
:modalWidth="modalWidth"
@ok="callBack"
/>
</div>
</template>
<script>
import JPopupOnlReport from './modal/JPopupOnlReport'
export default {
name: 'JPopup',
components: {
JPopupOnlReport
},
props: {
showModal: {
type: Boolean,
required: false,
default: true
},
title: {
type: String,
default: '',
required: false
},
url: {
type: String,
default: '',
required: false
},
columns: {
type: Array,
default: [],
required: true
},
placeholder: {
type: String,
default: '请选择',
required: false
},
modalWidth: {
type: Number,
default: 1200,
required: false
},
value: {
type: String,
required: false
},
triggerChange: {
type: Boolean,
required: false,
default: true
},
disabled: {
type: Boolean,
required: false,
default: false
},
multi: {
type: Boolean,
required: false,
default: false
},
spliter:{
type: String,
required: false,
default: ','
},
icon: {
type: String,
default: 'cluster',
required: false
}
},
data() {
return {
showText: ''
}
},
watch: {
value: {
immediate: true,
handler: function(val) {
if (!val) {
this.showText = ''
} else {
this.showText = val.split(this.spliter).join(',')
}
}
}
},
created() {
},
mounted() {
},
methods: {
openModal() {
if (this.disabled === false) {
this.$refs.jPopupOnlReport.show()
}
},
handleEmpty() {
// 禁用时,不允许清空内容
if (this.disabled) {
return
}
this.showText = ''
if (this.triggerChange) {
this.$emit('callback', '')
} else {
this.$emit('input', '', '')
}
},
callBack(rows) {
if (this.triggerChange) {
this.$emit('callback', rows)
} else {
this.$emit('input', str, rows)
}
}
}
}
</script>
<style scoped>
.components-input-demo-presuffix .anticon-close-circle {
cursor: pointer;
color: #ccc;
transition: color 0.3s;
font-size: 12px;
}
.components-input-demo-presuffix .anticon-close-circle:hover {
color: #f5222d;
}
.components-input-demo-presuffix .anticon-close-circle:active {
color: #666;
}
</style>
\ No newline at end of file
......@@ -218,9 +218,9 @@ export const JeecgListMixin = {
}
console.log('currentIndex',currentIndex)
},
handleEdit: function (record) {
handleEdit: function (record, title) {
this.$refs.modalForm.edit(record);
this.$refs.modalForm.title = "编辑";
this.$refs.modalForm.title = title || "编辑";
this.$refs.modalForm.disableSubmit = false;
},
handleAdd: function () {
......
<template>
<a-spin :spinning="confirmLoading">
<div class="title-top">
<h3>{{title}}</h3>
<div class="button">
<a-button @click="onCancel">返回</a-button>
<a-button type="danger" @click="onExamine('4')" v-if="pageType == '2'">审核驳回</a-button>
<a-button type="primary" @click="onExamine('3')" v-if="pageType == '2'">审核通过</a-button>
</div>
</div>
<j-form-container :disabled="true">
<a-form-model ref="form" :model="model" slot="detail">
<a-card title="基本信息">
<a-row>
<a-col :span="12">
<a-form-model-item label="订单编号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="id">
<a-input v-model="model.id" placeholder="请输入订单编号"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="提交时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createTime">
<a-input v-model="model.createTime" placeholder="请输入提交时间"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="账户" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="buyerName">
<a-input v-model="model.buyerName" placeholder="请输入账户"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="提交人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createBy">
<a-input v-model="model.createBy" placeholder="请输入提交人"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="订单金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="totalMoney">
<a-input-number v-model="model.totalMoney" :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="payWay">
<a-input v-model="model.payWay" placeholder="请输入支付方式"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="订单来源" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderSourceName">
<a-input v-model="model.orderSourceName" placeholder="请输入订单来源"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="订单状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reconciliationStatusName">
<a-input v-model="model.reconciliationStatusName" placeholder="请输入订单状态"></a-input>
</a-form-model-item>
</a-col>
<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="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="shopName">
<a-input v-model="model.shopName" placeholder="请输入商铺"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="合作伙伴" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="partnersName">
<a-input v-model="model.partnersName" placeholder="请输入所属小区"></a-input>
</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="remarks">
<a-input v-model="model.remarks" placeholder="请输入备注"></a-input>
</a-form-model-item>
</a-col>
</a-row>
</a-card>
<a-card title="操作信息">
<a-row>
<div>
<a-table ref="table" size="middle" :scroll="{x:true}" bordered rowKey="id" :columns="columns"
:dataSource="dataSource" :pagination="false" class="j-table-force-nowrap">
<span slot="balanceStatus">已付款</span>
</a-table>
</div>
</a-row>
</a-card>
</a-form-model>
</j-form-container>
<a-modal v-model="remarksVisible" :title="`${remarksModel.reconciliationStatus === '3' ? '通过' : '驳回'}说明`" @ok="submitHandleOk">
<a-form-model ref="form" :model="remarksModel">
<a-row>
<a-col :span="24">
<a-form-model-item label="备注" :labelCol="{ xs: { span: 24 },sm: { span: 3 } }" :wrapperCol="{ xs: { span: 24 }, sm: { span: 20 } }" prop="remarks">
<a-textarea placeholder="请输入备注" v-model="remarksModel.remarks" />
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</a-modal>
</a-spin>
</template>
<script>
import { getshareBenefitApi, auditshareBenefitApi } from '@/api/api'
import { httpAction, getAction } from '@/api/manage'
import { filterDictTextByStatic, FENLICENTRAL_AUDIT_STATUS } from '@/assets/static.js'
const columns = [
{
title: '操作者',
dataIndex: 'createBy',
key: 'createBy',
align: 'center',
},
{
title: '操作时间',
dataIndex: 'createTime',
key: 'createTime',
align: 'center',
},
{
title: '订单状态',
dataIndex: 'reconciliationStatus',
key: 'reconciliationStatus',
align: 'center',
customRender: function (text) {
return filterDictTextByStatic(FENLICENTRAL_AUDIT_STATUS, text)
}
},
{
title: '付款状态',
dataIndex: 'balanceStatus',
key: 'balanceStatus',
align: 'center',
scopedSlots: { customRender: 'balanceStatus' }
},
{
title: '备注',
dataIndex: 'remarks',
key: 'remarks',
align: 'center',
}
]
export default {
name: 'PropertySettledForm',
inject: ['closeCurrent'],
data() {
return {
title: '',
pageType: '',
model: {},
labelCol: {
xs: { span: 24 },
sm: { span: 6 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
columns: columns,
dataSource: [],
remarksVisible: false,
remarksModel: {
remarks: '',
reconciliationStatus: ''
}
}
},
methods: {
async getPageDetail() {
let { result } = await getshareBenefitApi({ id: this.$route.query.id })
result.shareBenefit['orderSourceName'] = result.shareBenefit.orderSource === 'miniapp' ? '小程序' : 'pc'
result.shareBenefit['reconciliationStatusName'] = filterDictTextByStatic(FENLICENTRAL_AUDIT_STATUS, result.shareBenefit.reconciliationStatus)
this.model = {...result.shareBenefit}
this.dataSource = [...result.list]
},
onCancel() {
this.closeCurrent()
},
onExamine(status) {
this.remarksModel.reconciliationStatus = status
this.remarksVisible = true
},
submitHandleOk() {
auditshareBenefitApi({
id: this.$route.query.id,
...this.remarksModel
}).then((res) => {
this.$message.success(`${this.remarksModel.reconciliationStatus === '3' ? '审核通过' : '审核驳回'}成功`)
this.closeCurrent()
})
}
},
mounted() {
this.pageType = this.$route.query.type
if (this.$route.query.type == '1') {
this.title = '详情'
} else {
this.title = '审核'
}
if (this.$route.query.id) {
this.getPageDetail()
}
}
}
</script>
<style lang="less" scoped>
.title-top {
background: #fff;
padding: 0 25px;
line-height: 50px;
height: 50px;
margin-bottom: 5px;
h3 {
font-weight: bold;
display: inline-block;
}
.button {
float: right;
.ant-btn {
margin-left: 15px;
}
}
}
</style>
<style>
.area-select {
width: 100% !important;
}
</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="订单编号">
<j-input placeholder="请输入订单编号" v-model="queryParam.orderNum"></j-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="状态">
<a-select style="width: 100%" v-model="queryParam.chargeTypeId" placeholder="请选择状态">
<a-select-option v-for="item in auditList" :key="item.value" :value="item.value">{{item.label}}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="提交开始时间">
<a-date-picker placeholder="提交开始时间" valueFormat="YYYY-MM-DD" v-model="queryParam.createTime_begin"></a-date-picker>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="提交结束时间">
<a-date-picker placeholder="提交结束时间" valueFormat="YYYY-MM-DD" v-model="queryParam.createTime_end"></a-date-picker>
</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="propertyDetails(1)" type="primary" icon="plus">新增</a-button> -->
<!-- <a-button 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="onBatchVerify"><a-icon type="audit" />批量审核</a-menu-item>
</a-menu>
<a-button type="primary" 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="ipagination"
:loading="loading"
class="j-table-force-nowrap"
@change="handleTableChange"
>
<span slot="orderSource">小程序</span>
<span slot="action" slot-scope="text, record">
<a href="javascript:;" @click="propertyDetails(1, record.id)">详情</a>
<template v-if="record.reconciliationStatus === 2">
<a-divider type="vertical" />
<a href="javascript:;" @click="propertyDetails(2, record.id)">审核</a>
</template>
</span>
</a-table>
</div>
<!-- table区域-end -->
</a-card>
</template>
<script>
import { auditPropertyApi, freezeOrPropertyApi } from '@/api/api'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import { filterDictTextByStatic, FENLICENTRAL_AUDIT_STATUS } from '@/assets/static.js'
const columns = [
{
title: '结算单号',
dataIndex: 'balanceNum',
key: 'balanceNum',
align: 'center',
},
{
title: '订单编号',
dataIndex: 'orderNum',
key: 'orderNum',
align: 'center',
},
{
title: '提交时间',
dataIndex: 'createTime',
key: 'createTime',
align: 'center',
},
{
title: '用户账号',
dataIndex: 'buyerName',
key: 'buyerName',
align: 'center',
},
{
title: '分利金额',
dataIndex: 'shareMoney',
key: 'shareMoney',
align: 'center',
},
{
title: '支付方式',
dataIndex: 'payWay',
key: 'payWay',
align: 'center'
},
{
title: '订单来源',
dataIndex: 'orderSource',
key: 'orderSource',
align: 'center',
scopedSlots: { customRender: 'orderSource' },
},
{
title: '订单状态',
dataIndex: 'reconciliationStatus',
key: 'reconciliationStatus',
align: 'center',
customRender: function (text) {
return filterDictTextByStatic(FENLICENTRAL_AUDIT_STATUS, text)
}
},
{
title: '备注',
dataIndex: 'remarks',
key: 'remarks',
align: 'center',
},
{
title: '所属平台',
dataIndex: 'propertyName',
key: 'propertyName',
align: 'center',
},
{
title: '所属小区',
dataIndex: 'communityName',
key: 'communityName',
align: 'center',
},
{
title: '合作伙伴',
dataIndex: 'partnersName',
key: 'partnersName',
align: 'center',
},
{
title: '商铺',
dataIndex: 'shopName',
key: 'shopName',
align: 'center',
},
{
title: '操作',
dataIndex: 'action',
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 150
},
]
export default {
name: 'PermissionListAsync',
mixins: [JeecgListMixin],
data() {
return {
auditList: FENLICENTRAL_AUDIT_STATUS,
columns: columns,
url: {
list: '/property-central/partners/shareBenefit/list'
}
}
},
methods: {
propertyDetails(type, id) {
this.$router.push({
path: '/benefits/ReconciliationDetails?id=' + id +'&type=' + type,
})
},
onLoadDetail(record, type) {
record['registAdress'] = [record.provinceCode, record.cityCode, record.countyCode]
if (type === 'edit') {
this.handleEdit(record)
} else {
this.handleDetail(record)
}
},
onBatchVerify(record) {
let that = this
this.$confirm({
title: '确认批量审核此?',
closable: true,
okText: '审核通过',
cancelText: '审核驳回',
onOk() {
// return auditPropertyApi({
// id: record.id,
// auditStatus: 'auditPass',
// }).then((res) => {
// that.searchQuery()
// })
},
onCancel() {
// return auditPropertyApi({
// id: record.id,
// auditStatus: 'refuse',
// }).then((res) => {
// that.searchQuery()
// })
},
})
},
onStatus(record) {
let that = this
this.$confirm({
title: `确认${record.propertyStatus === 'normal' ? '冻结' : '解冻'}此物业?`,
closable: true,
okText: `${record.propertyStatus === 'normal' ? '冻结' : '解冻'}`,
onOk() {
return freezeOrPropertyApi({
id: record.id,
status: `${record.propertyStatus === 'normal' ? 'freeze' : 'normal'}`,
}).then((res) => {
that.searchQuery()
})
},
onCancel() {},
})
},
handlePerssion(roleId) {
this.$refs.modalUserRole.show(roleId)
},
// loadData() {
// console.log('不请求')
// }
},
}
</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="结算编号">
<j-input placeholder="请输入结算编号" v-model="queryParam.balanceNum"></j-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="状态">
<a-select style="width: 100%" v-model="queryParam.chargeTypeId" placeholder="请选择状态">
<a-select-option v-for="item in auditList" :key="item.value" :value="item.value">{{item.label}}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="缴费开始时间">
<a-date-picker placeholder="缴费开始时间" valueFormat="YYYY-MM-DD" v-model="queryParam.createTime_begin"></a-date-picker>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="缴费结束时间">
<a-date-picker placeholder="缴费结束时间" valueFormat="YYYY-MM-DD" v-model="queryParam.createTime_end"></a-date-picker>
</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="propertyDetails(1)" 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="ipagination" :loading="loading" class="j-table-force-nowrap" @change="handleTableChange">
<span slot="empowerEndDate" slot-scope="text, record">
<span v-if="record.empowerEndDate">{{record.empowerBeginDate}}{{record.empowerEndDate}} </span>
</span>
<span slot="propertyStatus" slot-scope="text, record">
<span>{{record.propertyStatus === 'normal' ? '正常' : '冻结'}}</span>
</span>
<span slot="action" slot-scope="text, record">
<a href="javascript:;" @click="propertyDetails(1, record.id)">详情</a>
<template v-if="record.balanceStatus === 2">
<a-divider type="vertical" />
<a href="javascript:;" @click="propertyDetails(2, record.id)">审核</a>
</template>
</span>
</a-table>
</div>
<!-- table区域-end -->
</a-card>
</template>
<script>
import { auditPropertyApi, freezeOrPropertyApi } from '@/api/api'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import { filterDictTextByStatic, BALANCE_STATUS } from '@/assets/static.js'
const columns = [
{
title: '结算单号',
dataIndex: 'balanceNum',
key: 'balanceNum',
align: 'center',
},
{
title: '提交时间',
dataIndex: 'balanceDate',
key: 'balanceDate',
align: 'center',
},
{
title: '身份',
dataIndex: 'platformName',
key: 'platformName',
align: 'center',
},
{
title: '提交人',
dataIndex: 'updateBy',
key: 'updateBy',
align: 'center',
},
{
title: '结算总金额',
dataIndex: 'balanceMoney',
key: 'balanceMoney',
align: 'center',
},
{
title: '账单数量',
dataIndex: 'balanceCount',
key: 'balanceCount',
align: 'center',
},
{
title: '结算方式',
dataIndex: 'balanceWay',
key: 'balanceWay',
align: 'center',
},
{
title: '结算状态',
dataIndex: 'balanceStatus',
key: 'balanceStatus',
align: 'center',
customRender: function (text) {
return filterDictTextByStatic(BALANCE_STATUS, text)
}
},
{
title: '操作',
dataIndex: 'action',
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 150,
},
]
export default {
name: 'PermissionListAsync',
mixins: [JeecgListMixin],
data() {
return {
auditList: BALANCE_STATUS,
columns: columns,
url: {
list: '/property-central/partners/shareBalance/list',
}
}
},
methods: {
propertyDetails(type, id) {
this.$router.push({
path: '/benefits/SettlementDetails?id=' + id +'&type=' + type,
})
},
onLoadDetail(record, type) {
record['registAdress'] = [record.provinceCode, record.cityCode, record.countyCode]
if (type === 'edit') {
this.handleEdit(record)
} else {
this.handleDetail(record)
}
},
onExamine(record) {
let that = this
this.$confirm({
title: '确认审核此物业?',
closable: true,
okText: '审核通过',
cancelText: '审核驳回',
onOk() {
return auditPropertyApi({
id: record.id,
auditStatus: 'auditPass',
}).then((res) => {
that.searchQuery()
})
},
onCancel() {
return auditPropertyApi({
id: record.id,
auditStatus: 'refuse',
}).then((res) => {
that.searchQuery()
})
},
})
},
onStatus(record) {
let that = this
this.$confirm({
title: `确认${record.propertyStatus === 'normal' ? '冻结' : '解冻'}此物业?`,
closable: true,
okText: `${record.propertyStatus === 'normal' ? '冻结' : '解冻'}`,
onOk() {
return freezeOrPropertyApi({
id: record.id,
status: `${record.propertyStatus === 'normal' ? 'freeze' : 'normal'}`,
}).then((res) => {
that.searchQuery()
})
},
onCancel() {},
})
},
handlePerssion(roleId) {
this.$refs.modalUserRole.show(roleId)
}
},
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>
\ No newline at end of file
<template>
<a-spin :spinning="confirmLoading">
<div class="title-top">
<h3>详情</h3>
<div class="button">
<a-button @click="onCancel">返回</a-button>
<!-- <a-button type="danger" @click="onExamine(2)" v-if="pageType == '2'">审核驳回</a-button>
<a-button type="primary" @click="onExamine(1)" v-if="pageType == '2'">审核通过</a-button> -->
</div>
</div>
<j-form-container :disabled="true">
<a-form-model ref="form" :model="model" slot="detail">
<a-card title="基本信息">
<a-row>
<a-col :span="12">
<a-form-model-item label="订单编号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="id">
<a-input v-model="model.id" placeholder="请输入订单编号"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="提交时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createTime">
<a-input v-model="model.createTime" placeholder="请输入提交时间"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="账户" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="buyerName">
<a-input v-model="model.buyerName" placeholder="请输入账户"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="提交人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createBy">
<a-input v-model="model.createBy" placeholder="请输入提交人"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="订单金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="totalMoney">
<a-input-number v-model="model.totalMoney" :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="payWay">
<a-input v-model="model.payWay" placeholder="请输入支付方式"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="订单来源" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderSourceName">
<a-input v-model="model.orderSourceName" placeholder="请输入订单来源"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="订单状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reconciliationStatusName">
<a-input v-model="model.reconciliationStatusName" placeholder="请输入订单状态"></a-input>
</a-form-model-item>
</a-col>
<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="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="shopName">
<a-input v-model="model.shopName" placeholder="请输入商铺"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="合作伙伴" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="partnersName">
<a-input v-model="model.partnersName" placeholder="请输入所属小区"></a-input>
</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="remarks">
<a-input v-model="model.remarks" placeholder="请输入备注"></a-input>
</a-form-model-item>
</a-col>
</a-row>
</a-card>
<a-card title="操作信息">
<a-row>
<div>
<a-table ref="table" size="middle" :scroll="{x:true}" bordered rowKey="id" :columns="columns"
:dataSource="dataSource" :pagination="false" class="j-table-force-nowrap">
<span slot="balanceStatus">已付款</span>
</a-table>
</div>
</a-row>
</a-card>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { getshareBenefitApi, auditshareBenefitApi } from '@/api/api'
import { httpAction, getAction } from '@/api/manage'
import { filterDictTextByStatic, FENLICENTRAL_AUDIT_STATUS } from '@/assets/static.js'
const columns = [
{
title: '操作者',
dataIndex: 'createBy',
key: 'createBy',
align: 'center',
},
{
title: '操作时间',
dataIndex: 'createTime',
key: 'createTime',
align: 'center',
},
{
title: '订单状态',
dataIndex: 'reconciliationStatus',
key: 'reconciliationStatus',
align: 'center',
customRender: function (text) {
return filterDictTextByStatic(FENLICENTRAL_AUDIT_STATUS, text)
}
},
{
title: '付款状态',
dataIndex: 'balanceStatus',
key: 'balanceStatus',
align: 'center',
scopedSlots: { customRender: 'balanceStatus' }
},
{
title: '备注',
dataIndex: 'remarks',
key: 'remarks',
align: 'center',
}
]
export default {
name: 'PropertySettledForm',
inject: ['closeCurrent'],
data() {
return {
// title: '',
// pageType: '',
model: {},
labelCol: {
xs: { span: 24 },
sm: { span: 6 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
columns: columns,
dataSource: []
}
},
methods: {
async getPageDetail() {
let { result } = await getshareBenefitApi({ id: this.$route.query.id })
result.shareBenefit['orderSourceName'] = result.shareBenefit.orderSource === 'miniapp' ? '小程序' : 'pc'
result.shareBenefit['reconciliationStatusName'] = filterDictTextByStatic(FENLICENTRAL_AUDIT_STATUS, result.shareBenefit.reconciliationStatus)
this.model = {...result.shareBenefit}
this.dataSource = [...result.list]
},
onCancel() {
this.closeCurrent()
},
onExamine(type) {
const that = this
if (type == 1) {
return auditshareBenefitApi({
id: this.$route.query.id,
reconciliationStatus: '3',
remarks: ''
}).then((res) => {
that.$message.success('审核通过成功')
that.$emit('ok')
this.closeCurrent()
})
} else if (type == 2) {
return auditshareBenefitApi({
id: this.$route.query.id,
reconciliationStatus: '4',
remarks: ''
}).then((res) => {
that.$message.success('审核驳回成功')
this.closeCurrent()
})
}
}
},
mounted() {
// this.pageType = this.$route.query.type
// if (this.$route.query.type == '1') {
// this.title = '详情'
// } else {
// this.title = '审核'
// }
if (this.$route.query.id) {
this.getPageDetail()
}
}
}
</script>
<style lang="less" scoped>
.title-top {
background: #fff;
padding: 0 25px;
line-height: 50px;
height: 50px;
margin-bottom: 5px;
h3 {
font-weight: bold;
display: inline-block;
}
.button {
float: right;
.ant-btn {
margin-left: 15px;
}
}
}
</style>
<style>
.area-select {
width: 100% !important;
}
</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="订单编号">
<j-input placeholder="请输入订单编号" v-model="queryParam.orderNum"></j-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="状态">
<a-select style="width: 100%" v-model="queryParam.chargeTypeId" placeholder="请选择状态">
<a-select-option v-for="item in auditList" :key="item.value" :value="item.value">{{item.label}}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="提交开始时间">
<a-date-picker placeholder="提交开始时间" valueFormat="YYYY-MM-DD" v-model="queryParam.createTime_begin"></a-date-picker>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="提交结束时间">
<a-date-picker placeholder="提交结束时间" valueFormat="YYYY-MM-DD" v-model="queryParam.createTime_end"></a-date-picker>
</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>
<!-- 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> -->
以下账单,展示 <span style="color:red">{{showDay}}</span> 天前的账单金额
</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"
>
<span slot="orderSource">小程序</span>
<span slot="action" slot-scope="text, record">
<a href="javascript:;" @click="propertyDetails(record.id)">详情</a>
<template v-if="record.isShow === '1' && record.reconciliationStatus === 1 || record.reconciliationStatus === 4">
<a-divider type="vertical" />
<a href="javascript:;" @click="handleEdit(record, '申请对账')">申请对账</a>
</template>
</span>
</a-table>
</div>
<!-- table区域-end -->
<property-adv-modal ref="modalForm" @ok="modalFormOk"></property-adv-modal>
</a-card>
</template>
<script>
import { getRuleDayDetailApi } from '@/api/api'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import { filterDictTextByStatic, FENLICENTRAL_AUDIT_STATUS } from '@/assets/static.js'
import PropertyAdvModal from './modules/PropertyAdvModal'
const columns = [
{
title: '结算单号',
dataIndex: 'balanceNum',
key: 'balanceNum',
align: 'center',
},
{
title: '订单编号',
dataIndex: 'orderNum',
key: 'orderNum',
align: 'center',
},
{
title: '提交时间',
dataIndex: 'createTime',
key: 'createTime',
align: 'center',
},
{
title: '用户账号',
dataIndex: 'buyerName',
key: 'buyerName',
align: 'center',
},
{
title: '订单金额',
dataIndex: 'totalMoney',
key: 'totalMoney',
align: 'center',
},
{
title: '支付方式',
dataIndex: 'payWay',
key: 'payWay',
align: 'center'
},
{
title: '订单来源',
dataIndex: 'orderSource',
key: 'orderSource',
align: 'center',
scopedSlots: { customRender: 'orderSource' },
},
{
title: '订单状态',
dataIndex: 'reconciliationStatus',
key: 'reconciliationStatus',
align: 'center',
customRender: function (text) {
return filterDictTextByStatic(FENLICENTRAL_AUDIT_STATUS, text)
}
},
{
title: '备注',
dataIndex: 'remarks',
key: 'remarks',
align: 'center',
},
{
title: '所属平台',
dataIndex: 'propertyName',
key: 'propertyName',
align: 'center',
},
{
title: '所属小区',
dataIndex: 'communityName',
key: 'communityName',
align: 'center',
},
{
title: '合作伙伴',
dataIndex: 'partnersName',
key: 'partnersName',
align: 'center',
},
{
title: '商铺',
dataIndex: 'shopName',
key: 'shopName',
align: 'center',
},
{
title: '操作',
dataIndex: 'action',
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 150
},
]
export default {
name: 'PermissionListAsync',
mixins: [JeecgListMixin],
components: {
PropertyAdvModal,
},
data() {
return {
showDay: 7,
auditList: FENLICENTRAL_AUDIT_STATUS,
columns: columns,
url: {
list: '/property-central/partners/shareBenefit/list?platformType=central'
}
}
},
methods: {
propertyDetails(id) {
this.$router.push({
path: '/benefitsAudit/ReconciliationDetails?id=' + id
})
}
},
created() {
getRuleDayDetailApi().then(res=> {
this.showDay = res.result.days
})
}
}
</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-row>
<a-col :span="24">
<a-form-model-item label="对账总金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="totalMoneyName">
<a-input v-model="model.totalMoneyName" placeholder="请输入对账总金额" disabled></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="对账日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createTime">
<a-input v-model="model.createTime" placeholder="请输入对账日期" disabled></a-input>
</a-form-model-item>
</a-col>
<!-- <a-col :span="24">
<a-form-model-item label="广告有效期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="advDate">
<a-range-picker valueFormat="YYYY-MM-DD" :placeholder="['广告有效开始时间', '请选择广告有效结束时间']" v-model="model.advDate" style="width: 100%" />
</a-form-model-item>
</a-col> -->
<a-col :span="24">
<a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remarks">
<a-textarea placeholder="请输入备注" v-model="model.remarks" />
</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'
export default {
name: 'PropertyAdvForm',
components: {
},
props: {
//表单禁用
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {},
url: {
add: "/property-central/partners/shareBenefit/reconciliation"
},
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//备份model原始值
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record, {totalMoneyName: ${record.totalMoney}`, remarks: ''});
this.visible = true;
},
submitForm () {
const that = this;
// 触发表单验证
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let obj = {
id: this.model.id,
remarks: this.model.remarks
}
httpAction(this.url.add, obj, 'post').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="关闭">
<property-adv-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></property-adv-form>
</j-modal>
</template>
<script>
import PropertyAdvForm from './PropertyAdvForm'
export default {
name: 'PropertyAdvModal',
components: {
PropertyAdvForm
},
data () {
return {
title:'',
width:800,
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
<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="6" :sm="8">
<a-form-item label="状态">
<a-select style="width: 100%" v-model="queryParam.chargeTypeId" placeholder="请选择状态">
<a-select-option v-for="item in auditList" :key="item.value" :value="item.value">{{item.label}}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="缴费开始时间">
<a-date-picker placeholder="缴费开始时间" valueFormat="YYYY-MM-DD" v-model="queryParam.createTime_begin"></a-date-picker>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="缴费结束时间">
<a-date-picker placeholder="缴费结束时间" valueFormat="YYYY-MM-DD" v-model="queryParam.createTime_end"></a-date-picker>
</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="propertyDetails(3)" 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="ipagination" :loading="loading" class="j-table-force-nowrap" @change="handleTableChange">
<span slot="empowerEndDate" slot-scope="text, record">
<span v-if="record.empowerEndDate">{{record.empowerBeginDate}}{{record.empowerEndDate}} </span>
</span>
<span slot="propertyStatus" slot-scope="text, record">
<span>{{record.propertyStatus === 'normal' ? '正常' : '冻结'}}</span>
</span>
<span slot="action" slot-scope="text, record">
<a href="javascript:;" @click="propertyDetails(1, record.id)">详情</a>
<template v-if="record.balanceStatus === 1">
<a-divider type="vertical" />
<a href="javascript:;" @click="propertyDetails(2, record.id)">审核结算</a>
</template>
</span>
</a-table>
</div>
<!-- table区域-end -->
</a-card>
</template>
<script>
import { auditPropertyApi, freezeOrPropertyApi } from '@/api/api'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import { filterDictTextByStatic, BALANCE_STATUS } from '@/assets/static.js'
const columns = [
{
title: '结算单号',
dataIndex: 'balanceNum',
key: 'balanceNum',
align: 'center',
},
{
title: '提交时间',
dataIndex: 'balanceDate',
key: 'balanceDate',
align: 'center',
},
{
title: '身份',
dataIndex: 'platformName',
key: 'platformName',
align: 'center',
},
{
title: '提交人',
dataIndex: 'createBy',
key: 'createBy',
align: 'center',
},
{
title: '结算总金额',
dataIndex: 'balanceMoney',
key: 'balanceMoney',
align: 'center',
},
{
title: '账单数量',
dataIndex: 'balanceCount',
key: 'balanceCount',
align: 'center',
},
{
title: '结算方式',
dataIndex: 'balanceWay',
key: 'balanceWay',
align: 'center',
},
{
title: '结算状态',
dataIndex: 'balanceStatus',
key: 'balanceStatus',
align: 'center',
customRender: function (text) {
return filterDictTextByStatic(BALANCE_STATUS, text)
}
},
{
title: '操作',
dataIndex: 'action',
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 150,
},
]
export default {
name: 'PermissionListAsync',
mixins: [JeecgListMixin],
data() {
return {
auditList: BALANCE_STATUS,
columns: columns,
url: {
list: '/property-central/partners/shareBalance/list',
}
}
},
methods: {
propertyDetails(type, id) {
let params = id ? `?type=${type}&id=${id}` : `?type=${type}`
this.$router.push({
path: '/benefitsAudit/SettlementDetails' + params
})
},
onLoadDetail(record, type) {
record['registAdress'] = [record.provinceCode, record.cityCode, record.countyCode]
if (type === 'edit') {
this.handleEdit(record)
} else {
this.handleDetail(record)
}
},
onExamine(record) {
let that = this
this.$confirm({
title: '确认审核此物业?',
closable: true,
okText: '审核通过',
cancelText: '审核驳回',
onOk() {
return auditPropertyApi({
id: record.id,
auditStatus: 'auditPass',
}).then((res) => {
that.searchQuery()
})
},
onCancel() {
return auditPropertyApi({
id: record.id,
auditStatus: 'refuse',
}).then((res) => {
that.searchQuery()
})
},
})
},
onStatus(record) {
let that = this
this.$confirm({
title: `确认${record.propertyStatus === 'normal' ? '冻结' : '解冻'}此物业?`,
closable: true,
okText: `${record.propertyStatus === 'normal' ? '冻结' : '解冻'}`,
onOk() {
return freezeOrPropertyApi({
id: record.id,
status: `${record.propertyStatus === 'normal' ? 'freeze' : 'normal'}`,
}).then((res) => {
that.searchQuery()
})
},
onCancel() {},
})
},
handlePerssion(roleId) {
this.$refs.modalUserRole.show(roleId)
}
},
}
</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-row>
<a-col :span="24">
<a-form-model-item label="结算总金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="totalMoneyName">
<a-input v-model="model.totalMoneyName" placeholder="请输入结算总金额" disabled></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="结算日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="balanceDate">
<a-date-picker
v-model="model.balanceDate"
placeholder="请输入结算日期"
format="YYYY-MM-DD HH:mm:ss"
valueFormat="YYYY-MM-DD HH:mm:ss"
:showTime="true"
/>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="结算方式" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="balanceWay">
<a-select v-model="model.balanceWay" placeholder="请选择结算方式" style="width: 100%">
<a-select-option value="转账">转账</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="银行卡" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="bankCard">
<a-input v-model="model.bankCard" placeholder="请输入银行卡"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remarks">
<a-textarea placeholder="请输入备注" v-model="model.remarks" />
</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'
export default {
name: 'PropertyAdvForm',
components: {
},
props: {
//表单禁用
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
totalMoneyName: [{ required: true, message: '请输入结算总金额', trigger: 'blur' }],
balanceDate: [{ required: true, message: '请输入结算日期', trigger: 'change' }],
balanceWay: [{ required: true, message: '请选择结算方式', trigger: 'change' }],
bankCard: [{ required: true, message: '请输入银行卡', trigger: 'blur' }]
},
url: {
add: "/property-central/partners/shareBalance/add"
},
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//备份model原始值
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({
balanceDate: '',
balanceWay: '转账',
bankCard: '',
remarks: ''
}, record, {totalMoneyName: ${record.balanceMoney}`});
this.visible = true;
},
submitForm () {
const that = this;
// 触发表单验证
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
httpAction(this.url.add, {...this.model, balanceStatus: '2'}, 'post').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="关闭">
<property-adv-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></property-adv-form>
</j-modal>
</template>
<script>
import PropertyAdvForm from './PropertyAdvForm'
export default {
name: 'PropertyAdvModal',
components: {
PropertyAdvForm
},
data () {
return {
title:'',
width:800,
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
差异被折叠。
<template>
<a-spin :spinning="confirmLoading">
<div class="title-top">
<h3>积分详情</h3>
<div class="button">
<a-button @click="onCancel">返回</a-button>
</div>
</div>
<j-form-container :disabled="true">
<a-form-model ref="form" :model="model" slot="detail">
<a-card title="基本信息">
<a-row>
<a-col :span="12">
<a-form-model-item label="用户账号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ownerId">
<a-input v-model="model.ownerId" placeholder="请输入用户账号"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="用户昵称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="nickName">
<a-input v-model="model.nickName" placeholder="请输入用户昵称"></a-input>
</a-form-model-item>
</a-col>
<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="platformName">
<a-input v-model="model.platformName" placeholder="请输入所属小区"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="可用积分" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="availableIntegral">
<a-input v-model="model.availableIntegral" placeholder="请输入可用积分"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="历史总积分" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="historyIntegral">
<a-input v-model="model.historyIntegral" placeholder="请输入历史总积分"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="系统冻结积分" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="systemFreezeIntegral">
<a-input v-model="model.systemFreezeIntegral" placeholder="请输入系统冻结积分"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="手动冻结积分" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="manualFreezeIntegral">
<a-input v-model="model.manualFreezeIntegral" placeholder="请输入手动冻结积分"></a-input>
</a-form-model-item>
</a-col>
</a-row>
</a-card>
</a-form-model>
</j-form-container>
<a-card title="数据列表">
<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"
>
<span slot="paymentNo" slot-scope="text, record">
<span style="color:blue;cursor:pointer">{{record.paymentNo}}</span>
</span>
<span slot="type" slot-scope="text, record">
<span>{{record.type === 'scanQrCodePay' ? '扫码支付' : '抵扣物业费'}}</span>
</span>
</a-table>
</a-card>
</a-spin>
</template>
<script>
import { queryByIdIntegralDetailApi } from '@/api/api'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
const columns = [
{
title: '支付订单编号',
dataIndex: 'paymentNo',
key: 'paymentNo',
align: 'center',
scopedSlots: { customRender: 'paymentNo' }
},
{
title: '操作类型',
dataIndex: 'type',
key: 'type',
align: 'center',
scopedSlots: { customRender: 'type' }
},
{
title: '优币变化',
dataIndex: 'integralChange',
key: 'integralChange',
align: 'center',
},
{
title: '时间',
dataIndex: 'createTime',
key: 'createTime',
align: 'center',
}
]
export default {
name: 'PropertySettledForm',
inject: ['closeCurrent'],
mixins: [JeecgListMixin],
data() {
return {
model: {},
labelCol: {
xs: { span: 24 },
sm: { span: 6 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
columns: columns,
disableMixinCreated: true,
url: {
list: ''
}
}
},
methods: {
async getPageDetail() {
let { result } = await queryByIdIntegralDetailApi({ id: this.$route.query.id })
this.model = {...result}
},
async getPageList() {
let { result } = await getPropertyDetailApi({ id: this.$route.query.id })
},
onCancel() {
this.closeCurrent()
}
},
mounted() {
this.getPageDetail()
this.url.list = `/property-central/integral/integralRecord/ownerIntegralList?phone=${this.$route.query.phone}&platformCode=${this.$route.query.platformCode}`
this.loadData();
}
}
</script>
<style lang="less" scoped>
.title-top {
background: #fff;
padding: 0 25px;
line-height: 50px;
height: 50px;
margin-bottom: 5px;
h3 {
font-weight: bold;
display: inline-block;
}
.button {
float: right;
.ant-btn {
margin-left: 15px;
}
}
}
</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="用户ID">
<j-input placeholder="请输入用户ID" v-model="queryParam.ownerId"></j-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="手机号">
<j-input placeholder="请输入手机号" v-model="queryParam.ownerPhone"></j-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="用户昵称">
<j-input placeholder="请输入用户昵称" v-model="queryParam.nickName"></j-input>
</a-form-item>
</a-col>
<!-- <a-col :md="6" :sm="8">
<a-form-item label="会员等级">
<a-select style="width: 100%" v-model="queryParam.chargeTypeId" placeholder="请选择状态">
<a-select-option value="1">白银</a-select-option>
<a-select-option value="2">黄金</a-select-option>
<a-select-option value="5">钻石</a-select-option>
</a-select>
</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 type="primary" :disabled="selectedRowKeys.length === 0" icon="edit" @click="onBatchEdit">批量修改</a-button>
<!-- <a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="onReconciliation()"><a-icon type="audit" /></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="ipagination"
:loading="loading"
class="j-table-force-nowrap"
@change="handleTableChange"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
>
<span slot="freezeIntegral" slot-scope="text, record">
<span>{{(record.manualFreezeIntegral + record.systemFreezeIntegral).toFixed(2).replace('.00', '')}}</span>
</span>
<span slot="action" slot-scope="text, record">
<a href="javascript:;" @click="propertyDetails(record)">积分明细</a>
<a-divider type="vertical" />
<a href="javascript:;" @click="onEditScore(record.id)">修改数值</a>
<a-divider type="vertical" />
<a href="javascript:;" @click="onFreezeScore(record)">{{record.manualFreezeIntegral > 0 ? '解冻积分' : '冻结积分'}}</a>
</span>
</a-table>
</div>
<!-- table区域-end -->
<a-modal v-model="scoreVisible" title="修改积分" @ok="submitHandleOk">
<a-form-model ref="form" :model="scoreModel">
<a-row>
<a-col :span="24">
<a-form-model-item label="调整积分:" :labelCol="{ xs: { span: 24 },sm: { span: 4 } }" :wrapperCol="{ xs: { span: 24 }, sm: { span: 20 } }" prop="score">
<!-- <a-input-number id="inputNumber" v-model="scoreModel.score" :min="0" /> -->
<a-radio-group v-model="scoreModel.type" @change="onCleatValue">
<div style="display:flex;margin-bottom:10px">
<a-radio :style="radioStyle" value="plus">增加</a-radio>
<a-input-number :disabled="scoreModel.type !== 'plus'" v-model="scoreModel.plusScore" id="inputNumber" :min="1" />
</div>
<div style="display:flex;margin-bottom:10px">
<a-radio :style="radioStyle" value="minus">减少</a-radio>
<a-input-number :disabled="scoreModel.type !== 'minus'" v-model="scoreModel.minusScore" id="inputNumber" :min="1" />
</div>
<!-- <div style="display:flex">
<a-radio :style="radioStyle" value="equal">等于</a-radio>
<a-input-number :disabled="scoreModel.type !== 'equal'" v-model="scoreModel.equalScore" id="inputNumber" :min="1" />
</div> -->
</a-radio-group>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</a-modal>
</a-card>
</template>
<script>
import { editIntegralApi, freezeIntegral } from '@/api/api'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
const columns = [
{
title: '用户ID',
dataIndex: 'ownerId',
key: 'ownerId',
align: 'center',
},
{
title: '手机号',
dataIndex: 'ownerPhone',
key: 'ownerPhone',
align: 'center',
},
{
title: '用户昵称',
dataIndex: 'nickName',
key: 'nickName',
align: 'center',
},
{
title: '所属物业集团',
dataIndex: 'propertyName',
key: 'propertyName',
align: 'center',
},
{
title: '所属小区',
dataIndex: 'platformName',
key: 'platformName',
align: 'center',
},
{
title: '可用积分',
dataIndex: 'availableIntegral',
key: 'availableIntegral',
align: 'center',
},
{
title: '历史总积分',
dataIndex: 'historyIntegral',
key: 'historyIntegral',
align: 'center',
},
{
title: '系统冻结积分',
dataIndex: 'systemFreezeIntegral',
key: 'systemFreezeIntegral',
align: 'center'
},
{
title: '手动冻结积分',
dataIndex: 'manualFreezeIntegral',
key: 'manualFreezeIntegral',
align: 'center'
},
{
title: '操作',
dataIndex: 'action',
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 180,
},
]
export default {
name: 'PermissionListAsync',
mixins: [JeecgListMixin],
data() {
return {
radioStyle: {
display: 'block',
height: '30px',
lineHeight: '30px',
},
// 表头
columns: columns,
url: {
list: '/property-central/integral/ownerIntegral/list',
delete: '/property-central/property/communityReconciliation/delete',
deleteBatch: '/property-central/property/communityReconciliation/deleteBatch',
},
scoreVisible: false,
scoreModel: {
id: '',
type: 'plus',
plusScore: '',
minusScore: '',
// equalScore: ''
}
}
},
methods: {
onCleatValue() {
this.scoreModel.plusScore = ''
this.scoreModel.minusScore = ''
// this.scoreModel.equalScore = ''
},
propertyDetails(row) {
this.$router.push({
path: `/integral/IntegralDetails?id=${row.id}&phone=${row.ownerPhone}&platformCode=${row.platformCode}`
})
},
onBatchEdit() {
this.scoreModel.id = this.selectedRowKeys.join(',')
this.scoreVisible = true
},
onEditScore(id) {
this.onClearSelected()
this.scoreModel.id = id
this.scoreVisible = true
},
submitHandleOk() {
let score = 1
if(this.scoreModel.type === 'plus') {
if(this.scoreModel.plusScore) {
score = this.scoreModel.plusScore
} else {
this.$message.warning('请输入增加的积分!');
return
}
}
if(this.scoreModel.type === 'minus') {
if(this.scoreModel.minusScore) {
score = this.scoreModel.minusScore
} else {
this.$message.warning('请输入减少的积分!');
return
}
}
// if(this.scoreModel.type === 'equal') {
// if(this.scoreModel.equalScore) {
// score = this.scoreModel.equalScore
// } else {
// this.$message.warning('请输入等于的积分!');
// return
// }
// }
editIntegralApi({
ids: this.scoreModel.id,
type: this.scoreModel.type,
score
}).then(res=> {
this.scoreVisible = false
this.$message.success(res.message);
this.loadData();
this.onCleatValue()
})
},
onFreezeScore(row) {
let _this = this
this.$confirm({
title: `${row.manualFreezeIntegral > 0 ? '解冻' : '冻结'}积分`,
content: `是否确认${row.manualFreezeIntegral > 0 ? '解冻' : '冻结'}此用户积分?`,
onOk: function () {
freezeIntegral({id: row.id, status: row.manualFreezeIntegral > 0 ? 'normal' : 'freeze'}).then(res=> {
_this.$message.success(res.message);
_this.loadData();
})
}
});
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>
\ No newline at end of file
<template>
<a-spin :spinning="confirmLoading">
<div class="title-top">
<h3>{{title}}</h3>
<div class="button">
<a-button @click="onCancel">返回</a-button>
<a-button type="danger" @click="onExamine('refuse')" v-if="pageType == '2'">审核驳回</a-button>
<a-button type="primary" @click="onExamine('auditPass')" v-if="pageType == '2'">审核通过</a-button>
<a-button type="primary" @click="onRefund" v-if="pageType == '3'">确认退款</a-button>
</div>
</div>
<j-form-container :disabled="true">
<a-form-model ref="form" :model="model" slot="detail">
<a-card title="基本信息">
<a-row>
<a-col :span="12">
<a-form-model-item label="订单编号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderNo">
<a-input v-model="model.orderNo" placeholder="请输入订单编号"></a-input>
</a-form-model-item>
</a-col>
<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="ownerName">
<a-input v-model="model.ownerName" placeholder="请输入业主名称"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="用户账号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ownerPhone">
<a-input v-model="model.ownerPhone" placeholder="请输入用户账号" />
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="支付方式" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="contactName">
<a-input value="微信支付" placeholder="请输入支付方式"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="订单来源" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maker">
<a-input :value="model.paySource === 'wechat' ? '微信' : '小程序'" placeholder="请输入订单来源"></a-input>
</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="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="maker">
<a-input v-model="model.maker" placeholder="请输入备注"></a-input>
</a-form-model-item>
</a-col>
</a-row>
</a-card> -->
<a-card title="操作信息">
<a-row>
<div>
<a-table ref="table" size="middle" :scroll="{x:true}" bordered rowKey="id" :columns="columns"
:dataSource="dataSource" :pagination="false" class="j-table-force-nowrap">
<span slot="payStatus">已付款</span>
</a-table>
</div>
</a-row>
</a-card>
</a-form-model>
</j-form-container>
<a-modal v-model="remarksVisible" :title="`${remarksModel.auditStatus === 'auditPass' ? '通过' : '驳回'}说明`" @ok="submitHandleOk">
<a-form-model ref="form" :model="remarksModel">
<a-row>
<a-col :span="24">
<a-form-model-item label="备注" :labelCol="{ xs: { span: 24 },sm: { span: 3 } }" :wrapperCol="{ xs: { span: 24 }, sm: { span: 20 } }" prop="refundDes">
<a-textarea placeholder="请输入备注" v-model="remarksModel.refundDes" />
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</a-modal>
</a-spin>
</template>
<script>
import { refundQueryByIdApi, auditRefundOrderApi, confirmRefundOrderApi } from '@/api/api'
import { httpAction, getAction } from '@/api/manage'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import { filterDictTextByStatic, REFUND_STATUS } from '@/assets/static.js'
const columns = [
{
title: '操作者',
dataIndex: 'createBy',
key: 'createBy',
align: 'center',
},
{
title: '操作时间',
dataIndex: 'createTime',
key: 'createTime',
align: 'center',
},
{
title: '订单状态',
dataIndex: 'auditStatus',
key: 'auditStatus',
align: 'center',
// customRender: function (text) {
// return filterDictTextByStatic(REFUND_STATUS, text)
// }
},
{
title: '付款状态',
dataIndex: 'payStatus',
key: 'payStatus',
align: 'center',
scopedSlots: { customRender: 'payStatus' }
},
{
title: '备注',
dataIndex: 'refuseDesc',
key: 'refuseDesc',
align: 'center',
}
]
export default {
name: 'PropertySettledForm',
inject: ['closeCurrent'],
mixins: [JeecgListMixin],
data() {
return {
title: '',
pageType: '',
model: {},
labelCol: {
xs: { span: 24 },
sm: { span: 6 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
url: {
add: '/property-central/property/propertySettled/add',
list: `/property-central/property/auditRecord/getRecordList?dataId=${this.$route.query.id}&auditType=refundAudit`
},
columns: columns,
remarksVisible: false,
remarksModel: {
refundDes: '',
auditStatus: ''
}
}
},
methods: {
async getPageDetail() {
let { result } = await refundQueryByIdApi({ id: this.$route.query.id })
this.edit(result)
},
onCancel() {
this.closeCurrent()
},
edit(record) {
this.model = Object.assign({}, record)
this.model.registAdress = [record.provinceCode, record.cityCode, record.countyCode]
this.visible = true
},
onExamine(status) {
this.remarksModel.auditStatus = status
this.remarksVisible = true
},
submitHandleOk() {
auditRefundOrderApi({
id: this.$route.query.id,
...this.remarksModel
}).then((res) => {
this.$message.success(`${this.remarksModel.auditStatus === 'auditPass' ? '审核通过' : '审核驳回'}成功`)
this.closeCurrent()
})
},
onRefund() {
let _this = this
this.$confirm({
title: "确认退款",
content: "是否确认退款?",
onOk: function () {
confirmRefundOrderApi({id: _this.$route.query.id, status: 'refunded'}).then(res=> {
_this.$message.success('退款成功');
_this.closeCurrent();
})
}
});
}
},
mounted() {
//备份model原始值
//this.modelDefault = JSON.parse(JSON.stringify(this.model))
this.pageType = this.$route.query.type
if (this.$route.query.type == '1') {
this.title = '详情'
} else if (this.$route.query.type == '2') {
this.title = '审核'
}
if (this.$route.query.id) {
this.getPageDetail()
}
}
}
</script>
<style lang="less" scoped>
.title-top {
background: #fff;
padding: 0 25px;
line-height: 50px;
height: 50px;
margin-bottom: 5px;
h3 {
font-weight: bold;
display: inline-block;
}
.button {
float: right;
.ant-btn {
margin-left: 15px;
}
}
}
</style>
<style>
.area-select {
width: 100% !important;
}
</style>
\ No newline at end of file
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论