字段配置类型名修改
笑笑 编写于 2023-04-26 22:42:15
NewLife.CubeVue
<template>
  <el-tabs v-model="activeName">
    <el-tab-pane label="基本信息" name="UserInfo">
      <div class="objform">
        <el-form
          label-position="right"
          label-width="120px"
          ref="form"
          :model="form"
        >
          <el-form-item label="头像" prop="avatar">
            <img
              v-if="form.avatar"
              style="height: 100px; width: 100px"
              :src="$store.getters.urls.baseUrl + form.avatar"
            />
          </el-form-item>
          <el-form-item label="名称" prop="name">
            <el-input v-model="form.name" disabled></el-input>
          </el-form-item>
          <el-form-item label="显示名" prop="displayName">
            <el-input v-model="form.displayName"></el-input>
          </el-form-item>
          <el-form-item label="性别" prop="sex">
            <el-select v-model="form.sex" filterable>
              <el-option :key="0" label="未知" :value="0"></el-option>
              <el-option :key="1" label="男" :value="1"></el-option>
              <el-option :key="2" label="女" :value="-1"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="邮箱" prop="mail">
            <el-input v-model="form.mail"></el-input>
          </el-form-item>
          <el-form-item label="手机" prop="mobile">
            <el-input v-model="form.mobile"></el-input>
          </el-form-item>
          <el-form-item label="代码" prop="code">
            <el-input v-model="form.code"></el-input>
          </el-form-item>
          <el-form-item label="角色" prop="name">
            <span>{{ form.roleNames }}</span>
          </el-form-item>
          <el-form-item label="登录次数" prop="name">
            <span>{{ form.logins }}</span>
          </el-form-item>
          <el-form-item label="最后登录时间" prop="name">
            <span>{{ form.lastLogin }}</span>
          </el-form-item>
          <el-form-item label="最后登录IP" prop="name">
            <span>{{ form.lastLoginIP }}</span>
          </el-form-item>

          <el-form-item prop label-name>
            <div
              style="
                position: fixed;
                margin: 30px;
                float: right;
                bottom: 0px;
                right: 0px;
                z-index: 1;
              "
            >
              <el-button type="primary" @click="confirm">保存</el-button>
            </div>
          </el-form-item>
        </el-form>
      </div>
    </el-tab-pane>
    <el-tab-pane label="修改密码" name="ChangePassword">
      <div class="objform">
        <el-form
          label-position="right"
          label-width="120px"
          ref="form2"
          :model="form2"
        >
          <el-form-item label="旧密码" prop="oldPassword">
            <el-input type="password" v-model="form2.oldPassword"></el-input>
          </el-form-item>
          <el-form-item label="新密码" prop="newPassword">
            <el-input type="password" v-model="form2.newPassword"></el-input>
          </el-form-item>
          <el-form-item label="确认密码" prop="newPassword2">
            <el-input type="password" v-model="form2.newPassword2"></el-input>
          </el-form-item>
          <el-form-item prop label-name>
            <div
              style="
                position: fixed;
                margin: 30px;
                float: right;
                bottom: 0px;
                right: 0px;
                z-index: 1;
              "
            >
              <el-button type="primary" @click="confirm2">保存</el-button>
            </div>
          </el-form-item>
        </el-form>
      </div>
    </el-tab-pane>
    <el-tab-pane label="第三方授权" name="OAuthConfig">3</el-tab-pane>
  </el-tabs>
</template>

<script lang="ts">
import { defineComponent } from 'vue';
export default defineComponent({
  props: ['path'],
  data() {
    return {
      form: {} as any,
      form2: {} as any,
      properties: [],
      activeName: 'UserInfo',
    };
  },
  computed: {
    currentPath() {
      return this.path;
    },
  },
  watch: {
    $route: {
      handler() {
        this.init();
      },
      immediate: true,
    },
  },
  methods: {
    init() {
      this.query();
    },
    query() {
      const vm = this as any;
      vm.$api.user.getUserInfo().then((resp: any) => {
        const data = resp.data;
        // 设置用户信息,本页修改信息后再掉此方法刷新
        vm.$store.dispatch('setUserInfo', data);
        vm.form = data;
      });
    },
    confirm() {
      let vm = this as any;
      vm.$api.user.updateUserInfo(vm.form).then(() => {
        const msg = '保存成功';

        vm.$message({
          message: msg,
          type: 'success',
          duration: 3 * 1000,
        });

        // 刷新用户信息
        vm.query();
      });
    },
    confirm2() {
      let vm = this as any;
      vm.$api.user.changePassword(vm.form2).then(() => {
        const msg = '保存成功';

        vm.$message({
          message: msg,
          type: 'success',
          duration: 3 * 1000,
        });

        vm.form2 = {};
      });
    },
  },
});
</script>

<style scoped>
.objform {
  max-height: -moz-calc(100vh - 200px);
  max-height: -webkit-calc(100vh - 200px);
  max-height: calc(100vh - 200px);
  overflow: auto;
  box-shadow: 1px 1px 4px rgb(0 21 41 / 8%);
}

.objform h2 {
  margin: 35px 0;
}

.el-input,
.el-switch {
  width: 380px;
  margin-right: 15px;
}
</style>