node-swallowjs
Version:
epp portal
518 lines (516 loc) • 19.7 kB
JSX
var initData = {
name: '',
has_loc: 'none',
voice: '86.53186920439',
fax: '86.53186920439',
email: '88997766554@qq.com',
int: {
'name': '张三丰',
'org': '趵突泉旅游文化有限公司',
'street1': '历下区趵突泉南路1号',
'street2': '',
'street3': '',
'city': '济南市',
'sp': '山东省',
'pc': '250000',
'cc': 'CN'
},
value: ''
};
var Create = React.createClass({
mixins: [FormMixin],
getInitialState() {
switch(this.props.obj) {
case 'domain':
return {name:'', y:'1', value:''};
case 'host':
return {name:'', value:''};
case 'contact':
return initData;
case 'launch':
return {name:'', y:'1', phase:'open', value:''};
}
},
getPostal(info) {
return {
name: info.name,
org: info.org,
addr: {
street: [info.street1, info.street2, info.street3],
city: info.city,
sp: info.sp,
pc: info.pc,
cc: info.cc
}
}
},
getParam() {
switch(this.props.obj) {
case 'domain':
return {
name: TRIM(this.state.name),
y: this.state.y,
ns: SPLIT(this.state.ns),
registrant: TRIM(this.state.registrant),
admin: TRIM(this.state.admin),
tech: TRIM(this.state.tech),
billing: TRIM(this.state.billing),
pw: randomPWD(8),
dsData: this.state.dsData
};
case 'host':
return {
name: TRIM(this.state.name),
ip: SPLIT(this.state.ip)
};
case 'contact':
var r = {
name: TRIM(this.state.name),
int: this.getPostal(this.state.int),
loc: this.state.has_loc!=='none'
? this.getPostal(this.state.loc)
: undefined
};
if(TRIM(this.state.voice)){
if(/^86\.[0-9]{1,14}/.test(TRIM(this.state.voice))){
r.voice = '+'+TRIM(this.state.voice)+TRIM(this.state.xv);
}else if(!/^86\.$/.test(TRIM(this.state.voice))){
r.voice = '+86.'+TRIM(this.state.voice)+TRIM(this.state.xv);
}else{
r.voice = '+86.01012345678';
}
}else{
r.voice = '+86.01012345678';
}
if(TRIM(this.state.fax)){
if(/^86\.[0-9]{1,14}/.test(TRIM(this.state.fax))){
r.fax = '+'+TRIM(this.state.fax) + TRIM(this.state.xf);
}else if(!/^86\.$/.test(TRIM(this.state.fax))){
r.fax ='+86.'+TRIM(this.state.fax) + TRIM(this.state.xf);
}else{
r.fax = '+86.01012345678';
}
}else {
r.fax = '+86.01012345678';
}
r.email = TRIM(this.state.email);
r.pw = randomPWD(8);
return r;
case 'launch':
return {
name: TRIM(this.state.name),
y: this.state.y,
ns: SPLIT(this.state.ns),
registrant: TRIM(this.state.registrant),
admin: TRIM(this.state.admin),
tech: TRIM(this.state.tech),
billing: TRIM(this.state.billing),
pw: randomPWD(8),
dsData: this.state.dsData,
phase: this.state.phase,
encodedSignedMark: this.state.encodedSignedMark
};
}
},
handleSubmit(e) {
api.create(this.props.obj==='launch' ? 'domain' : this.props.obj, this.getParam(), function(code, data) {
switch(code) {
case '1000':
this.props.onFinish();
break;
case '2501':
logout();
break;
default:
this.setState({value: data});
}
}.bind(this));
},
render() {
switch(this.props.obj) {
case 'domain':
return (
<div>
<table border="0" align="center">
<tbody>
<tr align="center">
<td colSpan="2">{this.props.children}</td>
</tr>
<tr>
<td colSpan="2" height="16"></td>
</tr>
<tr>
<td>域名:</td>
<td>
<input {...this.linkState({
name: 'name',
type: 'text',
size: '40',
maxLength: '255',
onFocus: this.onSetState({name:'', value:''})
})}/>
</td>
</tr>
<tr>
<td>交费:</td>
<td><SelectYears {...this.linkState({name: 'y'})}/>年</td>
</tr>
<tr>
<td>NS主机:</td>
<td>
<textarea {...this.linkState({
name: 'ns',
rows: '6',
cols: '40',
onFocus: this.onSetState({ns:'', value:''})
})}/>
</td>
</tr>
<tr>
<td>登记人:</td>
<td>
<input {...this.linkState({
name: 'registrant',
type: 'text',
size: '16',
maxLength: '16',
onFocus: this.onSetState({registrant:'', value:''})
})}/>
</td>
</tr>
<tr>
<td>管理联系人:</td>
<td>
<input {...this.linkState({
name: 'admin',
type: 'text',
size: '16',
maxLength: '16',
onFocus: this.onSetState({admin:'', value:''})
})}/>
</td>
</tr>
<tr>
<td>交费联系人:</td>
<td>
<input {...this.linkState({
name: 'billing',
type: 'text',
size: '16',
maxLength: '16',
onFocus: this.onSetState({billing:'', value:''})
})}/>
</td>
</tr>
<tr>
<td>技术联系人:</td>
<td>
<input {...this.linkState({
name: 'tech',
type: 'text',
size: '16',
maxLength: '16',
onFocus: this.onSetState({tech:'', value:''})
})}/>
</td>
</tr>
<tr>
<td colSpan="2" height="16"></td>
</tr>
<tr>
<td>secDNS:</td>
<td><DsData name="dsData" linkState={this.linkState}/></td>
</tr>
<tr>
<td colSpan="2" height="16"></td>
</tr>
<tr align="center">
<td colSpan="2">
<input type="button" value="提交" onClick={this.handleSubmit}/>
</td>
</tr>
</tbody>
</table>
<OpResult content={this.state.value} />
</div>
);
case 'host':
return (
<div>
<table>
<tbody>
<tr>
<td colSpan="2">{this.props.children}</td>
</tr>
<tr>
<td colSpan="2" height="16"></td>
</tr>
<tr>
<td>主机名:</td>
<td>
<input {...this.linkState({
name: 'name',
type: 'text',
size: '40',
maxLength: '255',
onFocus: this.onSetState({name:'', value:''})
})}/>
</td>
</tr>
<tr>
<td>IP地址:</td>
<td>
<textarea {...this.linkState({
name: 'ip',
rows: '6',
cols: '40',
onFocus: this.onSetState({ip:'', value:''})
})}/>
</td>
</tr>
<tr>
<td colSpan="2" height="16"></td>
</tr>
<tr align="center">
<td colSpan="2"><input type="button" value="提交" onClick={this.handleSubmit} /></td>
</tr>
</tbody>
</table>
<OpResult content={this.state.value} />
</div>
);
case 'contact':
return (
<div>
<table border="0" align="center">
<tbody>
<tr align="center">
<td colSpan="2"><b>填写联系人信息</b></td>
</tr>
<tr>
<td colSpan="2" height="16"></td>
</tr>
<tr>
<td style={{"vertical-align": 'top'}}>联系人ID:</td>
<td>
<input style={{width: '286px'}} {...this.linkState({
name: 'name',
type: 'text',
size: '16',
maxLength: '16',
onFocus: this.onSetState({name:'', value:''})
})}/>
<label style={{display: 'block', "padding-top":'0.3em'}}>注册人是个人,请填写身份证号码,并去除出生年份的前两位,共计16位,此号码系统将自动引用为实名审核时的身份证号码且不能修改,请认真填写 示例:如果您的身份证号码是:110110196401021234,联系人ID请填写:1101106401021234</label>
<label style={{display: 'block', "padding-bottom": '0.3em'}}>注册人非个人,仍按原有规则填写,即:由英文字母、数字和“-”组成的字符串,长度<em className="red">4-16</em>,不能重复,必须是唯一的</label>
</td>
</tr>
<tr>
<td colSpan="2"><PostalInfo name="int" linkState={this.linkState} readOnly={false}/></td>
</tr>
<tr>
<td colSpan="2">
<input {...this.linkState({
name: 'has_loc',
type: 'radio',
value: 'none'
})}/>没有本地语言联系方式
<input {...this.linkState({
name: 'has_loc',
type: 'radio',
value: 'table-row'
})}/>有本地语言联系方式
</td>
</tr>
<tr style={{display: this.state.has_loc}}>
<td colSpan="2"><PostalInfo name="loc" linkState={this.linkState} readOnly={false}/></td>
</tr>
<tr>
<td>电话:</td>
<td>
<input {...this.linkState({
name: 'voice',
type: 'text',
size: '17',
maxLength: '17',
onFocus: this.onSetState({voice:'86.', value:''})
})}/>
转
<input {...this.linkState({
name: 'xv',
type: 'text',
size: '5',
maxLength: '5',
onFocus: this.onSetState({xv:'', value:''})
})}/>
<label>格式为国别(<strong className="red">86</strong>).区号(<strong className="red">531</strong>)座机号,如:86.53186920439或国别.手机号,如:86.13425668204,电话号码不得是1111111,1234567,00000等无意义的号码</label>
</td>
</tr>
<tr>
<td>传真:</td>
<td>
<input {...this.linkState({
name: 'fax',
type: 'text',
size: '17',
maxLength: '17',
onFocus: this.onSetState({fax:'86.', value:''})
})}/>
转
<input {...this.linkState({
name: 'xf',
type: 'text',
size: '5',
maxLength: '5',
onFocus: this.onSetState({xf:'', value:''})
})}/>
<label>格式为国别(<strong className="red">86</strong>).区号(<strong className="red">531</strong>)座机号,如:86.53186920439或国别.手机号,如:86.13425668204,电话号码不得是1111111,1234567,00000等无意义的号码</label>
</td>
</tr>
<tr>
<td>电子邮件:</td>
<td>
<input {...this.linkState({
name: 'email',
type: 'text',
size: '40',
maxLength: '255'
})}/>
<label>必须真实有效,用于接收有关所注册域名的重要通知,<strong className="red">不可用中文邮箱</strong></label>
</td>
</tr>
<tr>
<td colSpan="2" height="16"></td>
</tr>
<tr align="center">
<td colSpan="2"><input type="button" value="提交" onClick={this.handleSubmit} /></td>
</tr>
</tbody>
</table>
<OpResult content={this.state.value} />
</div>
);
case 'launch':
return (
<div>
<table border="0" align="center">
<tbody>
<tr align="center">
<td colSpan="2">{this.props.children}</td>
</tr>
<tr>
<td colSpan="2" height="16"></td>
</tr>
<tr>
<td>域名:</td>
<td>
<input {...this.linkState({
name: 'name',
type: 'text',
size: '40',
maxLength: '255',
onFocus: this.onSetState({name:'', value:''})
})}/>
</td>
</tr>
<tr>
<td>phase:</td>
<td><LaunchPhase {...this.linkState({name: 'phase'})}/></td>
</tr>
<tr>
<td>交费:</td>
<td><SelectYears {...this.linkState({name: 'y'})}/>年</td>
</tr>
<tr>
<td>NS主机:</td>
<td>
<textarea {...this.linkState({
name: 'ns',
rows: '6',
cols: '40',
onFocus: this.onSetState({ns:'', value:''})
})}/>
</td>
</tr>
<tr>
<td>登记人:</td>
<td>
<input {...this.linkState({
name: 'registrant',
type: 'text',
size: '16',
maxLength: '16',
onFocus: this.onSetState({registrant:'', value:''})
})}/>
</td>
</tr>
<tr>
<td>管理联系人:</td>
<td>
<input {...this.linkState({
name: 'admin',
type: 'text',
size: '16',
maxLength: '16',
onFocus: this.onSetState({admin:'', value:''})
})}/>
</td>
</tr>
<tr>
<td>交费联系人:</td>
<td>
<input {...this.linkState({
name: 'billing',
type: 'text',
size: '16',
maxLength: '16',
onFocus: this.onSetState({billing:'', value:''})
})}/>
</td>
</tr>
<tr>
<td>技术联系人:</td>
<td>
<input {...this.linkState({
name: 'tech',
type: 'text',
size: '16',
maxLength: '16',
onFocus: this.onSetState({tech:'', value:''})
})}/>
</td>
</tr>
<tr>
<td colSpan="2" height="16"></td>
</tr>
<tr>
<td>secDNS:</td>
<td><DsData name="dsData" linkState={this.linkState}/></td>
</tr>
<tr>
<td colSpan="2" height="16"></td>
</tr>
<tr>
<td>SMD:</td>
<td>
<input {...this.linkState({
name: "encodedSignedMark",
type: "file"
})}/>
</td>
</tr>
<tr>
<td colSpan="2" height="16"></td>
</tr>
<tr align="center">
<td colSpan="2">
<input type="button" value="提交" onClick={this.handleSubmit}/>
</td>
</tr>
</tbody>
</table>
<OpResult content={this.state.value} />
</div>
);
}
}
});