irc_web/.svn/pristine/a5/a558f85e9154b080d9141602679...

216 lines
6.7 KiB
Plaintext

<template>
<base-model :config="model_cfg">
<template slot="dialog-body">
<el-form
ref="anonymizationFrom"
:model="form"
:rules="rules"
label-width="100px"
size="small"
>
<!-- 姓 -->
<el-form-item :label="$t('trials:externalStaff:table:lastName')" prop="LastName">
<el-input v-model="form.LastName" />
</el-form-item>
<!-- 名 -->
<el-form-item :label="$t('trials:externalStaff:table:firstName')" prop="FirstName">
<el-input v-model="form.FirstName" />
</el-form-item>
<!-- 用户类型 -->
<el-form-item :label="$t('trials:externalStaff:table:userType')" prop="UserTypeId">
<el-select
v-if="userTypeOptions"
v-model="form.UserTypeId"
style="width:100%"
>
<el-option
v-for="item of userTypeOptions"
:key="item.Id"
:label="item.UserTypeShortName"
:value="item.Id"
>
<span>{{ item.UserType }}</span>
</el-option>
</el-select>
</el-form-item>
<!-- 电话号码 -->
<el-form-item :label="$t('trials:externalStaff:table:phone')" prop="Phone">
<el-input v-model="form.Phone" />
</el-form-item>
<!-- 邮箱 -->
<el-form-item :label="$t('trials:externalStaff:table:email')" prop="Email">
<el-input v-model="form.Email" />
</el-form-item>
<!-- 单位 -->
<el-form-item :label="$t('trials:externalStaff:table:organization')" prop="OrganizationName">
<el-input v-model="form.OrganizationName" />
</el-form-item>
</el-form>
<div v-if="errorMsg" style="font-size: 12px;color: #f66;">{{ errorMsg }}</div>
</template>
<template slot="dialog-footer">
<!-- 取消 -->
<el-button size="small" type="primary" :disabled="btnLoading" @click="handleCancel">
{{ $t('common:button:cancel') }}
</el-button>
<!-- 保存 -->
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave">
{{ $t('common:button:save') }}
</el-button>
<!-- 保存且发邮件 -->
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave('SendEmail')">
{{ $t('trials:externalStaff:button:saveAndSendEmail') }}
</el-button>
</template>
</base-model>
</template>
<script>
import { addOrUpdateTrialExternalUser } from '@/api/trials'
import BaseModel from '@/components/BaseModel'
const formDataDefault = () => {
return {
Id: null,
TrialId: null,
LastName: null,
FirstName: null,
UserTypeId: '',
Phone: null,
Email: null,
OrganizationName: null
}
}
export default {
name: 'StaffExternalAdd',
components: { BaseModel },
props: {
userTypeOptions: {
type: Array,
default: function() {
return {}
}
}
},
data() {
var checkPhone = (rule, value, callback) => {
const phoneReg = /^1[3|4|5|7|8][0-9]{9}$/
if (!value) {
callback()
}
setTimeout(() => {
if (!Number.isInteger(+value)) {
callback(new Error(this.$t('trials:externalStaff:formRule:phone')))
} else {
if (phoneReg.test(value)) {
callback()
} else {
callback(new Error(this.$t('trials:externalStaff:formRule:phone')))
}
}
}, 100)
}
var validateEmail = (rule, value, callback) => {
if (value === '') {
callback(new Error(this.$t('common:ruleMessage:specify')))
} else {
var reg = /^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$/
if (this.form.Email && reg.test(this.form.Email)) {
this.sendDisabled = false
callback()
} else {
callback(new Error(this.$t('trials:externalStaff:formRule:email')))
this.sendDisabled = true
}
}
}
return {
form: {
Id: null,
LastName: null,
FirstName: null,
UserTypeId: '',
Phone: null,
Email: null,
TrialId: null,
IsSendEmail: false
},
rules: {
LastName: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ min: 0, max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50`, trigger: 'blur' }
],
FirstName: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ min: 0, max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50`, trigger: 'blur' }
],
UserTypeId: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur'] }],
Phone: [
{ required: false, validator: checkPhone, trigger: ['blur'] }
],
Email: [
{ required: true, validator: validateEmail, trigger: ['blur'] }
]
},
btnLoading: false,
userRoles: [],
userTypeEnumInt: 0,
model_cfg: { visible: false, showClose: true, width: '600px', title: '', appendToBody: true },
trialId: '',
errorMsg: null
}
},
watch: {
model_cfg: {
handler(newName, oldName) {
this.errorMsg = null
},
deep: true
}
},
mounted() {
this.trialId = this.$route.query.trialId
},
methods: {
openDialog(title, data) {
this.model_cfg.visible = true
this.model_cfg.title = title
if (Object.keys(data).length) {
this.form = { ...data }
} else {
this.form = formDataDefault()
}
},
handleSave(v) {
this.$refs.anonymizationFrom.validate(valid => {
if (valid) {
this.btnLoading = true
this.form.TrialId = this.trialId
if (v === 'SendEmail') {
this.form.IsSendEmail = true
this.form.BaseUrl = `${location.protocol}//${location.host}/login`
this.form.RouteUrl = `${location.protocol}//${location.host}/email-recompose`
}
addOrUpdateTrialExternalUser(this.form).then(res => {
this.btnLoading = false
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.model_cfg.visible = false
this.$emit('getList')
}).catch((res) => {
if (res.Result) {
this.$set(this.form, 'LastName', res.Result.LastName)
this.$set(this.form, 'FirstName', res.Result.FirstName)
this.$set(this.form, 'Phone', res.Result.Phone)
this.errorMsg = res.ErrorMessage
}
this.btnLoading = false
})
}
})
},
handleCancel() {
this.model_cfg.visible = false
}
}
}
</script>