216 lines
6.7 KiB
Plaintext
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>
|