Commit e87af49e authored by 徐一鸣's avatar 徐一鸣

权限管理新建组织、新建用户、新建角色部分字段限制长度

parent 440d807f
...@@ -124,13 +124,15 @@ export default { ...@@ -124,13 +124,15 @@ export default {
rules: { rules: {
name: [ name: [
{ required: true, message: "请输入组织机构名称", trigger: "blur" }, { required: true, message: "请输入组织机构名称", trigger: "blur" },
{ max: 10, message: "长度小于10个字符", trigger: "blur" },
], ],
shortname: [ shortname: [
// { required: true, message: '请输入组织机构简称', trigger: 'blur' }, // { required: true, message: '请输入组织机构简称', trigger: 'blur' },
{ max: 10, message: "长度小于10个字符", trigger: "blur" },
], ],
desc: [ desc: [
// { required: true, message: '请输入组织说明', trigger: 'blur' }, // { required: true, message: '请输入组织说明', trigger: 'blur' },
{ max: 200, message: "长度小于200个字符", trigger: "blur" }, { max: 500, message: "长度小于500个字符", trigger: "blur" },
], ],
fileList: [ fileList: [
// {required: true, message: '请上传图片', trigger: 'change'} // {required: true, message: '请上传图片', trigger: 'change'}
...@@ -179,10 +181,10 @@ export default { ...@@ -179,10 +181,10 @@ export default {
) )
.then((response) => { .then((response) => {
console.log(response); console.log(response);
if(!response.data.success){ if (!response.data.success) {
this.$message.error(response.data.errMsg) this.$message.error(response.data.errMsg);
return return;
} }
let data = response.data.data; let data = response.data.data;
this.form = { this.form = {
name: data.department_name, name: data.department_name,
...@@ -209,10 +211,10 @@ export default { ...@@ -209,10 +211,10 @@ export default {
.put("/apaas/backmgt/department", temp) .put("/apaas/backmgt/department", temp)
.then((response) => { .then((response) => {
console.log(response); console.log(response);
if(!response.data.success){ if (!response.data.success) {
this.$message.error(response.data.errMsg) this.$message.error(response.data.errMsg);
return return;
} }
this.$message.success("保存成功"); this.$message.success("保存成功");
this.$router.back(-1); this.$router.back(-1);
}) })
...@@ -234,10 +236,10 @@ export default { ...@@ -234,10 +236,10 @@ export default {
.post("/apaas/backmgt/department", temp) .post("/apaas/backmgt/department", temp)
.then((response) => { .then((response) => {
console.log(response); console.log(response);
if(!response.data.success){ if (!response.data.success) {
this.$message.error(response.data.errMsg) this.$message.error(response.data.errMsg);
return return;
} }
this.$message.success("保存成功"); this.$message.success("保存成功");
this.$router.back(-1); this.$router.back(-1);
}) })
...@@ -249,12 +251,12 @@ export default { ...@@ -249,12 +251,12 @@ export default {
this.$http this.$http
.get("/apaas/backmgt/department/list") .get("/apaas/backmgt/department/list")
.then((response) => { .then((response) => {
if(!response.data.success){ if (!response.data.success) {
this.$message.error(response.data.errMsg) this.$message.error(response.data.errMsg);
return return;
} }
let data = response.data.data; let data = response.data.data;
this.origin_arr = data this.origin_arr = data;
}) })
.catch(function(response) {}); .catch(function(response) {});
}, },
......
...@@ -82,10 +82,13 @@ export default { ...@@ -82,10 +82,13 @@ export default {
now_user: 2, //0:普通用户,1:组织管理员,2:超级管理员 now_user: 2, //0:普通用户,1:组织管理员,2:超级管理员
permissionData: [], permissionData: [],
rules: { rules: {
name: [{ required: true, message: "请输入角色名称", trigger: "blur" }], name: [
{ required: true, message: "请输入角色名称", trigger: "blur" },
{ max: 8, message: "长度小于8个字符", trigger: "blur" },
],
desc: [ desc: [
{ required: true, message: "请输入角色描述", trigger: "blur" }, { required: true, message: "请输入角色描述", trigger: "blur" },
{ max: 200, message: "长度小于200个字符", trigger: "blur" }, { max: 500, message: "长度小于500个字符", trigger: "blur" },
], ],
}, },
edit_flag: 0, edit_flag: 0,
......
...@@ -18,7 +18,10 @@ ...@@ -18,7 +18,10 @@
<el-form ref="form" :rules="rules" :model="form" label-width="0px"> <el-form ref="form" :rules="rules" :model="form" label-width="0px">
<el-form-item prop="account"> <el-form-item prop="account">
<p class="formname">用户账号:</p> <p class="formname">用户账号:</p>
<el-input v-model="form.account" :disabled="tranform_flag(edit_flag)"></el-input> <el-input
v-model="form.account"
:disabled="tranform_flag(edit_flag)"
></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password" :class="{ shortpass: edit_flag }"> <el-form-item prop="password" :class="{ shortpass: edit_flag }">
<p class="formname">登录密码:</p> <p class="formname">登录密码:</p>
...@@ -36,7 +39,11 @@ ...@@ -36,7 +39,11 @@
</el-form-item> </el-form-item>
<el-form-item prop="type"> <el-form-item prop="type">
<p class="formname">用户类型:</p> <p class="formname">用户类型:</p>
<el-select v-model="form.type" placeholder="请选择" @change="change_type()"> <el-select
v-model="form.type"
placeholder="请选择"
@change="change_type()"
>
<el-option <el-option
v-for="item in typeoptions" v-for="item in typeoptions"
:key="item.value" :key="item.value"
...@@ -46,26 +53,29 @@ ...@@ -46,26 +53,29 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="systemname" v-if="form.type!==1"> <el-form-item prop="systemname" v-if="form.type !== 1">
<p class="formname">业务系统名称:</p> <p class="formname">业务系统名称:</p>
<el-input v-model="form.systemname"></el-input> <el-input v-model="form.systemname"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="domain" v-if="form.type==3||form.type==4"> <el-form-item prop="domain" v-if="form.type == 3 || form.type == 4">
<p class="formname">域名:</p> <p class="formname">域名:</p>
<el-input v-model="form.domain"></el-input> <el-input v-model="form.domain"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="ip" v-if="form.type==3||form.type==4"> <el-form-item prop="ip" v-if="form.type == 3 || form.type == 4">
<p class="formname">IP白名单:</p> <p class="formname">IP白名单:</p>
<!-- <el-input v-model="form.ip"></el-input> --> <!-- <el-input v-model="form.ip"></el-input> -->
<div style="width:1022px;min-height:60px;border:1px solid #dcdfe6;border-radius:4px;padding:5px;"> <div
style="width:1022px;min-height:60px;border:1px solid #dcdfe6;border-radius:4px;padding:5px;"
>
<el-tag <el-tag
v-if="form.ip.length" v-if="form.ip.length"
:key="tag" :key="tag"
v-for="tag in form.ip" v-for="tag in form.ip"
closable closable
:disable-transitions="false" :disable-transitions="false"
@close="handleClose(tag)"> @close="handleClose(tag)"
{{tag}} >
{{ tag }}
</el-tag> </el-tag>
<el-input <el-input
class="input-new-tag" class="input-new-tag"
...@@ -77,7 +87,13 @@ ...@@ -77,7 +87,13 @@
@blur="handleInputConfirm" @blur="handleInputConfirm"
> >
</el-input> </el-input>
<el-button v-else class="button-new-tag" size="small" @click="showInput">新增</el-button> <el-button
v-else
class="button-new-tag"
size="small"
@click="showInput"
>新增</el-button
>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item prop="contact"> <el-form-item prop="contact">
...@@ -92,7 +108,7 @@ ...@@ -92,7 +108,7 @@
<p class="formname">邮箱:</p> <p class="formname">邮箱:</p>
<el-input v-model="form.email"></el-input> <el-input v-model="form.email"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="origin" v-if="form.type!==1"> <el-form-item prop="origin" v-if="form.type !== 1">
<p class="formname">用户组织机构:</p> <p class="formname">用户组织机构:</p>
<el-select v-model="form.origin" placeholder="请选择"> <el-select v-model="form.origin" placeholder="请选择">
<el-option <el-option
...@@ -159,15 +175,25 @@ export default { ...@@ -159,15 +175,25 @@ export default {
}, },
data() { data() {
var check_phone = (rule, value, callback) => { var check_phone = (rule, value, callback) => {
var phone_ruler=/^(?:(?:\+|00)86)?1[3-9]\d{9}$/ var phone_ruler = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/;
setTimeout(() => { setTimeout(() => {
if (!phone_ruler.test(value)) { if (!phone_ruler.test(value)) {
callback(new Error('请输入正确电话号码')); callback(new Error("请输入正确电话号码"));
} else { } else {
callback(); callback();
} }
}); });
}; };
var check_email = (rule, value, callback) => {
var email_ruler = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
setTimeout(() => {
if (value && !email_ruler.test(value)) {
callback(new Error("请输入正确邮箱地址"));
} else {
callback();
}
});
};
var checkip = (rule, value, callback) => { var checkip = (rule, value, callback) => {
var reg = /(((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3});/g; var reg = /(((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3});/g;
setTimeout(() => { setTimeout(() => {
...@@ -196,10 +222,10 @@ export default { ...@@ -196,10 +222,10 @@ export default {
ip: [], ip: [],
domain: "", domain: "",
}, },
dynamicTags: ['标签一', '标签二', '标签三'], dynamicTags: ["标签一", "标签二", "标签三"],
inputVisible: false, inputVisible: false,
inputValue: '', inputValue: "",
ip_arr:[], ip_arr: [],
now_user: 0, //0:普通用户,1:组织管理员,2:超级管理员 now_user: 0, //0:普通用户,1:组织管理员,2:超级管理员
typeoptions: [ typeoptions: [
{ {
...@@ -234,38 +260,47 @@ export default { ...@@ -234,38 +260,47 @@ export default {
rules: { rules: {
account: [ account: [
{ required: true, message: "请输入账号", trigger: "blur" }, { required: true, message: "请输入账号", trigger: "blur" },
{ max: 8, message: "长度小于8个字符", trigger: "blur" },
], ],
password: [ password: [
{ required: true, message: "请输入密码", trigger: "blur" }, { required: true, message: "请输入密码", trigger: "blur" },
{ max: 20, message: "长度小于20个字符", trigger: "blur" },
], ],
nickname: [ nickname: [
{ required: true, message: "请输入昵称", trigger: "blur" }, { required: true, message: "请输入昵称", trigger: "blur" },
{ max: 8, message: "长度小于8个字符", trigger: "blur" },
], ],
type: [ type: [
{ required: true, message: "请选择用户类型", trigger: "change" }, { required: true, message: "请选择用户类型", trigger: "change" },
], ],
systemname: [ systemname: [
{ required: true, message: "请输入系统名称", trigger: "blur" }, { required: true, message: "请输入系统名称", trigger: "blur" },
{ max: 16, message: "长度小于16个字符", trigger: "blur" },
], ],
contact: [ contact: [
{ required: true, message: "请输入联系人", trigger: "blur" }, { required: true, message: "请输入联系人", trigger: "blur" },
{ max: 6, message: "长度小于6个字符", trigger: "blur" },
], ],
phone: [ phone: [
{ required: true, message: "请输入电话号码", trigger: "blur" }, { required: true, message: "请输入电话号码", trigger: "blur" },
{ validator: check_phone, trigger: "blur" }, { validator: check_phone, trigger: "blur" },
],
email: [
// { required: true, message: "请输入邮箱地址", trigger: "blur" },
{ validator: check_email, trigger: "blur" },
], ],
able: [ able: [
{ required: true, message: "请选择是否禁用", trigger: "change" }, { required: true, message: "请选择是否禁用", trigger: "change" },
], ],
desc: [
// { required: true, message: "请输入描述", trigger: "blur" },
{ max: 500, message: "长度小于500个字符", trigger: "blur" },
],
origin: [ origin: [
{ required: true, message: "请选择组织机构", trigger: "change" }, { required: true, message: "请选择组织机构", trigger: "change" },
], ],
domain:[ domain: [{ required: true, message: "请输入域名", trigger: "blur" }],
{ required: true, message: '请输入域名', trigger: 'blur' } ip: [{ required: true, message: "请输入ip地址", trigger: "blur" }],
],
ip: [
{ required: true, message: '请输入ip地址', trigger: 'blur' }
],
}, },
edit_flag: 0, edit_flag: 0,
baseinfo: {}, baseinfo: {},
...@@ -279,31 +314,31 @@ export default { ...@@ -279,31 +314,31 @@ export default {
}, },
mounted() {}, mounted() {},
methods: { methods: {
change_type(){ change_type() {
this.form.systemname = '' this.form.systemname = "";
this.form.domain = '' this.form.domain = "";
this.form.ip = [] this.form.ip = [];
this.form.origin = '' this.form.origin = "";
}, },
handleClose(tag) { handleClose(tag) {
this.form.ip.splice(this.form.ip.indexOf(tag), 1); this.form.ip.splice(this.form.ip.indexOf(tag), 1);
}, },
showInput() { showInput() {
this.inputVisible = true; this.inputVisible = true;
this.$nextTick(_ => { this.$nextTick((_) => {
this.$refs.saveTagInput.$refs.input.focus(); this.$refs.saveTagInput.$refs.input.focus();
}); });
}, },
handleInputConfirm() { handleInputConfirm() {
let inputValue = this.inputValue; let inputValue = this.inputValue;
if (inputValue) { if (inputValue) {
this.form.ip.push(inputValue); this.form.ip.push(inputValue);
} }
this.inputVisible = false; this.inputVisible = false;
this.inputValue = ''; this.inputValue = "";
}, },
get_now_page() { get_now_page() {
console.log(this.$route); console.log(this.$route);
if (this.$route.path.indexOf("add") !== -1) { if (this.$route.path.indexOf("add") !== -1) {
...@@ -326,9 +361,9 @@ export default { ...@@ -326,9 +361,9 @@ export default {
.put(`/apaas/backmgt/user/initalPasswd/${this.$route.params.id}`) .put(`/apaas/backmgt/user/initalPasswd/${this.$route.params.id}`)
.then((response) => { .then((response) => {
console.log(response); console.log(response);
if(response.data.success){ if (response.data.success) {
this.$message.success("修改成默认密码成功 默认密码:123456"); this.$message.success("修改成默认密码成功 默认密码:123456");
}else{ } else {
this.$message.error("修改密码失败"); this.$message.error("修改密码失败");
} }
}) })
...@@ -341,7 +376,7 @@ export default { ...@@ -341,7 +376,7 @@ export default {
.get(`/apaas/backmgt/user/detail/${this.$route.params.id}`) .get(`/apaas/backmgt/user/detail/${this.$route.params.id}`)
.then((response) => { .then((response) => {
console.log(response); console.log(response);
if(response.data.success){ if (response.data.success) {
let data = response.data.data; let data = response.data.data;
this.form = { this.form = {
account: data.user_id, account: data.user_id,
...@@ -360,10 +395,9 @@ export default { ...@@ -360,10 +395,9 @@ export default {
ip: data.ip_whitelist, ip: data.ip_whitelist,
domain: data.domain_name, domain: data.domain_name,
}; };
}else{ } else {
this.$message.error("获取数据失败"); this.$message.error("获取数据失败");
} }
}) })
.catch((response) => { .catch((response) => {
this.$message.error("获取数据失败"); this.$message.error("获取数据失败");
...@@ -381,7 +415,7 @@ export default { ...@@ -381,7 +415,7 @@ export default {
this.$http this.$http
.get("/apaas/backmgt/department/list") .get("/apaas/backmgt/department/list")
.then((response) => { .then((response) => {
if(response.data.success){ if (response.data.success) {
let data = response.data.data; let data = response.data.data;
// this.originoptions = data // this.originoptions = data
data.forEach((e) => { data.forEach((e) => {
...@@ -390,13 +424,12 @@ export default { ...@@ -390,13 +424,12 @@ export default {
value: e.department_id, value: e.department_id,
}); });
}); });
}else{ } else {
this.$message.error("获取组织失败"); this.$message.error("获取组织失败");
} }
}) })
.catch(function(response) { .catch(function(response) {
this.$message.error("获取组织失败"); this.$message.error("获取组织失败");
}); });
}, },
removepic() { removepic() {
...@@ -408,7 +441,7 @@ export default { ...@@ -408,7 +441,7 @@ export default {
add_user() { add_user() {
var temp = { var temp = {
user_id: this.form.account, // 用户名 user_id: this.form.account, // 用户名
password:this.form.password, password: this.form.password,
user_name: this.form.nickname, // 昵称 user_name: this.form.nickname, // 昵称
system_name: this.form.systemname, //系统名称 system_name: this.form.systemname, //系统名称
phone: this.form.phone + "", // 电话号 phone: this.form.phone + "", // 电话号
...@@ -425,12 +458,12 @@ export default { ...@@ -425,12 +458,12 @@ export default {
.post(`/apaas/backmgt/user/add`, temp) .post(`/apaas/backmgt/user/add`, temp)
.then((response) => { .then((response) => {
console.log(response); console.log(response);
if(response.data.success){ if (response.data.success) {
this.backPage(); this.backPage();
this.$message.success("新增成功"); this.$message.success("新增成功");
}else{ } else {
this.$message.error("新增失败"); this.$message.error("新增失败");
} }
}) })
.catch((response) => { .catch((response) => {
this.$message.error("新增失败"); this.$message.error("新增失败");
...@@ -447,18 +480,17 @@ export default { ...@@ -447,18 +480,17 @@ export default {
is_admin: this.form.type, is_admin: this.form.type,
state: this.form.able, // 用户状态,1——启用,0 禁用 state: this.form.able, // 用户状态,1——启用,0 禁用
domain_name: this.form.domain, // domain_name: this.form.domain, //
ip_whitelist: ip_whitelist: this.form.ip && this.form.ip.length ? this.form.ip : [], //
this.form.ip && this.form.ip.length ? this.form.ip : [], //
description: this.form.desc, //描述 description: this.form.desc, //描述
link_man: this.form.contact, link_man: this.form.contact,
}; };
this.$http this.$http
.put(`/apaas/backmgt/user/put`, temp) .put(`/apaas/backmgt/user/put`, temp)
.then((response) => { .then((response) => {
if(response.data.success){ if (response.data.success) {
this.backPage(); this.backPage();
this.$message.success("修改成功"); this.$message.success("修改成功");
}else{ } else {
this.$message.error("修改失败"); this.$message.error("修改失败");
} }
}) })
...@@ -466,23 +498,24 @@ export default { ...@@ -466,23 +498,24 @@ export default {
this.$message.error("修改失败"); this.$message.error("修改失败");
}); });
}, },
check_user(){ check_user() {
return this.$http return this.$http.get(
.get(`/apaas/backmgt/user/checkUserId?user_id=${this.form.account}`) `/apaas/backmgt/user/checkUserId?user_id=${this.form.account}`
);
}, },
onSubmit(formName) { onSubmit(formName) {
console.log("submit!"); console.log("submit!");
this.$refs[formName].validate((valid) => { this.$refs[formName].validate((valid) => {
if (valid) { if (valid) {
if (this.edit_flag == 0) { if (this.edit_flag == 0) {
this.check_user().then((res)=>{ this.check_user().then((res) => {
console.log(res); console.log(res);
if(res.data.success){ if (res.data.success) {
this.add_user(); this.add_user();
}else{ } else {
this.$message.error(res.data.errMsg) this.$message.error(res.data.errMsg);
} }
}) });
} else { } else {
this.set_user(); this.set_user();
} }
...@@ -491,11 +524,8 @@ export default { ...@@ -491,11 +524,8 @@ export default {
return false; return false;
} }
}); });
},
check_account(){
}, },
check_account() {},
resetForm(formName) { resetForm(formName) {
this.$refs[formName].resetFields(); this.$refs[formName].resetFields();
this.form = { this.form = {
...@@ -549,26 +579,26 @@ export default { ...@@ -549,26 +579,26 @@ export default {
.info_contain .el-input.is-disabled .el-input__inner { .info_contain .el-input.is-disabled .el-input__inner {
background-color: #e3e4e6; background-color: #e3e4e6;
} }
.el-tag + .el-tag { .el-tag + .el-tag {
margin-left: 10px; margin-left: 10px;
} }
.button-new-tag { .button-new-tag {
margin-left: 10px; margin-left: 10px;
height: 32px; height: 32px;
line-height: 30px; line-height: 30px;
padding-top: 0; padding-top: 0;
padding-bottom: 0; padding-bottom: 0;
} }
.info_contain .input-new-tag { .info_contain .input-new-tag {
width: 90px; width: 90px;
margin-left: 10px; margin-left: 10px;
vertical-align: bottom; vertical-align: bottom;
} }
.info_contain .input-new-tag .el-input__inner { .info_contain .input-new-tag .el-input__inner {
width: 90px; width: 90px;
margin-left: 10px; margin-left: 10px;
vertical-align: bottom; vertical-align: bottom;
} }
</style> </style>
<style scoped> <style scoped>
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
:limit="1" :limit="1"
:on-change="imageUploadChange" :on-change="imageUploadChange"
:on-success="imageUploadSuccess" :on-success="imageUploadSuccess"
:on-error="imageUploadError"
action="/apaas/hubApi/image/upload" action="/apaas/hubApi/image/upload"
name="file" name="file"
drag drag
...@@ -63,7 +64,11 @@ ...@@ -63,7 +64,11 @@
</div> </div>
<div class="form_line"></div> <div class="form_line"></div>
<el-form-item label="上传镜像列表:"> <el-form-item label="上传镜像列表:">
<div class="image_list_container" v-infinite-scroll="loadImageList"> <div
v-if="image_datas"
class="image_list_container"
v-infinite-scroll="loadImageList"
>
<apass-table <apass-table
:header="image_headers" :header="image_headers"
:data="image_datas" :data="image_datas"
...@@ -298,7 +303,10 @@ export default { ...@@ -298,7 +303,10 @@ export default {
cjsl: "", // 应用场景示例 cjsl: "", // 应用场景示例
}, },
app_rules: { app_rules: {
name: [{ required: true, message: "请输入应用名称", trigger: "blur" }], name: [
{ required: true, message: "请输入应用名称", trigger: "blur" },
{ max: 16, message: "长度小于16个字符", trigger: "blur" },
],
version: [{ required: true, message: "请输入应用版本", trigger: "blur" }], version: [{ required: true, message: "请输入应用版本", trigger: "blur" }],
ywly: [{ required: true, message: "请选择业务领域", trigger: "change" }], ywly: [{ required: true, message: "请选择业务领域", trigger: "change" }],
type: [{ required: true, message: "请选择应用类型", trigger: "change" }], type: [{ required: true, message: "请选择应用类型", trigger: "change" }],
...@@ -363,7 +371,7 @@ export default { ...@@ -363,7 +371,7 @@ export default {
}); */ }); */
}, },
imageUploadSuccess(response) { imageUploadSuccess(response) {
console.log("新增成功", response); // console.log("新增成功", response);
this.$refs.step1_upload.clearFiles(); this.$refs.step1_upload.clearFiles();
this.image_info.image_name = ""; this.image_info.image_name = "";
this.image_info.tag = ""; this.image_info.tag = "";
...@@ -373,6 +381,13 @@ export default { ...@@ -373,6 +381,13 @@ export default {
this.image_page = 1; this.image_page = 1;
this.initImageList(); this.initImageList();
}, },
imageUploadError(response) {
this.$message({
message: `上传失败`,
type: "warning",
});
this.step1UplaodLoading = false;
},
submitImage(formName) { submitImage(formName) {
this.$refs[formName].validate((valid) => { this.$refs[formName].validate((valid) => {
if (valid) { if (valid) {
......
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