Commit 598f4ac7 authored by cellee's avatar cellee

Merge branch 'final' of http://120.77.240.215:9701/Maple/tostumi.git into final

parents 8a8364cb c292964a
...@@ -92,6 +92,7 @@ export default { ...@@ -92,6 +92,7 @@ export default {
} }
break; break;
case 33: case 33:
case 34:
case 22: case 22:
{ {
message.success('Success Operation!', 3); message.success('Success Operation!', 3);
......
import React, { useState, useEffect, useRef } from 'react'; import React, { useState, useEffect, useRef } from 'react';
import { Input, Tabs, Row, Col, Button, Form, Radio, message } from 'antd'; import { Spin, Tabs, Row, Col, Button, Form, Radio, message } from 'antd';
const { TabPane } = Tabs; const { TabPane } = Tabs;
import { connect, history } from 'umi'; import { connect, history } from 'umi';
...@@ -14,10 +14,10 @@ const module = 'CommunityService'; ...@@ -14,10 +14,10 @@ const module = 'CommunityService';
// const apply_status = [[0, "审核中"], [1, "批准"], [2, "拒绝"], [3, "领取"]] // const apply_status = [[0, "审核中"], [1, "批准"], [2, "拒绝"], [3, "领取"]]
const apply_status = [ const apply_status = [
[0, 'Under review'], [0, 'Pending'],
[1, 'Approval'], [1, 'Approval'],
[2, 'Reject'], [2, 'Reject'],
[3, 'Claim'], [3, 'Received'],
]; ];
const apply_relation_owner = ['Oneself', 'Family Members', 'Tenant ']; const apply_relation_owner = ['Oneself', 'Family Members', 'Tenant '];
...@@ -25,16 +25,11 @@ const apply_relation_owner = ['Oneself', 'Family Members', 'Tenant ']; ...@@ -25,16 +25,11 @@ const apply_relation_owner = ['Oneself', 'Family Members', 'Tenant '];
const CardDetail = (props: any) => { const CardDetail = (props: any) => {
const { dispatch, Data, DataSave, DataSaveDetail } = props; const { dispatch, Data, DataSave, DataSaveDetail } = props;
const formRef = useRef(null); const formRef = useRef(null);
const [loading, setLoading] = useState(false);
// useEffect(() => {
// if (DataSaveDetail != null) {
// console.log(DataSaveDetail);
// }
// }, [DataSaveDetail]);
useEffect(() => { useEffect(() => {
if (DataSave != null) { if (DataSave != null) {
RA(36, { id: DataSave.id }, module, dispatch); console.log(DataSave);
// RA(36, { id: DataSave.id }, module, dispatch);
} else { } else {
history.go(-1); history.go(-1);
} }
...@@ -57,174 +52,170 @@ const CardDetail = (props: any) => { ...@@ -57,174 +52,170 @@ const CardDetail = (props: any) => {
type: '7', type: '7',
}; };
RA(34, tmp, module, dispatch); RA(34, tmp, module, dispatch);
message.success('Success Operation!'); setLoading(true);
history.push('/CommercialService/AccessCardApplication');
}; };
return ( return (
<div style={{ width: '100%', minWidth: 1020, padding: 34, backgroundColor: '#ffffff' }}> <Spin size="large" spinning={loading}>
{DataSave != null ? ( <div style={{ width: '100%', minWidth: 1020, padding: 34, backgroundColor: '#ffffff' }}>
<> {DataSave != null ? (
<TitleBack <>
sublist={[ <TitleBack
'Status : ' + apply_status[DataSave.apply_status][1], sublist={[
'Time : ' + moment(DataSave.create_time.time).format('DD-MM-YYYY'), 'Status : ' + apply_status[DataSave.apply_status][1],
]} 'Time : ' + moment(DataSave.create_time.time).format('DD-MM-YYYY'),
title="Apply Card Detail" ]}
></TitleBack> title="Apply Card Detail"
></TitleBack>
<Row gutter={8}>
<Col>Community:</Col> <Row gutter={8}>
<Col span={3}>{DataSave.community_name}</Col> <Col>Community:</Col>
<Col>Unit:</Col> <Col span={3}>{DataSave.community_name}</Col>
<Col> <Col>Unit:</Col>
{'BLK ' + <Col>
DataSave.build_number + {DataSave.build_number + '#' + DataSave.floor_number + '-' + DataSave.room_number}
'#' + </Col>
DataSave.floor_number + </Row>
'-' +
DataSave.room_number} <Row gutter={8} style={{ marginTop: 16 }}>
</Col> <Col>Address:</Col>
</Row> <Col>
{DataSave.zip_address} {DataSave.zip_code}
<Row gutter={8} style={{ marginTop: 16 }}> </Col>
<Col>Address:</Col> </Row>
<Col>
{DataSave.zip_address} {DataSave.zip_code} <Row gutter={8} style={{ marginTop: 16 }}>
</Col> <Col>Owner Name:</Col>
</Row> <Col span={3}>{DataSave.community_owner}</Col>
<Col>Phone:</Col>
<Row gutter={8} style={{ marginTop: 16 }}> <Col>{DataSave.community_owner_phone}</Col>
<Col>Owner Name:</Col> </Row>
<Col span={3}>{DataSave.community_owner}</Col> <Line></Line>
<Col>Phone:</Col> <Row gutter={8} style={{ marginTop: 16 }}>
<Col>13169646231</Col> <Col span={3}>Apply Name:</Col>
</Row> <Col span={3}>{DataSave.apply_name}</Col>
<Line></Line> <Col>Phone:</Col>
<Row gutter={8} style={{ marginTop: 16 }}> <Col>{DataSave.apply_name_phone}</Col>
<Col span={3}>Apply Name:</Col> </Row>
<Col span={3}>{DataSave.apply_name}</Col> <Row gutter={8} style={{ marginTop: 16 }}>
<Col>Phone:</Col> <Col span={3}>Relationship:</Col>
<Col>13169646231</Col> <Col>{apply_relation_owner[parseInt(DataSave.apply_relation_owner)]}</Col>
</Row> </Row>
<Row gutter={8} style={{ marginTop: 16 }}> <Row gutter={8} style={{ marginTop: 16 }}>
<Col span={3}>Relationship:</Col> <Col span={3}>Reason:</Col>
<Col>{apply_relation_owner[parseInt(DataSave.apply_relation_owner)]}</Col> <Col>
</Row> <TextArea
<Row gutter={8} style={{ marginTop: 16 }}> disabled
<Col span={3}>Reason:</Col> value={DataSave.apply_reason_content}
<Col> style={{ width: 300, height: 100, padding: 8 }}
<TextArea ></TextArea>
disabled </Col>
value={DataSave.apply_reason_content} </Row>
style={{ width: 300, height: 100, padding: 8 }} <Line></Line>
></TextArea>
</Col> {DataSave.apply_status === 0 ? (
</Row> <Form ref={formRef} name="basic" onFinish={onFinish}>
<Line></Line> <Row gutter={8} style={{ marginTop: 16 }}>
<Col span={3}>Examine:</Col>
{DataSave.apply_status === 0 ? ( <Col span={4}>
<Form ref={formRef} name="basic" onFinish={onFinish}> <Form.Item
<Row gutter={8} style={{ marginTop: 16 }}> name="applyStatus"
<Col span={3}>Examine:</Col> rules={[{ required: true, message: 'Please select the reply result!' }]}
<Col span={4}> >
<Form.Item <Radio.Group>
name="applyStatus" <Radio.Button value={'1'}>Agree</Radio.Button>
rules={[{ required: true, message: 'Please select the reply result!' }]} <Radio.Button style={{ marginLeft: 10 }} value={'2'}>
> Refuse
<Radio.Group> </Radio.Button>
</Radio.Group>
</Form.Item>
</Col>
</Row>
<Row gutter={8} style={{ marginTop: 16 }}>
<Col span={3}>Reply:</Col>
<Col>
<Form.Item name="replyContent">
<TextArea style={{ width: 300, height: 100, padding: 8 }}></TextArea>
</Form.Item>
</Col>
</Row>
<Row gutter={8} style={{ marginTop: 16 }}>
<Col span={3}>Received:</Col>
<Col span={4}>
<Form.Item name="applyStatus">
<Radio.Group>
<Radio value={'3'}>Receive</Radio>
</Radio.Group>
</Form.Item>
</Col>
</Row>
<Form.Item>
<Button type="primary" htmlType="submit">
Submit
</Button>
</Form.Item>
</Form>
) : (
<>
<Row gutter={8} style={{ marginTop: 16 }}>
<Col span={3}>Examine:</Col>
<Col span={4}>
<Radio.Group value={DataSave.apply_status === 2 ? '2' : '1'}>
<Radio.Button value={'1'}>Agree</Radio.Button> <Radio.Button value={'1'}>Agree</Radio.Button>
<Radio.Button style={{ marginLeft: 10 }} value={'2'}> <Radio.Button style={{ marginLeft: 10 }} value={'2'}>
Refuse Refuse
</Radio.Button> </Radio.Button>
</Radio.Group> </Radio.Group>
</Form.Item> </Col>
</Col> </Row>
</Row>
<Row gutter={8} style={{ marginTop: 16 }}>
<Row gutter={8} style={{ marginTop: 16 }}> <Col span={3}>Reply:</Col>
<Col span={3}>Reply:</Col> <Col>
<Col> <TextArea
<Form.Item name="replyContent"> disabled
<TextArea style={{ width: 300, height: 100, padding: 8 }}></TextArea> value={DataSave.reply_content}
</Form.Item> style={{ width: 300, height: 100, padding: 8 }}
</Col> ></TextArea>
</Row> </Col>
</Row>
<Row gutter={8} style={{ marginTop: 16 }}>
<Col span={3}>Received:</Col> {DataSave.apply_status === 1 ? (
<Col span={4}> <Form ref={formRef} name="basic" onFinish={onFinish}>
<Form.Item name="applyStatus"> <Row gutter={8} style={{ marginTop: 16 }}>
<Radio.Group> <Col span={3}>Received:</Col>
<Radio value={'3'}>Receive</Radio> <Col span={4}>
</Radio.Group> <Form.Item name="applyStatus">
</Form.Item> <Radio.Group>
</Col> <Radio value={'3'}>Receive</Radio>
</Row> </Radio.Group>
<Form.Item> </Form.Item>
<Button type="primary" htmlType="submit"> </Col>
Submit </Row>
</Button> <Form.Item>
</Form.Item> <Button type="primary" htmlType="submit">
</Form> Submit
) : ( </Button>
<> </Form.Item>
<Row gutter={8} style={{ marginTop: 16 }}> </Form>
<Col span={3}>Examine:</Col> ) : (
<Col span={4}>
<Radio.Group value={DataSave.apply_status === 2 ? '2' : '1'}>
<Radio.Button value={'1'}>Agree</Radio.Button>
<Radio.Button style={{ marginLeft: 10 }} value={'2'}>
Refuse
</Radio.Button>
</Radio.Group>
</Col>
</Row>
<Row gutter={8} style={{ marginTop: 16 }}>
<Col span={3}>Reply:</Col>
<Col>
<TextArea
disabled
value={DataSave.reply_content}
style={{ width: 300, height: 100, padding: 8 }}
></TextArea>
</Col>
</Row>
{DataSave.apply_status === 1 ? (
<Form ref={formRef} name="basic" onFinish={onFinish}>
<Row gutter={8} style={{ marginTop: 16 }}> <Row gutter={8} style={{ marginTop: 16 }}>
<Col span={3}>Received:</Col> <Col span={3}>Received:</Col>
<Col span={4}> <Col span={4}>
<Form.Item name="applyStatus"> <Radio.Group value={DataSave.apply_status === 3 ? '3' : ''}>
<Radio.Group> <Radio value={'3'}>Receive</Radio>
<Radio value={'3'}>Receive</Radio> </Radio.Group>
</Radio.Group>
</Form.Item>
</Col> </Col>
</Row> </Row>
<Form.Item> )}
<Button type="primary" htmlType="submit"> </>
Submit )}
</Button> </>
</Form.Item> ) : null}
</Form> </div>
) : ( </Spin>
<Row gutter={8} style={{ marginTop: 16 }}>
<Col span={3}>Received:</Col>
<Col span={4}>
<Radio.Group value={DataSave.apply_status === 3 ? '3' : ''}>
<Radio value={'3'}>Receive</Radio>
</Radio.Group>
</Col>
</Row>
)}
</>
)}
</>
) : null}
</div>
); );
}; };
......
...@@ -22,32 +22,35 @@ const Renovation = (props: any) => { ...@@ -22,32 +22,35 @@ const Renovation = (props: any) => {
[2, 'Rejected'], [2, 'Rejected'],
]; ];
const { dispatch, Data8, location } = props;
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [readyData, setReadyData] = useState(null); const [readyData, setReadyData] = useState(null);
console.log(Data8);
const columns = objectColumns([ const columns = objectColumns([
['Community', 'community_name'], ['Community', 'communityName'],
['Applicant', 'applyfor_name'], ['Applicant', 'applyforName'],
[ [
'Unit', 'Unit',
null, null,
(text: any, record: any) => ( (text: any, record: any) => (
<div> <div>
{record.community_build_decorate}#{record.community_floor_decorate}- {record.communityBuildDecorate}#{record.communityFloorDecorate}-
{record.community_room_decoate} {record.communityRoomDecoate}
</div> </div>
), ),
], ],
['Content', 'decoration_content', (text: any) => <div>{stringTab(text)}</div>], ['Content', 'decorationContent', (text: any) => <div>{stringTab(text)}</div>],
['Request Time', 'create_time', (text: any) => <div>{timestampToTime(text.time)}</div>], ['Request Time', 'createTime', (text: any) => <div>{timestampToTime(text.time)}</div>],
[ [
'status', 'status',
'decoration_status', 'decorationStatus',
(text: any) => <div>{decoration_status[parseInt(text)][1]}</div>, (text: any) => <div>{decoration_status[parseInt(text)][1]}</div>,
], ],
[ [
'Actions', 'Actions',
'decoration_status', 'decorationStatus',
(text: any, record: any) => ( (text: any, record: any) => (
<Space size="middle"> <Space size="middle">
{' '} {' '}
...@@ -56,8 +59,6 @@ const Renovation = (props: any) => { ...@@ -56,8 +59,6 @@ const Renovation = (props: any) => {
), ),
], ],
]); ]);
const { dispatch, Data8, location } = props;
useEffect(() => { useEffect(() => {
pageNum = 1; pageNum = 1;
//分页设置 //分页设置
......
...@@ -27,6 +27,7 @@ const RenovationDetail = (props: any) => { ...@@ -27,6 +27,7 @@ const RenovationDetail = (props: any) => {
if (!DataSave) { if (!DataSave) {
history.go(-1); history.go(-1);
} }
console.log(DataSave);
}, []); }, []);
const onFinish = (values: any) => { const onFinish = (values: any) => {
...@@ -50,8 +51,7 @@ const RenovationDetail = (props: any) => { ...@@ -50,8 +51,7 @@ const RenovationDetail = (props: any) => {
}; };
RA(33, tmp, module, dispatch); RA(33, tmp, module, dispatch);
message.success('Success Operation!'); setLoading(true);
history.push('/CommercialService/RenovationApplication');
}; };
return ( return (
...@@ -61,45 +61,45 @@ const RenovationDetail = (props: any) => { ...@@ -61,45 +61,45 @@ const RenovationDetail = (props: any) => {
<> <>
<TitleBack <TitleBack
sublist={[ sublist={[
'Status : ' + decoration_status[DataSave.decoration_status][1], 'Status : ' + decoration_status[DataSave.decorationStatus][1],
'Time : ' + timestampToTime(DataSave.create_time.time), 'Time : ' + timestampToTime(DataSave.createTime.time),
]} ]}
title={'Renovation Detail'} title={DataSave.decorationStatus === 0 ? 'Renovation Reply' : 'Renovation Detail'}
></TitleBack> ></TitleBack>
<Row gutter={8}> <Row gutter={8}>
<Col>Community:</Col> <Col>Community:</Col>
<Col span={3}>{DataSave.community_name}</Col> <Col span={3}>{DataSave.communityName}</Col>
<Col>unit:</Col> <Col>Unit:</Col>
<Col> <Col>
{DataSave.community_build_decorate}#{DataSave.community_floor_decorate}- {DataSave.communityBuildDecorate}#{DataSave.communityFloorDecorate}-
{DataSave.community_room_decoate} {DataSave.communityRoomDecoate}
</Col> </Col>
</Row> </Row>
<Row gutter={8} style={{ marginTop: 16 }}> <Row gutter={8} style={{ marginTop: 16 }}>
<Col>Address:</Col> <Col>Address:</Col>
<Col>{DataSave.ownerAddress}</Col> <Col>{DataSave.tosCommunityModel.residentialAddress}</Col>
</Row> </Row>
<Row gutter={8} style={{ marginTop: 16 }}> <Row gutter={8} style={{ marginTop: 16 }}>
<Col>Owner Name:</Col> <Col>Owner Name:</Col>
<Col span={3}>{DataSave.applyfor_name}</Col> <Col span={3}>{DataSave.applyforName}</Col>
<Col>Phone:</Col> <Col>Phone:</Col>
<Col>{DataSave.applyfor_phone}</Col> <Col>{DataSave.contactPhone}</Col>
</Row> </Row>
<Line></Line> <Line></Line>
<Row gutter={8} style={{ marginTop: 16 }}> <Row gutter={8} style={{ marginTop: 16 }}>
<Col span={3}>Contract Name:</Col> <Col span={3}>Contract Name:</Col>
<Col span={3}>{DataSave.contact_name}</Col> <Col span={3}>{DataSave.contactName}</Col>
<Col>Phone:</Col> <Col span={3}>Phone:</Col>
<Col>{DataSave.contact_phone}</Col> <Col>{DataSave.contactPhone}</Col>
</Row> </Row>
<Row gutter={8} style={{ marginTop: 16 }}> <Row gutter={8} style={{ marginTop: 16 }}>
<Col span={3}>Time:</Col> <Col span={3}>Time:</Col>
<Col span={3}>{timestampToTime(DataSave.decorationBegin_time.time)}</Col> <Col span={3}>{timestampToTime(DataSave.decorationBeginTime)}</Col>
<Col>{timestampToTime(DataSave.decorationEnd_time.time)}</Col> <Col>{timestampToTime(DataSave.decorationEndTime)}</Col>
</Row> </Row>
<Row gutter={8} style={{ marginTop: 16 }}> <Row gutter={8} style={{ marginTop: 16 }}>
<Col span={3}>Reason:</Col> <Col span={3}>Reason:</Col>
...@@ -107,14 +107,14 @@ const RenovationDetail = (props: any) => { ...@@ -107,14 +107,14 @@ const RenovationDetail = (props: any) => {
<TextArea <TextArea
autoSize autoSize
disabled disabled
value={DataSave.decoration_content} value={DataSave.decorationContent}
style={{ width: 300, minHeight: 100, padding: 8, resize: 'none' }} style={{ width: 300, minHeight: 100, padding: 8, resize: 'none' }}
></TextArea> ></TextArea>
</Col> </Col>
</Row> </Row>
<Line></Line> <Line></Line>
{DataSave.decoration_status === 0 ? ( {DataSave.decorationStatus === '0' ? (
<> <>
<Form ref={formRef} name="basic" onFinish={onFinish}> <Form ref={formRef} name="basic" onFinish={onFinish}>
<Row gutter={8} style={{ marginTop: 16 }}> <Row gutter={8} style={{ marginTop: 16 }}>
...@@ -153,17 +153,17 @@ const RenovationDetail = (props: any) => { ...@@ -153,17 +153,17 @@ const RenovationDetail = (props: any) => {
<> <>
<Row> <Row>
<Col span={3}>replier:</Col> <Col span={3}>replier:</Col>
<Col span={3}>{DataSave.reply_name}</Col> <Col span={3}>{DataSave.replyName}</Col>
<Col>Phone: </Col> <Col span={3}>Phone: </Col>
<Col>{DataSave.reply_phone}</Col> <Col>{DataSave.replyPhone}</Col>
</Row> </Row>
<Row gutter={8} style={{ marginTop: 16 }}> <Row gutter={8} style={{ marginTop: 16 }}>
<Col span={3}>Approval For Application:</Col> <Col span={3}>Approval For Application:</Col>
<Col> <Col>
<Radio.Group value={DataSave.decoration_status}> <Radio.Group value={DataSave.decorationStatus}>
<Radio.Button value={1}>Agree</Radio.Button>{' '} <Radio.Button value={'1'}>Agree</Radio.Button>{' '}
<Radio.Button style={{ marginLeft: 10 }} value={2}> <Radio.Button style={{ marginLeft: 10 }} value={'2'}>
Reject Reject
</Radio.Button> </Radio.Button>
</Radio.Group> </Radio.Group>
...@@ -176,7 +176,7 @@ const RenovationDetail = (props: any) => { ...@@ -176,7 +176,7 @@ const RenovationDetail = (props: any) => {
<TextArea <TextArea
style={{ width: 300, minHeight: 100, padding: 8, resize: 'none' }} style={{ width: 300, minHeight: 100, padding: 8, resize: 'none' }}
disabled disabled
value={DataSave.reply_view} value={DataSave.replyView}
></TextArea> ></TextArea>
</Col> </Col>
</Row> </Row>
......
...@@ -24,14 +24,20 @@ const Login: React.FC<LoginProps> = (props) => { ...@@ -24,14 +24,20 @@ const Login: React.FC<LoginProps> = (props) => {
const [timing, setTiming] = useState(false); const [timing, setTiming] = useState(false);
// 提交按钮 // 提交按钮
const handleSubmit = (values: LoginParamsType) => { const handleSubmit = async (values: LoginParamsType) => {
console.log(values); console.log(values);
if (forgetflag) { if (forgetflag) {
console.log('校验验证码!'); console.log('校验验证码!');
// ValidateCaptcha({account,code}) console.log(userName);
if (true) { console.log(values);
const res = await ValidateCaptcha({ account: values.userName, code: values.code });
console.log(res);
if (res.error_code === '0000') {
console.log('通过跳转到修改密码页面'); console.log('通过跳转到修改密码页面');
history.push('login2'); history.push('login2');
} else {
message.error('membercode!');
} }
} else { } else {
if (values.userName && values.password) { if (values.userName && values.password) {
...@@ -85,16 +91,12 @@ const Login: React.FC<LoginProps> = (props) => { ...@@ -85,16 +91,12 @@ const Login: React.FC<LoginProps> = (props) => {
const onGetCaptcha = useCallback(async (email: string) => { const onGetCaptcha = useCallback(async (email: string) => {
// getFakeCaptcha // getFakeCaptcha
// getCaptcha // getCaptcha
message.success('Has Been Sent!'); setTiming(true);
const result = await getCaptcha({ account: email }); const result = await getCaptcha({ account: email });
console.log(result); console.log(result);
if (result.error_code === '0000') {
return; message.success('Has Been Sent!');
if (result === false) {
return;
} }
setTiming(true);
}, []); }, []);
useEffect(() => { useEffect(() => {
...@@ -138,14 +140,16 @@ const Login: React.FC<LoginProps> = (props) => { ...@@ -138,14 +140,16 @@ const Login: React.FC<LoginProps> = (props) => {
</div> </div>
{forgetflag ? ( {forgetflag ? (
<div className={styles.box2}> <div className={styles.box2}>
<input className={styles.input5} /> <Form.Item name="code" initialValue="">
<input className={styles.input5} />
</Form.Item>
<div className={styles.button2} style={{ float: 'right' }} onClick={handleSend}> <div className={styles.button2} style={{ float: 'right' }} onClick={handleSend}>
{timing ? `${count} 秒` : 'Send'} {timing ? `${count} 秒` : 'Send'}
</div> </div>
</div> </div>
) : ( ) : (
<div> <div>
<Form.Item name="password" initialValue={userName || ''}> <Form.Item name="password" initialValue="">
<input className={styles.input2} type="password" /> <input className={styles.input2} type="password" />
</Form.Item> </Form.Item>
<div> <div>
......
...@@ -3,7 +3,7 @@ import { message, Form, Input, Button } from 'antd'; ...@@ -3,7 +3,7 @@ import { message, Form, Input, Button } from 'antd';
import styles from './style.less'; import styles from './style.less';
interface Password { interface Password {
password: stirng; password: string;
} }
const Login2 = (props: any) => { const Login2 = (props: any) => {
......
...@@ -3,6 +3,7 @@ import request from '@/utils/request'; ...@@ -3,6 +3,7 @@ import request from '@/utils/request';
export interface LoginParamsType { export interface LoginParamsType {
userName: string; userName: string;
password: string; password: string;
code: string;
} }
export interface CodeType { export interface CodeType {
account: string; account: string;
......
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