소스 검색

前端-简历

armg 1 년 전
부모
커밋
a3e94276f0

+ 1 - 1
ruoyi-ui/.env.development

@@ -1,5 +1,5 @@
 # 页面标题
-VUE_APP_TITLE = 简历系统
+VUE_APP_TITLE = 智能简历
 
 # 开发环境配置
 ENV = 'development'

+ 3 - 2
ruoyi-ui/.env.production

@@ -1,8 +1,9 @@
 # 页面标题
-VUE_APP_TITLE = 简历系统
+VUE_APP_TITLE = 智能简历
 
 # 生产环境配置
 ENV = 'production'
 
 # 若依管理系统/生产环境
-VUE_APP_BASE_API = '/prod-api'
+# VUE_APP_BASE_API = '/prod-api'
+VUE_APP_BASE_API = 'http://47.103.79.143:8093'

BIN
ruoyi-ui/dist.zip


+ 3 - 2
ruoyi-ui/package.json

@@ -1,8 +1,8 @@
 {
   "name": "ruoyi",
   "version": "3.8.6",
-  "description": "若依管理系统",
-  "author": "若依",
+  "description": "智能简历管理系统",
+  "author": "智能简历",
   "license": "MIT",
   "scripts": {
     "dev": "vue-cli-service serve",
@@ -92,6 +92,7 @@
     "connect": "3.6.6",
     "eslint": "7.15.0",
     "eslint-plugin-vue": "7.2.0",
+    "html-webpack-plugin": "^5.6.0",
     "lint-staged": "10.5.3",
     "runjs": "4.4.2",
     "sass": "1.32.13",

+ 1 - 1
ruoyi-ui/src/App.vue

@@ -99,7 +99,7 @@ export default {
       } else {
         that.$router.push({
           path: that.redirect || "/",
-          query: { type: "admin", title: "爱思系统" },
+          query: { type: "admin", title: "智能简历" },
         });
       }
     },

+ 132 - 8
ruoyi-ui/src/assets/styles/public.scss

@@ -74,6 +74,11 @@
   justify-content: flex-end;
 }
 
+.public-flex-col-end {
+  display: flex;
+  align-items: flex-end;
+}
+
 .public-flex-column {
   display: flex;
   flex-direction: column;
@@ -403,8 +408,10 @@
   top: 0;
   left: 0;
   background: #f4f4f4;
+
   .van-nav-bar {
     background: #3f9dfc;
+
     .van-nav-bar__title,
     .van-nav-bar__text,
     .van-icon {
@@ -412,13 +419,130 @@
     }
   }
 }
-.mobileWrapper1{
-  .van-nav-bar {
-    background: #3f9dfc;
-    .van-nav-bar__title,
-    .van-nav-bar__text,
-    .van-icon {
-      color: white;
-    }
+
+.special-el-form {
+  margin-left: 30px;
+  display: flex;
+  flex-flow: wrap;
+  width: 95%;
+
+  h3 {
+    width: 100%;
+    margin-bottom: -10px;
+    font-weight: bold;
+  }
+
+  .el-form-item {
+    width: 50%;
+  }
+
+  .el-date-editor.el-input,
+  .el-select {
+    width: 100%;
+  }
+
+  .special-el-form-item {
+    width: 100% !important;
   }
+}
+
+.show_disabled {
+  background-color: #F5F7FA !important;
+  border-color: #E4E7ED !important;
+  // color: #C0C4CC;
+  pointer-events: none !important;
+  cursor: not-allowed !important;
+}
+
+.custom-blue-color {
+  color: #1890ff !important;
+}
+
+.custom-red-color {
+  color: #fd0e0e !important;
+}
+
+.custom-orange-color {
+  color: orange !important;
+}
+
+.el-upload-list__item {
+  transition: none !important;
+}
+
+.yichu1 {
+  text-overflow: -o-ellipsis-lastline;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  display: -webkit-box;
+  -webkit-line-clamp: 1;
+  line-clamp: 1;
+  -webkit-box-orient: vertical;
+}
+
+.yichu2 {
+  text-overflow: -o-ellipsis-lastline;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  line-clamp: 2;
+  -webkit-box-orient: vertical;
+}
+
+.tableWrapper {
+  .cell {
+    height: 30px !important;
+    line-height: 30px !important;
+  }
+
+  td.el-table__cell:not(:last-child) div {
+    text-overflow: -o-ellipsis-lastline;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: -webkit-box;
+    -webkit-line-clamp: 1;
+    line-clamp: 1;
+    -webkit-box-orient: vertical;
+  }
+}
+
+.searchWrapper {
+  margin-left: 22px;
+}
+
+.el-input.is-disabled .el-input__inner,
+.el-textarea.is-disabled .el-textarea__inner,
+.el-radio__input.is-disabled+span.el-radio__label {
+  color: #333 !important;
+}
+
+.public-input-height {
+  height: 36px;
+}
+
+.public-input-height-2 {
+  height: 72px;
+}
+
+.public-input-height-2 .inputSimulation {
+  height: 72px !important;
+
+}
+
+.public-input-height .inputSimulation {
+  height: 36px !important;
+}
+
+.public-text-blue {
+  color: #1890ff;
+}
+
+.public-cursor {
+  cursor: pointer !important;
+}
+
+.el-table .cell {
+  padding-left: 5px !important;
+  padding-right: 5px !important;
 }

+ 42 - 24
ruoyi-ui/src/components/Breadcrumb/index.vue

@@ -1,8 +1,12 @@
 <template>
   <el-breadcrumb class="app-breadcrumb" separator="/">
     <transition-group name="breadcrumb">
-      <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
-        <span v-if="item.redirect === 'noRedirect' || index == levelList.length - 1" class="no-redirect">{{ item.meta.title }}</span>
+      <el-breadcrumb-item v-for="(item, index) in levelList" :key="index+item.path">
+        <span
+          v-if="item.redirect === 'noRedirect' || index == levelList.length - 1"
+          class="no-redirect"
+          >{{ item.meta.title }}</span
+        >
         <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
       </el-breadcrumb-item>
     </transition-group>
@@ -13,51 +17,65 @@
 export default {
   data() {
     return {
-      levelList: null
-    }
+      levelList: null,
+    };
   },
   watch: {
     $route(route) {
       // if you go to the redirect page, do not update the breadcrumbs
-      if (route.path.startsWith('/redirect/')) {
-        return
+      if (route.path.startsWith("/redirect/")) {
+        return;
       }
-      this.getBreadcrumb()
-    }
+      this.getBreadcrumb();
+    },
   },
   created() {
-    this.getBreadcrumb()
+    this.getBreadcrumb();
   },
   methods: {
     getBreadcrumb() {
       // only show routes with meta.title
-      let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
-      const first = matched[0]
+      let matched = this.$route.matched.filter(
+        (item) => item.meta && item.meta.title
+      );
+      const first = matched[0];
 
+      // 取值-同步
+      let isMobileEnv = this.$store.state.app.isMobileEnv;
       if (!this.isDashboard(first)) {
         // matched = [{ path: '/index', meta: { title: '首页' }}].concat(matched)
-        matched = [{ path: '/', meta: { title: '首页' }}].concat(matched)
+        // matched = [{ path: '/', meta: { title: '首页' }}].concat(matched)
+        if (isMobileEnv) {
+          matched = [
+            { path: "/mobile/resume/index", meta: { title: "智能简历" } },
+          ].concat(matched);
+        } else {
+          matched = [
+            { path: "/system/resume/index", meta: { title: "智能简历" } },
+          ].concat(matched);
+        }
       }
-
-      this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
+      this.levelList = matched.filter(
+        (item) => item.meta && item.meta.title && item.meta.breadcrumb !== false
+      );
     },
     isDashboard(route) {
-      const name = route && route.name
+      const name = route && route.name;
       if (!name) {
-        return false
+        return false;
       }
-      return name.trim() === 'Index'
+      return name.trim() === "Index";
     },
     handleLink(item) {
-      const { redirect, path } = item
+      const { redirect, path } = item;
       if (redirect) {
-        this.$router.push(redirect)
-        return
+        this.$router.push(redirect);
+        return;
       }
-      this.$router.push(path)
-    }
-  }
-}
+      this.$router.push(path);
+    },
+  },
+};
 </script>
 
 <style lang="scss" scoped>

+ 4 - 4
ruoyi-ui/src/layout/components/Navbar.vue

@@ -6,7 +6,7 @@
     <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>
 
     <div class="right-menu">
-      <template v-if="device!=='mobile'">
+      <!-- <template v-if="device!=='mobile'">
         <search id="header-search" class="right-menu-item" />
         
         <el-tooltip content="源码地址" effect="dark" placement="bottom">
@@ -23,9 +23,9 @@
           <size-select id="size-select" class="right-menu-item hover-effect" />
         </el-tooltip>
 
-      </template>
+      </template> -->
 
-      <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
+      <!-- <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
         <div class="avatar-wrapper">
           <img :src="avatar" class="user-avatar">
           <i class="el-icon-caret-bottom" />
@@ -41,7 +41,7 @@
             <span>退出登录</span>
           </el-dropdown-item>
         </el-dropdown-menu>
-      </el-dropdown>
+      </el-dropdown> -->
     </div>
   </div>
 </template>

+ 22 - 4
ruoyi-ui/src/permission.js

@@ -11,13 +11,18 @@ NProgress.configure({ showSpinner: false })
 const whiteList = ['/login', '/register']
 
 router.beforeEach((to, from, next) => {
-  console.log("====",to, from)
+  console.log("====", to, from)
   NProgress.start()
   if (getToken()) {
     to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
     /* has token*/
     if (to.path === '/login') {
-      next({ path: '/' })
+      // next({ path: '/' })
+      if (store.state.app.isMobileEnv) {
+        next({ path: '/mobile/resume/index' })
+      } else {
+        next({ path: '/system/resume/index' })
+      }
       NProgress.done()
     } else {
       if (store.getters.roles.length === 0) {
@@ -40,11 +45,24 @@ router.beforeEach((to, from, next) => {
         }).catch(err => {
           store.dispatch('LogOut').then(() => {
             Message.error(err)
-            next({ path: '/' })
+            // next({ path: '/' })
+            if (store.state.app.isMobileEnv) {
+              next({ path: '/mobile/resume/index' })
+            } else {
+              next({ path: '/system/resume/index' })
+            }
           })
         })
       } else {
-        next()
+        if (to.path === "/") {
+          if (store.state.app.isMobileEnv) {
+            next({ path: '/mobile/resume/index' })
+          } else {
+            next({ path: '/system/resume/index' })
+          }
+        } else {
+          next()
+        }
       }
     }
   } else {

+ 22 - 16
ruoyi-ui/src/router/index.js

@@ -130,22 +130,22 @@ export const constantRoutes = [
     name: 'MobileResumeDetail',
     component: () => import('../views/mobile/resume/detail')
   },
-  {
-    // path: '/index',
-    path: '/',
-    component: Layout,
-    hidden: true,
-    redirect: 'index',
-    children: [
-      {
-        path: 'index',
-        component: () => import('@/views/index'),
-        name: 'Index',
-        hidden: true,
-        meta: { title: '首页', icon: 'dashboard' }//, affix: true 
-      }
-    ]
-  },
+  // {
+  //   // path: '/index',
+  //   path: '/',
+  //   component: Layout,
+  //   hidden: true,
+  //   redirect: 'index',
+  //   children: [
+  //     {
+  //       path: 'index',
+  //       component: () => import('@/views/index'),
+  //       name: 'Index',
+  //       hidden: true,
+  //       meta: { title: '首页', icon: 'dashboard' }//, affix: true 
+  //     }
+  //   ]
+  // },
   {
     path: '/user',
     component: Layout,
@@ -243,6 +243,12 @@ export const constantRoutes = [
     component: Layout,
     hidden: true,
     children: [
+      {
+        path: 'resume/index',
+        component: () => import('@/views/system/resume/index'),
+        name: 'Resume',
+        meta: { title: '简历管理', icon: 'dashboard' }
+      },
       {
         path: 'resume/add',
         component: () => import('@/views/system/resume/add'),

+ 1 - 1
ruoyi-ui/src/store/modules/app.js

@@ -2,7 +2,7 @@ import Cookies from 'js-cookie'
 
 const state = {
   sidebar: {
-    opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
+    opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : false,
     withoutAnimation: false,
     hide: false
   },

+ 55 - 49
ruoyi-ui/src/views/error/401.vue

@@ -5,84 +5,90 @@
     </el-button>
     <el-row>
       <el-col :span="12">
-        <h1 class="text-jumbo text-ginormous">
-          401错误!
-        </h1>
+        <h1 class="text-jumbo text-ginormous">401错误!</h1>
         <h2>您没有访问权限!</h2>
         <h6>对不起,您没有访问权限,请不要进行非法操作!您可以返回主页面</h6>
         <ul class="list-unstyled">
           <li class="link-type">
-            <router-link to="/">
-              回首页
-            </router-link>
+            <router-link to="/"> 回首页 </router-link>
           </li>
         </ul>
       </el-col>
       <el-col :span="12">
-        <img :src="errGif" width="313" height="428" alt="Girl has dropped her ice cream.">
+        <img
+          :src="errGif"
+          width="313"
+          height="428"
+          alt="Girl has dropped her ice cream."
+        />
       </el-col>
     </el-row>
   </div>
 </template>
 
 <script>
-import errGif from '@/assets/401_images/401.gif'
+import errGif from "@/assets/401_images/401.gif";
 
 export default {
-  name: 'Page401',
+  name: "Page401",
   data() {
     return {
-      errGif: errGif + '?' + +new Date()
-    }
+      errGif: errGif + "?" + +new Date(),
+    };
   },
   methods: {
     back() {
       if (this.$route.query.noGoBack) {
-        this.$router.push({ path: '/' })
+        // this.$router.push({ path: '/' })
+        if (this.$store.state.app.isMobileEnv) {
+          this.$router.push({ path: "/mobile/resume/index" });
+        } else {
+          this.$router.push({ path: "/system/resume/index" });
+        }
       } else {
-        this.$router.go(-1)
+        this.$router.go(-1);
       }
-    }
-  }
-}
+    },
+  },
+};
 </script>
 
 <style lang="scss" scoped>
-  .errPage-container {
-    width: 800px;
-    max-width: 100%;
-    margin: 100px auto;
-    .pan-back-btn {
-      background: #008489;
-      color: #fff;
-      border: none!important;
-    }
-    .pan-gif {
-      margin: 0 auto;
-      display: block;
-    }
-    .pan-img {
-      display: block;
-      margin: 0 auto;
-      width: 100%;
-    }
-    .text-jumbo {
-      font-size: 60px;
-      font-weight: 700;
-      color: #484848;
+.errPage-container {
+  width: 800px;
+  max-width: 100%;
+  margin: 100px auto;
+  .pan-back-btn {
+    background: #008489;
+    color: #fff;
+    border: none !important;
+  }
+  .pan-gif {
+    margin: 0 auto;
+    display: block;
+  }
+  .pan-img {
+    display: block;
+    margin: 0 auto;
+    width: 100%;
+  }
+  .text-jumbo {
+    font-size: 60px;
+    font-weight: 700;
+    color: #484848;
+  }
+  .list-unstyled {
+    font-size: 14px;
+    li {
+      padding-bottom: 5px;
     }
-    .list-unstyled {
-      font-size: 14px;
-      li {
-        padding-bottom: 5px;
-      }
-      a {
-        color: #008489;
-        text-decoration: none;
-        &:hover {
-          text-decoration: underline;
-        }
+    a {
+      color: #008489;
+      text-decoration: none;
+      &:hover {
+        text-decoration: underline;
       }
     }
   }
+}
 </style>

+ 1 - 1
ruoyi-ui/src/views/home.vue

@@ -3,7 +3,7 @@
     <el-button type="primary" plain @click="handleModuleJump('myTaskIndex', 'crm', 'CRM系统')">
       CRM系统
     </el-button>
-    <el-button type="primary" plain @click="handleModuleJump('Index', 'admin', '爱思系统')">
+    <el-button type="primary" plain @click="handleModuleJump('Index', 'admin', '智能简历')">
       系统管理
     </el-button>
 

+ 2 - 2
ruoyi-ui/src/views/login.vue

@@ -7,7 +7,7 @@
         :rules="loginRules"
         class="login-form"
       >
-        <h3 class="title">若依后台管理系统</h3>
+        <h3 class="title">智能简历后台管理系统</h3>
         <el-form-item prop="username">
           <el-input
             v-model="loginForm.username"
@@ -225,7 +225,7 @@ export default {
       } else {
         that.$router.push({
           path: that.redirect || "/",
-          query: { type: "admin", title: "爱思系统" },
+          query: { type: "admin", title: "智能简历" },
         });
       }
     },

+ 1 - 1
ruoyi-ui/src/views/mobile/resume/index.vue

@@ -2,7 +2,7 @@
   <div class="mobileWrapper">
     <div class="fixedTop">
       <van-nav-bar
-        title="简历系统"
+        title="智能简历"
         right-text="新增"
         v-preventReClick
         @click-right="onClickRight"

+ 1 - 1
ruoyi-ui/src/views/register.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="register">
     <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
-      <h3 class="title">若依后台管理系统</h3>
+      <h3 class="title">智能简历后台管理系统</h3>
       <el-form-item prop="username">
         <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
           <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />

+ 37 - 4
ruoyi-ui/src/views/system/resume/index.vue

@@ -74,13 +74,14 @@
           ></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="导入开始时间" prop="startTime" >
+      <el-form-item label="导入开始时间" prop="startTime">
         <el-date-picker
           clearable
           v-model="queryParams.startTime"
           type="date"
           value-format="yyyy-MM-dd"
           placeholder="请选择导入开始时间"
+          style="width: 211.1px"
         >
         </el-date-picker>
       </el-form-item>
@@ -92,6 +93,7 @@
           type="date"
           value-format="yyyy-MM-dd"
           placeholder="请选择导入结束时间"
+          style="width: 211.1px"
         >
         </el-date-picker>
       </el-form-item>
@@ -176,7 +178,8 @@
         prop="resumeId"
       >
         <template slot-scope="scope">
-          <span
+          <!-- class="text-blue" @click="getDetail(scope.row)" -->
+          <span 
             >{{ scope.row.userName }}|{{
               parseTime(scope.row.birthday, "{y}-{m}-{d}")
             }}|{{ scope.row.gender }} |{{ scope.row.experience }}|{{
@@ -230,6 +233,7 @@
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
+            class="custom-red-color"
             v-hasPermi="['system:resume:remove']"
             >删除</el-button
           >
@@ -244,6 +248,19 @@
       :limit.sync="queryParams.pageSize"
       @pagination="getList"
     />
+    <el-drawer
+      title="简历详情"
+      :before-close="handleClose"
+      :visible.sync="dialog"
+      direction="rtl"
+      custom-class="demo-drawer"
+      ref="drawer"
+      size="40%"
+    >
+      <div class="demo-drawer__content">
+        <el-form :model="form"> </el-form>
+      </div>
+    </el-drawer>
   </div>
 </template>
 
@@ -261,6 +278,7 @@ export default {
   name: "Resume",
   data() {
     return {
+      dialog: false,
       // 遮罩层
       loading: true,
       // 选中数组
@@ -340,10 +358,12 @@ export default {
       rules: {},
     };
   },
-  activated() {
+  // activated() {
+  //   this.getList();
+  // },
+  created() {
     this.getList();
   },
-  created() {},
   methods: {
     /** 查询简历管理列表 */
     getList() {
@@ -464,6 +484,19 @@ export default {
         `resume_${new Date().getTime()}.xlsx`
       );
     },
+    handleClose(done) {
+      this.dialog = false;
+    },
+    getDetail(row) {
+      this.dialog = true;
+      this.form = row;
+    },
   },
 };
 </script>
+<style scoped>
+.text-blue {
+  color: #1890ff;
+  cursor: pointer;
+}
+</style>

+ 3 - 2
ruoyi-ui/vue.config.js

@@ -7,7 +7,7 @@ function resolve(dir) {
 
 const CompressionPlugin = require('compression-webpack-plugin')
 
-const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题
+const name = process.env.VUE_APP_TITLE || '智能简历管理系统' // 网页标题
 
 const port = process.env.port || process.env.npm_config_port || 80 // 端口
 
@@ -37,7 +37,8 @@ module.exports = {
       [process.env.VUE_APP_BASE_API]: {
         // target: `http://localhost:8080`,
         // target: `http://192.168.100.234:8080`,//张继超本地
-        target: `http://192.168.100.229:8080`,//张洛飞本地
+        // target: `http://192.168.100.229:8080`,//张洛飞本地
+        target: `http://47.103.79.143:8093`,//
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''