248 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
<template>
 | 
						|
  <div class="app-container">
 | 
						|
    <el-form
 | 
						|
      ref="userForm"
 | 
						|
      size="small"
 | 
						|
      :model="user"
 | 
						|
      :rules="userFormRules"
 | 
						|
      label-width="150px"
 | 
						|
      style="width:800px;"
 | 
						|
    >
 | 
						|
      <el-card class="Basic" shadow="never" size="small">
 | 
						|
        <div slot="header" class="clearfix">
 | 
						|
          <span>Basic Information</span>
 | 
						|
        </div>
 | 
						|
        <el-form-item v-if="user.Code" label="ID: " prop="Code">
 | 
						|
          <el-input v-model="user.Code" disabled />
 | 
						|
        </el-form-item>
 | 
						|
 | 
						|
        <el-form-item label="User Name: " prop="UserName">
 | 
						|
          <el-input v-model="user.UserName" disabled />
 | 
						|
        </el-form-item>
 | 
						|
 | 
						|
        <!-- <el-form-item label="Real Name: " prop="RealName">
 | 
						|
          <el-input v-model="user.RealName" />
 | 
						|
        </el-form-item> -->
 | 
						|
        <el-form-item v-if="user.UserTypeEnum !== 8" label="Surname: " prop="LastName">
 | 
						|
          <el-input v-model="user.LastName" />
 | 
						|
        </el-form-item>
 | 
						|
        <el-form-item v-if="user.UserTypeEnum !== 8" label="Given Name: " prop="FirstName">
 | 
						|
          <el-input v-model="user.FirstName" />
 | 
						|
        </el-form-item>
 | 
						|
        <el-form-item label="Gender: " prop="Sex" style="margin-right:40px;">
 | 
						|
          <el-radio-group v-model="user.Sex">
 | 
						|
            <el-radio :label="1">Male</el-radio>
 | 
						|
            <el-radio :label="0">Female</el-radio>
 | 
						|
          </el-radio-group>
 | 
						|
        </el-form-item>
 | 
						|
        <el-form-item label="Email: " prop="EMail">
 | 
						|
          <el-input v-model="user.EMail" />
 | 
						|
        </el-form-item>
 | 
						|
        <el-form-item label="Phone: ">
 | 
						|
          <el-input v-model="user.Phone" />
 | 
						|
        </el-form-item>
 | 
						|
        <el-form-item v-if="user.UserTypeEnum !== 8" label="Disable">
 | 
						|
          <el-switch v-model="user.Status" :active-value="0" :inactive-value="1" disabled />
 | 
						|
        </el-form-item>
 | 
						|
        <!-- <el-form-item label="User Type: " prop="UserTypeId">
 | 
						|
          <el-select v-model="user.UserTypeId" size="small" placeholder="Please select" disabled>
 | 
						|
            <el-option
 | 
						|
              v-for="(value,key) of dictionaryList.UserType"
 | 
						|
              :key="key"
 | 
						|
              :label="value"
 | 
						|
              :value="key"
 | 
						|
            />
 | 
						|
          </el-select>
 | 
						|
        </el-form-item> -->
 | 
						|
        <!-- <el-form-item label="User Type: " prop="UserTypeId">
 | 
						|
          <el-select ref="userType" v-model="user.UserTypeId" size="small" placeholder="Please select" style="width:100%;">
 | 
						|
            <el-option
 | 
						|
              v-for="(userType,key) of userTypeOptions"
 | 
						|
              :key="key"
 | 
						|
              :label="userType.UserType"
 | 
						|
              :value="userType.Id"
 | 
						|
            />
 | 
						|
          </el-select>
 | 
						|
        </el-form-item> -->
 | 
						|
 | 
						|
        <el-form-item label="User Type: " prop="UserType">
 | 
						|
          <el-input v-model="user.UserType" disabled />
 | 
						|
        </el-form-item>
 | 
						|
      </el-card>
 | 
						|
 | 
						|
      <el-card v-if="user.UserTypeEnum !== 8" class="Affiliation" shadow="never" style="margin-top:10px;" size="small">
 | 
						|
        <div slot="header" class="clearfix">
 | 
						|
          <span>Affiliation</span>
 | 
						|
        </div>
 | 
						|
        <el-form-item prop="IsZhiZhun">
 | 
						|
          <el-radio-group v-model="user.IsZhiZhun">
 | 
						|
            <el-radio :label="true">Internal</el-radio>
 | 
						|
            <el-radio :label="false">External</el-radio>
 | 
						|
          </el-radio-group>
 | 
						|
        </el-form-item>
 | 
						|
        <el-form-item v-show="user.IsZhiZhun === false" label="Organization Name: " prop="OrganizationName">
 | 
						|
          <el-input v-model="user.OrganizationName" />
 | 
						|
        </el-form-item>
 | 
						|
        <!-- <el-form-item label="Orgnization Type: " prop="OrganizationTypeId">
 | 
						|
          <el-select
 | 
						|
            v-model="user.OrganizationTypeId"
 | 
						|
            placeholder="Please select"
 | 
						|
            @change="handelOrgnizationTypeChange"
 | 
						|
          >
 | 
						|
            <el-option
 | 
						|
              v-for="(value,key) of dictionaryList.InstitutionalType"
 | 
						|
              :key="key"
 | 
						|
              :label="value"
 | 
						|
              :value="key"
 | 
						|
            />
 | 
						|
          </el-select>
 | 
						|
        </el-form-item>
 | 
						|
 | 
						|
        <el-form-item v-show="user.OrganizationTypeId" label="Orgnization: " prop="OrganizationId">
 | 
						|
          <el-select v-model="user.OrganizationId" placeholder="Please select">
 | 
						|
            <el-option
 | 
						|
              v-for="(item) of OrganizationOptions"
 | 
						|
              :key="item.Id"
 | 
						|
              :label="item.InstitutionName"
 | 
						|
              :value="item.Id"
 | 
						|
            />
 | 
						|
          </el-select>
 | 
						|
        </el-form-item> -->
 | 
						|
 | 
						|
        <el-form-item label="Department: " prop="DepartmentName">
 | 
						|
          <el-input v-model="user.DepartmentName" />
 | 
						|
        </el-form-item>
 | 
						|
        <el-form-item label="Position: " prop="PositionName">
 | 
						|
          <el-input v-model="user.PositionName" />
 | 
						|
        </el-form-item>
 | 
						|
      </el-card>
 | 
						|
      <el-form-item>
 | 
						|
        <el-button
 | 
						|
          type="primary"
 | 
						|
          size="small"
 | 
						|
          :disabled="isDisabled"
 | 
						|
          style="margin:10px 15px"
 | 
						|
          @click="handleSave"
 | 
						|
        >Save</el-button>
 | 
						|
      </el-form-item>
 | 
						|
 | 
						|
    </el-form>
 | 
						|
  </div>
 | 
						|
</template>
 | 
						|
<script>
 | 
						|
import { getUserTypeList, getInstitutionList, getUser, addUser, updateUser } from '@/api/admin.js'
 | 
						|
import store from '@/store'
 | 
						|
import { mapGetters } from 'vuex'
 | 
						|
export default {
 | 
						|
  data() {
 | 
						|
    return {
 | 
						|
      user: {},
 | 
						|
      userFormRules: {
 | 
						|
        UserName: [{ required: true, message: 'Please specify', trigger: 'blur' }],
 | 
						|
        UserTypeId: [{ required: true, message: 'Please Select', trigger: ['blur', 'change'] }],
 | 
						|
        // OrganizationId: [{ required: true, message: 'Please specify', trigger: 'blur' }],
 | 
						|
        // OrganizationTypeId: [{ required: true, message: 'Please specify', trigger: 'blur' }],
 | 
						|
        // RealName: [{ required: true, message: 'Please specify', trigger: 'blur' }],
 | 
						|
        IsZhiZhun: [{ required: true, message: 'Please Select', trigger: ['blur', 'change'] }],
 | 
						|
        OrganizationName: [{ required: true, message: 'Please specify', trigger: 'blur' }],
 | 
						|
        LastName: [{ required: true, message: 'Please specify', trigger: 'blur' }, { max: 50, message: 'The maximum length is 50' }],
 | 
						|
        FirstName: [{ required: true, message: 'Please specify', trigger: 'blur' }, { max: 50, message: 'The maximum length is 50' }],
 | 
						|
 | 
						|
        // Phone: [
 | 
						|
        //   { max: 20, min: 7, message: 'The length is 7 to 20' }
 | 
						|
        // ],
 | 
						|
        EMail: [
 | 
						|
          {
 | 
						|
            required: true,
 | 
						|
            message: 'Please input the email address',
 | 
						|
            trigger: 'blur'
 | 
						|
          },
 | 
						|
          {
 | 
						|
            type: 'email',
 | 
						|
            message: 'Please input the correct email address',
 | 
						|
            trigger: ['blur', 'change']
 | 
						|
          },
 | 
						|
          { max: 50, message: 'The maximum length is 50' }
 | 
						|
        ],
 | 
						|
        Sex: [{ required: true, message: 'Please specify', trigger: 'blur' }],
 | 
						|
        Status: [{ required: true, message: 'Please specify', trigger: 'blur' }]
 | 
						|
      },
 | 
						|
      // OrganizationOptions: [],
 | 
						|
      userTypeOptions: [],
 | 
						|
      isDisabled: false
 | 
						|
    }
 | 
						|
  },
 | 
						|
  computed: {
 | 
						|
    ...mapGetters(['userId'])
 | 
						|
  },
 | 
						|
  mounted() {
 | 
						|
    // this.getUserTypeList()
 | 
						|
    this.initPage()
 | 
						|
  },
 | 
						|
  methods: {
 | 
						|
    handleSave() {
 | 
						|
      this.$refs.userForm.validate(valid => {
 | 
						|
        if (valid) {
 | 
						|
          this.isDisabled = true
 | 
						|
          const selectedUserType = this.userTypeOptions.filter((item) => {
 | 
						|
            return item.Id === this.user.UserTypeId
 | 
						|
          })
 | 
						|
          if (selectedUserType.length > 0) {
 | 
						|
            this.user.userTypeEnum = selectedUserType[0].UserTypeEnum
 | 
						|
          }
 | 
						|
          if (this.user.IsZhiZhun === true) {
 | 
						|
            this.user.OrganizationName = 'ZhiZhun'
 | 
						|
          }
 | 
						|
          if (this.user.Id) {
 | 
						|
            updateUser(this.user).then(res => {
 | 
						|
              this.isDisabled = false
 | 
						|
              this.$message.success('Updated successfully')
 | 
						|
            }).catch(() => { this.isDisabled = false })
 | 
						|
          } else {
 | 
						|
            addUser(this.user).then(res => {
 | 
						|
              this.isDisabled = false
 | 
						|
              this.$emit('getUserId', res.Result.Id)
 | 
						|
              this.$message.success('Added successfully')
 | 
						|
            }).catch(() => { this.isDisabled = false })
 | 
						|
          }
 | 
						|
        }
 | 
						|
      })
 | 
						|
    },
 | 
						|
    getUserInfo() {
 | 
						|
      getUser(this.userId).then(res => {
 | 
						|
        this.user = res.Result
 | 
						|
        // res.Result.OrganizationTypeId !== '00000000-0000-0000-0000-000000000000' ? this.getOrgnizationList(res.Result.OrganizationTypeId) : this.user.OrganizationTypeId = ''
 | 
						|
      })
 | 
						|
    },
 | 
						|
    getUserTypeList() {
 | 
						|
      getUserTypeList().then(res => {
 | 
						|
        if (res.IsSuccess) {
 | 
						|
          this.userTypeOptions = res.Result
 | 
						|
        }
 | 
						|
      })
 | 
						|
    },
 | 
						|
    handelOrgnizationTypeChange(val) {
 | 
						|
      if (val) {
 | 
						|
        this.user.OrganizationId = ''
 | 
						|
        this.getOrgnizationList(val)
 | 
						|
      }
 | 
						|
    },
 | 
						|
    getOrgnizationList(OrganizationTypeId) {
 | 
						|
      getInstitutionList(OrganizationTypeId).then(res => {
 | 
						|
        if (res.IsSuccess) {
 | 
						|
          this.OrganizationOptions = res.Result
 | 
						|
        }
 | 
						|
      })
 | 
						|
    },
 | 
						|
    async initPage() {
 | 
						|
      this.userId === '' ? await store.dispatch('user/getInfo') : ''
 | 
						|
 | 
						|
      if (this.userId === '') {
 | 
						|
        await store.dispatch('user/getInfo')
 | 
						|
      }
 | 
						|
      this.getUserInfo()
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
</script>
 |