index.vue 8.76 KB
<template>
  <div>
    <back-box>
      <template slot="title">
        <span>个人信息</span>
      </template>
    </back-box>
    <div class="page-content">
      <div class="content-box">
        <i class="el-icon-edit" @click="diaSchool = true"></i>
        <i class="el-icon-key" @click="diaPass = true"></i>
        <ul class="school-info">
          <li class="school-item">
            <span class="s1">学校名称:</span>
            <span class="s2">{{ Info.tenantName || "--" }}</span>
          </li>
          <li class="school-item">
            <span class="s1">教师姓名:</span>
            <span class="s2">{{ Info.contactPerson || "--" }}</span>
          </li>
          <li class="school-item">
            <span class="s1">手机号码:</span>
            <span class="s2">{{ Info.contactPhone || "--" }}</span>
          </li>
        </ul>
      </div>
    </div>
    <el-dialog :close-on-click-modal="false" title="修改个人信息" :visible.sync="diaSchool" width="400">
      <el-form
        ref="formSchool"
        class="form-box"
        :model="formSchool"
        :rules="rulesSchool"
        label-width="160px"
      >
        <el-form-item label="学校名称:" prop="tenantName"
          ><el-col :span="10"
            ><el-input
              maxlength="30"
              v-model="formSchool.tenantName"
              placeholder="请输入教师姓名"
            ></el-input></el-col
        ></el-form-item>
        <el-form-item label="教师姓名:" prop="contactPerson"
          ><el-col :span="10"
            ><el-input
              maxlength="30"
              v-model="formSchool.contactPerson"
              placeholder="请输入教师姓名"
            ></el-input></el-col
        ></el-form-item>
        <el-form-item label="手机号码:" prop="contactPhone"
          ><el-col :span="10"
            ><el-input
              v-model="formSchool.contactPhone"
              type="number"
              oninput="if(value.length > 11) value = value.slice(0,11)"
              placeholder="请输入教师姓名手机号码"
            ></el-input></el-col
        ></el-form-item>
      </el-form>
      <div class="dialog-footer" slot="footer">
        <el-button @click="editSchool">确 定</el-button>
        <el-button @click="diaSchool = false">取 消</el-button>
      </div>
    </el-dialog>
    <el-dialog :close-on-click-modal="false" title="修改密码" :visible.sync="diaPass" width="400">
      <el-form
        ref="formPass"
        class="form-box"
        :model="password"
        :rules="rulesPassword"
        label-width="160px"
      >
        <el-form-item label="旧密码:" prop="oldPassword"
          ><el-col :span="10"
            ><el-input
              maxlength="30"
              v-model="password.oldPassword"
              placeholder="请输入密码"
              show-password
            ></el-input></el-col
        ></el-form-item>
        <el-form-item label="新密码:" prop="password"
          ><el-col :span="10"
            ><el-input
              maxlength="30"
              v-model="password.password"
              placeholder="请输入新密码"
              show-password
            ></el-input></el-col
        ></el-form-item>
        <el-form-item label="确认密码:" prop="resetPassword"
          ><el-col :span="10"
            ><el-input
              maxlength="30"
              v-model="password.resetPassword"
              placeholder="请输入新密码"
              show-password
            ></el-input></el-col
        ></el-form-item>
      </el-form>
      <div class="dialog-footer" slot="footer">
        <el-button @click="editPass">确 定</el-button>
        <el-button @click="diaPass = false">取 消</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import { downloadFile, encryptLoginPassword } from "@/utils";
export default {
  data() {
    return {
      loading: false,
      diaSchool: false,
      diaPass: false,
      Info: {
        tenantName: "",
        contactPerson: "",
        contactPhone: "",
        sections: "",
      },
      password: {
        oldPassword: "",
        password: "",
        resetPassword: "",
      },
      rulesPassword: {
        oldPassword: [
          { required: true, message: "请输入旧密码", trigger: "blur" },
        ],
        password: [
          { required: true, message: "请输入新密码", trigger: "blur" },
        ],
        resetPassword: [
          { required: true, message: "请输入新密码", trigger: "blur" },
        ],
      },
      tableData: [],
      formSchool: {
        tenantName: "",
        contactPerson: "",
        contactPhone: "",
      },
      rulesSchool: {},
    };
  },
  created() {
    this._QueryData();
  },
  methods: {
    editSchool() {
      if (this.loading) {
        return;
      }
      this.$refs.formSchool.validate(async (valid) => {
        if (valid) {
          this.loading = true;
          let form = { ...this.formSchool };
          const { data, status, info } = await this.$request.modifyInfo({
            ...form,
          });
          this.loading = false;
          if (status === 0) {
            this.$message.success("修改成功~");
            this.diaSchool = false;
            this._QueryData();
          } else {
            this.$message.error(info);
          }
        } else {
          this.$message.error("数据有误,请检查!");
        }
      });
    },
    editPass() {
      if (this.loading) {
        return;
      }
      this.$refs.formPass.validate(async (valid) => {
        if (valid) {
          if (this.password.password != this.password.resetPassword) {
            this.$message.warning("两次输入密码不一致请检查!");
            return;
          }
          this.loading = true;
          const { data, status, info } = await this.$request.modifyInfo({
            oldPassword: encryptLoginPassword(this.password.oldPassword),
            password: encryptLoginPassword(this.password.password),
          });
          this.loading = false;
          if (status === 0) {
            this.$message.success("密码修改成功~");
            this.diaPass = false;
            const res = await this.$request.logout();
            this.$store.commit("setToken", "");
            this.$store.commit("setInfo", {});
            this.$store.commit("setRouters", []);
            this.$store.commit("resetTabnavBox");
            this.$router.push({
              path: "/login",
            });
          } else {
            this.$message.error(info);
          }
        } else {
          this.$message.error("数据有误,请检查!");
        }
      });
    },
    async _QueryData() {
      this.loading = true;
      const { data, status, info } = await this.$request.getInfo();
      this.loading = false;
      console.log(status);
      if (status === 0) {
        this.Info = { ...data };
        for (let key in this.formSchool) {
          this.formSchool[key] = data[key] || "";
        }
      } else {
        this.$message.error(info);
      }
    },
    async downExcel() {
      let data = await this.$request.downDevice({
        id: this.id,
      });
      if (data && !data.code) {
        let blob = new Blob([data], {
          type: "application/vnd.ms-excel;charset=utf-8",
        });
        downloadFile(`设备信息.xlsx`, blob);
      } else {
        this.$message.error(data.info);
      }
    },
  },
};
</script>

<style lang="scss" scoped>
.page-content {
  padding: 20px;
  .content-box {
    background: #f8f8f8;
    border-radius: 16px;
    position: relative;
    .el-icon-edit {
      position: absolute;
      top: 12px;
      right: 40px;
      padding: 5px;
      font-size: 18px;
      cursor: pointer;
      &:hover {
        color: #36f;
      }
    }
    .el-icon-key {
      position: absolute;
      top: 12px;
      right: 12px;
      padding: 5px;
      font-size: 18px;
      cursor: pointer;
      &:hover {
        color: #36f;
      }
    }
  }
  .school-info {
    display: flex;
    flex-wrap: wrap;
    padding: 16px 0;
    border-bottom: 0.5px solid #f2f2f2;
    .school-item {
      width: 50%;
      line-height: 48px;
      padding-left: 100px;
      display: flex;
      box-sizing: border-box;
      .s1 {
        width: 160px;
        font-size: 15px;
        color: #888;
      }
      .s2 {
        flex: 1;
      }
    }
  }
}
.form-box {
  margin: 0 20px;
  .subject-box {
    height: 90px;
    overflow: hidden;
    position: relative;
    &.active {
      height: auto;
      overflow: auto;
    }
    .showAll {
      position: absolute;
      bottom: 0;
      right: 10px;
      font-size: 12px;
      color: #7f7f7f;
      cursor: pointer;
      padding: 2px;
      &:hover {
        color: #667ffd;
      }
    }
  }
}
.el-icon-plus {
  cursor: pointer;
  &:hover {
    color: #667ffd;
  }
}
</style>