This commit is contained in:
unknown
2026-02-04 20:27:13 +08:00
commit 3b042d1dad
9410 changed files with 1488147 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
{$layout}
<form class="ui form" data-tea-action="$" data-tea-success="success">
<csrf-token></csrf-token>
<div class="ui message" v-if="!canVerify">系统暂未开通绑定邮箱功能。</div>
<div v-show="canVerify">
<div class="margin"></div>
<table class="ui table definition selectable">
<tr v-if="verifiedEmail.length > 0">
<td class="title">已绑定电子邮箱</td>
<td>
<span>{{verifiedEmail}}</span>
</td>
</tr>
<tr v-if="latestVerification != null">
<td>等待绑定邮箱</td>
<td>
{{latestVerification.email}}
<p class="comment" v-if="!latestVerification.isSent">系统正在发送激活链接到此邮箱中,请耐心等待。</p>
<p class="comment" v-if="latestVerification.isSent"><span class="red">请在{{latestVerification.expiresTime}}前点击邮件中的激活链接进行绑定。</span></p>
</td>
</tr>
<tr>
<td class="title"><span v-if="verifiedEmail.length > 0"></span>绑定电子邮箱 *</td>
<td>
<input type="text" name="email" maxlength="100" ref="focus"/>
</td>
</tr>
</table>
<submit-btn>提交</submit-btn> &nbsp; <a href="/settings/profile" v-if="verifiedEmail.length > 0">不修改</a>
</div>
</form>

View File

@@ -0,0 +1,5 @@
Tea.context(function () {
this.success = function () {
teaweb.successRefresh("已将激活邮件发送到你的邮箱中,请注意查收")
}
})

View File

@@ -0,0 +1,25 @@
form input[type='file'] {
visibility: hidden;
position: absolute;
z-index: -1;
}
.idcard-bg {
width: 20em;
height: 13em;
border: 1px #ccc solid;
border-radius: 1em;
position: relative;
overflow: hidden;
}
.idcard-bg .button {
position: absolute;
left: 50%;
top: 50%;
margin-left: -1.6em;
margin-top: -1.6em;
}
.idcard-bg img {
width: 100%;
height: 100%;
}
/*# sourceMappingURL=enterprise.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["enterprise.less"],"names":[],"mappings":"AAAA,IACC,MAAK;EACJ,kBAAA;EACA,kBAAA;EACA,WAAA;;AAIF;EACC,WAAA;EACA,YAAA;EACA,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;;AAND,UAQC;EACC,kBAAA;EACA,SAAA;EACA,QAAA;EACA,mBAAA;EACA,kBAAA;;AAbF,UAgBC;EACC,WAAA;EACA,YAAA","file":"enterprise.css"}

View File

@@ -0,0 +1,87 @@
{$layout}
<first-menu>
<menu-item href="/settings/identity">实名认证</menu-item>
<span class="item disabled">&raquo;</span>
<span class="item">企业实名认证</span>
</first-menu>
<form class="ui form" data-tea-action=".uploadEnterprise" data-tea-timeout="600" data-tea-before="beforeSubmit" data-tea-done="doneSubmit" data-tea-success="success">
<csrf-token></csrf-token>
<input type="hidden" name="identityId" :value="identity.id" v-if="identity != null"/>
<table class="ui table selectable definition">
<tr>
<td class="title">企业全称 *</td>
<td>
<div v-if="canEdit">
<input type="text" name="realName" placeholder="企业全称" maxlength="100" style="width: 20em" ref="focus" v-model="realName"/>
</div>
<div v-else>
{{identity.realName}}
</div>
</td>
</tr>
<tr>
<td>营业执照号码 *</td>
<td>
<div v-if="canEdit">
<input type="text" name="number" placeholder="营业执照号码" maxlength="18" style="width: 20em" v-model="number"/>
</div>
<div v-else>
{{identity.number}}
</div>
</td>
</tr>
<tr>
<td>营业执照照片 *<em>不超过8MiB</em></td>
<td>
<input type="file" name="frontFile" id="front-file" accept="image/jpeg, image/png" @change="changeFrontFile"/>
<div class="idcard-bg">
<img :src="'/files/file?fileId=' + identity.frontFileId" v-if="identity != null && identity.frontFileId > 0 && frontPreviewURL.length == 0" alt=""/>
<img :src="frontPreviewURL" alt="" v-if="frontPreviewURL.length > 0"/>
<button type="button" class="ui button icon" v-if="canEdit" @click.prevent="selectFile('front-file')"><i class="icon plus"></i></button>
</div>
</td>
</tr>
</table>
<div v-if="!isSubmitting">
<div>
<!-- 未上传 -->
<submit-btn v-if="identity == null">保存</submit-btn>
</div>
<div v-if="identity != null">
<!-- 待提交 -->
<div v-if="identity.status == 'none'">
<div class="ui message warning">已上传,请提交审核。</div>
<button class="ui button primary" type="submit">保存修改</button> &nbsp; &nbsp;
<a href="" @click.prevent="submit">提交审核</a>
</div>
<!-- 已提交 -->
<div v-if="identity.status == 'submitted'">
<div class="ui message warning">管理员审核中,请耐心等待。</div>
<a href="" class="ui button" @click.prevent="cancel">取消审核</a>
</div>
<!-- 已拒绝 -->
<div v-if="identity.status == 'rejected'">
<div class="ui message error">审核不通过,原因:{{identity.rejectReason}}。</div>
<button class="ui button" type="submit">保存修改</button> &nbsp; &nbsp;
<a href="" class="ui button primary" @click.prevent="submit">重新提交审核</a>
</div>
<!-- 已通过 -->
<div v-if="identity.status == 'verified'">
<div class="ui message success">实名认证审核通过。</div>
</div>
</div>
</div>
<div v-if="isSubmitting">
正在提交,请稍候...
</div>
</form>

View File

@@ -0,0 +1,73 @@
Tea.context(function () {
this.frontPreviewURL = ""
this.isSubmitting = false
this.realName = ""
this.number = ""
if (this.identity != null) {
this.realName = this.identity.realName
this.number = this.identity.number
}
this.canEdit = (this.identity == null || this.identity.status == "none" || this.identity.status == "rejected")
this.selectFile = function (targetId) {
let selector = document.getElementById(targetId)
selector.click()
}
this.changeFrontFile = function (e) {
let files = e.target.files
if (files.length > 0) {
this.frontPreviewURL = URL.createObjectURL(files[0])
}
}
this.beforeSubmit = function () {
this.isSubmitting = true
}
this.doneSubmit = function () {
this.isSubmitting = false
}
this.success = function () {
teaweb.success("保存成功", function () {
teaweb.reload()
})
}
this.submit = function () {
if (this.identity == null) {
teaweb.fail("请先保存后再提交审核")
return
}
this.$post(".submit")
.params({
identityId: this.identity.id
})
.success(function () {
teaweb.success("提交成功", function () {
teaweb.reload()
})
})
}
this.cancel = function () {
if (this.identity == null) {
teaweb.fail("请先保存后再提交审核")
return
}
teaweb.confirm("确定要取消提交审核吗?", function () {
this.$post(".cancel")
.params({
identityId: this.identity.id
})
.success(function () {
teaweb.success("取消成功", function () {
teaweb.reload()
})
})
})
}
})

View File

@@ -0,0 +1,29 @@
form {
input[type='file'] {
visibility: hidden;
position: absolute;
z-index: -1;
}
}
.idcard-bg {
width: 20em;
height: 13em;
border: 1px #ccc solid;
border-radius: 1em;
position: relative;
overflow: hidden;
.button {
position: absolute;
left: 50%;
top: 50%;
margin-left: -1.6em;
margin-top: -1.6em;
}
img {
width: 100%;
height: 100%;
}
}

View File

@@ -0,0 +1,30 @@
.identities-box {
height: 14em;
width: 45em;
margin: 5em auto;
}
.identities-box .identity-box {
float: left;
width: 20em;
border: 1px #ccc solid;
padding: 1em 2em;
text-align: center;
margin-left: 1em;
margin-right: 1em;
height: 8.8em;
border-radius: 0.4em;
}
.identities-box .identity-box .real-name {
font-size: 1.2em;
line-height: 1.5;
}
.identities-box .identity-box .status-box {
line-height: 2;
margin-top: 0.5em;
color: #999;
}
.identities-box .identity-box:hover {
background: #eee;
cursor: pointer;
}
/*# sourceMappingURL=index.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["index.less"],"names":[],"mappings":"AAAA;EACC,YAAA;EACA,WAAA;EACA,gBAAA;;AAHD,eAKC;EACC,WAAA;EACA,WAAA;EACA,sBAAA;EACA,gBAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,aAAA;EACA,oBAAA;;AAdF,eAKC,cAWC;EACC,gBAAA;EACA,gBAAA;;AAlBH,eAKC,cAgBC;EACC,cAAA;EACA,iBAAA;EACA,WAAA;;AAxBH,eA4BC,cAAa;EACZ,gBAAA;EACA,eAAA","file":"index.css"}

View File

@@ -0,0 +1,39 @@
{$layout}
<div class="identities-box">
<!-- 个人认证 -->
<div class="identity-box" @click.prevent="goIndividual">
<h4>个人实名认证</h4>
<div v-if="individualIdentity != null">
<div><a href="" class="real-name">{{individualIdentity.realName}}</a></div>
<div class="status-box">
<span v-if="individualIdentity.status == 'none'">等待提交</span>
<span v-if="individualIdentity.status == 'submitted'">审核中</span>
<span v-if="individualIdentity.status == 'rejected'" class="red">已驳回</span>
<span v-if="individualIdentity.status == 'verified'" class="green">已认证</span>
</div>
</div>
<div v-else>
<a href="">尚未提交认证 &raquo;</a>
</div>
</div>
<!-- 企业认证 -->
<div class="identity-box" @click.prevent="goEnterprise">
<h4>企业实名认证</h4>
<div v-if="enterpriseIdentity != null">
<div><a href="" class="real-name">{{enterpriseIdentity.realName}}</a></div>
<div class="status-box">
<span v-if="enterpriseIdentity.status == 'none'">等待提交</span>
<span v-if="enterpriseIdentity.status == 'submitted'">审核中</span>
<span v-if="enterpriseIdentity.status == 'rejected'" class="red">已驳回</span>
<span v-if="enterpriseIdentity.status == 'verified'" class="green">已认证</span>
</div>
</div>
<div v-else>
<a href="">尚未提交认证 &raquo;</a>
</div>
</div>
</div>

View File

@@ -0,0 +1,9 @@
Tea.context(function () {
this.goIndividual = function () {
window.location = "/settings/identity/individual"
}
this.goEnterprise = function () {
window.location = "/settings/identity/enterprise"
}
})

View File

@@ -0,0 +1,33 @@
.identities-box {
height: 14em;
width: 45em;
margin: 5em auto;
.identity-box {
float: left;
width: 20em;
border: 1px #ccc solid;
padding: 1em 2em;
text-align: center;
margin-left: 1em;
margin-right: 1em;
height: 8.8em;
border-radius: 0.4em;
.real-name {
font-size: 1.2em;
line-height: 1.5;
}
.status-box {
line-height: 2;
margin-top: 0.5em;
color: #999;
}
}
.identity-box:hover {
background: #eee;
cursor: pointer;
}
}

View File

@@ -0,0 +1,25 @@
form input[type='file'] {
visibility: hidden;
position: absolute;
z-index: -1;
}
.idcard-bg {
width: 20em;
height: 13em;
border: 1px #ccc solid;
border-radius: 1em;
position: relative;
overflow: hidden;
}
.idcard-bg .button {
position: absolute;
left: 50%;
top: 50%;
margin-left: -1.6em;
margin-top: -1.6em;
}
.idcard-bg img {
width: 100%;
height: 100%;
}
/*# sourceMappingURL=individual.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["individual.less"],"names":[],"mappings":"AAAA,IACC,MAAK;EACJ,kBAAA;EACA,kBAAA;EACA,WAAA;;AAIF;EACC,WAAA;EACA,YAAA;EACA,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;;AAND,UAQC;EACC,kBAAA;EACA,SAAA;EACA,QAAA;EACA,mBAAA;EACA,kBAAA;;AAbF,UAgBC;EACC,WAAA;EACA,YAAA","file":"individual.css"}

View File

@@ -0,0 +1,98 @@
{$layout}
<first-menu>
<menu-item href="/settings/identity">实名认证</menu-item>
<span class="item disabled">&raquo;</span>
<span class="item">个人实名认证</span>
</first-menu>
<form class="ui form" data-tea-action=".uploadIndividual" data-tea-timeout="600" data-tea-before="beforeSubmit" data-tea-done="doneSubmit" data-tea-success="success">
<csrf-token></csrf-token>
<input type="hidden" name="identityId" :value="identity.id" v-if="identity != null"/>
<table class="ui table selectable definition">
<tr>
<td class="title">真实姓名 *</td>
<td>
<div v-if="canEdit">
<input type="text" name="realName" placeholder="真实姓名" maxlength="100" style="width: 10em" ref="focus" v-model="realName"/>
</div>
<div v-else>
{{identity.realName}}
</div>
</td>
</tr>
<tr>
<td>身份证号 *</td>
<td>
<div v-if="canEdit">
<input type="text" name="number" placeholder="身份证号" maxlength="18" style="width: 13em" v-model="number"/>
</div>
<div v-else>
{{identity.number}}
</div>
</td>
</tr>
<tr>
<td>身份证 - 照片面 *<em>不超过8MiB</em></td>
<td>
<input type="file" name="backFile" id="back-file" accept="image/jpeg, image/png" @change="changeBackFile"/>
<div class="idcard-bg">
<img :src="'/files/file?fileId=' + identity.backFileId" v-if="identity != null && identity.backFileId > 0 && backPreviewURL.length == 0" alt=""/>
<img :src="backPreviewURL" alt="" v-if="backPreviewURL.length > 0"/>
<button type="button" class="ui button icon" v-if="canEdit" @click.prevent="selectFile('back-file')"><i class="icon plus"></i></button>
</div>
</td>
</tr>
<tr>
<td>身份证 - 国徽面 *<em>不超过8MiB</em></td>
<td>
<input type="file" name="frontFile" id="front-file" accept="image/jpeg, image/png" @change="changeFrontFile"/>
<div class="idcard-bg">
<img :src="'/files/file?fileId=' + identity.frontFileId" v-if="identity != null && identity.frontFileId > 0 && frontPreviewURL.length == 0" alt=""/>
<img :src="frontPreviewURL" alt="" v-if="frontPreviewURL.length > 0"/>
<button type="button" class="ui button icon" v-if="canEdit" @click.prevent="selectFile('front-file')"><i class="icon plus"></i></button>
</div>
</td>
</tr>
</table>
<div v-if="!isSubmitting">
<div>
<!-- 未上传 -->
<submit-btn v-if="identity == null">保存</submit-btn>
</div>
<div v-if="identity != null">
<!-- 待提交 -->
<div v-if="identity.status == 'none'">
<div class="ui message warning">已上传,请提交审核。</div>
<button class="ui button primary" type="submit">保存修改</button> &nbsp; &nbsp;
<a href="" @click.prevent="submit">提交审核</a>
</div>
<!-- 已提交 -->
<div v-if="identity.status == 'submitted'">
<div class="ui message warning">管理员审核中,请耐心等待。</div>
<a href="" class="ui button" @click.prevent="cancel">取消审核</a>
</div>
<!-- 已拒绝 -->
<div v-if="identity.status == 'rejected'">
<div class="ui message error">审核不通过,原因:{{identity.rejectReason}}。</div>
<button class="ui button" type="submit">保存修改</button> &nbsp; &nbsp;
<a href="" class="ui button primary" @click.prevent="submit">重新提交审核</a>
</div>
<!-- 已通过 -->
<div v-if="identity.status == 'verified'">
<div class="ui message success">实名认证审核通过。</div>
</div>
</div>
</div>
<div v-if="isSubmitting">
正在提交,请稍候...
</div>
</form>

View File

@@ -0,0 +1,81 @@
Tea.context(function () {
this.backPreviewURL = ""
this.frontPreviewURL = ""
this.isSubmitting = false
this.realName = ""
this.number = ""
if (this.identity != null) {
this.realName = this.identity.realName
this.number = this.identity.number
}
this.canEdit = (this.identity == null || this.identity.status == "none" || this.identity.status == "rejected")
this.selectFile = function (targetId) {
let selector = document.getElementById(targetId)
selector.click()
}
this.changeBackFile = function (e) {
let files = e.target.files
if (files.length > 0) {
this.backPreviewURL = URL.createObjectURL(files[0])
}
}
this.changeFrontFile = function (e) {
let files = e.target.files
if (files.length > 0) {
this.frontPreviewURL = URL.createObjectURL(files[0])
}
}
this.beforeSubmit = function () {
this.isSubmitting = true
}
this.doneSubmit = function () {
this.isSubmitting = false
}
this.success = function () {
teaweb.success("保存成功", function () {
teaweb.reload()
})
}
this.submit = function () {
if (this.identity == null) {
teaweb.fail("请先保存后再提交审核")
return
}
this.$post(".submit")
.params({
identityId: this.identity.id
})
.success(function () {
teaweb.success("提交成功", function () {
teaweb.reload()
})
})
}
this.cancel = function () {
if (this.identity == null) {
teaweb.fail("请先保存后再提交审核")
return
}
teaweb.confirm("确定要取消提交审核吗?", function () {
this.$post(".cancel")
.params({
identityId: this.identity.id
})
.success(function () {
teaweb.success("取消成功", function () {
teaweb.reload()
})
})
})
}
})

View File

@@ -0,0 +1,29 @@
form {
input[type='file'] {
visibility: hidden;
position: absolute;
z-index: -1;
}
}
.idcard-bg {
width: 20em;
height: 13em;
border: 1px #ccc solid;
border-radius: 1em;
position: relative;
overflow: hidden;
.button {
position: absolute;
left: 50%;
top: 50%;
margin-left: -1.6em;
margin-top: -1.6em;
}
img {
width: 100%;
height: 100%;
}
}

View File

@@ -0,0 +1,30 @@
{$layout}
<div class="margin"></div>
<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
<table class="ui table definition selectable">
<tr>
<td class="title">登录用户名 *</td>
<td>
<input type="text" name="username" maxlength="50" v-model="user.username" ref="focus"/>
<p class="comment">只能含有英文、数字或下划线。</p>
</td>
</tr>
<tr>
<td>登录密码</td>
<td>
<input type="password" name="password" maxlength="50" v-model="password"/>
<p class="comment">不填表示保留原有密码<span v-if="password.length > 0 && complexPassword">不小于6位只能包含英文字母、数字、下划线</span></p>
</td>
</tr>
<tr>
<td>确认密码</td>
<td>
<input type="password" name="password2" maxlength="50"/>
<p class="comment">不填表示保留原有密码。</p>
</td>
</tr>
</table>
<submit-btn></submit-btn>
</form>

View File

@@ -0,0 +1,4 @@
Tea.context(function () {
this.password = ""
this.success = NotifyReloadSuccess("保存成功")
})

View File

@@ -0,0 +1,25 @@
{$layout}
<table class="ui table definition selectable">
<tr>
<td class="title">状态</td>
<td>
<span v-if="otp != null && otp.isOn" class="green">已启用OTP认证</span>
<span v-else class="disabled">未启用</span> &nbsp; &nbsp;
<a href="" @click.prevent="disable" v-if="otp != null && otp.isOn">[停用]</a>
<a href="" @click.prevent="enable" v-if="otp == null || !otp.isOn">[启用]</a>
<p class="comment">启用后,用户每次登录时需要输入动态密码。</p>
</td>
</tr>
<tr v-if="otp != null && otp.isOn">
<td>认证二维码</td>
<td>
<img :src="'/settings/mfa/otpQrcode'" alt=""/>
<p class="comment"><a :href="'/settings/mfa/otpQrcode?download=true'">[下载]</a> &nbsp; 可以通过二维码快速添加OTP认证信息到认证App中。</p>
</td>
</tr>
<tr v-if="otp != null && otp.isOn">
<td>密钥</td>
<td>{{otp.params.secret}}</td>
</tr>
</table>

View File

@@ -0,0 +1,19 @@
Tea.context(function () {
this.enable = function () {
teaweb.confirm("确定要启用多因子认证吗?", function () {
this.$post(".enable")
.success(function () {
teaweb.reload()
})
})
}
this.disable = function () {
teaweb.confirm("确定要停用多因子认证吗?", function () {
this.$post(".disable")
.success(function () {
teaweb.reload()
})
})
}
})

View File

@@ -0,0 +1,54 @@
{$layout}
<form class="ui form" data-tea-action="$" data-tea-before="beforeSend" data-tea-done="doneSend" data-tea-success="success" v-show="!isSent">
<csrf-token></csrf-token>
<div class="ui message" v-if="!canVerify">系统暂未开通绑定手机号码功能。</div>
<div class="ui message error" v-if="canVerify && forceVerify && verifiedMobile.length == 0">你尚未绑定手机号码,必须绑定手机号码后才能继续操作。</div>
<div v-show="canVerify">
<div class="margin"></div>
<table class="ui table definition selectable">
<tr v-if="verifiedMobile.length > 0">
<td class="title">已绑定手机号码</td>
<td>
<span>{{verifiedMobile}}</span>
</td>
</tr>
<tr v-show="isModifying">
<td class="title"><span v-if="verifiedMobile.length > 0"></span>绑定手机号码 *</td>
<td>
<input type="text" name="mobile" maxlength="11" ref="focus" style="width: 11em" v-model="newMobile" @input="changeMobile"/>
</td>
</tr>
</table>
<div v-show="isModifying && !isSending">
<submit-btn v-show="mobileIsValid">发送短信验证</submit-btn>
<button class="ui button disabled" type="button" v-show="!mobileIsValid">发送短信验证</button>
&nbsp; <a href="/settings/profile" v-if="verifiedMobile.length > 0">不修改</a>
</div>
<div v-show="isSending">
<button class="ui button disabled" type="button">短信发送中...</button>
</div>
</div>
</form>
<form class="ui form" data-tea-action=".verify" data-tea-success="verifySuccess" v-show="isSent">
<input type="hidden" name="mobile" :value="newMobile"/>
<div class="margin"></div>
<table class="ui table definition selectable">
<tr>
<td class="title"><span v-if="verifiedMobile.length > 0"></span>绑定手机号码 *</td>
<td>{{newMobile}} &nbsp; <a href="/settings/mobile-verify"><span class="small">[修改]</span></a> </td>
</tr>
<tr>
<td>短信验证码</td>
<td>
<input type="text" name="code" v-model="code" :maxlength="smsCodeLength" :style="{'width':smsCodeLength + 'em'}" ref="smsCodeRef" @input="changeCode"/>
<p class="comment">请输入短信中{{smsCodeLength}}位数字验证码。</p>
</td>
</tr>
</table>
<submit-btn v-show="codeIsValid">提交验证</submit-btn>
<button class="ui button disabled" type="button" v-show="!codeIsValid">提交验证</button>
</form>

View File

@@ -0,0 +1,39 @@
Tea.context(function () {
this.mobileIsValid = false
this.newMobile = ""
this.isSending = false
this.isSent = false
this.code = ""
this.codeIsValid = false
this.changeMobile = function () {
this.mobileIsValid = this.newMobile.match(/^1\d{10}$/)
}
this.beforeSend = function () {
this.isSending = true
}
this.doneSend = function () {
this.isSending = false
}
this.success = function () {
this.isSent = true
let that = this
teaweb.success("已将验证码短信发送到你的手机中,请在" + this.smsLife + "内完成验证", function () {
that.$refs.smsCodeRef.focus()
})
}
this.changeCode = function () {
this.codeIsValid = this.code.length == this.smsCodeLength && this.code.match(/^\d+$/)
}
this.verifySuccess = function () {
teaweb.success("验证成功", function () {
window.location = Tea.url("/settings/mobile-verify?viewOnly=1")
})
}
})

View File

@@ -0,0 +1,61 @@
{$layout}
<div class="margin"></div>
<p class="ui message warning" v-if="!user.isVerified">请耐心等待管理员审核。</p>
<p class="ui message error" v-if="user.isVerified && user.isRejected">注册信息被拒绝<span v-if="user.rejectReason.length > 0">原因:{{user.rejectReason}}</span></p>
<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
<table class="ui table definition selectable">
<tr>
<td class="title">联系手机号 *</td>
<td>
<input type="text" name="mobile" maxlength="11" placeholder="手机号" v-model="user.mobile"/>
</td>
</tr>
<tr>
<td>已绑定手机号码</td>
<td>
<span v-if="user.verifiedMobile.length > 0">{{user.verifiedMobile}} &nbsp; <a href="/settings/mobile-verify" v-if="mobileRequireVerification" style="font-size: 0.8em">[修改]</a></span>
<span class="disabled" v-else>没有设置 &nbsp; &nbsp; <a href="/settings/mobile-verify" v-if="mobileRequireVerification" style="font-size: 0.8em">[设置]</a></span>
<p class="comment">用于登录系统、找回密码等。</p>
</td>
</tr>
</table>
<table class="ui table definition selectable">
<tr>
<td class="title">常用电子邮箱</td>
<td>
<input type="text" name="email" maxlength="100" placeholder="常用电子邮箱" v-model="user.email"/>
<p class="comment">用于接收系统通知、账单提醒等。</p>
</td>
</tr>
<tr v-if="user.verifiedEmail.length > 0 || latestEmailVerification == null">
<td>已绑定电子邮箱</td>
<td>
<span v-if="user.verifiedEmail.length > 0">{{user.verifiedEmail}} &nbsp; <a href="/settings/email-verify" v-if="emailRequireVerification" style="font-size: 0.8em">[修改]</a></span>
<span class="disabled" v-else>没有设置 &nbsp; &nbsp; <a href="/settings/email-verify" v-if="emailRequireVerification" style="font-size: 0.8em">[设置]</a></span>
<p class="comment">用于登录系统、找回密码等。</p>
</td>
</tr>
<tr v-if="latestEmailVerification != null">
<td>等待绑定邮箱</td>
<td>
<span>{{latestEmailVerification.email}} &nbsp; <a href="/settings/email-verify" v-if="emailRequireVerification" style="font-size: 0.8em">[修改]</a></span>
<p class="comment" v-if="!latestEmailVerification.isSent">系统正在发送绑定链接到此邮箱中,请耐心等待。</p>
<p class="comment" v-if="latestEmailVerification.isSent"><span class="red">请在{{latestEmailVerification.expiresTime}}前点击邮件中的激活链接进行绑定。</span></p>
</td>
</tr>
</table>
<table class="ui table definition selectable">
<tr>
<td class="title">用户姓名或者公司名称 *</td>
<td>
<input type="text" name="fullname" maxlength="50" ref="focus" v-model="user.fullname" placeholder="用户姓名或者公司名称"/>
</td>
</tr>
</table>
<submit-btn></submit-btn>
</form>

View File

@@ -0,0 +1,3 @@
Tea.context(function () {
this.success = NotifyReloadSuccess("保存成功")
})