Commit 6feedc2c authored by maple's avatar maple Committed by MrShi

[fix]设施模块修改一

(cherry picked from commit e78e90eb)
parent ef7863ea
{
"CurrentProjectSetting": "无配置"
}
\ No newline at end of file
{
"ExpandedNodes": [
""
],
"PreviewInSolutionExplorer": false
}
\ No newline at end of file
File added
...@@ -116,29 +116,6 @@ export default defineConfig({ ...@@ -116,29 +116,6 @@ export default defineConfig({
}, },
] ]
}, },
/*{
path: '/tosUser/create',
component: './tosUser/TosUserCreate',
hideInMenu: true,
},
{
path: '/tosUser/common',
component: './tosUser/commonUser',
hideInMenu: true,
},
{
path: '/tosUser/edit',
component: './tosUser/TosUserEdit',
hideInMenu: true,
},
{
path: '/tosUser/details',
component: './tosUser/TosUserDetails',
hideInMenu: true,
},*/
{ {
path: '/PropertyManagement', path: '/PropertyManagement',
name: 'propertymanagement', name: 'propertymanagement',
...@@ -234,12 +211,12 @@ export default defineConfig({ ...@@ -234,12 +211,12 @@ export default defineConfig({
icon:'HddOutlined', icon:'HddOutlined',
routes: [ routes: [
{ {
path: '/CommunityManagement/CellList', path: './CellList',
name: 'celllist', name: 'celllist',
component:'./runTest/Template' component:'./runTest/Template'
}, },
{ {
path: '/CommunityManagement/CommunityAnnouncement', path: './CommunityAnnouncement',
name: 'communityannouncement', name: 'communityannouncement',
component:'./runTest/Template' component:'./runTest/Template'
}, },
...@@ -253,11 +230,11 @@ export default defineConfig({ ...@@ -253,11 +230,11 @@ export default defineConfig({
{ path: "./Detail", component: './CommunityManagement/FacilityBookings/Detail' }, { path: "./Detail", component: './CommunityManagement/FacilityBookings/Detail' },
{ path: "./FacilityEdit", component: './CommunityManagement/FacilityBookings/FacilityManager' }, { path: "./FacilityEdit", component: './CommunityManagement/FacilityBookings/FacilityManager' },
{ path: "./FacilityDetail", component: './CommunityManagement/FacilityBookings/FacilityManager' }, { path: "./FacilityDetail", component: './CommunityManagement/FacilityBookings/FacilityManager' },
{path:"./FacilityApply",component:'./CommunityManagement/FacilityBookings/Bookings'} { path: "./FacilityApply",component:'./CommunityManagement/FacilityBookings/Bookings'}
] ]
}, },
{ {
path: '/CommunityManagement/VisitorRecord', path: './VisitorRecord',
name: 'visitorrecord', name: 'visitorrecord',
component:'./runTest/Template' component:'./runTest/Template'
}, },
...@@ -277,12 +254,12 @@ export default defineConfig({ ...@@ -277,12 +254,12 @@ export default defineConfig({
] ]
}, },
{ {
path: '/AccountManagement/CompanyInformation', path: './CompanyInformation',
name: 'companyinformation', name: 'companyinformation',
component:'./AccountManagement/CompanyInformation/CompanyInformation' component:'./AccountManagement/CompanyInformation/CompanyInformation'
}, },
{ {
path: '/AccountManagement/LanguageSettings', path: './LanguageSettings',
name: 'languagesettings', name: 'languagesettings',
component:'./AccountManagement/LanguageSettings/LanguageSettings' component:'./AccountManagement/LanguageSettings/LanguageSettings'
}, },
......
...@@ -71,11 +71,11 @@ export default { ...@@ -71,11 +71,11 @@ export default {
}, },
}, },
pre: { pre: {
'/api/': { // '/api/': {
target: 'http://localhost:8080', // target: 'http://localhost:8080',
changeOrigin: true, // changeOrigin: true,
pathRewrite: { '^': '' }, // pathRewrite: { '^': '' },
}, // },
'/res/': { '/res/': {
target: 'http://mapleonlyone.top', target: 'http://mapleonlyone.top',
changeOrigin: true, changeOrigin: true,
......
No preview for this file type
...@@ -2,17 +2,28 @@ import React from 'react'; ...@@ -2,17 +2,28 @@ import React from 'react';
import styles from './index.less'; import styles from './index.less';
import {Button } from 'antd'; import {Button } from 'antd';
import { Link, useIntl, connect, Dispatch, history } from 'umi';
const BackButton = () => { const BackButton = (props:any) => {
const url = props.url;
const goToReturn = () => { const goToReturn = () => {
history.back() // history.back()
history.go(-1)
}
const goToReturnByParam = () => {
console.log("跳转页面"+url)
history.push(url)
} }
return ( return (
<> <>
<Button onClick={goToReturn}>Back</Button> {
url != null ?
<Button onClick={goToReturnByParam}>Back</Button>:<Button onClick={goToReturn}>Back</Button>
}
</> </>
); )
}; };
export default BackButton; export default BackButton;
...@@ -21,6 +21,9 @@ class AvatarDropdown extends React.Component<GlobalHeaderRightProps> { ...@@ -21,6 +21,9 @@ class AvatarDropdown extends React.Component<GlobalHeaderRightProps> {
const { dispatch } = this.props; const { dispatch } = this.props;
if (dispatch) { if (dispatch) {
// dispatch({
// type: 'user/deleteCurrent',
// });
dispatch({ dispatch({
type: 'login/logout', type: 'login/logout',
}); });
......
...@@ -39,7 +39,7 @@ class SelectOptions extends React.Component { ...@@ -39,7 +39,7 @@ class SelectOptions extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
const {list, dispatch,checklist} = this.props; const {list, dispatch,checklist} = this.props;
if(list==null){ if(list==null){
//console.error("组件错误:没有数据导入") //console.error("组件错误:没有数据导入")
} }
...@@ -47,12 +47,13 @@ class SelectOptions extends React.Component { ...@@ -47,12 +47,13 @@ class SelectOptions extends React.Component {
this.state = { this.state = {
menuList:ArrayToPingYin.get(list), menuList:ArrayToPingYin.get(list),
checkedListOptions:list, checkedListOptions:list,
checkedList: list, checkedList: this.props.single!=null?[]:list,
indeterminate: false, indeterminate: false,
checkAll: true, checkAll: true,
checkNone: false, checkNone: false,
resultList:list, resultList:this.props.single!=null?[]:list,
flag:false flag:false,
lastValue:null
}; };
}else{ }else{
console.log(checklist) console.log(checklist)
...@@ -64,7 +65,8 @@ class SelectOptions extends React.Component { ...@@ -64,7 +65,8 @@ class SelectOptions extends React.Component {
checkAll: true, checkAll: true,
checkNone: false, checkNone: false,
resultList:checklist, resultList:checklist,
flag:false flag:false,
lastValue:null
}; };
} }
} }
...@@ -123,23 +125,48 @@ class SelectOptions extends React.Component { ...@@ -123,23 +125,48 @@ class SelectOptions extends React.Component {
this.setState({componetVisible:this.state.selectoptionsOpen}) this.setState({componetVisible:this.state.selectoptionsOpen})
} }
}; };
onChangeValue = (checkedList) => { onChangeValue = (checkedList) => {
let difference; if(this.props.single!=null){
var a=this.state.resultList; var tmp
var b=this.state.checkedListOptions if(checkedList.length>1){
let first = a.concat(b).filter(v => a.includes(v) && !b.includes(v)) for(var i=0;i<checkedList.length;i++){
a=first if(checkedList[i]!=(this.state.lastValue)[0]){
b=checkedList tmp=checkedList[i]
difference=a.concat(b.filter(v => !a.includes(v))) }
this.setState({ }
checkedList, this.setState({
indeterminate: !!difference.length && difference.length < this.props.list.length, lastValue:[tmp],
checkAll: difference.length === this.props.list.length, checkedList:[tmp],
checkNone:difference.length===0, resultList:[tmp]
resultList:difference });
}); }else{
this.props.onSubmit(difference) tmp=checkedList
this.setState({
lastValue:checkedList,
checkedList:checkedList,
resultList:checkedList
});
}
this.props.onSubmit(tmp[0])
}else{
let difference;
var a=this.state.resultList;
var b=this.state.checkedListOptions
let first = a.concat(b).filter(v => a.includes(v) && !b.includes(v))
a=first
b=checkedList
difference=a.concat(b.filter(v => !a.includes(v)))
this.setState({
checkedList,
indeterminate: !!difference.length && difference.length < this.props.list.length,
checkAll: difference.length === this.props.list.length,
checkNone:difference.length===0,
resultList:difference
});
this.props.onSubmit(difference)
}; };
}
onCheckAllChange = e => { onCheckAllChange = e => {
this.setState({ this.setState({
checkedList:this.props.list, checkedList:this.props.list,
...@@ -206,7 +233,7 @@ class SelectOptions extends React.Component { ...@@ -206,7 +233,7 @@ class SelectOptions extends React.Component {
this.state.componetVisible==this.state.selectoptionsOpen? this.state.componetVisible==this.state.selectoptionsOpen?
<> <>
<div style={{width:"100%",height:48, position:"relative"}}> <div style={{width:"100%",height:48, position:"relative"}}>
<div style={{ position:"absolute",left:5,top:5}}>{this.state.selectoptionsSelected}{this.state.resultList.length==this.props.list.length?this.state.selectoptionsAllCell:null}</div> <div style={{ position:"absolute",left:5,top:5}}>{this.state.resultList.length==0?this.state.selectoptionsSelectNone:this.state.selectoptionsSelected}{this.state.resultList.length==this.props.list.length?(this.state.selectoptionsAllCell):(null)}</div>
<div style={{ position:"absolute",right:16,top:5,cursor:"pointer"}} onClick={()=>this.hideAndexpand()}>{this.state.componetVisible}<DownOutlined /></div> <div style={{ position:"absolute",right:16,top:5,cursor:"pointer"}} onClick={()=>this.hideAndexpand()}>{this.state.componetVisible}<DownOutlined /></div>
</div> </div>
<div style={{paddingLeft:15,paddingRight:15,paddingBottom:20}}>{this.state.resultList.length==this.props.list.length?null:getDotText(this.state.resultList)}</div> <div style={{paddingLeft:15,paddingRight:15,paddingBottom:20}}>{this.state.resultList.length==this.props.list.length?null:getDotText(this.state.resultList)}</div>
...@@ -232,8 +259,13 @@ class SelectOptions extends React.Component { ...@@ -232,8 +259,13 @@ class SelectOptions extends React.Component {
}) })
} }
</div> </div>
<Checkbox style={{ position:"absolute",right:130}} indeterminate={this.state.indeterminate} onChange={this.onCheckAllChange} checked={this.state.checkAll}>{this.state.selectoptionsSelectAll}</Checkbox> {
<Checkbox style={{ position:"absolute",right:0}} onChange={this.onCheckAllChangeOver} checked={this.state.checkNone} >{this.state.selectoptionsSelectNone}</Checkbox> this.props.single!=null?null:
<>
<Checkbox style={{ position:"absolute",right:130}} indeterminate={this.state.indeterminate} onChange={this.onCheckAllChange} checked={this.state.checkAll}>{this.state.selectoptionsSelectAll}</Checkbox>
<Checkbox style={{ position:"absolute",right:0}} onChange={this.onCheckAllChangeOver} checked={this.state.checkNone} >{this.state.selectoptionsSelectNone}</Checkbox>
</>
}
</div> </div>
<div style={{width:"100%",paddingLeft:16,paddingRight:16}}> <div style={{width:"100%",paddingLeft:16,paddingRight:16}}>
<div style={{width:"100%",backgroundColor:"#ffffff",border:"1px solid #cfcfcf",padding:5}}> <div style={{width:"100%",backgroundColor:"#ffffff",border:"1px solid #cfcfcf",padding:5}}>
......
//使用说明如下
// var ArrayToPingYin = require('./ArrayToPingYin');
// var beArray=["美国","加拿大","XO"];
// console.log(ArrayToPingYin.get(beArray));
var strChineseFirstPY = "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY" ;
// 此处收录了375个多音字
var oMultiDiff = { " 19969 ": " DZ ", " 19975 ": " WM ", " 19988 ": " QJ ", " 20048 ": " YL ", " 20056 ": " SC ", " 20060 ": " NM ", " 20094 ": " QG ", " 20127 ": " QJ ", " 20167 ": " QC ", " 20193 ": " YG ", " 20250 ": " KH ", " 20256 ": " ZC ", " 20282 ": " SC ", " 20285 ": " QJG ", " 20291 ": " TD ", " 20314 ": " YD ", " 20340 ": " NE ", " 20375 ": " TD ", " 20389 ": " YJ ", " 20391 ": " CZ ", " 20415 ": " PB ", " 20446 ": " YS ", " 20447 ": " SQ ", " 20504 ": " TC ", " 20608 ": " KG ", " 20854 ": " QJ ", " 20857 ": " ZC ", " 20911 ": " PF ", " 20504 ": " TC ", " 20608 ": " KG ", " 20854 ": " QJ ", " 20857 ": " ZC ", " 20911 ": " PF ", " 20985 ": " AW ", " 21032 ": " PB ", " 21048 ": " XQ ", " 21049 ": " SC ", " 21089 ": " YS ", " 21119 ": " JC ", " 21242 ": " SB ", " 21273 ": " SC ", " 21305 ": " YP ", " 21306 ": " QO ", " 21330 ": " ZC ", " 21333 ": " SDC ", " 21345 ": " QK ", " 21378 ": " CA ", " 21397 ": " SC ", " 21414 ": " XS ", " 21442 ": " SC ", " 21477 ": " JG ", " 21480 ": " TD ", " 21484 ": " ZS ", " 21494 ": " YX ", " 21505 ": " YX ", " 21512 ": " HG ", " 21523 ": " XH ", " 21537 ": " PB ", " 21542 ": " PF ", " 21549 ": " KH ", " 21571 ": " E ", " 21574 ": " DA ", " 21588 ": " TD ", " 21589 ": " O ", " 21618 ": " ZC ", " 21621 ": " KHA ", " 21632 ": " ZJ ", " 21654 ": " KG ", " 21679 ": " LKG ", " 21683 ": " KH ", " 21710 ": " A ", " 21719 ": " YH ", " 21734 ": " WOE ", " 21769 ": " A ", " 21780 ": " WN ", " 21804 ": " XH ", " 21834 ": " A ", " 21899 ": " ZD ", " 21903 ": " RN ", " 21908 ": " WO ", " 21939 ": " ZC ", " 21956 ": " SA ", " 21964 ": " YA ", " 21970 ": " TD ", " 22003 ": " A ", " 22031 ": " JG ", " 22040 ": " XS ", " 22060 ": " ZC ", " 22066 ": " ZC ", " 22079 ": " MH ", " 22129 ": " XJ ", " 22179 ": " XA ", " 22237 ": " NJ ", " 22244 ": " TD ", " 22280 ": " JQ ", " 22300 ": " YH ", " 22313 ": " XW ", " 22331 ": " YQ ", " 22343 ": " YJ ", " 22351 ": " PH ", " 22395 ": " DC ", " 22412 ": " TD ", " 22484 ": " PB ", " 22500 ": " PB ", " 22534 ": " ZD ", " 22549 ": " DH ", " 22561 ": " PB ", " 22612 ": " TD ", " 22771 ": " KQ ", " 22831 ": " HB ", " 22841 ": " JG ", " 22855 ": " QJ ", " 22865 ": " XQ ", " 23013 ": " ML ", " 23081 ": " WM ", " 23487 ": " SX ", " 23558 ": " QJ ", " 23561 ": " YW ", " 23586 ": " YW ", " 23614 ": " YW ", " 23615 ": " SN ", " 23631 ": " PB ", " 23646 ": " ZS ", " 23663 ": " ZT ", " 23673 ": " YG ", " 23762 ": " TD ", " 23769 ": " ZS ", " 23780 ": " QJ ", " 23884 ": " QK ", " 24055 ": " XH ", " 24113 ": " DC ", " 24162 ": " ZC ", " 24191 ": " GA ", " 24273 ": " QJ ", " 24324 ": " NL ", " 24377 ": " TD ", " 24378 ": " QJ ", " 24439 ": " PF ", " 24554 ": " ZS ", " 24683 ": " TD ", " 24694 ": " WE ", " 24733 ": " LK ", " 24925 ": " TN ", " 25094 ": " ZG ", " 25100 ": " XQ ", " 25103 ": " XH ", " 25153 ": " PB ", " 25170 ": " PB ", " 25179 ": " KG ", " 25203 ": " PB ", " 25240 ": " ZS ", " 25282 ": " FB ", " 25303 ": " NA ", " 25324 ": " KG ", " 25341 ": " ZY ", " 25373 ": " WZ ", " 25375 ": " XJ ", " 25384 ": " A ", " 25457 ": " A ", " 25528 ": " SD ", " 25530 ": " SC ", " 25552 ": " TD ", " 25774 ": " ZC ", " 25874 ": " ZC ", " 26044 ": " YW ", " 26080 ": " WM ", " 26292 ": " PB ", " 26333 ": " PB ", " 26355 ": " ZY ", " 26366 ": " CZ ", " 26397 ": " ZC ", " 26399 ": " QJ ", " 26415 ": " ZS ", " 26451 ": " SB ", " 26526 ": " ZC ", " 26552 ": " JG ", " 26561 ": " TD ", " 26588 ": " JG ", " 26597 ": " CZ ", " 26629 ": " ZS ", " 26638 ": " YL ", " 26646 ": " XQ ", " 26653 ": " KG ", " 26657 ": " XJ ", " 26727 ": " HG ", " 26894 ": " ZC ", " 26937 ": " ZS ", " 26946 ": " ZC ", " 26999 ": " KJ ", " 27099 ": " KJ ", " 27449 ": " YQ ", " 27481 ": " XS ", " 27542 ": " ZS ", " 27663 ": " ZS ", " 27748 ": " TS ", " 27784 ": " SC ", " 27788 ": " ZD ", " 27795 ": " TD ", " 27812 ": " O ", " 27850 ": " PB ", " 27852 ": " MB ", " 27895 ": " SL ", " 27898 ": " PL ", " 27973 ": " QJ ", " 27981 ": " KH ", " 27986 ": " HX ", " 27994 ": " XJ ", " 28044 ": " YC ", " 28065 ": " WG ", " 28177 ": " SM ", " 28267 ": " QJ ", " 28291 ": " KH ", " 28337 ": " ZQ ", " 28463 ": " TL ", " 28548 ": " DC ", " 28601 ": " TD ", " 28689 ": " PB ", " 28805 ": " JG ", " 28820 ": " QG ", " 28846 ": " PB ", " 28952 ": " TD ", " 28975 ": " ZC ", " 29100 ": " A ", " 29325 ": " QJ ", " 29575 ": " SL ", " 29602 ": " FB ", " 30010 ": " TD ", " 30044 ": " CX ", " 30058 ": " PF ", " 30091 ": " YSP ", " 30111 ": " YN ", " 30229 ": " XJ ", " 30427 ": " SC ", " 30465 ": " SX ", " 30631 ": " YQ ", " 30655 ": " QJ ", " 30684 ": " QJG ", " 30707 ": " SD ", " 30729 ": " XH ", " 30796 ": " LG ", " 30917 ": " PB ", " 31074 ": " NM ", " 31085 ": " JZ ", " 31109 ": " SC ", " 31181 ": " ZC ", " 31192 ": " MLB ", " 31293 ": " JQ ", " 31400 ": " YX ", " 31584 ": " YJ ", " 31896 ": " ZN ", " 31909 ": " ZY ", " 31995 ": " XJ ", " 32321 ": " PF ", " 32327 ": " ZY ", " 32418 ": " HG ", " 32420 ": " XQ ", " 32421 ": " HG ", " 32438 ": " LG ", " 32473 ": " GJ ", " 32488 ": " TD ", " 32521 ": " QJ ", " 32527 ": " PB ", " 32562 ": " ZSQ ", " 32564 ": " JZ ", " 32735 ": " ZD ", " 32793 ": " PB ", " 33071 ": " PF ", " 33098 ": " XL ", " 33100 ": " YA ", " 33152 ": " PB ", " 33261 ": " CX ", " 33324 ": " BP ", " 33333 ": " TD ", " 33406 ": " YA ", " 33426 ": " WM ", " 33432 ": " PB ", " 33445 ": " JG ", " 33486 ": " ZN ", " 33493 ": " TS ", " 33507 ": " QJ ", " 33540 ": " QJ ", " 33544 ": " ZC ", " 33564 ": " XQ ", " 33617 ": " YT ", " 33632 ": " QJ ", " 33636 ": " XH ", " 33637 ": " YX ", " 33694 ": " WG ", " 33705 ": " PF ", " 33728 ": " YW ", " 33882 ": " SR ", " 34067 ": " WM ", " 34074 ": " YW ", " 34121 ": " QJ ", " 34255 ": " ZC ", " 34259 ": " XL ", " 34425 ": " JH ", " 34430 ": " XH ", " 34485 ": " KH ", " 34503 ": " YS ", " 34532 ": " HG ", " 34552 ": " XS ", " 34558 ": " YE ", " 34593 ": " ZL ", " 34660 ": " YQ ", " 34892 ": " XH ", " 34928 ": " SC ", " 34999 ": " QJ ", " 35048 ": " PB ", " 35059 ": " SC ", " 35098 ": " ZC ", " 35203 ": " TQ ", " 35265 ": " JX ", " 35299 ": " JX ", " 35782 ": " SZ ", " 35828 ": " YS ", " 35830 ": " E ", " 35843 ": " TD ", " 35895 ": " YG ", " 35977 ": " MH ", " 36158 ": " JG ", " 36228 ": " QJ ", " 36426 ": " XQ ", " 36466 ": " DC ", " 36710 ": " JC ", " 36711 ": " ZYG ", " 36767 ": " PB ", " 36866 ": " SK ", " 36951 ": " YW ", " 37034 ": " YX ", " 37063 ": " XH ", " 37218 ": " ZC ", " 37325 ": " ZC ", " 38063 ": " PB ", " 38079 ": " TD ", " 38085 ": " QY ", " 38107 ": " DC ", " 38116 ": " TD ", " 38123 ": " YD ", " 38224 ": " HG ", " 38241 ": " XTC ", " 38271 ": " ZC ", " 38415 ": " YE ", " 38426 ": " KH ", " 38461 ": " YD ", " 38463 ": " AE ", " 38466 ": " PB ", " 38477 ": " XJ ", " 38518 ": " YT ", " 38551 ": " WK ", " 38585 ": " ZC ", " 38704 ": " XS ", " 38739 ": " LJ ", " 38761 ": " GJ ", " 38808 ": " SQ ", " 39048 ": " JG ", " 39049 ": " XJ ", " 39052 ": " HG ", " 39076 ": " CZ ", " 39271 ": " XT ", " 39534 ": " TD ", " 39552 ": " TD ", " 39584 ": " PB ", " 39647 ": " SB ", " 39730 ": " LG ", " 39748 ": " TPB ", " 40109 ": " ZQ ", " 40479 ": " ND ", " 40516 ": " HG ", " 40536 ": " HG ", " 40583 ": " QJ ", " 40765 ": " YQ ", " 40784 ": " QJ ", " 40840 ": " YK ", " 40863 ": " QJG " };
function makePy(str){  
var arrResult = new Array(); 
for(var i=0,len=str.length;i<len;i++){  
var ch = str.charAt(i);  
arrResult.push(checkCh(ch));  
}  
return mkRslt(arrResult);  
}  
function checkCh(ch){  
var uni = ch.charCodeAt(0);  
if(uni > 40869 || uni < 19968)  
return ch;  
else
return (oMultiDiff[uni]?oMultiDiff[uni]:(strChineseFirstPY.charAt(uni-19968)));  
}  
function mkRslt(arr) {  
var arrRslt = [""];  
for(var i=0,len=arr.length;i<len;i++){  
var str = arr[i];  
var strlen = str.length;  
if(strlen == 1){  
for(var k=0;k<arrRslt.length;k++){  
arrRslt[k] += str;  
}  
}else{  
var tmpArr = arrRslt.slice(0);  
arrRslt = [];  
for(k=0;k<strlen;k++){  
var tmp = tmpArr.slice(0);  
for(var j=0;j<tmp.length;j++){  
tmp[j] += str.charAt(k);  
}  
arrRslt = arrRslt.concat(tmp);  
}  
}  
}  
return arrRslt;  
}  
String.prototype.trim = function() {    return this.replace(/(^\s*)|(\s*$)/g,""); }  
var ArrayToPingYin={
get:function(beArray){
if(beArray){
var retArray=new Array();
for(var i=0;i<beArray.length;i++){
var item=makePy(beArray[i].substring(0,1))
retArray.push(item[0]);
}
return retArray;
}
}
}
module.exports=ArrayToPingYin;
import React from 'react';
import { Table, Tag, Space,Button,Radio,Row,Col, Input, Checkbox } from 'antd';
import { connect } from 'dva';
import { gray } from 'chalk';
import { StarOutlined, StarFilled, StarTwoTone } from '@ant-design/icons';
import { indexOf } from 'lodash';
import { useIntl,getLocale} from 'umi';
import {
DownOutlined,
UpOutlined,
} from '@ant-design/icons';
var ArrayToPingYin = require('./ArrayToPingYin');
const CheckboxGroup = Checkbox.Group;
const menuListNormal=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
function getDotText(arr) {
if(arr){
var str = "";
for (var i = 0; i < arr.length; i++) {
str += arr[i]+ ",";
}
if (str.length > 0) {
str = str.substr(0, str.length - 1);
}
return str;
}
}
class SelectOptionsSingle extends React.Component {
state = {
};
constructor(props) {
super(props);
const {list, dispatch,checklist} = this.props;
if(list==null){
//console.error("组件错误:没有数据导入")
}
if(checklist==null){
this.state = {
menuList:ArrayToPingYin.get(list),
checkedListOptions:list,
checkedList: [],
indeterminate: false,
checkAll: true,
checkNone: false,
resultList:list,
flag:false,
lastValue:null
};
}else{
console.log(checklist)
this.state = {
menuList:ArrayToPingYin.get(list),
checkedListOptions:list,
checkedList: [checklist],
indeterminate: false,
checkAll: true,
checkNone: false,
resultList:checklist,
flag:false,
lastValue:null
};
}
}
componentDidUpdate(){
if(this.props.show!=null){
if(this.props.show==this.state.flag){
console.log(this.props.show)
if(this.props.show==false){
this.setState({componetVisible:this.state.selectoptionsOpen,flag:true})
console.log("初始化")
}else{
this.setState({componetVisible:this.state.selectoptionsPutItAway,flag:false})
console.log("初始化")
}
console.log(this.state.componetVisible)
}
}
}
componentDidMount(){
var name=getLocale();
//console.log(name)
if(name=="zh-CN"){
this.setState({
selectoptionsOpen : '展开',
selectoptionsPutItAway :'收起',
selectoptionsSelected : '已选',
selectoptionsSelectAll : '全选',
selectoptionsSelectNone : '全不选',
selectoptionsAll:'所有',
selectoptionsSearchCell :'搜索小区',
selectoptionsAllCell:'全部小区',
componetVisible:'收起',
})
}else{
this.setState({
selectoptionsOpen : 'Open',
selectoptionsPutItAway :'Put It Away',
selectoptionsSelected : 'Selected',
selectoptionsSelectAll : 'Select All',
selectoptionsSelectNone : 'Unselect All',
selectoptionsAll:'All',
selectoptionsSearchCell :'Search cell',
selectoptionsAllCell:'All Cell',
componetVisible:'Put It Away',
})
}
console.log("初始化2")
};
hideAndexpand = ()=> {
if(this.state.componetVisible==this.state.selectoptionsOpen){
this.setState({componetVisible:this.state.selectoptionsPutItAway})
}else{
this.setState({componetVisible:this.state.selectoptionsOpen})
}
};
onChangeValue = (checkedList) => {
var tmp
if(checkedList.length>1){
for(var i=0;i<checkedList.length;i++){
if(checkedList[i]!=(this.state.lastValue)[0]){
tmp=checkedList[i]
}
}
this.setState({
lastValue:[tmp],
checkedList:[tmp],
resultList:[tmp]
});
}else{
tmp=checkedList
this.setState({
lastValue:checkedList,
checkedList:checkedList,
resultList:checkedList
});
}
this.props.onSubmit(tmp)
// let difference;
// var a=this.state.resultList;
// var b=this.state.checkedListOptions
// let first = a.concat(b).filter(v => a.includes(v) && !b.includes(v))
// a=first
// b=checkedList
// difference=a.concat(b.filter(v => !a.includes(v)))
// this.setState({
// checkedList,
// indeterminate: !!difference.length && difference.length < this.props.list.length,
// checkAll: difference.length === this.props.list.length,
// checkNone:difference.length===0,
// resultList:difference
// });
// this.props.onSubmit(difference)
};
onCheckAllChange = e => {
this.setState({
checkedList:this.props.list,
indeterminate: false,
checkAll: true,
checkNone:false,
resultList:this.props.list,
});
this.props.onSubmit(this.props.list)
};
onCheckAllChangeOver = e => {
this.setState({
checkedList: [],
indeterminate:false,
checkAll: false,
checkNone:true,
resultList:[],
});
this.props.onSubmit([])
};
itemSelectAll = (e)=>{
this.setState({
checkedListOptions:this.props.list,
checkedList:this.state.resultList,
});
}
itemSelect = (item,e)=>{
var arraylist=this.props.list
var array=ArrayToPingYin.get(this.props.list)
var tempAarry=new Array();
if(array){
for(var i=0;i<array.length;i++){
if(array[i]==item){
tempAarry.push(arraylist[i]);
}
}
}
this.setState({
checkedListOptions:tempAarry,
checkedList:this.state.resultList,
});
};
getSearchValue=(item,e)=>{
var list=this.props.list
var tempAarry=new Array()
for(var i=0;i<list.length;i++){
if((list[i].toLowerCase()).indexOf(item.toLowerCase())!=-1){
tempAarry.push(list[i]);
}
}
this.setState({
checkedListOptions:tempAarry,
})
}
render() {
return (
<div style={{minWidth:800,marginBottom:16}}>
{
this.state.componetVisible==this.state.selectoptionsOpen?
<>
<div style={{width:"100%",height:48, position:"relative"}}>
<div style={{ position:"absolute",left:5,top:5}}>{this.state.selectoptionsSelected}{this.state.resultList.length==this.props.list.length?this.state.selectoptionsAllCell:null}</div>
<div style={{ position:"absolute",right:16,top:5,cursor:"pointer"}} onClick={()=>this.hideAndexpand()}>{this.state.componetVisible}<DownOutlined /></div>
</div>
<div style={{paddingLeft:15,paddingRight:15,paddingBottom:20}}>{this.state.resultList.length==this.props.list.length?null:getDotText(this.state.resultList)}</div>
</>
:
<div style={{width:"100%",backgroundColor:"#eeeeee"}}>
<div style={{width:"100%",height:48, position:"relative"}}>
<div style={{ position:"absolute",left:5,top:5}}>{this.state.resultList.length==0?this.state.selectoptionsSelectNone:this.state.selectoptionsSelected}{this.state.resultList.length==this.props.list.length?this.state.selectoptionsAllCell:null}</div>
<div style={{ position:"absolute",right:16,top:5,cursor:"pointer"}} onClick={()=>this.hideAndexpand()}>{this.state.componetVisible} <UpOutlined /></div>
</div>
<div style={{paddingLeft:15,paddingRight:15,paddingBottom:20}}>{this.state.resultList.length==this.props.list.length?null:getDotText(this.state.resultList)}</div>
<div style={{width:"100%",backgroundColor:"#eeeeee",userSelect:"none"}}>
<div style={{width:"100%",height:40, position:"relative"}}>
<div style={{fontSize:14,position:"absolute"}}>
<a style={{marginLeft:16}} onClick={this.itemSelectAll.bind(this)}>{this.state.selectoptionsAll}</a>
{
menuListNormal.map((item, index) => {
if(this.state.menuList.indexOf(item)>-1){
return (<a key={item} style={{marginLeft:10,userSelect:"none"}} onClick={this.itemSelect.bind(this,item)}>{item}</a>)
}else{
return (<a key={item} style={{marginLeft:10,userSelect:"none"}} disabled>{item}</a>)
}
})
}
</div>
<Checkbox style={{ position:"absolute",right:130}} indeterminate={this.state.indeterminate} onChange={this.onCheckAllChange} checked={this.state.checkAll}>{this.state.selectoptionsSelectAll}</Checkbox>
<Checkbox style={{ position:"absolute",right:0}} onChange={this.onCheckAllChangeOver} checked={this.state.checkNone} >{this.state.selectoptionsSelectNone}</Checkbox>
</div>
<div style={{width:"100%",paddingLeft:16,paddingRight:16}}>
<div style={{width:"100%",backgroundColor:"#ffffff",border:"1px solid #cfcfcf",padding:5}}>
<Input.Search placeholder={this.state.selectoptionsSearchCell} onSearch={this.getSearchValue.bind(this)} style={{width:200,margin:16}} />
<div><h1> </h1></div>
<CheckboxGroup
options={ this.state.checkedListOptions}
value={this.state.checkedList}
onChange={this.onChangeValue} style={{marginLeft:16}}/>
<div><h1> </h1></div>
</div>
</div>
<br/>
</div>
</div>
}
</div>
);
}
};
export default SelectOptionsSingle;
\ No newline at end of file
/* 使用说明:(传入的参数 使用sort排序 )
import SelectOptions from '../../components/SelectOptions/index';
const printContent = (comment: any)=>{
console.log(comment)
}
<SelectOptions list={["美国","美丽的","美好","加拿大","加油","XO"].sort()} onSubmit={printContent}/>
*/
\ No newline at end of file
...@@ -61,8 +61,15 @@ const TimeSelect = (props:any) => { ...@@ -61,8 +61,15 @@ const TimeSelect = (props:any) => {
} }
const timeChange = (index: any, values: any) => { const timeChange = (index: any, values: any) => {
var tmp = times; var tmp = times;
tmp[index].time =timeForm(values) console.log("Maple诊断"+index)
console.log(values)
if (values != null) {
tmp[index].time =timeForm(values)
} else {
tmp[index].time =null
}
props.putSubmit(CheckParm(tmp)) props.putSubmit(CheckParm(tmp))
} }
return ( return (
......
...@@ -20,7 +20,7 @@ const TitleBack = (props:any) => { ...@@ -20,7 +20,7 @@ const TitleBack = (props:any) => {
: :
<></> <></>
} }
<div className={styles.item2}><BackButton/></div> <div className={styles.item2}><BackButton url={props.url}/></div>
<div className={styles.clear0}></div> <div className={styles.clear0}></div>
</> </>
); );
......
import React, { useState } from 'react'; import React, { useState,useEffect} from 'react';
import { Link, useIntl, connect, Dispatch, history } from 'umi'; import { Link, useIntl, connect, Dispatch, history } from 'umi';
import styles from './index.less'; import styles from './index.less';
...@@ -14,24 +14,34 @@ import { gray } from 'chalk'; ...@@ -14,24 +14,34 @@ import { gray } from 'chalk';
const TitleSearch= (props:any) => { const TitleSearch= (props:any) => {
const { CommunityList } = props; const {dispatch, CommunityList } = props;
const tosCommunityget = (values:any) => {dispatch({type: 'Init/tosCommunityget',playload:values})};
useEffect(() => {
if (CommunityList == null) {
tosCommunityget(null)
}
}, []);
const key = props.listkey const key = props.listkey
const name = props.list; const name = props.list;
const single=props.single
const status = props.status; const status = props.status;
const time = props.time; const time = props.time;
const community = props.community; const community = props.community;
const [selectOptions, setSelectOptions] = useState(true) const [selectOptions, setSelectOptions] = useState(true)
const [communitys, setCommunitys] = useState(CommunityList) const [communitys, setCommunitys] = useState(CommunityList)
const [datePicker, setDate]=useState(null) const [datePicker, setDate] = useState(null)
const onFinish = values => { const onFinish = values => {
if (datePicker) { if (datePicker) {
values[time[0]] = datePicker; values[time[0]] = datePicker;
} }
if (community) { if (community) {
values.communitydata=communitys values[community]=communitys
} }
console.log('Success:', values); console.log('Success:', values);
props.onSubmit(values) props.onSubmit(values)
...@@ -57,7 +67,7 @@ const TitleSearch= (props:any) => { ...@@ -57,7 +67,7 @@ const TitleSearch= (props:any) => {
key!=null? key!=null?
key.map((item, index) => { key.map((item, index) => {
return ( return (
<Col key={"KeyCol_"+ index}><Form.Item name={item}><Input placeholder={name[index]} /></Form.Item></Col> <Col key={"KeyCol_"+ index}><Form.Item name={item}><Input placeholder={name[index]} /></Form.Item></Col>
) )
}) })
:null :null
...@@ -82,7 +92,7 @@ const TitleSearch= (props:any) => { ...@@ -82,7 +92,7 @@ const TitleSearch= (props:any) => {
} }
{ {
time != null ? time != null ?
<Col key={"datePicker_"} > <DatePicker placeholder={time[1]} onChange={onChange} /></Col> <Col key={"datePicker_"} > <DatePicker placeholder={time[1]} onChange={onChange} /></Col>
: null : null
} }
{ {
...@@ -94,7 +104,12 @@ const TitleSearch= (props:any) => { ...@@ -94,7 +104,12 @@ const TitleSearch= (props:any) => {
{ {
community != null ? community != null ?
<> <>
<SelectOptions list={CommunityList.sort()} show={selectOptions} onSubmit={printContent} /> {
CommunityList != null ?
<SelectOptions 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> <Form.Item><Button type="primary" htmlType="submit" style={{ backgroundColor: "#e7f4ff",color:"rgba(24,144,255,1)"}}>Search</Button></Form.Item>
</> : null </> : null
} }
......
...@@ -104,6 +104,9 @@ const BasicLayout: React.FC<BasicLayoutProps> = (props) => { ...@@ -104,6 +104,9 @@ const BasicLayout: React.FC<BasicLayoutProps> = (props) => {
if (dispatch) { if (dispatch) {
dispatch({ dispatch({
type: 'user/fetchCurrent', type: 'user/fetchCurrent',
playload: {
userName: "admin",
password:"admin",}
}); });
} }
}, []); }, []);
......
import React from 'react'; import React from 'react';
import { PageLoading } from '@ant-design/pro-layout'; import { PageLoading } from '@ant-design/pro-layout';
import { Redirect, connect, ConnectProps } from 'umi'; import { Redirect, connect, ConnectProps, StateType } from 'umi';
import { stringify } from 'querystring'; import { stringify } from 'querystring';
import { ConnectState } from '@/models/connect'; import { ConnectState } from '@/models/connect';
import { CurrentUser } from '@/models/user'; import { CurrentUser } from '@/models/user';
import login from '@/pages/user/login';
interface SecurityLayoutProps extends ConnectProps { interface SecurityLayoutProps extends ConnectProps {
loading?: boolean; loading?: boolean;
currentUser?: CurrentUser; currentUser?: CurrentUser;
login?: StateType;
} }
interface SecurityLayoutState { interface SecurityLayoutState {
...@@ -23,30 +25,39 @@ class SecurityLayout extends React.Component<SecurityLayoutProps, SecurityLayout ...@@ -23,30 +25,39 @@ class SecurityLayout extends React.Component<SecurityLayoutProps, SecurityLayout
this.setState({ this.setState({
isReady: true, isReady: true,
}); });
const { dispatch } = this.props; const { dispatch ,login} = this.props;
console.log("登录中") console.log("登录中")
if (dispatch) { if (dispatch) {
dispatch({ dispatch({
type: 'user/fetchCurrent', type: 'user/fetchCurrent',
playload: {
userName: login.userName,
password: login.password
}
}); });
} }
} }
render() { render() {
const { isReady } = this.state; const { isReady } = this.state;
const { children, loading, currentUser } = this.props; const { children, loading, currentUser,login } = this.props;
// You can replace it to your authentication rule (such as check token exists) // You can replace it to your authentication rule (such as check token exists)
// 你可以把它替换成你自己的登录认证规则(比如判断 token 是否存在) // 你可以把它替换成你自己的登录认证规则(比如判断 token 是否存在)
const isLogin = currentUser && currentUser.userid;//isLogin为关键点 console.log("是否已登录")
// const isLogin = currentUser && currentUser.name;//isLogin为关键点
var isLogin = false
if (currentUser.name != null) {
isLogin=true
}
isLogin=true
const queryString = stringify({ const queryString = stringify({
redirect: window.location.href, redirect: window.location.href,
}); });
if ((!isLogin && loading) || !isReady) { if ((!isLogin && loading) || !isReady) {
// console.log("页面加载")
return <PageLoading />; return <PageLoading />;
} }
if (!isLogin && window.location.pathname !== '/user/login') { if (!isLogin && window.location.pathname !== '/user/login') {
...@@ -56,7 +67,8 @@ class SecurityLayout extends React.Component<SecurityLayoutProps, SecurityLayout ...@@ -56,7 +67,8 @@ class SecurityLayout extends React.Component<SecurityLayoutProps, SecurityLayout
} }
} }
export default connect(({ user, loading }: ConnectState) => ({ export default connect(({ user, loading,login}: ConnectState) => ({
currentUser: user.currentUser, currentUser: user.currentUser,
loading: loading.models.user, loading: loading.models.user,
login:login
}))(SecurityLayout); }))(SecurityLayout);
...@@ -19,8 +19,8 @@ export default { ...@@ -19,8 +19,8 @@ export default {
}, },
reducers: { reducers: {
returnPage(state, { Data,DataPage}) { returnPage(state, { Data,DataPage,DataSave}) {
return { ...state, Data,DataPage }; return { ...state, Data,DataPage,DataSave };
}, },
returnPage2(state, { Data2 }) { returnPage2(state, { Data2 }) {
return { ...state, Data2 }; return { ...state, Data2 };
...@@ -39,18 +39,25 @@ export default { ...@@ -39,18 +39,25 @@ export default {
}, },
returnSource(state, { sourceData }) { returnSource(state, { sourceData }) {
return { ...state, sourceData }; return { ...state, sourceData };
} },
}, },
effects: { effects: {
//预订设施查询 //预订设施查询
*RA({ playload }, { call, put }) { *RA({ playload }, { call, put }) {
console.log("发送请求")
const resp = yield call(service.RA, playload); const resp = yield call(service.RA, playload);
console.log(resp) console.log(resp)
if (resp.code == 500) { if (resp.code == 500||resp.error_code!="0000") {
//window.location.href = '/500'; // window.location.href = '/500';
} else { }
if (resp.error_code != "0000") {
console.log("请求错误码:"+resp.error_code)
console.log(playload)
}
else {
switch (playload.index) { switch (playload.index) {
case 0: case 0:
case 9: case 9:
...@@ -80,6 +87,7 @@ export default { ...@@ -80,6 +87,7 @@ export default {
case 4: case 4:
case 5: case 5:
case 6: { case 6: {
message.success("Success Operation!",3)
window.location.href = '/CommunityManagement/FacilityBookings'; window.location.href = '/CommunityManagement/FacilityBookings';
} break; } break;
case 7: { case 7: {
...@@ -118,8 +126,12 @@ export default { ...@@ -118,8 +126,12 @@ export default {
*SA({ playload }, { call, put }) { *SA({ playload }, { call, put }) {
var DataSave = playload var DataSave = playload
yield put({type: 'returnDataSave', DataSave} ) yield put({type: 'returnDataSave', DataSave} )
} },
*CA({ playload }, { call, put }) {
var sourceData = playload
yield put({type: 'returnSource',sourceData})
}
}, },
}; };
...@@ -3,12 +3,13 @@ import { message } from 'antd'; ...@@ -3,12 +3,13 @@ import { message } from 'antd';
import { routerRedux } from 'dva/router' import { routerRedux } from 'dva/router'
import { timestampToTime } from '../utils/time';
export default { export default {
namespace: 'CommunityService', namespace: 'CommunityService',
state: { state: {
Data: null, Data: null,
CurData: null, CurData: null,
CurDataDetail:{community:'',address:'',home:'',name:'',phone:'',email:'',content:''}, CurDataDetail:{},
}, },
reducers: { reducers: {
...@@ -31,9 +32,14 @@ export default { ...@@ -31,9 +32,14 @@ export default {
console.log(resp) console.log(resp)
if (resp.error_code != 0) { if (resp.error_code != 0) {
window.location.href = '/500'; window.location.href = '/500';
} else { }
console.log(resp.error_code)
if (resp.error_code == "0000") {
let Data = resp.data.rows; let Data = resp.data.rows;
yield put({ type: 'returnPage', Data, }); yield put({ type: 'returnPage', Data, });
} else {
let Data = null;
yield put({ type: 'returnPage', Data, });
} }
}, },
*TosCommuntiyServiceReply({ playload }, { call, put }) { *TosCommuntiyServiceReply({ playload }, { call, put }) {
...@@ -45,8 +51,7 @@ export default { ...@@ -45,8 +51,7 @@ export default {
//window.location.href = '/CommercialService/OwnerComplaints'; //window.location.href = '/CommercialService/OwnerComplaints';
} }
}, },
*TosCommunityServiceGetDetail({ playload }, { call, put }) { *TosCommunityServiceGetDetail({ playload }, { call, put }) {
const resp = yield call(service.TosCommunityServiceGetDetail, playload); const resp = yield call(service.TosCommunityServiceGetDetail, playload);
console.log(resp) console.log(resp)
...@@ -54,7 +59,10 @@ export default { ...@@ -54,7 +59,10 @@ export default {
window.location.href = '/500'; window.location.href = '/500';
} else { } else {
var tmp = resp.data.rows[0].tosOwerModel; var tmp = resp.data.rows[0].tosOwerModel;
var tmp2 = resp.data.rows[0].replyContent; var tmp2 = resp.data.rows[0];
console.log(tmp2.imgUrl)
// TODO:还差图片
var CurDataDetail = { var CurDataDetail = {
community: tmp.communityName, community: tmp.communityName,
address: tmp.addressAndpostalCode, address: tmp.addressAndpostalCode,
...@@ -62,9 +70,10 @@ export default { ...@@ -62,9 +70,10 @@ export default {
name: tmp.owerName, name: tmp.owerName,
phone: tmp.owerPhone, phone: tmp.owerPhone,
email: tmp.owerEmail, email: tmp.owerEmail,
content: tmp2, content: resp.data.rows[0].serviceContent,
status: tmp2.handleStatus,
time:timestampToTime(tmp2.createTime.time)
}; };
yield put({ type: 'returnCurDataDetail', CurDataDetail, }); yield put({ type: 'returnCurDataDetail', CurDataDetail, });
} }
}, },
......
...@@ -20,8 +20,6 @@ export default { ...@@ -20,8 +20,6 @@ export default {
return { ...state, CurDataFollow }; return { ...state, CurDataFollow };
}, },
returnCurDataFollowDetail(state, { CurDataFollowDetail }) { returnCurDataFollowDetail(state, { CurDataFollowDetail }) {
return { ...state, CurDataFollowDetail }; return { ...state, CurDataFollowDetail };
}, },
...@@ -38,11 +36,19 @@ export default { ...@@ -38,11 +36,19 @@ export default {
const resp = yield call(service.TosTosServiceProviderGet, playload); const resp = yield call(service.TosTosServiceProviderGet, playload);
console.log(resp) console.log(resp)
if (resp.code == 500) { if (resp.code == 500) {
window.location.href = '/500'; // window.location.href = '/500';
} else { }
if (resp.error_code == "0000") {
let Data = resp.data.rows; let Data = resp.data.rows;
yield put({ type: 'returnPage', Data, }); yield put({ type: 'returnPage', Data, });
} else {
console.log("请求错误码:"+resp.error_code)
let Data = null;
console.log(playload)
yield put({ type: 'returnPage', Data, });
} }
}, },
// 新建服务商 // 新建服务商
*TosTosServiceProviderSave({ playload }, { call, put }) { *TosTosServiceProviderSave({ playload }, { call, put }) {
......
...@@ -6,7 +6,7 @@ import { routerRedux } from 'dva/router' ...@@ -6,7 +6,7 @@ import { routerRedux } from 'dva/router'
export default { export default {
namespace: 'Init', namespace: 'Init',
state: { state: {
CommunityList: [], CommunityList: null,
}, },
reducers: { reducers: {
......
import { stringify } from 'querystring'; import { stringify } from 'querystring';
import { history, Reducer, Effect } from 'umi'; import { history, Reducer, Effect } from 'umi';
import { AccountLogin,AccountCheckLogin } from '@/services/login'; import { AccountLogin,AccountCheckLogin,AccountOut } from '@/services/login';
import { setAuthority } from '@/utils/authority'; import { setAuthority } from '@/utils/authority';
import { getPageQuery } from '@/utils/utils'; import { getPageQuery } from '@/utils/utils';
...@@ -10,6 +10,8 @@ export interface StateType { ...@@ -10,6 +10,8 @@ export interface StateType {
type?: string; type?: string;
currentAuthority?: 'user' | 'guest' | 'admin'; currentAuthority?: 'user' | 'guest' | 'admin';
token?: string; token?: string;
userName?: string;
password?: string;
} }
export interface LoginModelType { export interface LoginModelType {
...@@ -30,7 +32,9 @@ const Model: LoginModelType = { ...@@ -30,7 +32,9 @@ const Model: LoginModelType = {
state: { state: {
status: undefined, status: undefined,
token:'A', token: 'A',
userName: '',
password:'',
}, },
reducers: { reducers: {
...@@ -42,8 +46,8 @@ const Model: LoginModelType = { ...@@ -42,8 +46,8 @@ const Model: LoginModelType = {
type: payload.type, type: payload.type,
}; };
}, },
saveToken(state, { token }) { saveToken(state, { token,userName,password }) {
return{...state,token} return{...state,token,userName,password}
} }
}, },
...@@ -56,10 +60,12 @@ const Model: LoginModelType = { ...@@ -56,10 +60,12 @@ const Model: LoginModelType = {
}); });
// Login successfully // Login successfully
if (response.status === 'ok') { if (response.status === 'ok') {
console.log("登录成功") console.log("登录成功")
console.log(response)
const userMessage = yield call(AccountCheckLogin, payload);//请求时间网络 const userMessage = yield call(AccountCheckLogin, payload);//请求时间网络
console.log(userMessage)
console.log(userMessage.token) console.log(userMessage.token)
yield put({type: 'saveToken',token: userMessage.token}); yield put({type: 'saveToken',token: userMessage.token,userName:payload.userName,password:payload.password});
const urlParams = new URL(window.location.href); const urlParams = new URL(window.location.href);
const params = getPageQuery(); const params = getPageQuery();
let { redirect } = params as { redirect: string }; let { redirect } = params as { redirect: string };
...@@ -79,9 +85,10 @@ const Model: LoginModelType = { ...@@ -79,9 +85,10 @@ const Model: LoginModelType = {
} }
}, },
logout() { *logout({},{call,put}) {
const { redirect } = getPageQuery(); const { redirect } = getPageQuery();
// Note: There may be security issues, please note // Note: There may be security issues, please note
// const response = yield call(AccountOut, payload);
if (window.location.pathname !== '/user/login' && !redirect) { if (window.location.pathname !== '/user/login' && !redirect) {
history.replace({ history.replace({
pathname: '/user/login', pathname: '/user/login',
......
...@@ -4,18 +4,13 @@ import { queryCurrent, query as queryUsers } from '@/services/user'; ...@@ -4,18 +4,13 @@ import { queryCurrent, query as queryUsers } from '@/services/user';
export interface CurrentUser { export interface CurrentUser {
avatar?: string; avatar?: string;
name?: string; token?: string;
title?: string;
group?: string;
signature?: string;
tags?: {
key: string;
label: string;
}[];
userid?: string; userid?: string;
unreadCount?: number; name?: string;
permission?: [];
} }
export interface UserModelState { export interface UserModelState {
currentUser?: CurrentUser; currentUser?: CurrentUser;
} }
...@@ -26,9 +21,11 @@ export interface UserModelType { ...@@ -26,9 +21,11 @@ export interface UserModelType {
effects: { effects: {
fetch: Effect; fetch: Effect;
fetchCurrent: Effect; fetchCurrent: Effect;
deleteCurrent: Effect;
}; };
reducers: { reducers: {
saveCurrentUser: Reducer<UserModelState>; saveCurrentUser: Reducer<UserModelState>;
deleteCurrentUser:Reducer<UserModelState>;
changeNotifyCount: Reducer<UserModelState>; changeNotifyCount: Reducer<UserModelState>;
}; };
} }
...@@ -48,13 +45,19 @@ const UserModel: UserModelType = { ...@@ -48,13 +45,19 @@ const UserModel: UserModelType = {
payload: response, payload: response,
}); });
}, },
*fetchCurrent(_, { call, put }) { *fetchCurrent({playload}, { call, put }) {
const response = yield call(queryCurrent); const response = yield call(queryCurrent,playload);
console.log(response)
yield put({ yield put({
type: 'saveCurrentUser', type: 'saveCurrentUser',
payload: response, payload: response,
}); });
}, },
*deleteCurrent({playload}, { call, put }) {
yield put({
type: 'deleteCurrentUser',
});
},
}, },
reducers: { reducers: {
...@@ -64,6 +67,12 @@ const UserModel: UserModelType = { ...@@ -64,6 +67,12 @@ const UserModel: UserModelType = {
currentUser: action.payload || {}, currentUser: action.payload || {},
}; };
}, },
deleteCurrentUser(state, action) {
return {
...state,
currentUser: {},
};
},
changeNotifyCount( changeNotifyCount(
state = { state = {
currentUser: {}, currentUser: {},
......
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import styles from './Detail.less'; import styles from './Detail.less';
import { Input ,Form,Row,Col,Upload,Modal, Button } from 'antd'; import { Input ,Form,Row,Col,Upload,Modal, Button,Descriptions} from 'antd';
import { Link, useIntl, connect, Dispatch } from 'umi'; import { Link, useIntl, connect, Dispatch } from 'umi';
import TextArea from 'antd/lib/input/TextArea'; import TextArea from 'antd/lib/input/TextArea';
import { PlusOutlined } from '@ant-design/icons'; import { PlusOutlined } from '@ant-design/icons';
import Line from '../../components/Line/Line';
import TitleBack from '../../components/TitleBack/TitleBack'; import TitleBack from '../../components/TitleBack/TitleBack';
import PictureOptionsRow from '../../components/PictureOptions/PictureOptionsRow';
function getBase64(file: Blob) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
});
}
const stylesList5 = [
styles.box5item2,
styles.box5item3,
styles.box5item4
]
const stylesList8 = [
styles.box8item01,
styles.box8item01,
styles.box8item01
]
const Detail = (props:any) => { const Detail = (props:any) => {
const [picList] = useState(['https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png']);
const [previewVisible, setPreviewVisible] = useState(false);
const [previewImage, setPreviewImage] = useState("");
const [previewTitle, setPreviewTitle] = useState("");
const [fileList, setFileList] = useState([]);
const [editorFlag, setEditorFlag] = useState(true); const [editorFlag, setEditorFlag] = useState(true);
const { dispatch, location, CurData,CurDataDetail } = props; const { dispatch, location, CurData,CurDataDetail } = props;
...@@ -54,12 +26,15 @@ const Detail = (props:any) => { ...@@ -54,12 +26,15 @@ const Detail = (props:any) => {
useEffect(() => { useEffect(() => {
setCurDataDetail() setCurDataDetail()
TosCommunityServiceGetDetail({ if (CurData != null) {
serviceType:CurData.service_type, TosCommunityServiceGetDetail({
id:CurData.id serviceType: CurData.service_type,
}) id: CurData.id
setHeadTitle(headTitles[CurData.service_type-1]) })
},[]); setHeadTitle(headTitles[CurData.service_type - 1])
}
}, []);
useEffect(() => { useEffect(() => {
if ((location.pathname).indexOf("/Edit")>-1) { if ((location.pathname).indexOf("/Edit")>-1) {
...@@ -69,140 +44,87 @@ const Detail = (props:any) => { ...@@ -69,140 +44,87 @@ const Detail = (props:any) => {
} }
},[location.pathname]); },[location.pathname]);
const onFinish = (values:any) => {
const uploadButton = (
<div>
<PlusOutlined />
<div className="ant-upload-text">Upload</div>
</div>
);
const handleCancel = () =>{ setPreviewVisible(false) };
const handlePreview = async (file: { url: string; preview: string; originFileObj: Blob; name: any; }) => {
if (!file.url && !file.preview) {
file.preview = await getBase64(file.originFileObj);
}
setPreviewImage((file.url || file.preview));
setPreviewVisible(true);
setPreviewTitle(file.name || file.url.substring(file.url.lastIndexOf('/') + 1));
};
const handleChange = (Obj: any) => {
var tmp = Obj.fileList
console.log(tmp[0])
console.log(tmp[0].thumbUrl)
setFileList(Obj.fileList)
}
const onFinish = values => {
var val = values var val = values
val.type =CurData.service_type val.type =CurData.service_type
val.id =CurData.id val.id =CurData.id
val.userId = CurData.user_id val.userId = CurData.user_id
val.handleStatus = "1" val.handleStatus = "1"
val.file=["jpg:iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEuSURBVChTbVC/6oJgFP3sDy2CUJAQTeLSYFCWLkJDU+IbWK3iCzS0uYqDS4uT+AqNDYFT0Ngg+ABCW7jb6ffdoOl34XI5h3vvOfcy/BN1XeP5fKJpGsLv9xusKApcr1ecz2fEcYw0TXE4HDAej5HnOcIwpEE2n8/BGPulrutwXRetVgun04k40zTBHo8HkiSBIAjY7XZ4vV44Ho+Eq6oipdlsBmYYBqbTKbrdLobDIZGDwYA2KoqCxWIBTdPAVqsVlsslOp0OVFXFZrPBZDKhjdwGtzYajUBX3+938rLdbnG73X7eLpcL2ZBlGYzLcJJL8cozCAJIkvRt+MP7/R7McRys12sibNsGP46/q9/vE+d5HqIo+kqXZYl2uw3f95FlGURRpKZerwf+Z8uy8AEHrdhGHemyIwAAAABJRU5ErkJggg=="] val.file=[]
console.log('Success:', val) console.log('Success:', val)
TosCommuntiyServiceReply(val) //TosCommuntiyServiceReply(val)
}; };
const onFinishFailed = errorInfo => { const onFinishFailed = (errorInfo:any) => {
console.log('Failed:', errorInfo); console.log('Failed:', errorInfo);
}; };
const PictureOptionsRowRef = (values:any) => {
console.log(values)
}
return ( return (
<div className={styles.base}> <div className={styles.base}>
{/* 头部组件v1.2 */} {/* 头部组件v1.2 */}
<TitleBack title={headTitle} /> <TitleBack sublist={['Handle Status : '+CurDataDetail.status,'Create Time : '+CurDataDetail.time]} title={headTitle} />
{/* 内容组件 */} {/* 内容组件 */}
<div className={styles.box1}> <Descriptions>
<div className={styles.box1item1}>{CurDataDetail.community}</div> <Descriptions.Item >{CurDataDetail.community}</Descriptions.Item>
<div className={styles.box1item2}>{CurDataDetail.home}</div> <Descriptions.Item span={2}>{CurDataDetail.home}</Descriptions.Item>
</div> <Descriptions.Item label="Address" span={3}>{CurDataDetail.address} </Descriptions.Item>
<div className={styles.box2}> <Descriptions.Item label="User Name">{CurDataDetail.name}</Descriptions.Item>
<div className={styles.box2item1}>{CurDataDetail.address}</div> <Descriptions.Item label="Contact Details">{CurDataDetail.phone} </Descriptions.Item>
</div> <Descriptions.Item >{CurDataDetail.email}</Descriptions.Item>
<div className={styles.box3}> </Descriptions>
<div className={styles.box3item1}>User Name</div> <Row gutter={16}>
<div className={styles.box3item2}>{CurDataDetail.name}</div> <Col>Details:</Col>
<div className={styles.box3item3}>Contact Details</div> <Col><TextArea style={{ width: 394, height: 80,padding:8 }} autoSize={false} disabled value={CurDataDetail.content}/></Col>
<div className={styles.box3item4}>{CurDataDetail.phone}</div> </Row>
<div className={styles.box3item5}>{CurDataDetail.email}</div> <Row gutter={16} style={{marginTop:20}}>
</div> <Col>Picture:</Col>
<div className={styles.box4}> <Col><PictureOptionsRow
<div className={styles.box4item1}>Warranty Details</div> disabled={true} putSubmit={PictureOptionsRowRef} data={{
<div className={styles.box4item2}>{CurDataDetail.content}</div> userToken: "token",
</div> imageType: 'tosCommunityImageReply',
<div className={styles.box5}> extend: "",
<div className={styles.box5item1}>Picture</div> }}
{ defultValue={[{ url: "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" }]}
stylesList5.map((item, index) => { /></Col>
return ( </Row>
picList[index] != null ? (
<div className={item} key={"stylesList5_" + index}> <Line />
<img alt="pic1" style={{ width: 80, height: 80 }} src={picList[0]} />
</div>) : (<div key={"stylesList5_" + index} />)
)
})
}
</div>
<div className={styles.line}></div>
<Form name="basic" onFinish={onFinish} onFinishFailed={onFinishFailed}> <Form name="basic" onFinish={onFinish} onFinishFailed={onFinishFailed}>
<div className={styles.box6}> <Row gutter={16}>
<div className={styles.box6item1}>response</div> <Col>Response:</Col>
<div className={styles.box6item2}><Form.Item name="handleName" ><Input style={{ width: 200 }} placeholder="Please enter a Name" disabled={!editorFlag} /></Form.Item></div> <Col><Form.Item name="handleName" ><Input style={{ width: 200 }} placeholder="Please enter a Name" disabled={!editorFlag} /></Form.Item></Col>
<Col>Contract Detail:</Col>
<div className={styles.box6item3}>Contract Detail</div> <Col><Form.Item name="handleContacts" ><Input style={{ width: 300 }} placeholder="Please enter contrat number" disabled={!editorFlag} /></Form.Item></Col>
<div className={styles.box6item4}><Form.Item name="handleContacts" ><Input style={{ width: 300 }} placeholder="Please enter contrat number" disabled={!editorFlag} /></Form.Item></div> </Row>
</div> <Row gutter={16} style={{ marginTop: 20 }}>
<Col>Resolved Complaint:</Col>
<div className={styles.box7}> <Col><Form.Item name="replyContent" ><TextArea style={{ width: 394, height: 80 }} autoSize={false} disabled={!editorFlag} /></Form.Item></Col>
<div className={styles.box7item1}>Resolved Complaint</div> </Row>
<div className={styles.box7item2}><Form.Item name="replyContent" ><TextArea style={{ width: 394, height: 80 }} autoSize={false} disabled={!editorFlag}/></Form.Item></div> <Row gutter={16} style={{ marginTop: 20 }}>
</div> <Col>Resolved Complaint:</Col>
<Col>
<div className={fileList.length !=0?styles.box8:styles.box8min}> <PictureOptionsRow
<div className={styles.box8item1}>Resolved Complaint</div> disabled={!editorFlag}
<div className={styles.box8item2}> putSubmit={PictureOptionsRowRef} data={{
{ userToken: "token",
editorFlag ? imageType: 'tosCommunityImageReply',
(<div> extend: "",
<Upload action="" listType="picture-card" fileList={fileList} onPreview={handlePreview} onChange={handleChange}> }}
{fileList.length >= 3 ? null : uploadButton} defultValue={[]}
</Upload> />
<Modal visible={previewVisible} title={previewTitle} footer={null} onCancel={handleCancel}> </Col>
<img alt="picture" style={{ width: '100%' }} src={previewImage} /> </Row>
</Modal></div>) :
(<div>
{
stylesList8.map((item, index) => {
return (
picList[index] != null ? (
<div className={item} key={"stylesList8_" + index}>
<img alt="pic1" style={{ width: 80,height:80 }} src={picList[0]} />
</div>):(<div key={"stylesList8_" + index} />)
)
})
}
</div>)
}</div>
</div>
{ {
editorFlag ? editorFlag ?
(<div><div className={styles.line}></div><Form.Item><Button type="primary" htmlType="submit">summit</Button></Form.Item></div>):(<div/>) <><Line /><Form.Item><Button type="primary" htmlType="submit">summit</Button></Form.Item></>:null
} }
</Form> </Form>
</div> </div>
); );
...@@ -210,7 +132,6 @@ const Detail = (props:any) => { ...@@ -210,7 +132,6 @@ const Detail = (props:any) => {
function mapStateToProps(state:any) { function mapStateToProps(state:any) {
const { CurData, CurDataDetail } = state.CommunityService; const { CurData, CurDataDetail } = state.CommunityService;
// console.log(CurDataDetail)
return { return {
CurData, CurData,
CurDataDetail CurDataDetail
......
...@@ -10,12 +10,6 @@ import TitleSearch from '../../components/TitleSearch/TitleSearch'; ...@@ -10,12 +10,6 @@ import TitleSearch from '../../components/TitleSearch/TitleSearch';
const PropertyServices = (props: any) => { const PropertyServices = (props: any) => {
const { formatMessage } = useIntl();
const nameofowner = formatMessage({ id: 'R.charge.input.nameofowner' })
const inputProject = formatMessage({ id: 'R.charge.input.project' })
const search = formatMessage({ id: 'R.charge.search' })
const { dispatch, location, Data } = props; const { dispatch, location, Data } = props;
const TosCommunityServiceGet = (values: any) => { dispatch({ type: 'CommunityService/TosCommunityServiceGet', playload: values }) }; const TosCommunityServiceGet = (values: any) => { dispatch({ type: 'CommunityService/TosCommunityServiceGet', playload: values }) };
const setCurData = (values: any) => { dispatch({ type: 'CommunityService/setCurData', playload: values }) }; const setCurData = (values: any) => { dispatch({ type: 'CommunityService/setCurData', playload: values }) };
...@@ -25,17 +19,13 @@ const PropertyServices = (props: any) => { ...@@ -25,17 +19,13 @@ const PropertyServices = (props: any) => {
const [loading,setLoading]=useState(false) const [loading,setLoading]=useState(false)
const goToFunction = (value, record, e) => { const goToFunction = (value, record, e) => {
console.log(record)
setCurData(record) setCurData(record)
history.push(location.pathname+(value==0?"/Edit":"/Detail")) history.push(location.pathname+(value==0?"/Edit":"/Detail"))
} }
const goToRequest = () => { const goToRequest = () => {
history.push("./AccessCardApplication/Request") history.push("./AccessCardApplication/Request")
} }
const columns = [ const columns = [
{ title: "community_name",dataIndex: 'community_name',}, { title: "community_name",dataIndex: 'community_name',},
{ title: "ower_name",dataIndex: 'ower_name',}, { title: "ower_name",dataIndex: 'ower_name',},
......
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import styles from './Bookings.less'; import styles from './css/Bookings.less';
import { Input ,DatePicker,Button,Space,Pagination,message, Radio,TimePicker,Row, Col } from 'antd'; import { Input ,DatePicker,Button,message, Radio,TimePicker,Row, Col } from 'antd';
const { RangePicker } = TimePicker; const { RangePicker } = TimePicker;
import moment from 'moment';
import { Link, useIntl, connect, Dispatch } from 'umi'; import {connect } from 'umi';
import TitleBack from '../../../components/TitleBack/TitleBack'; import TitleBack from '../../../components/TitleBack/TitleBack';
const Bookings = (props:any) => { const Bookings = (props:any) => {
const { dispatch, location, Data3,Data3Error,Data4,DataSave,token} = props; const { dispatch, Data3,Data3Error,Data4,DataSave,token} = props;
const RA = (index:any,values: any) => { dispatch({ type: 'FacilityBookings/RA', playload: { index: index, body: values } }) }; const RA = (index:any,values: any) => { dispatch({ type: 'FacilityBookings/RA', playload: { index: index, body: values } }) };
const IA = () => { dispatch({ type: 'FacilityBookings/IA' }) }; const IA = () => { dispatch({ type: 'FacilityBookings/IA' }) };
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
...@@ -35,7 +35,6 @@ const Bookings = (props:any) => { ...@@ -35,7 +35,6 @@ const Bookings = (props:any) => {
setLoading(false) setLoading(false)
}, [Data3]); }, [Data3]);
const [radioGroupValue,setRadioGroupValue]=useState(0)
const changeRadio = () => { const changeRadio = () => {
} }
...@@ -66,7 +65,7 @@ const Bookings = (props:any) => { ...@@ -66,7 +65,7 @@ const Bookings = (props:any) => {
<div className={styles.box2item2}> <div className={styles.box2item2}>
<Radio.Group onChange={changeRadio} defaultValue={1}> <Radio.Group onChange={changeRadio} defaultValue={1}>
{ {
Data3.map((item, index) => { Data3.map((item:any, index:any) => {
return ( return (
<Radio key={"Radio_" + index} value={item.categoriesId}>{item.categoriesName}</Radio> <Radio key={"Radio_" + index} value={item.categoriesId}>{item.categoriesName}</Radio>
) )
...@@ -97,8 +96,8 @@ const Bookings = (props:any) => { ...@@ -97,8 +96,8 @@ const Bookings = (props:any) => {
<div className={styles.box5item1}>Booking Schedule</div> <div className={styles.box5item1}>Booking Schedule</div>
<div className={styles.box5item2}> <div className={styles.box5item2}>
<Row gutter={8}> <Row gutter={8}>
<Col> <DatePicker /></Col> <Col><DatePicker /></Col>
<Col> <RangePicker defaultValue={moment('12:30', format)} onChange={Mitime} format={format}/></Col> <Col><RangePicker onChange={Mitime} format={format}/></Col>
</Row> </Row>
</div> </div>
</div> </div>
......
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import styles from './BookingsView.less'; import styles from './css/BookingsView.less';
import { Input ,Menu,Table,Space,Pagination,Tooltip, Button, Radio } from 'antd'; import { Input ,Menu,Table,Space,Pagination,Tooltip, Button, Radio } from 'antd';
import { Link, useIntl, connect, Dispatch } from 'umi'; import { Link, useIntl, connect, Dispatch } from 'umi';
......
import React, { useState, useEffect,useRef } from 'react'; import React, { useState, useEffect,useRef } from 'react';
import styles from './index.less'; import styles from './css/index.less';
import { Input ,Menu,Table,Space,Form,Radio, Modal,Row,Col, Button } from 'antd'; import { Input ,Menu,Table,Space,Form,Radio, Modal,Row,Col, Button } from 'antd';
import { Link, useIntl, connect, Dispatch } from 'umi'; import { Link, useIntl, connect, Dispatch } from 'umi';
...@@ -9,10 +9,11 @@ import TitleBack from '../../../components/TitleBack/TitleBack'; ...@@ -9,10 +9,11 @@ import TitleBack from '../../../components/TitleBack/TitleBack';
import Line from '../../../components/Line/Line'; import Line from '../../../components/Line/Line';
import { timestampToTime3 } from '../../../utils/time'; import { timestampToTime3 } from '../../../utils/time';
import TextArea from 'antd/lib/input/TextArea'; import TextArea from 'antd/lib/input/TextArea';
import { values } from 'lodash';
import {getUrlLast} from '../../../utils/string';
const Detail = (props:any) => { const Detail = (props:any) => {
const { dispatch, DataSave,DataSaveDetail,token} = props; const { dispatch,location, DataSave,DataSaveDetail,token} = props;
const RA = (index:any,values: any) => { dispatch({ type: 'FacilityBookings/RA', playload: { index: index, body: values } }) }; const RA = (index:any,values: any) => { dispatch({ type: 'FacilityBookings/RA', playload: { index: index, body: values } }) };
useEffect(() => { useEffect(() => {
...@@ -90,7 +91,7 @@ const Detail = (props:any) => { ...@@ -90,7 +91,7 @@ const Detail = (props:any) => {
return ( return (
<div className={styles.base}> <div className={styles.base}>
<TitleBack title={"View Facility Bookings"}/> <TitleBack title={"View Facility Bookings"} url={getUrlLast(location.pathname)+'?type=Detail'}/>
<Row gutter={8}> <Row gutter={8}>
<Col>预订状态</Col><Col span={2}>{statusDes[DataSave.status]}</Col> <Col>预订状态</Col><Col span={2}>{statusDes[DataSave.status]}</Col>
......
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import styles from './index.less'; import styles from './css/index.less';
import { Input ,Tabs,Table,Space, Button} from 'antd'; import { Input ,Tabs,Table,Space, Button} from 'antd';
const { TabPane } = Tabs; const { TabPane } = Tabs;
...@@ -12,22 +12,24 @@ import { timestampToTime } from '../../../utils/time'; ...@@ -12,22 +12,24 @@ import { timestampToTime } from '../../../utils/time';
import TitleSearch from '../../../components/TitleSearch/TitleSearch'; import TitleSearch from '../../../components/TitleSearch/TitleSearch';
const managerFeeStatusDes= ["未交", "已交", "已退"] const managerFeeStatusDes= ["未交", "已交", "已退"]
const marginFeeStatusDes = ["未交", "已交", "未退", "已退部分", "已退全部"] const marginFeeStatusDes = ["未交", "已交", "未退", "已退部分", "已退全部"]
const statusDes = ["全部", "已申请", "已预订", "已使用", "已取消", "已完成"] const statusDes = ["全部", "已申请", "已预订", "已使用", "已取消", "已完成"]
import { getUrlLastParams } from '../../../utils/string';
const FacilityBookings = (props:any) => { const FacilityBookings = (props:any) => {
const { formatMessage } = useIntl(); const { formatMessage } = useIntl();
const { dispatch, location, Data, DataPage, Data2, token } = props; const { dispatch, location, Data, Data2, token,DataSave } = props;
const RA = (index:any,values: any) => { dispatch({ type: 'FacilityBookings/RA', playload: {index:index, body:values } }) }; const RA = (index:any,values: any) => { dispatch({ type: 'FacilityBookings/RA', playload: {index:index, body:values } }) };
const SA = (values: any) => { dispatch({ type: 'FacilityBookings/SA', playload: values }) }; const SA = (values: any) => { dispatch({ type: 'FacilityBookings/SA', playload: values }) };
const CA = () => { dispatch({ type: 'FacilityBookings/CA', playload: null }) };
const [tab, setTab] = useState(1) const [tab, setTab] = useState(location.query.Facility == "true" ? 2 : 1)
const [curPage, setCurPage] = useState(1) const [curSearchString,setCurSearchString]=useState({subscribeDate:null,status:null,curPage:null})
const [curPage2, setCurPage2] = useState(1) const [curPage2, setCurPage2] = useState(1)
const [loading, setLoading] = useState(false) const [loading, setLoading] = useState(false)
...@@ -35,11 +37,26 @@ const FacilityBookings = (props:any) => { ...@@ -35,11 +37,26 @@ const FacilityBookings = (props:any) => {
const [columns2, setColumns2] = useState([]) const [columns2, setColumns2] = useState([])
const goToFunction = () => { const goToFunction = () => {
if(tab==2){CA()}
history.push(location.pathname + (tab==1?'/Booking':'/Adding')) history.push(location.pathname + (tab==1?'/Booking':'/Adding'))
} }
const savePageAll = (values:any) => {
var tmp = values;
tmp.curSearchString = curSearchString
return tmp
}
function doing(){
console.log(curSearchString)
}
function test(values:any) {
console.log(values)
}
const goToDetail = (values:any) => { const goToDetail = (values:any) => {
SA(values) console.log("跟踪对象")
history.push(location.pathname + '/Detail') console.log(curSearchString)
// SA(savePageAll(values))
// history.push(location.pathname + '/Detail')
} }
const makeOperator = (values: any,index:any, e: any) => { const makeOperator = (values: any,index:any, e: any) => {
...@@ -62,7 +79,7 @@ const FacilityBookings = (props:any) => { ...@@ -62,7 +79,7 @@ const FacilityBookings = (props:any) => {
["Deposit", "marginFeeStatus",(text: any) => (<div>{marginFeeStatusDes[text]}</div>)], ["Deposit", "marginFeeStatus",(text: any) => (<div>{marginFeeStatusDes[text]}</div>)],
["Status", "status",(text: any) => (<div>{statusDes[text]}</div>)], ["Status", "status",(text: any) => (<div>{statusDes[text]}</div>)],
["Actions",null, (text: any, record: any) => (<Space size="middle"> <a onClick={goToDetail.bind(this,record)}>Detail</a></Space>)], ["Actions",null, (text: any, record: any) => (<Space size="middle"> <Button onClick={test.bind(this,curSearchString)}>Detail</Button></Space>)],
] ]
const key2 = [ const key2 = [
["小区", "communityName"], ["小区", "communityName"],
...@@ -74,40 +91,75 @@ const FacilityBookings = (props:any) => { ...@@ -74,40 +91,75 @@ const FacilityBookings = (props:any) => {
<a onClick={makeOperator.bind(this,record,2)}>预约</a> <a onClick={makeOperator.bind(this,record,2)}>预约</a>
</Space>)] </Space>)]
] ]
setColumns(objectColumns(key)) setColumns(objectColumns(key))
setColumns2(objectColumns(key2)) setColumns2(objectColumns(key2))
RA(0,{ userToken: token, pageNum: 1 }) console.log("核心排查")
RA(8,{ userToken: token, pageNum: 1 }) console.log(DataSave)
},[]); },[]);
useEffect(() => { useEffect(() => {
setLoading(false) setLoading(false)
},[Data]); }, [Data]);
const TitleSearchContent = (comment: any) => {
if (tab == 1) {
console.log(comment) // useEffect(() => {
console.log("comment") // console.log(location)
if (comment.communitydata != null || comment.key != null || comment.status != null) { // if (location.query.type != null) {
// setCurSearchString(DataSave.curSearchString)
// RA(9, { userToken: token, pageNum: DataSave.curSearchString.curPage, subscribeDate: DataSave.curSearchString.subscribeDate, status: DataSave.curSearchString.status })
// }else {
// RA(0, { userToken: token, pageNum: 1 })
// }
// },[location])
const CallBackTitleSearch= (comment: any) => {
if (tab == 1) {
if (comment.communityName != null || comment.key != null || comment.status != null) {
console.log("搜索跟踪对象")
setCurSearchString({ subscribeDate: comment.key, status: comment.status,curPage:1})
RA(9, { userToken: token, pageNum: "1", subscribeDate: comment.key, status: comment.status }) RA(9, { userToken: token, pageNum: "1", subscribeDate: comment.key, status: comment.status })
} }
} else { } else {
console.log(comment) RA(8, {
// RA(8,{ userToken: token, pageNum: 1 }) "communityNameList":comment.communityName,
"facilityName":"",
"pageNum":"1"
})
}
}
function TabCallback(tab: any) {
setTab(tab)
if (tab == 1) {
if (curSearchString.subscribeDate != null || curSearchString.status != null) {
RA(9, { userToken: token, pageNum: curSearchString.curPage, subscribeDate: curSearchString.subscribeDate, status: curSearchString.status })
} else {
RA(0, { userToken: token, pageNum: "1" })
}
} else {
RA(8,{ userToken: token, pageNum: "1" })
} }
} }
function TabCallback(key: any) { setTab(key) }
function Pagechange(current: any, pageSize: any) { function Pagechange(current: any, pageSize: any) {
setLoading(true) setLoading(true)
if (tab == 1) { if (tab == 1) {
setCurPage(current) var tmp = curSearchString
RA(0, { userToken: token, pageNum: current }) console.log("页面跟踪对象")
console.log(curSearchString)
tmp.curPage = current
console.log(tmp)
// setCurSearchString(tmp)
if (curSearchString.subscribeDate != null || curSearchString.status != null) {
// SA(savePageAll({}))
// RA(9, { userToken: token, pageNum: current, subscribeDate: curSearchString.subscribeDate, status: curSearchString.status })
} else {
RA(0, { userToken: token, pageNum: current })
}
} else { } else {
setCurPage2(current) setCurPage2(current)
// RA(0, { userToken: token, pageNum: current }) RA(8, { userToken: token, pageNum: current })
} }
} }
...@@ -120,43 +172,37 @@ const FacilityBookings = (props:any) => { ...@@ -120,43 +172,37 @@ const FacilityBookings = (props:any) => {
<TitleSearch <TitleSearch
status={[{ name: ["status", "订单状态"], data: [[0, "全部"], [1, "已申请"], [2, "已预订"], [3, "已使用"], [4, "已取消"]] }]} status={[{ name: ["status", "订单状态"], data: [[0, "全部"], [1, "已申请"], [2, "已预订"], [3, "已使用"], [4, "已取消"]] }]}
time={["key", "预订时间筛选"]} time={["key", "预订时间筛选"]}
community={true} community={"communityName"}
onSubmit={TitleSearchContent} /> // single={true}
onSubmit={CallBackTitleSearch} />
<div style={{position:"relative",height:40}}> <div style={{position:"relative",height:40}}>
<Button type="primary" style={{ position: "absolute", right: 0 }} onClick={goToFunction}>{tab==1?"Booking":"Add Facility"}</Button> <Button type="primary" style={{ position: "absolute", right: 0 }} onClick={goToFunction}>{tab==1?"Booking":"Add Facility"}</Button>
</div> </div>
<Button type="primary" onClick={doing}>test</Button>
<Tabs defaultActiveKey="1" onChange={TabCallback}> <Button type="primary" onClick={test.bind(this,curSearchString)}>test2</Button>
<Tabs defaultActiveKey={tab.toString()} onChange={TabCallback}>
<TabPane tab="Facility Bookings" key="1"> <TabPane tab="Facility Bookings" key="1">
<Table loading={loading} rowKey="id" style={{ marginTop: 16 }} dataSource={Data.data } columns={columns} pagination={{ current: curPage, total: Data.total, showSizeChanger: false, onChange:Pagechange }} /> <Table loading={loading} rowKey="id" style={{ marginTop: 16 }} dataSource={Data.data } columns={columns} pagination={{ current: curSearchString.curPage, total: Data.total.totalRow, showSizeChanger: false, onChange:Pagechange }} />
</TabPane> </TabPane>
<TabPane tab="Facility Management" key="2"> <TabPane tab="Facility Management" key="2">
<Table rowKey="id" style={{ marginTop: 16 }} dataSource={Data2.data} columns={columns2} pagination={{ current: curPage2, total: Data2.total, showSizeChanger: false, onChange: Pagechange }} /> <Table rowKey="id" style={{ marginTop: 16 }} dataSource={Data2.data} columns={columns2} pagination={{ current: curPage2, total: Data2.total.totalRow, showSizeChanger: false, onChange: Pagechange }} />
</TabPane> </TabPane>
</Tabs> </Tabs>
</div> </div>
); );
}; };
function mapStateToProps(state:any) { function mapStateToProps(state:any) {
const { Data, DataPage, Data2 } = state.FacilityBookings; const { Data, DataPage, Data2,DataSave } = state.FacilityBookings;
const { token } = state.login; const { token } = state.login;
return { return {
Data, Data,
DataPage, DataPage,
Data2, Data2,
DataSave,
token token
}; };
} }
......
import React, { useState, useEffect } from 'react';
import styles from './index.less';
import { Input ,Upload,Modal,Button,Space,Pagination,Tooltip, Radio, Checkbox } from 'antd';
import { Link, useIntl, connect, Dispatch } from 'umi';
import { PlusOutlined } from '@ant-design/icons';
function getBase64(file: Blob) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
});
}
import TitleBack from '../../../components/TitleBack/TitleBack';
const FacilityBookingsSetting = () => {
const [namelist, setNamelist] = useState(['A']);
const [previewVisible, setPreviewVisible] = useState(false);
const [previewImage, setPreviewImage] = useState("");
const [previewTitle, setPreviewTitle] = useState("");
const [fileList, setFileList] = useState([]);
const uploadButton = ( <div><PlusOutlined /> <div className="ant-upload-text">Upload</div></div>);
const handleCancel = () => { setPreviewVisible(false) };
const handleChange = (Obj: any) => { setFileList(Obj.fileList) }
const handlePreview = async (file: { url: string; preview: string; originFileObj: Blob; name: any; }) => {
if (!file.url && !file.preview) {
file.preview = await getBase64(file.originFileObj);
}
setPreviewImage((file.url || file.preview));
setPreviewVisible(true);
setPreviewTitle(file.name || file.url.substring(file.url.lastIndexOf('/') + 1));
};
const onCreate = () => {
let newlist = [...namelist];
newlist.push('D')
console.log(newlist)
setNamelist(newlist)
}
const onDelete = () => {
let newlist = [...namelist];
newlist.pop();
setNamelist(newlist)
}
return (
<div className={styles.base}>
{/* 头部组件v1.2 */}
<TitleBack title="Add Facility" />
<div className={styles.box1}>
<div className={styles.box1item1}>Project</div>
<div className={styles.box1item2}><Input.Search style={{width:200}} /></div>
</div>
<div className={styles.box2}>
<div className={styles.box2item1}>Facility Name</div>
<div className={styles.box2item2}><Input style={{ width: 200 }} /></div>
<div className={styles.box2item3}>Management Expense</div>
<div className={styles.box2item4}><Input style={{ width: 80 }} /></div>
<div className={styles.box2item5}>Deposit</div>
<div className={styles.box2item6}><Input style={{width:80}} /></div>
</div>
<div style={{marginBottom:20}}>Facility Category</div>
<ul className={styles.ulist}>
{
namelist.map((item, index) => {
return (
<div key={"namelist"+index}>
<li className={styles.llist}><div className={styles.alist2}>
<div className={styles.alist1}>
<Upload action="https://www.mocky.io/v2/5cc8019d300000980a055e76" listType="picture-card" fileList={fileList} onPreview={handlePreview} onChange={handleChange}>
{fileList.length >= 1? null : uploadButton}
</Upload>
<Modal visible={previewVisible} title={previewTitle} footer={null} onCancel={handleCancel}>
<img alt="picture" style={{ width: '100%' }} src={previewImage} />
</Modal>
</div>
<div className={styles.alist2box}>
<div className={styles.alist2boxitem1}>Name</div>
<div className={styles.alist2boxitem2}><Input style={{width:120}}/></div>
<div className={styles.alist2boxitem3}><div style={{cursor:"pointer",color:"#FF5151",fontWeight:600}} onClick={onDelete}>Delete</div></div>
</div>
</div>
</li>
</div>
)})
}
<li className={styles.llist}><div className={styles.alist3} onClick={onCreate}><PlusOutlined /></div></li>
</ul>
<div><p className={styles.alist2boxNone}>none</p></div>
<div className={styles.box3}>
<div className={styles.box3item1}>Facility Detail</div>
<div className={styles.box3item2}>
<div className={styles.box3group1}>
<Upload action="https://www.mocky.io/v2/5cc8019d300000980a055e76" listType="picture-card" fileList={fileList} onPreview={handlePreview} onChange={handleChange}>
{fileList.length >= 1? null : uploadButton}
</Upload>
<Modal visible={previewVisible} title={previewTitle} footer={null} onCancel={handleCancel}>
<img alt="picture" style={{ width: '100%' }} src={previewImage} />
</Modal>
</div>
</div>
</div>
<div className={styles.line}></div>
<div className={styles.box5}>
<div className={styles.box5item1}>Opening Hours</div>
<div className={styles.box5item2}>09:00~20:00</div>
</div>
<div className={styles.box6}>
<div className={styles.box6item1}>Settings For Booking</div>
<div className={styles.box6item2}><Input style={{width:80}} /></div>
<div className={styles.box6item3}>Cancel Appointment</div>
<div className={styles.box6item4}><Input style={{width:80}}/></div>
<div className={styles.box6item5}>No deposit,cancellation</div>
<div className={styles.box6item6}><Input style={{width:80}}/></div>
<div className={styles.box6item7}>Bookable</div>
</div>
<div className={styles.box7}>
<div className={styles.box7item1}><Input style={{width:120}}/></div>
<div className={styles.box7item2}><Input style={{width:80}}/></div>
</div>
<div className={styles.box8}>
<div className={styles.box8item1}><Checkbox>Fixed Time Period For Each Appointment</Checkbox></div>
<div className={styles.box8item2}><Input style={{width:100}}/></div>
<div className={styles.box8item3}></div>
<div className={styles.box8item4}><Input style={{width:100}}/></div>
</div>
<div className={styles.line}></div>
<Button type="primary" style={{ width: 80, height: 32 }}>提交</Button>
</div>
);
};
export default FacilityBookingsSetting;
import React, { useState, useEffect,useRef } from 'react'; import React, { useState, useEffect,useRef } from 'react';
import styles from './index.less'; import styles from './css/index.less';
import { Input ,Upload,Modal,Button,Space,Pagination,Tooltip, Radio, Form,Row, Col,Select, message } from 'antd'; import { Input ,Upload,Modal,Button,Space,Pagination,Tooltip, Radio, Form,Row, Col,Select, message } from 'antd';
const { Option } = Select; const { Option } = Select;
import { Link, useIntl, connect, Dispatch } from 'umi'; import { Link, useIntl, connect, Dispatch,history } from 'umi';
import { FieldTimeOutlined } from '@ant-design/icons'; import { FieldTimeOutlined } from '@ant-design/icons';
import PictureOptions from '../../../components/PictureOptions/PictureOptions'; import PictureOptions from '../../../components/PictureOptions/PictureOptions';
...@@ -11,23 +11,14 @@ import PictureOptionsRow from '../../../components/PictureOptions/PictureOptions ...@@ -11,23 +11,14 @@ import PictureOptionsRow from '../../../components/PictureOptions/PictureOptions
import TitleBack from '../../../components/TitleBack/TitleBack'; import TitleBack from '../../../components/TitleBack/TitleBack';
import TimeSelect from '../../../components/TimeSelect/TimeSelect'; import TimeSelect from '../../../components/TimeSelect/TimeSelect';
import Line from '../../../components/Line/Line'; import Line from '../../../components/Line/Line';
import { values } from 'lodash';
// categoriesDetailsImageName: ["test.jpg"], // categoriesDetailsImageName: ["test.jpg"],
// categoriesName: ["篮球场A&test.jpg"], // categoriesName: ["篮球场A&test.jpg"],
// reservationQuantumTime: ["09:00-07:00"] // reservationQuantumTime: ["09:00-07:00"]
const Data = {
canReservationDay: "5", import { getUrlLast } from '../../../utils/string'
canReservationNum: "6",
cancelReservationDay: "3",
categoriesOpenTime: "09:00-20:00",
communityManagerFee: "18",
communityMargin: "20",
communityName: "A9",
facilityName: "篮球场",
nomarginCancelReservationDay: "4",
periodType: "2",
}
const FacilityManager = (props:any) => { const FacilityManager = (props:any) => {
const { dispatch, location, token,sourceData,DataSave} = props; const { dispatch, location, token,sourceData,DataSave} = props;
...@@ -51,10 +42,12 @@ const FacilityManager = (props:any) => { ...@@ -51,10 +42,12 @@ const FacilityManager = (props:any) => {
} }
useEffect(() => { useEffect(() => {
if (sourceData != null) { if (sourceData != null) {
console.log("当前数据不为空")
console.log(sourceData) console.log(sourceData)
formRef.current.setFieldsValue(sourceData) formRef.current.setFieldsValue(sourceData)
} }
},[sourceData]) }, [sourceData])
useEffect(() => { useEffect(() => {
console.log("init one") console.log("init one")
console.log(DataSave) console.log(DataSave)
...@@ -129,11 +122,14 @@ const FacilityManager = (props:any) => { ...@@ -129,11 +122,14 @@ const FacilityManager = (props:any) => {
const extendName = (values:any) => { const extendName = (values:any) => {
setExtend(values) setExtend(values)
} }
const Subscribe = () => {
history.push(getUrlLast(location.pathname)+ "/FacilityApply")
}
return ( return (
<div className={styles.base}> <div className={styles.base}>
{/* 头部组件v1.2 */} {/* 头部组件v1.2 */}
<TitleBack title={PATHNAME} /> <TitleBack title={PATHNAME} url={getUrlLast(location.pathname)+"?Facility=true"}/>
<Form ref={formRef} name="basic" onFinish={onFinish} onFinishFailed={onFinishFailed} > <Form ref={formRef} name="basic" onFinish={onFinish} onFinishFailed={onFinishFailed} >
<Row gutter={32}> <Row gutter={32}>
...@@ -179,13 +175,13 @@ const FacilityManager = (props:any) => { ...@@ -179,13 +175,13 @@ const FacilityManager = (props:any) => {
<Col>预约设置</Col> <Col>预约设置</Col>
<Col> <Col>
<Row gutter={100}> <Row gutter={100}>
<Col><Form.Item name="cancelReservationDay" ><Input placeholder="取消预订" style={{width:160}} disabled={facilityDetail}/></Form.Item></Col> <Col><Form.Item name="cancelReservationDay" label="提前取消预订"><Input placeholder="取消预订" style={{width:160}} disabled={facilityDetail}/></Form.Item></Col>
<Col><Form.Item name="nomarginCancelReservationDay" ><Input placeholder="不交押金,取消预订" style={{width:160}} disabled={facilityDetail}/></Form.Item></Col> <Col><Form.Item name="nomarginCancelReservationDay" label="不交押金,自动取消预订"><Input placeholder="不交押金,取消预订" style={{width:160}} disabled={facilityDetail}/></Form.Item></Col>
<Col><Form.Item name="canReservationDay" ><Input placeholder="可预订" style={{width:160}} disabled={facilityDetail}/></Form.Item></Col> <Col><Form.Item name="canReservationDay" label="可提前预订"><Input placeholder="可预订" style={{width:160}} disabled={facilityDetail}/></Form.Item></Col>
</Row> </Row>
<Row gutter={8}> <Row gutter={8}>
<Col> <Col>
<Form.Item name="periodType" > <Form.Item name="periodType" label="预约周期">
<Select placeholder="period" allowClear style={{width:120}} disabled={facilityDetail}> <Select placeholder="period" allowClear style={{width:120}} disabled={facilityDetail}>
<Option value="1">Day</Option> <Option value="1">Day</Option>
<Option value="2">Month</Option> <Option value="2">Month</Option>
...@@ -200,10 +196,10 @@ const FacilityManager = (props:any) => { ...@@ -200,10 +196,10 @@ const FacilityManager = (props:any) => {
<Row gutter={32} style={{ marginTop: 28 }}> <Row gutter={32} style={{ marginTop: 28 }}>
<Col>预约时段</Col> <Col>预约时段</Col>
<Col><TimeSelect putSubmit={TimeSelectRef} defaultValue={["10:00-12:00","13:00-14:00"]} disabled={facilityDetail}/></Col> <Col><TimeSelect putSubmit={TimeSelectRef} defaultValue={["08:00-20:00"]} disabled={facilityDetail}/></Col>
</Row> </Row>
{ {
facilityDetail ? null : facilityDetail ? <><Line /><Button type="primary" onClick={Subscribe}>Subscribe</Button></> :
<><Line /><Button type="primary" htmlType="submit">Submit</Button></> <><Line /><Button type="primary" htmlType="submit">Submit</Button></>
} }
...@@ -222,3 +218,19 @@ function mapStateToProps(state:any) { ...@@ -222,3 +218,19 @@ function mapStateToProps(state:any) {
}; };
} }
export default connect(mapStateToProps)(FacilityManager); export default connect(mapStateToProps)(FacilityManager);
// ["10:00-12:00","13:00-14:00"]
// defultValue={[{ url: "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png", name: "篮球场A"},{ url: "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png", name: "篮球场B" }]}
// defultValue={[{ url: "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" }]}
// const Data = {
// canReservationDay: "5",
// canReservationNum: "6",
// cancelReservationDay: "3",
// categoriesOpenTime: "09:00-20:00",
// communityManagerFee: "18",
// communityMargin: "20",
// communityName: "A9",
// facilityName: "篮球场",
// nomarginCancelReservationDay: "4",
// periodType: "2",
// }
\ No newline at end of file
...@@ -5,7 +5,7 @@ import { Input ,Menu,Table,Space} from 'antd'; ...@@ -5,7 +5,7 @@ import { Input ,Menu,Table,Space} from 'antd';
import { Link, useIntl, connect, Dispatch, history } from 'umi'; import { Link, useIntl, connect, Dispatch, history } from 'umi';
import SelectOptions from '../../../components/SelectOptions/index'; import TitleSearch from '../../../components/TitleSearch/TitleSearch';
const dataSource = [ const dataSource = [
...@@ -87,18 +87,20 @@ const Users = (props: { location: any; }) => { ...@@ -87,18 +87,20 @@ const Users = (props: { location: any; }) => {
}, },
]; ];
const printContent = (comment: any)=>{ const CallBackTitleSearch = (comment: any)=>{
console.log(comment) console.log(comment)
} }
return ( return (
<div className={styles.base}> <div className={styles.base}>
{/* 头部组件 */} {/* 头部组件 */}
<div className={styles.box}>
<input className={styles.item1} placeholder={nameofowner} /> <TitleSearch
</div> listkey={["providerName"]}
<SelectOptions list={["美国", "美丽的", "美好", "加拿大", "加油", "XO"].sort()} onSubmit={printContent} /> list={["Service Provider"]}
<button className={styles.item3}>{search}</button> community={"serviceCommunityList"}
onSubmit={CallBackTitleSearch} />
{/* 内容组件 */} {/* 内容组件 */}
<div className={styles.box2}> <div className={styles.box2}>
<button className={styles.buttonAdd2} onClick={goToAdd}>Create New Owner</button> <button className={styles.buttonAdd2} onClick={goToAdd}>Create New Owner</button>
......
...@@ -4,28 +4,33 @@ import styles from './index.less'; ...@@ -4,28 +4,33 @@ import styles from './index.less';
import {Form, Input ,Spin,Table,Space, Button} from 'antd'; import {Form, Input ,Spin,Table,Space, Button} from 'antd';
import { LoadingOutlined } from '@ant-design/icons'; import { LoadingOutlined } from '@ant-design/icons';
const antIcon = <LoadingOutlined style={{ fontSize: 24 }} spin />;
import { Link, useIntl, connect, Dispatch,history } from 'umi'; import { Link, useIntl, connect, Dispatch,history } from 'umi';
import SelectOptions from '../../../components/SelectOptions/index'; import TitleSearch from '../../../components/TitleSearch/TitleSearch';
const ServiceProviderManagement = (props: any) => { const ServiceProviderManagement = (props: any) => {
const { formatMessage } = useIntl(); const { formatMessage } = useIntl();
const { dispatch, location,Data,CommunityList} = props; const { dispatch, location, Data, CommunityList } = props;
const RA = (index:any,values: any) => { dispatch({ type: 'ServiceProvider/RA', playload: {index:index, body:values } }) };
const TosTosServiceProviderGet = (values: any) => { dispatch({ type: 'ServiceProvider/TosTosServiceProviderGet', playload: values }) }; const TosTosServiceProviderGet = (values: any) => { dispatch({ type: 'ServiceProvider/TosTosServiceProviderGet', playload: values }) };
const SaveChooseData = (values: any) => { dispatch({ type: 'ServiceProvider/SaveChooseData', playload: values }) }; const SaveChooseData = (values: any) => { dispatch({ type: 'ServiceProvider/SaveChooseData', playload: values }) };
const GetList = () => {
if (CommunityList != null) {
TosTosServiceProviderGet({
providerName: "",
serviceCommunityList: CommunityList
})
}
}
useEffect(() => { useEffect(() => {
TosTosServiceProviderGet(null) GetList()
}, []); }, []);
useEffect(() => {
const formRef = useRef(null); GetList()
const onFinish = (values: any) => {TosTosServiceProviderGet(values)}; }, [CommunityList]);
const onFinishFailed = (errorInfo: any) => { console.log('Failed:', errorInfo) };
const goToDetail = (values: any, e: any) => { const goToDetail = (values: any, e: any) => {
SaveChooseData(values) SaveChooseData(values)
...@@ -68,7 +73,7 @@ const ServiceProviderManagement = (props: any) => { ...@@ -68,7 +73,7 @@ const ServiceProviderManagement = (props: any) => {
return tmp; return tmp;
} }
const printContent = (comment: any)=>{ const CallBackTitleSearch = (comment: any)=>{
console.log(comment) console.log(comment)
} }
...@@ -76,11 +81,13 @@ const ServiceProviderManagement = (props: any) => { ...@@ -76,11 +81,13 @@ const ServiceProviderManagement = (props: any) => {
<div className={styles.base}> <div className={styles.base}>
{/* 头部组件 */} {/* 头部组件 */}
<Form ref={formRef} name="basic" initialValues={{}} onFinish={onFinish} onFinishFailed={onFinishFailed}>
<div className={styles.box}><Form.Item name="providerName" ><Input style={{width:200}} placeholder="Service Provider" /></Form.Item></div> <TitleSearch
<SelectOptions list={CommunityList} onSubmit={printContent}/> listkey={["providerName"]}
<Form.Item><Button type="primary" htmlType="submit">Search</Button></Form.Item> list={["Service Provider"]}
</Form> community={"serviceCommunityList"}
onSubmit={CallBackTitleSearch} />
{/* 内容组件 */} {/* 内容组件 */}
<div className={styles.box2}> <div className={styles.box2}>
<button className={styles.buttonAdd2} onClick={goToServices}>Avail Services</button> <button className={styles.buttonAdd2} onClick={goToServices}>Avail Services</button>
......
...@@ -29,23 +29,11 @@ const Guard = (props:any) => { ...@@ -29,23 +29,11 @@ const Guard = (props:any) => {
<div className={styles.base}> <div className={styles.base}>
<div className={styles.item0}><TitleGet title={"Welcome"}/></div> <div className={styles.item0}><TitleGet title={"Version 1.0.1"}/></div>
<div>{token}</div> {/* <div>{token}</div>
<Line /> <Line /> */}
<Form name="basic" onFinish={onFinish}>
<Form.Item name="name" ><Upload name={'file'} listType={'picture-card'}>
<Button>
{uploadButton}
</Button>
</Upload></Form.Item>
<Form.Item ><Button type="primary" htmlType="submit">Submit</Button></Form.Item>
</Form>
</div> </div>
); );
......
...@@ -5,21 +5,25 @@ export interface LoginParamsType { ...@@ -5,21 +5,25 @@ export interface LoginParamsType {
password: string; password: string;
} }
export async function fakeAccountLogin(params: LoginParamsType) { // export async function fakeAccountLogin(params: LoginParamsType) {
return request('/api/login/account', { // return request('/api/login/account', {
method: 'POST', // method: 'POST',
data: params, // data: params,
}); // });
} // }
export async function getFakeCaptcha(mobile: string) { export async function getFakeCaptcha(mobile: string) {
return request(`/api/login/captcha?mobile=${mobile}`); return request(`/api/login/captcha?mobile=${mobile}`);
} }
export async function AccountLogin(params: LoginParamsType) { export async function AccountLogin(params: LoginParamsType) {
console.log("登录请求")
return request('/tos/user/login', { method: 'POST', data: params, }); return request('/tos/user/login', { method: 'POST', data: params, });
} }
export async function AccountOut() {
return request('/tos/user/login', { method: 'POST' });
}
export interface LoginCheckParamsType { export interface LoginCheckParamsType {
userName: string; userName: string;
password: string; password: string;
...@@ -27,5 +31,6 @@ export interface LoginCheckParamsType { ...@@ -27,5 +31,6 @@ export interface LoginCheckParamsType {
userId: string; userId: string;
} }
export async function AccountCheckLogin(params: LoginCheckParamsType) { export async function AccountCheckLogin(params: LoginCheckParamsType) {
console.log("登录确认请求")
return request('/tos/user/newCurrentUser', { method: 'POST', data: params, }); return request('/tos/user/newCurrentUser', { method: 'POST', data: params, });
} }
\ No newline at end of file
...@@ -71,13 +71,14 @@ const requestList = [ ...@@ -71,13 +71,14 @@ const requestList = [
"/tos/bookingService/lookUp",//7 查看小区设施 "/tos/bookingService/lookUp",//7 查看小区设施
"/tos/community/facilities/fuzzy/query",//8 查看设施管理模糊 "/tos/community/facilities/fuzzy/query",//8 查看设施管理模糊
"/tos/community/categories/subscribe/fuzzy/query",//9 预订列表模糊查询 "/tos/community/categories/subscribe/fuzzy/query",//9 预订列表模糊查询
"/tos/user/newCurrentUser" //10 后台用户信息
] ]
function requestAuto(url:string,values:any) { function requestAuto(url:string,values:any) {
return request(url, Body(values)) return request(url, Body(values))
} }
export function RA(playload: any) { export function RA(playload: any) {
console.log(playload) // console.log(playload)
console.log(playload.index) // console.log(playload.index)
console.log(requestList[playload.index]) // console.log(requestList[playload.index])
return requestAuto(requestList[playload.index],playload.body) return requestAuto(requestList[playload.index],playload.body)
} }
\ No newline at end of file
...@@ -4,8 +4,8 @@ export async function query(): Promise<any> { ...@@ -4,8 +4,8 @@ export async function query(): Promise<any> {
return request('/api/users'); return request('/api/users');
} }
export async function queryCurrent(): Promise<any> { export async function queryCurrent(values:any): Promise<any> {
return request('/api/currentUser'); return request('/tos/user/newCurrentUser',{method: 'POST',body: JSON.stringify(values),headers:{ 'Content-Type': 'application/json'}});
} }
export async function queryNotices(): Promise<any> { export async function queryNotices(): Promise<any> {
......
...@@ -22,4 +22,17 @@ export const getUrlPicName=(str:string)=>{ ...@@ -22,4 +22,17 @@ export const getUrlPicName=(str:string)=>{
var tmp=str.split("?") var tmp=str.split("?")
var tmp2=tmp[0].split("/") var tmp2=tmp[0].split("/")
return(tmp2[tmp2.length-1]) return(tmp2[tmp2.length-1])
}
//取url中取url最后的参数路径
export const getUrlLast = (str: string) => {
var index = str.lastIndexOf("/")
var tmp =str.substring(0,index)
return tmp
}
//取url中取url最后的参数
export const getUrlLastParams = (str: string) => {
var index = str.lastIndexOf("?")
var tmp =str.substring(0,index)
return tmp
} }
\ No newline at end of file
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