sunlupeng 1 vuosi sitten
vanhempi
commit
aa03a088d3

+ 18 - 4
src/api/login.js

@@ -58,12 +58,13 @@ export function socialLogin(type, code, state) {
 }
 
 // 修改密码 
-export function updatePassword( password ) {
+export function updatePassword( newPassword,confirmPassword ) {
   return request({
-    url: '/system/user/profile/update-password',
-    method: 'post',
+    url: '/system/user/profile/reset-password',
+    method: 'put',
     data:  {
-      password,
+      newPassword,
+      confirmPassword
     }
   })
 }
@@ -78,6 +79,19 @@ export function sendSmsCode(mobile, scene) {
     }
   })
 }
+
+
+// 短信验证码重置密码
+export function smsResetPassword(mobile, code) {
+  return request({
+    url: '/system/auth/sms-reset-password',
+    method: 'post',
+    data: {
+      mobile,
+      code
+    }
+  })
+}
 // 短信验证码注册
 export function smsRegister(mobile, code) {
   return request({

+ 17 - 1
src/store/modules/user.js

@@ -1,4 +1,4 @@
-import { login, logout, getInfo, socialLogin, smsLogin,smsRegister } from '@/api/login'
+import { login, logout, getInfo, socialLogin, smsLogin,smsRegister,smsResetPassword } from '@/api/login'
 import { setToken, removeToken } from '@/utils/auth'
 
 const user = {
@@ -84,6 +84,22 @@ const user = {
         })
       })
     },
+
+      // 短信重置密码
+      SmsResetPassword({ commit }, userInfo) {
+        const mobile = userInfo.mobile.trim()
+        const mobileCode = userInfo.mobileCode
+        return new Promise((resolve, reject) => {
+          smsResetPassword(mobile, mobileCode).then(res => {
+            res = res.data;
+            // 设置 token
+            setToken(res)
+            resolve()
+          }).catch(error => {
+            reject(error)
+          })
+        })
+      },
     // 短信注册
     SmsRegister({ commit }, userInfo) {
       const mobile = userInfo.mobile.trim()

+ 8 - 24
src/views/oa/entry/DataList.vue

@@ -55,24 +55,7 @@
 
     <!-- 添加或修改角色配置对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="角色名称" prop="name">
-          <el-input v-model="form.name" placeholder="请输入角色名称" />
-        </el-form-item>
-        <el-form-item label="角色标识" prop="code">
-          <el-input v-model="form.code" placeholder="请输入角色标识" />
-        </el-form-item>
-        <el-form-item label="角色顺序" prop="sort">
-          <el-input-number v-model="form.sort" controls-position="right" :min="0" />
-        </el-form-item>
-        <el-form-item label="备注">
-          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
-      </div>
+      <detail :id="id"></detail>
     </el-dialog>
   </div>
 </template>
@@ -80,23 +63,24 @@
 <script>
 import {
   addRole,
-  changeRoleStatus,
-  delRole,
+ 
   exportRole,
   getRole,
   listRole,
   updateRole
 } from "@/api/system/role";
-import {listSimpleMenus} from "@/api/system/menu";
-import {assignRoleMenu, listRoleMenus, assignRoleDataScope} from "@/api/system/permission";
-import {listSimpleDepts} from "@/api/system/dept";
 import {CommonStatusEnum, SystemDataScopeEnum} from "@/utils/constants";
 import {DICT_TYPE, getDictDatas} from "@/utils/dict";
+import detail from "./detail.vue";
 
 export default {
   name: "SystemRole",
+  components: {
+    detail
+  },
   data() {
     return {
+      id:'',
       // 遮罩层
       loading: true,
       // 导出遮罩层
@@ -170,7 +154,7 @@ export default {
       getRole(id).then(response => {
         this.form = response.data;
         this.open = true;
-        this.title = "详情";
+        this.title = "入职审批详情";
       });
     },
 

+ 42 - 34
src/views/oa/entry/detail.vue

@@ -1,51 +1,52 @@
 <template>
-  <div class="app-container">
-    <!-- 对话框(添加 / 修改) -->
-      <el-form ref="form" :model="form" label-width="100px">
-        <el-form-item label="开始时间:" prop="startTime"> {{parseTime(form.startTime, '{y}-{m}-{d}')}} </el-form-item>
-        <el-form-item label="结束时间:" prop="endTime"> {{parseTime(form.endTime, '{y}-{m}-{d}')}} </el-form-item>
-        <el-form-item label="请假类型:" prop="type">
-          <dict-tag :type="DICT_TYPE.BPM_OA_LEAVE_TYPE" :value="form.type"/>
-        </el-form-item>
-        <el-form-item label="原因:" prop="reason"> {{ form.reason }}</el-form-item>
-      </el-form>
+  <div class="container">
+    <el-form :model="form" label-position="top" label-width="80px">
+      <el-form-item label="入职人">
+        {{ form.loginName }}
+      </el-form-item>
+      <el-form-item label="部门">
+        {{ form.deptId }}
+      </el-form-item>
+      <el-form-item label="审批人">
+        <el-tag :key="tag" v-for="tag in peopleList" :disable-transitions="false">
+          {{ tag }}
+        </el-tag>
+
+      </el-form-item>
+      <el-form-item>
+        <el-button >修改</el-button>
+
+        <div style="float: right;">
+          <el-button >拒绝</el-button>
+          <el-button type="primary" >同意</el-button>
+        </div>
+       
+      </el-form-item>
+    </el-form>
   </div>
 </template>
 
 <script>
-import { getLeave }  from "@/api/bpm/leave"
-import {getDictDatas, DICT_TYPE} from '@/utils/dict'
+import { getLeave } from "@/api/bpm/leave"
 export default {
-  name: "BpmOALeaveDetail",
-  components: {
-  },
-  props: {
-    id: {
-      type: [String, Number],
-      default: undefined
-    },
-  },
   data() {
     return {
-      leaveId: undefined, // 请假编号
+      peopleList: ['林动','萧炎','叶凡'],
+      id: undefined, // 编号
       // 表单参数
       form: {
-        startTime: undefined,
-        endTime: undefined,
-        type: undefined,
-        reason: undefined,
+        name: '张三',
+        dept: '软件工程院',
       },
-
-      typeDictData: getDictDatas(DICT_TYPE.BPM_OA_LEAVE_TYPE),
     };
   },
   created() {
-    this.leaveId = this.id || this.$route.query.id;
-    if (!this.leaveId) {
-      this.$message.error('未传递 id 参数,无法查看 OA 请假信息');
-      return;
-    }
-    this.getDetail();
+    // this.leaveId = this.id || this.$route.query.id;
+    // if (!this.leaveId) {
+    //   this.$message.error('未传递 id 参数,无法查看 OA 请假信息');
+    //   return;
+    // }
+    // this.getDetail();
   },
   methods: {
     /** 获得请假信息 */
@@ -57,3 +58,10 @@ export default {
   }
 };
 </script>
+<style lang="scss" scoped>
+
+.el-tag+.el-tag {
+  margin-left: 10px;
+}
+
+</style>

+ 135 - 14
src/views/oa/entry/index.vue

@@ -10,11 +10,57 @@
             <div class="title">入职审批</div>
             <el-divider></el-divider>
             <el-form :model="form" label-position="top" label-width="80px">
-              <el-form-item label="入职员工姓名">
-                <el-input v-model="form.name" placeholder='给应用命名,例如‘‘客户管理系统’’'></el-input>
+              <el-form-item label="入职">
+                <el-input v-model="form.name" placeholder='请输入'></el-input>
               </el-form-item>
-              <el-form-item label="用人部门">
-                <el-input v-model="form.url" placeholder='应用访问地址,例如‘‘https://www.baidu.com/’’'></el-input>
+              <el-form-item label="部门">
+                <treeselect v-model="form.deptId" :options="deptOptions" :normalizer="normalizer" placeholder="选择部门" />
+              </el-form-item>
+              <el-form-item label="职位">
+                <el-select v-model="form.employeeType" placeholder="请选择">
+                  <el-option v-for="item in posOptions" :key="item.value" :label="item.label" :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="性别">
+                <el-select v-model="form.gender" placeholder="请选择">
+                  <el-option v-for="item in posOptions" :key="item.value" :label="item.label" :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="出生日期">
+                <el-date-picker v-model="form.birthday" type="date" placeholder="选择日期">
+                </el-date-picker>
+              </el-form-item>
+              <el-form-item label="联系电话">
+                <el-input v-model="form.contactNumber" placeholder='请输入'></el-input>
+              </el-form-item>
+              <el-form-item label="电子邮箱">
+                <el-input v-model="form.email" placeholder='请输入'></el-input>
+              </el-form-item>
+              <el-form-item label="教育背景">
+                <el-input v-model="form.education" placeholder='请输入'></el-input>
+              </el-form-item>
+              <el-form-item label="工作经验">
+                <el-input v-model="form.workExperience" placeholder='请输入'></el-input>
+              </el-form-item>
+              <el-form-item label="入职日期">
+                <el-date-picker v-model="form.startDate" type="date" placeholder="选择日期">
+                </el-date-picker>
+              </el-form-item>
+              <el-form-item label="附件">
+            <el-upload
+              action=""
+              ref="privateKeyContentFile"
+              :limit="1"
+              :accept="fileAccept"
+              :http-request="appCertUpload"
+              :before-upload="fileBeforeUpload">
+              <el-button size="small" type="primary" icon="el-icon-upload">点击上传</el-button>
+            </el-upload>
+          </el-form-item>
+              <el-form-item label="备注">
+                <el-input type="textarea" v-model="form.remarks" placeholder="请输入备注" />
               </el-form-item>
               <el-form-item label="审批人">
                 <el-button class="button-new-tag" @click="openPS">+ 添加</el-button>
@@ -22,7 +68,7 @@
                   @close="handleClose(tag)">
                   {{ tag }}
                 </el-tag>
-                
+
               </el-form-item>
               <el-form-item>
                 <el-button type="primary" @click="onSubmit()">提交</el-button>
@@ -54,39 +100,112 @@ import { getUnreadNotifyMessageList } from "@/api/system/notify/message";
 import Oabar from '../../../layout/components/Oabar.vue'
 import PeopleSelect from "@/components/PeopleSelect/index.vue";
 import DataList from "./DataList.vue";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import { listDept } from "@/api/system/dept";
 
 export default {
   name: 'Index',
   components: {
     Oabar,
     PeopleSelect,
-    DataList
+    DataList,
+    Treeselect
   },
   data() {
     return {
+      // 部门树选项
+      posOptions: [{
+        value: '选项1',
+        label: '黄金糕'
+      }, {
+        value: '选项2',
+        label: '双皮奶'
+      }, {
+        value: '选项3',
+        label: '蚵仔煎'
+      }, {
+        value: '选项4',
+        label: '龙须面'
+      }, {
+        value: '选项5',
+        label: '北京烤鸭'
+      }],
+      deptOptions: [],
       peopleList: [],
       form: {
-        name: '',
-        url: '',
+        name: undefined,
+        deptId: undefined,
+        position: undefined,
+        employeeType: undefined,
+        gender: undefined,
+        birthday: undefined,
+        contactNumber: undefined,
+        email: undefined,
+        education: undefined,
+        workExperience: undefined,
+        startDate: undefined,
+        remarks: undefined,
       },
       status: true,
 
       type: 'single',
       //是否打开选人组件,默认不打开
       peopleOpen: false,
+      fileAccept: ".crt",
+      queryParams: {
+        name: undefined,
+        status: undefined
+      },
     }
   },
 
   created() {
-
+    this.getList();
   },
   methods: {
+    fileBeforeUpload(file) {
+      let format = '.' + file.name.split(".")[1];
+      if (format !== this.fileAccept) {
+        this.$message.error('请上传指定格式"' + this.fileAccept + '"文件');
+        return false;
+      }
+      let isRightSize = file.size / 1024 / 1024 < 2
+      if (!isRightSize) {
+        this.$message.error('文件大小超过 2MB')
+      }
+      return isRightSize
+    },
+    appCertUpload(event) {
+      const readFile = new FileReader()
+      readFile.onload = (e) => {
+        this.formData.config.appCertContent = e.target.result
+      }
+      readFile.readAsText(event.file);
+    },
+    /** 查询部门列表 */
+    getList() {
+      listDept(this.queryParams).then(response => {
+        this.deptOptions = this.handleTree(response.data, "id");
+      });
+    },
+    /** 转换部门数据结构 */
+    normalizer(node) {
+      if (node.children && !node.children.length) {
+        delete node.children;
+      }
+      return {
+        id: node.id,
+        label: node.name,
+        children: node.children
+      };
+    },
     //提交
-    onSubmit(){
+    onSubmit() {
 
     },
     //暂存
-    onSave(){
+    onSave() {
 
     },
     // 关闭标签
@@ -140,16 +259,18 @@ export default {
     margin: 0 auto;
   }
 }
-.from-box{
+
+.from-box {
   padding: 20px 50px;
-  .title{
+
+  .title {
     font-weight: bold;
     font-size: 26px;
     margin-bottom: 20px;
   }
 }
 
-.dataList-box{
+.dataList-box {
   padding: 10px 40px;
 }
 

+ 16 - 35
src/views/password/forget.vue

@@ -26,10 +26,11 @@
                  </el-input>
                </el-form-item>
                <el-form-item>
-                 <el-button size="medium" type="primary" style="width:100%;"
-                 @click="submitForm('loginForm')">
-                  重置密码
-                 </el-button>
+                 <el-button :loading="loading" size="medium" type="primary" style="width:100%;"
+                  @click.native.prevent="submitForm('loginForm')">
+                  <span v-if="!loading">重置密码</span>
+                  <span v-else>操 作 中...</span>
+                </el-button>
                  <el-button style="margin-left: 0;margin-top: 10px;width: 100%;" type="text" @click="backLogin()">返回登录</el-button>
                </el-form-item>
            </el-form>
@@ -51,12 +52,6 @@ export default {
         mobileCode: "",
       },
       LoginRules: {
-        username: [
-          {required: true, trigger: "blur", message: "用户名不能为空"}
-        ],
-        password: [
-          {required: true, trigger: "blur", message: "密码不能为空"}
-        ],
         mobile: [
           {required: true, trigger: "blur", message: "手机号不能为空"},
           {
@@ -68,28 +63,10 @@ export default {
               }
             }, trigger: "blur"
           }
-        ],
-        tenantName: [
-          {required: true, trigger: "blur", message: "租户不能为空"},
-          {
-            validator: (rule, value, callback) => {
-              // debugger
-              getTenantIdByName(value).then(res => {
-                const tenantId = res.data;
-                if (tenantId && tenantId >= 0) {
-                  // 设置租户
-                  setTenantId(tenantId)
-                  callback();
-                } else {
-                  callback('租户不存在');
-                }
-              });
-            },
-            trigger: 'blur'
-          }
         ]
       },
       scene: 4,
+      loading: false,
     };
   },
   methods: {
@@ -116,12 +93,16 @@ export default {
     submitForm(formName) {
         this.$refs[formName].validate((valid) => {
           if (valid) {
-            alert('submit!');
-            this.$router.push({path: '/password/reset'})
-          } else {
-            console.log('error submit!!');
-            return false;
-          }
+          this.loading = true;
+          // 发起登陆
+          // console.log("发起登录", this.loginForm);
+          this.$store.dispatch("SmsResetPassword", this.loginForm).then(() => {
+            this.$router.push({ path: "/password/reset" }).catch(() => {
+            });
+          }).catch(() => {
+            this.loading = false;
+          });
+        }
         });
       },
   }

+ 3 - 3
src/views/register.vue

@@ -52,7 +52,7 @@
               <!-- 下方的下一步按钮 -->
               <el-form-item style="width:100%;">
                 <el-button :loading="loading" size="medium" type="primary" style="width:100%;"
-                  @click.native.prevent="getNext()">
+                  @click.native.prevent="handleRegister()">
                   <span v-if="!loading">注 册</span>
                   <span v-else>操 作 中...</span>
                 </el-button>
@@ -111,13 +111,13 @@ export default {
     doLogin() {
       this.$router.push({ path: '/login' })
     },
-    handleLogin() {
+    handleRegister() {
       this.$refs.loginForm.validate(valid => {
         if (valid) {
           this.loading = true;
           // 发起登陆
           // console.log("发起登录", this.loginForm);
-          this.$store.dispatch("SmsLogin", this.loginForm).then(() => {
+          this.$store.dispatch("SmsRegister", this.loginForm).then(() => {
             this.$router.push({ path: "/" }).catch(() => {
             });
           }).catch(() => {