Commit 0cf1c156 authored by cellee's avatar cellee

完成新增小区,小区列表搜索优化,新增小区详情页面

Signed-off-by: cellee's avatarcellee <893264950@qq.com>
parent 62fee18b
......@@ -218,7 +218,7 @@ export default defineConfig({
routes:[
{ path: './', component: './CommunityManagement/CellList/CellList' },
{ path: './Add', component: './CommunityManagement/CellList/Adds' },
{path:'./Detail',component:'./CommunityManagement/CellList/Detail'},
{path:'./Detail',component:'./CommunityManagement/CellList/Details'},
]
},
{
......
import React, { useState, useEffect, useRef } from 'react';
import { Link, useIntl, connect, Dispatch, history } from 'umi';
import styles from './index.less';
import BackButton from '../BackButton/BackButton';
import TitleGet from '../TitleGet/TitleGet';
import { Input, Row, Col, Form, Select, Button, DatePicker } from 'antd';
const { Option } = Select;
import SelectOptions from '../../components/SelectOptions/index';
import { gray } from 'chalk';
import SearchOptionsCommnity from '../SearchOptions/SearchOptionsCommnity';
const TitleSearch = (props: any) => {
// console.log("===================================", props)
const { dispatch, CommunityList } = props;
const key = props.listkey
const name = props.list;
// const single = props.single
// const checklist = props.checklist;
// const status = props.status;
// const communitySelect = props.communitySelect
// const defaultValue = props.defaultValue;
const { single, checklist, status, communitySelect, defaultValue } = props;
const time = props.time;
const community = props.community;
const [selectOptions, setSelectOptions] = useState(true)
const [communitys, setCommunitys] = useState(CommunityList)
const [communitySingle, setCommunitySingle] = useState(null)
const [datePicker, setDate] = useState(null)
const [form] = Form.useForm()
const tosCommunityget = (values: any) => { dispatch({ type: 'Init/tosCommunityget', playload: values }) };
useEffect(() => {
// console.log("标题搜寻组件初始化") OK
if (CommunityList == null) {
// console.log("小区数量初始化") OK
tosCommunityget(null)
}
if (defaultValue != null) {
form.setFieldsValue(defaultValue)
}
}, []);
useEffect(() => {
if (defaultValue != null) {
form.setFieldsValue(defaultValue)
}
}, [defaultValue])
useEffect(() => {
// console.log(CommunityList)
if (CommunityList != null) {
// console.log("小区数量初始化完毕") OK
var tmp = {}
tmp[community] = CommunityList
// props.onSubmit(tmp) 禁用 改用组件初始化
setCommunitys(CommunityList)
}
}, [CommunityList])
const onFinish = (values: any) => {
if (datePicker) {
values[time[0]] = datePicker;
}
if (community) {
values[community] = communitys
}
console.log('Success:', values);
props.onSubmit(values)
};
const onFinishFailed = (errorInfo: any) => {
console.log('Failed:', errorInfo);
};
const onChange = (date: any, dateString: string) => {
setDate(dateString)
}
const printContent = (comment: any) => {
setCommunitys(comment)
}
// 选择小区名字并赋值
const opname = (value: any) => {
form.setFieldsValue({
'communityName': value
})
}
return (
<>
<Form form={form} name="basic" onFinish={onFinish} onFinishFailed={onFinishFailed}>
<Row gutter={32}>
{
communitySelect != null ?
<Col key={"communitySelect_"} ><Form.Item name={"communityName"}><SearchOptionsCommnity titleSearch={true} opname={opname} /></Form.Item></Col>
: null
}
{
key != null ?
key.map((item, index) => {
return (
<Col key={"KeyCol_" + index}><Form.Item name={item}><Input placeholder={name[index]} allowClear /></Form.Item></Col>
)
})
: null
}
{
status != null ?
status.map((item, index) => {
return (
<Col key={"StatusCol_" + index}>
<Form.Item name={item.name[0]}>
<Select style={{ width: 160 }} placeholder={item.name[1]} allowClear={true}>
{
item.data.map(word => {
return (
<Option key={word} value={word[0]}>{word[1]}</Option>
)
})
}
</Select>
</Form.Item>
</Col>
)
})
: null
}
{
time != null ?
<Col key={"datePicker_"} > <DatePicker placeholder={time[1]} onChange={onChange} /></Col>
: null
}
{
community == null ?
<Col><Form.Item><Button type="primary" htmlType="submit">Search</Button></Form.Item></Col>
: null
}
</Row>
{
community != null ?
<>
{
CommunityList != null ?
<SelectOptions checklist={checklist} single={single} list={CommunityList.sort()} show={selectOptions} onSubmit={printContent} /> :
null
}
<Form.Item><Button type="primary" htmlType="submit" style={{ backgroundColor: "#e7f4ff", color: "rgba(24,144,255,1)" }}>Search</Button></Form.Item>
</> : null
}
</Form>
</>
);
};
function mapStateToProps(state: any) {
// console.log("state参数",state)
const { CommunityList } = state.Init;
return {
CommunityList,
};
}
export default connect(mapStateToProps)(TitleSearch);
// time={["key","预订时间筛选"]}
// status = [{name:"status",data:["处理", "未处理"]}]
// listkey={['A', 'C']} list={['订单状态', '预订时间筛选']}
// <TitleSearch
// status={[{
// name: ["status", "订单状态"],
// data: [[0, "全部"], [1, "已申请"], [2, "已预订"], [3, "已使用"], [4, "已取消"]]
// }]}
// time={["key", "预订时间筛选"]}
// community={"communityName"}
// // single={true}
// onSubmit={CallBackTitleSearch} />
\ No newline at end of file
......@@ -18,68 +18,69 @@ const TitleSearch = (props: any) => {
const { dispatch, CommunityList } = props;
const key = props.listkey
const key = props.listkey;
console.log(props);
const name = props.list;
// const single = props.single
// const checklist = props.checklist;
// const status = props.status;
// const communitySelect = props.communitySelect
// const defaultValue = props.defaultValue;
// const time = props.time;
const { single, checklist, status, communitySelect, defaultValue } = props;
// username 为 小区列表管理者名字筛选
const { single, checklist, status, communitySelect, defaultValue, time, username } = props;
const time = props.time;
const community = props.community;
const [selectOptions, setSelectOptions] = useState(true)
const [communitys, setCommunitys] = useState(CommunityList)
const [communitySingle, setCommunitySingle] = useState(null)
const [datePicker, setDate] = useState(null)
const [selectOptions, setSelectOptions] = useState(true);
const [communitys, setCommunitys] = useState(CommunityList);
const [communitySingle, setCommunitySingle] = useState(null);
const [datePicker, setDate] = useState(null);
const [form] = Form.useForm()
const [form] = Form.useForm();
const tosCommunityget = (values: any) => { dispatch({ type: 'Init/tosCommunityget', playload: values }) };
const tosCommunityget = (values: any) => {
dispatch({ type: 'Init/tosCommunityget', playload: values });
};
useEffect(() => {
// console.log("标题搜寻组件初始化") OK
if (CommunityList == null) {
// console.log("小区数量初始化") OK
tosCommunityget(null)
tosCommunityget(null);
}
if (defaultValue != null) {
form.setFieldsValue(defaultValue)
form.setFieldsValue(defaultValue);
}
}, []);
useEffect(() => {
if (defaultValue != null) {
form.setFieldsValue(defaultValue)
form.setFieldsValue(defaultValue);
}
}, [defaultValue])
}, [defaultValue]);
useEffect(() => {
// console.log(CommunityList)
if (CommunityList != null) {
// console.log("小区数量初始化完毕") OK
var tmp = {}
tmp[community] = CommunityList
var tmp = {};
tmp[community] = CommunityList;
// props.onSubmit(tmp) 禁用 改用组件初始化
setCommunitys(CommunityList)
setCommunitys(CommunityList);
}
}, [CommunityList])
}, [CommunityList]);
const onFinish = (values: any) => {
if (datePicker) {
values[time[0]] = datePicker;
}
if (community) {
values[community] = communitys
values[community] = communitys;
}
console.log('Success:', values);
props.onSubmit(values)
props.onSubmit(values);
};
const onFinishFailed = (errorInfo: any) => {
......@@ -87,90 +88,111 @@ const TitleSearch = (props: any) => {
};
const onChange = (date: any, dateString: string) => {
setDate(dateString)
}
setDate(dateString);
};
const printContent = (comment: any) => {
setCommunitys(comment)
}
setCommunitys(comment);
};
// 选择小区名字并赋值
const opname = (value: any) => {
form.setFieldsValue({
'communityName': value
})
}
communityName: value,
});
};
return (
<>
<Form form={form} name="basic" onFinish={onFinish} onFinishFailed={onFinishFailed}>
<Row gutter={32}>
{
communitySelect != null ?
<Col key={"communitySelect_"} ><Form.Item name={"communityName"}><SearchOptionsCommnity titleSearch={true} opname={opname} /></Form.Item></Col>
: null
}
{
key != null ?
key.map((item, index) => {
{communitySelect != null ? (
<Col key={'communitySelect_'}>
<Form.Item name={'communityName'}>
<SearchOptionsCommnity titleSearch={true} opname={opname} />
</Form.Item>
</Col>
) : null}
{key != null
? key.map((item, index) => {
return (
<Col key={"KeyCol_" + index}><Form.Item name={item}><Input placeholder={name[index]} allowClear /></Form.Item></Col>
)
<Col key={'KeyCol_' + index}>
<Form.Item name={item}>
<Input placeholder={name[index]} allowClear />
</Form.Item>
</Col>
);
})
: null
}
{
status != null ?
status.map((item, index) => {
: null}
{/* 小区列表的管理员姓名搜索 */}
{username != null ? (
<Col key={'username_' + username[0]}>
<Form.Item name={username[0]} label="Username">
<Input placeholder={username[1]} allowClear />
</Form.Item>
</Col>
) : null}
{status != null
? status.map((item, index) => {
return (
<Col key={"StatusCol_" + index}>
<Col key={'StatusCol_' + index}>
<Form.Item name={item.name[0]}>
<Select style={{ width: 160 }} placeholder={item.name[1]} allowClear={true}>
{
item.data.map(word => {
{item.data.map((word) => {
return (
<Option key={word} value={word[0]}>{word[1]}</Option>
)
})
}
<Option key={word} value={word[0]}>
{word[1]}
</Option>
);
})}
</Select>
</Form.Item>
</Col>
)
);
})
: null
}
{
time != null ?
<Col key={"datePicker_"} > <DatePicker placeholder={time[1]} onChange={onChange} /></Col>
: null
}
{
community == null ?
<Col><Form.Item><Button type="primary" htmlType="submit">Search</Button></Form.Item></Col>
: null
}
: null}
{time != null ? (
<Col key={'datePicker_'}>
{' '}
<DatePicker placeholder={time[1]} onChange={onChange} />
</Col>
) : null}
{community == null ? (
<Col>
<Form.Item>
<Button type="primary" htmlType="submit">
Search
</Button>
</Form.Item>
</Col>
) : null}
</Row>
{
community != null ?
{community != null ? (
<>
{
CommunityList != null ?
<SelectOptions checklist={checklist} single={single} list={CommunityList.sort()} show={selectOptions} onSubmit={printContent} /> :
null
}
<Form.Item><Button type="primary" htmlType="submit" style={{ backgroundColor: "#e7f4ff", color: "rgba(24,144,255,1)" }}>Search</Button></Form.Item>
</> : null
}
{CommunityList != null ? (
<SelectOptions
checklist={checklist}
single={single}
list={CommunityList.sort()}
show={selectOptions}
onSubmit={printContent}
/>
) : null}
<Form.Item>
<Button
type="primary"
htmlType="submit"
style={{ backgroundColor: '#e7f4ff', color: 'rgba(24,144,255,1)' }}
>
Search
</Button>
</Form.Item>
</>
) : null}
</Form>
</>
);
};
......
......@@ -41,10 +41,11 @@ export default {
console.log(resp)
// if (resp.code == 500||resp.error_code!="0000") {
// }
if (resp.error_code != "0000") {
if (resp.code == 500 && resp.error_code != "0000") {
getObjectInfo(playload.body)
printf(playload, resp)
}
message.error(`${resp.code}:${resp.msg}`)
} else {
switch (playload.index) {
case 24: {
let Data = resp.data;
......@@ -53,8 +54,12 @@ export default {
case 29: {
let Result = resp;
yield put({ type: 'returnResult', Result });
message.success(`新增成功!`)
} break;
}
history.push('/CommunityManagement/CellList');
}
},
......
import React from 'react';
import { LeftOutlined, EditOutlined, PlusCircleOutlined, UploadOutlined } from '@ant-design/icons';
import React, { useState, useEffect } from 'react';
import { connect } from 'dva';
import { LeftOutlined, EditOutlined, UploadOutlined } from '@ant-design/icons';
import { Form, Input, Button, TimePicker, Checkbox, Upload, message } from 'antd';
// 样式
import './celllist.less';
import { RA } from '@/utils/method';
const { RangePicker } = TimePicker;
import moment from 'moment';
const Adds = () => {
// 接口申明
interface objc {}
const Adds = (props: any) => {
const { Data, dispatch } = props;
useEffect(() => {
// 如果是添加传来没有值的时候 就清空 否则 赋值给表单
if (Data) {
// 返回列表
console.log('编辑');
console.log(Data);
} else {
console.log('新建');
}
}, [1]);
//物业费选择
const plainOptions = [
{ label: '线上缴费', value: '0' },
{ label: '线上缴费', value: '0', disabled: true },
{ label: '线下缴费', value: '1' },
];
const props = {
const { RangePicker } = TimePicker;
// 表单物业费提交值
const [PropertyFee, setPropertyFee] = useState(['1']);
// 楼巴上传列表
const [loubaUpload, setLouba] = useState([] as any);
// 物业办事指南列表
const [guideUpload, setGuide] = useState([] as any);
// 保质期服务列表
const [periodUpload, setPeriod] = useState([] as any);
// 上传设置
const uploads = {
name: 'file',
action: 'https://www.mocky.io/v2/5cc8019d300000980a055e76',
headers: {
authorization: 'authorization-text',
accept: '.doc,.docx,.jpg,.png,.pdf',
action: '/tos/image/upload',
data: { imageType: 'tosContract' },
};
// 楼巴上传
const upload1 = {
onChange(info: any) {
let po = new Array();
po.push(info.fileList[info.fileList.length - 1]);
// 给楼巴上传列表值
setLouba(po);
// 结果
uploadMsg(info);
},
onChange(info) {
if (info.file.status !== 'uploading') {
console.log(info.file, info.fileList);
}
};
// 指南上传
const upload2 = {
onChange(info: any) {
let po = new Array();
po.push(info.fileList[info.fileList.length - 1]);
// 给楼巴上传列表值
setGuide(po);
// 结果
uploadMsg(info);
},
};
// 保质期上传
const upload3 = {
onChange(info: any) {
let po = new Array();
po.push(info.fileList[info.fileList.length - 1]);
// 给楼巴上传列表值
setPeriod(po);
// 结果
uploadMsg(info);
},
};
// 上传提示
function uploadMsg(info: any) {
if (info.file.status === 'done') {
message.success(`${info.file.name} file uploaded successfully`);
} else if (info.file.status === 'error') {
message.error(`${info.file.name} file upload failed.`);
}
},
};
}
function onChange(checkedValues) {
console.log('checked = ', checkedValues);
// 多选选择改变值
function onChange(checkedValues: any) {
// 修改选择值
setPropertyFee(checkedValues);
}
// undefind 验证
function undeFi(e: any) {
if (typeof e == 'undefined') {
return '';
} else {
return e;
}
}
// 表单提交
const onFinish = (values: any) => {
// console.log('Success:', values);
message.error(`页面重构,后端接口处理中...`);
let obj: any = new Object();
obj.propertyFee = PropertyFee;
// 小区信息;
let { residentialEmail, residentialAddress, residentialName } = values.des;
obj.residentialZipCode = residentialEmail;
obj.residentialAddress = residentialAddress;
obj.residentialName = residentialName;
// 小区时间与管理员
obj.residentialManagerUserName = undeFi(values.residentialManagerUserName);
obj.residentialStartWorking = values.workingHours[0].format('HH:mm');
obj.residentialEndWorking = values.workingHours[1].format('HH:mm');
obj.residentialPhone = values.info.tel;
obj.residentialEmail = values.info.email;
// 上传内容
obj.balouscheduleUrl = undeFi(loubaUpload.map((item: any) => item.name)[0]);
obj.serviceGuideUrl = undeFi(guideUpload.map((item: any) => item.name)[0]);
obj.lifeServiceUrl = undeFi(periodUpload.map((item: any) => item.name)[0]);
// 小区热线
// 表单结构存在数据不存在情况, 所以要多判断一次
if (values.help) {
obj.residentialHotlineName = undeFi(values.help.residentialHotlineName);
obj.residentialHotline = undeFi(values.help.residentialHotline);
obj.residentialHotlineServieStartTime = undeFi(values.help.time[0]).format('HH:mm');
obj.residentialHotlineServieEndTime = undeFi(values.help.time[1]).format('HH:mm');
} else {
obj.residentialHotlineName = '';
obj.residentialHotline = '';
obj.residentialHotlineServieStartTime = '';
obj.residentialHotlineServieEndTime = '';
}
console.log('Success:', obj);
// 上传
RA(29, obj, 'CellList', dispatch);
};
// 返回
const goToReturn = () => {
// console.log(fileList)
history.back()
}
history.back();
};
// 上传
return (
<div className="form">
<h3>
<EditOutlined />
&nbsp; 添加小区
<div className="back">
<Button onClick={goToReturn}>
<LeftOutlined />
......@@ -66,122 +174,132 @@ const Adds = () => {
<Form
name="basic"
onFinish={onFinish}
labelCol={{ span: 3 }}
wrapperCol={{ span: 18 }}
layout="horizontal"
labelAlign="left"
>
<Form.Item label="Community Name" name="communityName">
<Input style={{ width: 120 }} placeholder="6 Postcode" maxLength={6} />{' '}
<span className="span">
小区地址小区地址小区地址小区地址小区地址小区地址小区地址小区地址小区地址小区地址小区地址
</span>{' '}
<div>
<li className="li">小区名字</li>
<Form.Item label="Community Name" name="des">
<Input.Group compact>
<Form.Item
name={['des', 'residentialEmail']}
noStyle
// rules={[{ required: true, message: 'Province is required' }]}
>
<Input
style={{ marginRight: '10px', width: 120 }}
placeholder="6 Postcode"
maxLength={6}
/>
</Form.Item>
<Form.Item
name={['des', 'residentialAddress']}
noStyle
// rules={[{ required: true, message: 'Street is required' }]}
>
<Input style={{ width: '360px' }} placeholder="Please enter community adds" />
</Form.Item>
<div className="li">
<Form.Item
name={['des', 'residentialName']}
noStyle
// rules={[{ required: true, message: 'Street is required' }]}
>
<Input
style={{ marginRight: '10px', width: '260px' }}
placeholder="Please enter community name"
/>
</Form.Item>
</div>
</Input.Group>
</Form.Item>
<Form.Item label="Working Hours" name="workingHours">
<RangePicker />
<RangePicker format="HH:mm" />
</Form.Item>
<Form.Item label="Community Telephone" name="communityTelephone">
<Form.Item label="Community Telephone" name="info">
<Input.Group compact>
<Form.Item
name={['communityTelephone', 'tel']}
name={['info', 'tel']}
noStyle
// rules={[{ required: true, message: 'Province is required' }]}
>
<Input style={{ marginRight: '10px', width: '160px' }} placeholder="Please enter Phone" />
<Input
style={{ marginRight: '10px', width: '160px' }}
placeholder="Please enter phone"
/>
</Form.Item>
<Button type="text"></Button>
<Form.Item
name={['communityTelephone', 'email']}
name={['info', 'email']}
noStyle
// rules={[{ required: true, message: 'Street is required' }]}
>
<Input style={{ marginLeft: '10px', width: '180px' }} placeholder="Please enter Email" />
<Input
style={{ marginLeft: '10px', width: '180px' }}
placeholder="Please enter Email"
/>
</Form.Item>
</Input.Group>
</Form.Item>
<Form.Item label="Administrators" name="adminiStrators">
<Input style={{ width: '160px' }} placeholder='Contacts' /> <Button type="text"><PlusCircleOutlined style={{ fontSize: '18px', color: '#08c' }} /></Button>
<Form.Item label="Administrators" name="residentialManagerUserName">
<Input style={{ width: '160px' }} placeholder="Contacts" />
{/* <Button type="text">
<PlusCircleOutlined style={{ fontSize: '18px', color: '#08c' }} />
</Button> */}
</Form.Item>
<Form.Item label="Property Fee" name="propertyFee" style={{ marginBottom: '0' }}>
<Checkbox.Group options={plainOptions} defaultValue={['1']} onChange={onChange} />
<div className='tip'>
<div className="tip">
<span>*</span>线上缴费会有服务费
</div>
</Form.Item>
<hr />
<Form.Item label="Louba Timetable" name="loubaTimetable" style={{ marginBottom: '0' }}>
<Upload {...props}>
{/* 小区信息部分 */}
<Form.Item label="Louba Timetable" name="balouscheduleFile" style={{ marginBottom: '0' }}>
<Upload {...uploads} {...upload1} fileList={loubaUpload}>
<Button icon={<UploadOutlined />}>Click to Upload</Button>
</Upload>
<div className='tip'>
支持文件:.pdf,.jpg, .png
</div>
<div className="tip">支持文件:.pdf,.jpg, .png</div>
</Form.Item>
<Form.Item label="Property Guide" name="propertyGuide" style={{ marginBottom: '0' }}>
<Upload {...props}>
<Form.Item label="Property Guide" name="serviceGuideFile" style={{ marginBottom: '0' }}>
<Upload {...uploads} {...upload2} fileList={guideUpload}>
<Button icon={<UploadOutlined />}>Click to Upload</Button>
</Upload>
<div className='tip'>
支持文件:.pdf,.jpg, .png
</div>
<div className="tip">支持文件:.pdf,.jpg, .png</div>
</Form.Item>
<Form.Item label="Period of Service" name="period" style={{ marginBottom: '0' }}>
<Upload {...props}>
<Form.Item label="Period of Service" name="lifeServiceFile" style={{ marginBottom: '0' }}>
<Upload {...uploads} {...upload3} fileList={periodUpload}>
<Button icon={<UploadOutlined />}>Click to Upload</Button>
</Upload>
<div className='tip'>
支持文件:.pdf,.jpg, .png
</div>
<div className="tip">支持文件:.pdf,.jpg, .png</div>
</Form.Item>
<hr />
<Form.Item label="Help Phone" name="helpPhone">
{/* 上传部分 */}
<Form.Item label="Help" name="help">
<Input.Group compact>
<Form.Item
name={['helpPhone', 'tel']}
noStyle
>
<Form.Item name={['help', 'residentialHotlineName']} noStyle>
<Input style={{ marginRight: '10px', width: '160px' }} placeholder="热线电话名称" />
</Form.Item>
<Form.Item
name={['helpPhone', 'email']}
noStyle
>
<Form.Item name={['help', 'residentialHotline']} noStyle>
<Input style={{ marginRight: '10px', width: '180px' }} placeholder="热线电话" />
</Form.Item>
<Form.Item
name={['helpPhone', 'email2']}
noStyle
>
<Input style={{ marginRight: '10px', width: '180px' }} placeholder="服务起始时间" />
</Form.Item>
<Form.Item
name={['helpPhone', 'email3']}
noStyle
>
<Input style={{ marginRight: '10px', width: '180px' }} placeholder="服务结束时间" />
<Form.Item name={['help', 'time']} noStyle>
<RangePicker format="HH:mm" />
</Form.Item>
</Input.Group>
</Form.Item>
......@@ -192,8 +310,13 @@ const Adds = () => {
</Form.Item>
</Form>
</div>
);
};
export default Adds;
// export default Adds;
function map(state: any) {
const Data = state.CellList.DataSave;
const loading = state.loading.models.CellList;
return { Data, loading };
}
export default connect(map)(Adds);
import React, { useState, useEffect } from 'react';
import { Input ,Tabs,Table,Space, Button ,Form ,message} from 'antd';
const { TabPane } = Tabs;
import {connect,history} from 'umi';
import { Space, Button, Form, message } from 'antd';
import { connect, history } from 'umi';
// 图标
import { SearchOutlined,ClearOutlined,PlusOutlined } from '@ant-design/icons';
import { PlusOutlined } from '@ant-design/icons';
import ProTable from '@ant-design/pro-table';
import TitleSearch from '@/components/TitleSearch/TitleSearch'
import SearchOptionsCommnity from '@/components/SearchOptions/SearchOptionsCommnity'
import TitleSearch from '@/components/TitleSearch/TitleSearch';
import { RA, SA } from '@/utils/method';
import { objectColumns } from '@/utils/string';
import { timestampToTime } from '@/utils/time';
import CommunitySearch from "@/components/CommunitySearch/CommunitySearch";
const module="CellList"
const module = 'CellList';
import './celllist.less'
const CellList = (props:any) => {
import './celllist.less';
const CellList = (props: any) => {
const columns = objectColumns([
["Community", "residentialName"],
["Administrator", "residentialManagerUserName"],
["Operation Hours", null, (text: any, record: any) => (<div></div>)],
["Office Tel", "residentialPhone"],
["Address", "residentialAddress"],
["Actions", null, (text: any, record: any) => (<Space size="middle">
['Community', 'residentialName'],
['Administrator', 'residentialManagerUserName'],
[
'Operation Hours',
null,
(text: any, record: any) => (
<div>
<span>{record.residentialStartWorking}</span>
<span>-</span>
<span>{record.residentialEndWorking}</span>
</div>
),
],
['Office Tel', 'residentialPhone'],
['Address', 'residentialAddress'],
[
'Actions',
null,
(text: any, record: any) => (
<Space size="middle">
<a onClick={goToDetail.bind(this, record)}>Edit</a>
<a onClick={goToDetail.bind(this,record)}>Detail</a>
</Space>)],
])
const { dispatch, Data , loading , curString} = props;
const onChange = e => {
e.persist();
console.log("表单输入的值", e.target.value);
};
<a onClick={goToDetail.bind(this, record)}>Detail</a>
</Space>
),
],
]);
const { dispatch, Data, loading, curString } = props;
console.log(curString);
useEffect(() => {
RA(24, {communityName: "" }, module, dispatch);
}, [])
RA(24, { communityName: '' }, module, dispatch);
}, []);
useEffect(() => {
if (Data != null) {
//console.log(columnsVal)
}
}, [Data])
const CallbackSearch = (values:any) => {
RA(24, {communityName: values }, module, dispatch);
}
}, [Data]);
const CallbackSearch = (values: any) => {
RA(24, { communityName: values }, module, dispatch);
};
const goToAdd = () => {
history.push("./CellList/Add");
}
SA('', module, dispatch); // 清空之前传递的数据
history.push('./CellList/Add');
};
const goToDetail = (values: any, e: any) => {
SA(values,module,dispatch)
history.push("./CellList/Detail");
}
// 表单标识
const [form] = Form.useForm()
// 表单提交
const onFinishContract = (value:any)=>{
// console.log(value)
if(!value.communityName&&!value.contractNumber&&!value.contractTitle){
message.error('Please enter one of them!')
}else{
console.log(value)
let payload = {
index: 19,
page:{
pageNum:1,
contractNumber:value.contractNumber,
contractTitle:value.contractTitle,
communityName:value.communityName
}
}
// requst(payload);
}
}
// 选择小区名字并赋值
const opname = (value:any)=>{
form.setFieldsValue({
'communityName' : value
})
}
// 重置
const onReset = () => {
form.resetFields();
let payload = {
index: 19,
page:{
pageNum:1
}
}
// console.log(values);
SA(values, module, dispatch);
history.push('./CellList/Detail');
};
// 点击搜索
const CallBackTitleSearch= (comment: any) => {
console.log(comment)
// if (comment.communityName != null || comment.key != null || comment.status != null) {
// var tmp = curString
// tmp.subscribeDate = comment.key
// if (comment.status == null||comment.status==undefined) {
// tmp.status = 0;
// } else {
// tmp.status = comment.status
// }
// tmp.communityNameList = comment.communityName
// tmp.curPage=1
// QA(tmp)
// console.log(tmp)
// //中断
// RA(9, { userToken: token, pageNum: "1", subscribeDate: tmp.subscribeDate, status: tmp.status,communityNameList:comment.communityName })
// }
const CallBackTitleSearch = (comment: any) => {
if (comment.communityName.length > 0 || typeof comment.label !== 'undefined') {
let tmp: any = new Object();
tmp.adminName = comment.label;
tmp.communityName = comment.communityName;
tmp.curPage = 1;
// QA(tmp);
console.log(tmp);
// CallbackSearch()
//中断
// RA(9, {
// userToken: token,
// pageNum: '1',
// subscribeDate: tmp.subscribeDate,
// status: tmp.status,
// communityNameList: comment.communityName,
// }, module, dispatch);
} else {
message.error('请输入管理员姓名或选择小区进行搜索!');
}
};
return (
<div >
{
Data != null ? <>
<div>
{Data != null ? (
<>
{/* <TitleSearch listkey={['communityName']} list={['Community Name']} onSubmit={CallBackTitleSearch}/> */}
<div className='contop'>
<div className="contop">
<TitleSearch
status={[{
name: ["status", "Order status"],
data: [[0, "All"], [1, "Applied"], [2, "Reserved"], [3, "Used"], [4, "Cancelled"]]
}]}
time={["key", "Booking time "]}
community={"communityName"}
checklist={curString.communityNameList!=null?curString.communityNameList:null}
onSubmit={CallBackTitleSearch} />
{/* <Form
autoComplete= "off"
layout="inline"
form={form}
name="contract"
onFinish={onFinishContract}
>
<Form.Item name="communityName">
<SearchOptionsCommnity
// ubmit={extendName}
opname={opname} />
</Form.Item>
<Form.Item name="contractNumber">
<Input allowClear placeholder='Contract No' />
</Form.Item>
<Form.Item name="contractTitle">
<Input allowClear placeholder='Contract Title' />
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit" icon={<SearchOutlined />} loading={loading}>Search </Button>
<Button htmlType="button" onClick={onReset} style={{marginLeft:'15px'}} icon={<ClearOutlined />} loading={loading}> Reset</Button>
</Form.Item>
</Form> */}
username={['label', '请输入管理员姓名']}
community={'communityName'}
checklist={curString.communityNameList != null ? curString.communityNameList : null}
onSubmit={CallBackTitleSearch}
/>
</div>
<ProTable
// request={requestHeadl}
pagination={false} // 隐藏默认分页
rowKey={"id"}
rowKey={'id'}
dataSource={Data.rows}
columns={columns}
search={false}
loading={loading}
toolBarRender={() => [
<Button key="3" type="primary" onClick={goToAdd}>
<PlusOutlined />Create new Community
<PlusOutlined />
Create new Community
</Button>,
]}
options={{
......@@ -189,18 +130,16 @@ const CellList = (props:any) => {
dataSource={Data.rows}
columns={columns}
pagination={{ defaultCurrent: 1, total: Data.total}} /> */}
</> : null
}
</>
) : null}
</div>
);
};
function map(state:any) {
console.log(state)
const loading = state.loading.models.CellList
const { Data ,curString } = state[module]
return { Data , loading ,curString}
function map(state: any) {
// console.log(state);
const loading = state.loading.models.CellList;
const { Data, curString } = state[module];
return { Data, loading, curString };
}
export default connect(map)(CellList);
import React, { useState, useEffect } from 'react';
import { connect } from 'dva';
import {
LeftOutlined,
EyeOutlined,
PoweroffOutlined,
FileJpgOutlined,
FilePdfOutlined,
} from '@ant-design/icons';
import { Modal, Input, Button, TimePicker, Checkbox, Image, message, Divider, Avatar } from 'antd';
// 样式
import './celllist.less';
import { RA } from '@/utils/method';
import moment from 'moment';
// 接口申明
const Adds = (props: any) => {
const { Data, dispatch } = props;
useEffect(() => {
// 如果是添加传来没有值的时候 就清空 否则 赋值给表单
if (Data) {
// 返回列表
console.log('编辑');
console.log(Data);
} else {
console.log('新建');
}
}, [1]);
//物业费选择
const plainOptions = [
{ label: '线上缴费', value: '0', disabled: true },
{ label: '线下缴费', value: '1', disabled: true },
];
// 关闭提示框
const [ModelFee, setModelFee] = useState(false);
// 返回
const goToReturn = () => {
// console.log(fileList)
history.back();
};
// 复制
const copy = () => {};
// 打开弹窗
const openModel = () => {
setModelFee(true);
};
// 关闭弹窗
const handleCancel = () => {
setModelFee(false);
};
// 关闭小区
const handleOk = () => {
setModelFee(false);
message.success('您已关闭小区!');
history.back();
};
return (
<div className="form">
<h3>
<EyeOutlined />
&nbsp;小区详情
<div className="back">
<Button
type="primary"
danger
style={{ marginRight: '15px' }}
icon={<PoweroffOutlined />}
loading={false}
onClick={openModel}
>
关闭小区
</Button>
<Button onClick={goToReturn}>
<LeftOutlined />
Back
</Button>
</div>
</h3>
<Divider />
<div className="box">
{/* 激活码 */}
<div className="code">
<li>激活码</li>
<Avatar
shape="square"
style={{ color: '#f56a00', backgroundColor: '#fde3cf' }}
size={120}
icon={<FileJpgOutlined />}
/>
</div>
{/* 详情 */}
<div className="list-item">
<div className="item">
<label>小区名字:</label>
<span>XXXXX</span>
</div>
{/* ---------- */}
<div className="item">
<label>详细地址:</label>
<span>XXXXX</span>
</div>
{/* ---------- */}
<div className="item">
<label>工作时间:</label>
<span>XXXXX</span>
</div>
{/* ---------- */}
<div className="inst">
<div className="item">
<label>小区联系电话:</label>
<span>XXXXX</span>
</div>
<div className="item">
<label>小区邮箱:</label>
<span>XXXXX</span>
</div>
</div>
{/* ---------- */}
<div className="item">
<label>小区管理员:</label>
<span>XXXXX</span>
</div>
{/* ---------- */}
<div className="item" style={{ marginBottom: '0' }}>
<label>物业费:</label>
<Checkbox.Group options={plainOptions} defaultValue={['1']} />
</div>
</div>
</div>
<Divider />
<div className="box">
<div className="list-item">
<div className="item">
<label>楼巴时刻表:</label>
<Avatar
shape="square"
style={{ color: '#f56a00', backgroundColor: '#fde3cf' }}
size={64}
icon={<FileJpgOutlined />}
/>
<Button type="link">预览</Button>
</div>
{/* ---------- */}
<div className="item">
<label>物业办事指南:</label>
<Avatar
shape="square"
style={{ color: '#f56a00', backgroundColor: '#fde3cf' }}
size={64}
icon={<FilePdfOutlined />}
/>
<Button type="link">预览</Button>
</div>
{/* ---------- */}
<div className="item">
<label>保质期服务:</label>
<Avatar
shape="square"
style={{ color: '#f56a00', backgroundColor: '#fde3cf' }}
size={64}
/>
<Button type="link">预览</Button>
</div>
</div>
</div>
<Divider />
<div className="box">
<div className="list-item">
<div className="item">
<label>帮助中心:</label>
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
</div>
</div>
</div>
<Divider />
<div className="box">
<div className="list-item">
<div className="item">
<label>临时到访码下载:</label>
<Avatar
shape="square"
style={{ color: '#f56a00', backgroundColor: '#fde3cf' }}
size={64}
/>
<Button type="link">下载</Button>
<Input placeholder="Basic usage" disabled value="12333333333" />
<Button type="link" onClick={copy}>
复制
</Button>
</div>
</div>
</div>
{/* 确认关闭框 */}
<Modal title="确认关闭小区吗?" visible={ModelFee} onCancel={handleCancel} onOk={handleOk}>
<p>
关闭小区将会<span style={{ color: 'red' }}>删除</span>小区内
<span style={{ color: 'red' }}>所有</span>业主,请谨慎操作!
</p>
</Modal>
</div>
);
};
// export default Adds;
function map(state: any) {
const Data = state.CellList.DataSave;
const loading = state.loading.models.CellList;
return { Data, loading };
}
export default connect(map)(Adds);
.contop{
li {
list-style: none;
}
.contop {
padding: 20px;
background: #fff;
margin-bottom: 20px;
}
.listbox{
.listbox {
width: 100%;
background-color: #ffffff;
padding: 10px;
}
// 添加
.form{
.form {
padding: 20px;
border: 1px solid #efefef;
border-radius: 3px;
background: #fff;
box-shadow: 0 1px 1px #ccc;
h3{
h3 {
margin-bottom: 30px;
position: relative;
.back{
.back {
position: absolute;
right: 0;
top: 0;
......@@ -27,47 +30,78 @@
background: #fff;
}
}
.span,.li{
display: inline-block;
min-width: 240px;
line-height: 30px;
background: #efefef;
font-size: 15px;
margin-top: -3px;
vertical-align: middle;
margin-left: 12px;
padding: 0 6px;
border-radius: 2px;
border: 1px solid #d9d9d9;
color: #999;
}
.li{
.li {
min-width: 140px;
margin-top: 15px;
margin-left: 0;
display: block;
}
input,.ant-upload-list{
input,
.ant-upload-list {
width: 240px;
}
.ant-picker-range{
.ant-picker-range {
width: 240px;
input{
input {
width: 100%;
}
}
.list{
.list {
display: inline-block;
}
.ant-checkbox-group{
.ant-checkbox-group {
line-height: 34px;
}
hr{
hr {
border: 0;
height: 1px;
background: #eee;
margin-bottom: 20px;
}
.tip{
padding:15px 0;
.tip {
padding: 15px 0;
}
.ant-form-item-label > label {
width: 160px;
}
// 详情页
.box {
position: relative;
.item {
font-size: 15px;
line-height: 35px;
margin-bottom: 10px;
label {
display: inline-block;
min-width: 110px;
}
}
.inst {
display: flex;
.item {
flex: 1;
&:nth-child(2) {
flex: 2;
}
}
}
.code {
position: absolute;
right: 5%;
top: 50%;
transform: translateY(-65%);
li {
text-align: center;
line-height: 35px;
}
}
}
}
.ant-picker-time-panel-column {
width: 100px;
}
import React, { useState, useEffect,useRef} from 'react';
import React, { useState, useEffect, useRef } from 'react';
import styles from './ContractContent.less';
import { Input ,Form, message,Upload, Button, DatePicker ,Space, } from 'antd';
import { UploadOutlined ,LeftOutlined } from '@ant-design/icons';
import { Link, useIntl, connect, Dispatch ,Loading } from 'umi';
import { Input, Form, message, Upload, Button, DatePicker, Space } from 'antd';
import { UploadOutlined, LeftOutlined } from '@ant-design/icons';
import { Link, useIntl, connect, Dispatch, Loading } from 'umi';
import { RA } from '@/services/tos';
......@@ -15,115 +15,108 @@ import './ContractContent.less';
import 'moment/locale/en-au';
import locale from 'antd/es/date-picker/locale/en_US';
import SearchOptionsCommnity from '@/components/SearchOptions/SearchOptionsCommnity';
import {tipList} from '@/utils/tip'
import { tipList } from '@/utils/tip';
const ContractContent = (props: any) => {
const { ContractModel,dispatch } = props;
const { ContractModel, dispatch } = props;
const { RangePicker } = DatePicker; // 日期组件
const [form] = Form.useForm(); // 表单
const RA = (index: any, values: any) => { dispatch({ type: 'Contract/RA', playload: { index: index, body: values } }) };
const RA = (index: any, values: any) => {
dispatch({ type: 'Contract/RA', playload: { index: index, body: values } });
};
// 设置之前时间不能选择
function disabledDate(current:any) {
return current && current <= moment().subtract(1, "days").endOf('day');
function disabledDate(current: any) {
return current && current <= moment().subtract(1, 'days').endOf('day');
}
const startTime = moment().format('YYYY-MM-DD'); // 开始默认事件
const overTime = moment().add(1, 'month').format('YYYY-MM-DD'); // 结束默认事件
const [fileList, setFileList] = useState([] as any);
console.log(tipList);
console.log(tipList)
useEffect(()=>{
useEffect(() => {
// 如果是添加传来没有值的时候 就清空 否则 赋值给表单
if(ContractModel.record === -1){
if (ContractModel.record === -1) {
// 返回列表
}else if(ContractModel.record === 0){
form.resetFields()
}else{
} else if (ContractModel.record === 0) {
form.resetFields();
} else {
let arr = ContractModel.record.contractFileName.split(',');
let obj = new Array;
for(var i in arr){
let obj = new Array();
for (var i in arr) {
let a = {
uid: arr[i],
name: arr[i],
url:'http://'
}
obj.push(a)
url: 'http://',
};
obj.push(a);
}
setFileList([...obj])
setFileList([...obj]);
// setFileList([{ uid: 1,name:DataSaveDetail.contractFileName }])
form.setFieldsValue({
...ContractModel.record,
time:[moment(ContractModel.record.contractValidStartDate),moment(ContractModel.record.contractValidEndDate)],
})
time: [
moment(ContractModel.record.contractValidStartDate),
moment(ContractModel.record.contractValidEndDate),
],
});
}
} ,[1])
}, [1]);
const goToReturn = () => {
// console.log(fileList)
history.back()
}
history.back();
};
// // 提交
const onFinish = (values:any) => {
values.contractValidStartDate = values.time[0].format('YYYY-MM-DD')
values.contractValidEndDate = values.time[1].format('YYYY-MM-DD')
const onFinish = (values: any) => {
values.contractValidStartDate = values.time[0].format('YYYY-MM-DD');
values.contractValidEndDate = values.time[1].format('YYYY-MM-DD');
let file = fileList;
let data = new Array();
for (let i = 0; i < file.length; i++){
data.push(fileList[i].name)
for (let i = 0; i < file.length; i++) {
data.push(fileList[i].name);
}
values.contractFileNameList = data;
if(ContractModel.record.id === undefined){
if (ContractModel.record.id === undefined) {
// 添加
RA(27, values)
}else{
RA(27, values);
} else {
// 修改
message.error('数据接口对接中');
}
// RA(27, values)
}
};
// 上传文件设置
const uploadProps = {
accept:".doc,.docx,.jpg,.png,.pdf" ,
action:"/tos/image/upload",
data: { imageType: "tosContract" },
fileList:fileList,
onChange({ file, fileList }:{file:any,fileList:any} ) {
setFileList(fileList)
accept: '.doc,.docx,.jpg,.png,.pdf',
action: '/tos/image/upload',
data: { imageType: 'tosContract' },
fileList: fileList,
onChange({ file, fileList }: { file: any; fileList: any }) {
setFileList(fileList);
if (file.status == 'done') {
message.success( file.name,3)
}
message.success(file.name, 3);
}
},
};
// 时间提示
// let tipTime = moment(defForm.time[1]).subtract(25, 'days').format('YYYY-MM-DD');
// let dec = moment(tipTime).diff(startTime,'days') > 1 ? tipTime : 'Due soon';
// const [stateTime,setmodalTime] = useState(dec); // 监听时间变化 -- 结束时间
// // 设置提示倒计时 25 天
const changeTime = (data:any,dateStrings:any)=>{
const changeTime = (data: any, dateStrings: any) => {
// if(overTime != dateStrings[1]){
// moment(dateStrings[1]).diff(startTime,'days') > 25 ?
// setmodalTime(moment(dateStrings[1]).subtract(25, 'days').format('YYYY-MM-DD')) :
......@@ -132,69 +125,74 @@ const ContractContent = (props: any) => {
// form.setFieldsValue({
// 'time' : [moment(dateStrings[0]),moment(dateStrings[1])]
// })
}
};
// 选择小区名字并赋值
const opname = (value:any)=>{
const opname = (value: any) => {
form.setFieldsValue({
'communityName' : value
})
}
communityName: value,
});
};
return (
<div className={styles.base}>
{/* 头部组件 */}
<div className={styles.box}>
<div className={styles.item1}>{ContractModel.type} Service Provider</div>
<button className={styles.item3} onClick={goToReturn}><LeftOutlined />Back</button>
<button className={styles.item3} onClick={goToReturn}>
<LeftOutlined />
Back
</button>
</div>
{/* 表单 initialValues={defForm} */}
<Form
// ref={formRef}
autoComplete= "off"
autoComplete="off"
form={form}
name="basic"
initialValues={ContractModel.record}
onFinish={onFinish}
// initialValues={defForm}
>
<div className='contract_box'>
<div className="contract_box">
{/* 合同编号、甲方、乙方 */}
<div className='list_1'>
<div className='item_1'>
<div className="list_1">
<div className="item_1">
<Form.Item
name="contractNumber"
label="Contract Number"
rules={[{ required: true, message: `${tipList[0]}` }]}>
<Input style={{width:200}} placeholder="Contract Number" />
rules={[{ required: true, message: `${tipList[0]}` }]}
>
<Input style={{ width: 200 }} placeholder="Contract Number" />
</Form.Item>
</div>
<div className='item_1'>
<div className="item_1">
<Form.Item
name="contractPartyA"
label="Contract Party A"
rules={[{ required: true, message: `${tipList[1]}` }]}>
<Input style={{width:200}} placeholder="Contract Party A" />
rules={[{ required: true, message: `${tipList[1]}` }]}
>
<Input style={{ width: 200 }} placeholder="Contract Party A" />
</Form.Item>
</div>
<div className='item_1'>
<div className="item_1">
<Form.Item
name="contractPartyB"
label="Contract Party B"
rules={[{ required: true, message: `${tipList[2]}` }]}>
<Input style={{width:200}} placeholder="Contract Party B" />
rules={[{ required: true, message: `${tipList[2]}` }]}
>
<Input style={{ width: 200 }} placeholder="Contract Party B" />
</Form.Item>
</div>
</div>
{/* 小区 */}
<div className='list2'>
<div className='main'>
<div className="list2">
<div className="main">
<Form.Item
labelAlign='right'
labelAlign="right"
name="communityName"
label="Community Name"
rules={[{ required: true, message: `${tipList[3]}` }]}>
rules={[{ required: true, message: `${tipList[3]}` }]}
>
<SearchOptionsCommnity
defaultName={ContractModel.record.communityName}
// ubmit={extendName}
......@@ -204,23 +202,25 @@ const ContractContent = (props: any) => {
</div>
</div>
{/* 合同标题 */}
<div className='list2'>
<div className="list2">
<Form.Item
labelAlign='right'
labelAlign="right"
name="contractTitle"
label="Contract Title"
rules={[{ required: true, message: `${tipList[4]}` }]}>
<Input style={{width:200}} placeholder="Contract Title" />
rules={[{ required: true, message: `${tipList[4]}` }]}
>
<Input style={{ width: 200 }} placeholder="Contract Title" />
</Form.Item>
</div>
{/* 起止时间 */}
<div className='list2'>
<div className="list2">
<Form.Item
name="time"
labelAlign='right'
labelAlign="right"
label="Contract Time"
rules={[{ required: true, message: `${tipList[5]}` }]}>
rules={[{ required: true, message: `${tipList[5]}` }]}
>
<RangePicker
locale={locale}
defaultValue={ContractModel.time}
......@@ -230,15 +230,14 @@ const ContractContent = (props: any) => {
</Form.Item>
</div>
{/* 附件上传 */}
<div className='list2'>
<div className="list2">
<Form.Item
labelAlign='right'
labelAlign="right"
label="Contract Annex"
rules={[{ required: true, message: `${tipList[6]}` }]}>
<Upload
{...uploadProps} >
rules={[{ required: true, message: `${tipList[6]}` }]}
>
<Upload {...uploadProps}>
<Button>
<UploadOutlined /> Upload
</Button>
......@@ -247,14 +246,18 @@ const ContractContent = (props: any) => {
</div>
{/* 合同内容 */}
<div className='list2'>
<div className="list2">
<div className={styles.box8item2x1}>
<Form.Item
rules={[{ required: true, message: `${tipList[5]}` }]}
label="Contract Remarks"
name="contractRemindContent">
<TextArea autoSize={false} style={{ padding: 8, width: 600, height: 194 }} placeholder='remarks'>
</TextArea>
name="contractRemindContent"
>
<TextArea
autoSize={false}
style={{ padding: 8, width: 600, height: 194 }}
placeholder="remarks"
></TextArea>
</Form.Item>
</div>
<div className={styles.box8item2x2}>
......@@ -264,24 +267,20 @@ const ContractContent = (props: any) => {
</div>
<div>
<LINE/>
<Button type="primary" htmlType="submit">Conserve</Button>
<LINE />
<Button type="primary" htmlType="submit">
Conserve
</Button>
</div>
</div>
</Form>
</div>
)
}
function mapStateToProps({ ContractModel }: {ContractModel:any}) {
);
};
function mapStateToProps({ ContractModel }: { ContractModel: any }) {
return {
ContractModel
ContractModel,
};
}
export default connect(mapStateToProps)(ContractContent);
......@@ -58,7 +58,8 @@ export const requestList = [
file: ['A.jpg'],
},
],
['/tos/tosManageCommunity/save', '29 新建一个小区', {}],
// ['/tos/tosManageCommunity/save', '29 新建一个小区', {}],
['/tos/tosCommunity/save', '29 新建一个小区', {}],
['/tos/tosOrder/get', '30 获取订单详情', {}],
['/tos/property/community/houseCard/query', '31 获取住户卡列表', {}],
['/tos/tosCommunity/get/detail', '32 获取小区详情', {}],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment