yanliming vor 4 Jahren
Ursprung
Commit
8b030638ad

+ 14 - 1
src/api/job/recruitment.js

@@ -50,6 +50,19 @@ function batchRemove(idList){
   });
 }
 
+function offShelf(id){
+  return request.post(constant.serverUrl + "/job/recruitment/offShelf/" + id);
+}
+
+function batchOffShelf(idList){
+  return request.post(constant.serverUrl + "/job/recruitment/batchOffShelf",idList,{
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
 export default {
-  pageList,pageListHR,create,edit,add,update,remove,batchRemove,down
+  pageList,pageListHR,create,edit,add,update,remove,batchRemove,offShelf,batchOffShelf,down
+
 }

+ 3 - 3
src/api/job/resume.js

@@ -9,8 +9,8 @@ function create(){
   return request.get(constant.serverUrl + "/job/resume/create");
 }
 
-function edit(id){
-  return request.get(constant.serverUrl + "/job/resume/edit/" + id);
+function detail(id){
+  return request.get(constant.serverUrl + "/job/resume/detail/" + id);
 }
 
 function add(formModel){
@@ -46,5 +46,5 @@ function changeStatus(id){
 }
 
 export default {
-  pageList,create,edit,add,update,remove,batchRemove,changeStatus
+  pageList,create,detail,add,update,remove,batchRemove,changeStatus
 }

+ 94 - 306
src/views/job/recruitment-detail.vue

@@ -1,8 +1,31 @@
-
 <style scoped>
 .user-panel {
   margin: 10px auto;
 }
+.td_tit1 {
+  font-size:26px;
+  color: #000;
+  height: 50px;
+}
+.td_tit2 {
+  font-size:18px;
+  color: #000;
+  height: 50px;
+}
+.td_tit3 {
+  width: 70px;
+  height: 30px;
+}
+.td_con {
+  min-width:100px;
+  color: #000;
+  height: 30px;
+}
+.divider {
+  border-top:1px dashed #cccccc;
+  height: 1px;
+  overflow:hidden;
+}
 </style>
 <template>
   <el-dialog
@@ -14,336 +37,103 @@
     :close-on-click-modal="false"
   >
     <div class="user-panel" v-loading="loading">
-        <el-form
-            ref="form"
-            :model="formModel"
-            :rules="ruleValidate"
-            :label-width="'100px'"
-        >
-        <el-row>
-            <el-col :span="12">
-              <el-form-item label="企业" prop="companyId">
-                <el-select-tree
-                  :props="companyProps"
-                  :options="companyResult"
-                  v-model="formModel.companyId"
-                  style="width:300px;"
-                  size="mediumn"
-                ></el-select-tree>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="招聘地区" prop="area">
-                <el-select-tree
-                  :props="areaProps"
-                  :options="areaResult"
-                  v-model="formModel.area"
-                  style="width:300px;"
-                  size="mediumn"
-                ></el-select-tree>
-              </el-form-item>
-            </el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="12">
-              <el-form-item label="岗位" prop="title">
-                  <el-input
-                      v-model="formModel.title"
-                      placeholder="请输入岗位"
-                      style="width: 300px"
-                  ></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="岗位分类" prop="workCategoryId">
-                <el-select-tree
-                  :props="workCategoryProps"
-                  :options="workCategoryResult"
-                  v-model="formModel.workCategoryId"
-                  style="width:300px;"
-                  size="mediumn"
-                ></el-select-tree>
-              </el-form-item>
-            </el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="12">
-                <el-form-item label="招聘人数" prop="positionNumber">
-                    <el-input
-                        v-model="formModel.positionNumber"
-                        placeholder="请输入招聘人数"
-                        style="width: 300px"
-                    ></el-input>
-                </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="工作年限" prop="workYear">
-                <el-select v-model="formModel.workYear" filterable placeholder="请选择工作年限" style="width: 300px">
-                  <el-option v-for="workYear in workYearResult" :key="workYear.value" :label="workYear.name" :value="workYear.id"></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="12">
-                <el-form-item label="学历要求" prop="education">
-                    <el-select
-                    v-model="formModel.education"
-                    filterable
-                    placeholder="请选择学历要求"
-                    style="width: 300px"
-                    >
-                    <el-option
-                        v-for="education in educationResult"
-                        :key="education.value"
-                        :label="education.name"
-                        :value="education.id"
-                    ></el-option>
-                    </el-select>
-                </el-form-item>
-            </el-col>
-            <el-col :span="12">
-                <el-form-item label="性别要求" prop="positionSex">
-                    <el-select
-                    v-model="formModel.positionSex"
-                    filterable
-                    placeholder="请选择性别要求"
-                    style="width: 300px"
-                    >
-                    <el-option
-                        v-for="positionSex in positionSexResult"
-                        :key="positionSex.value"
-                        :label="positionSex.name"
-                        :value="positionSex.id"
-                    ></el-option>
-                    </el-select>
-                </el-form-item>
-            </el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="12">
-              <el-form-item label="薪资" prop="wageType">
-                <el-select v-model="formModel.wageType" filterable placeholder="请选择薪资" style="width:300px">
-                  <el-option v-for="wageType in wageTypeResult" :key="wageType.value" :label="wageType.name" :value="wageType.id"></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="地址" prop="address">
-                <el-input
-                    v-model="formModel.address"
-                    placeholder="请输入地址"
-                    style="width: 300px"
-                ></el-input>
-              </el-form-item>
-            </el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="12">
-                <el-form-item label="岗位描述" prop="positionMessage">
-                    <el-input
-                        type="textarea"
-                        :rows="4"
-                        v-model="formModel.positionMessage"
-                        placeholder="请输入岗位描述"
-                        style="width: 300px"
-                    ></el-input>
-                </el-form-item>
-            </el-col>
-            <el-col :span="12">
-                <el-form-item label="任职要求" prop="requirements">
-                    <el-input
-                        type="textarea"
-                        :rows="4"
-                        v-model="formModel.requirements"
-                        placeholder="请输入任职要求"
-                        style="width: 300px"
-                    ></el-input>
-                </el-form-item>
-            </el-col>
-        </el-row>
-      </el-form>
+      <table style="width:100%;" border="0" cellpadding="0" cellspacing="0">
+        <tr>
+          <td style="width:70%; padding-right:40px;">
+            <table style="width:100%;" border="0" cellpadding="0" cellspacing="0">
+              <tr>
+                <td class="td_tit1" style="padding-bottom:10px">{{formModel.title}}</td>
+                <td class="td_tit1" style="text-align:right;color:#ff0000">{{formModel.wageTypeName}}</td>
+              </tr>
+              <tr>
+                <td colspan="2" class="td_tit3" style="padding-bottom:30px">
+                  <el-tag size="medium" type="info">五险一金</el-tag>&nbsp;
+                  <el-tag size="medium" type="info">交通补助</el-tag>&nbsp;
+                </td>
+              </tr>
+              <tr>
+                <td colspan="2" class="td_tit3">{{formModel.requirements}}</td>
+              </tr>
+              <tr>
+                <td colspan="2" class="td_tit3" style="padding-bottom:10px">{{formModel.address}}</td>
+              </tr>
+              <tr>
+                <td colspan="2" class="divider"></td>
+              </tr>
+              <tr>
+                <td colspan="2" class="td_tit2" style="padding-top:10px">职位描述</td>
+              </tr>
+              <tr>
+                <td colspan="2" class="td_con">{{formModel.positionMessage}}</td>
+              </tr>
+              <tr>
+                <td v-if="formModel.updateTime != null" colspan="2" class="td_con" style="padding-top:40px">
+                  更新:{{formModel.updateTime}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                  浏览:{{formModel.readingTimes}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                  收藏:{{formModel.collectionTimes}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                  投递:{{formModel.deliveryTimes}}
+                </td>
+                <td v-else colspan="2" class="td_con" style="padding-top:40px">
+                  更新:{{formModel.createTime}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                  浏览:{{formModel.readingTimes}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                  收藏:{{formModel.collectionTimes}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                  投递:{{formModel.deliveryTimes}}
+                </td>
+              </tr>
+            </table>
+          </td>
+          <td style="padding-left:20px; border-left:1px dashed #cccccc;" valign="top">
+            <table style="width:100%;" border="0" cellpadding="0" cellspacing="0">
+              <tr>
+                <td colspan="2" class="td_tit2" style="padding-bottom:10px">{{formModel.companyName}}</td>
+              </tr>
+              <tr>
+                <td class="td_con">{{formModel.companyIndustryN}} | {{formModel.companyScaleN}}</td>
+                <td rowspan="2" align="right" valign="top">
+                    <el-avatar :size="56" shape="square" :src="formModel.companyLogo+'?x-oss-process=image/resize,m_fill,w_64,h_64'"></el-avatar>
+                </td>
+              </tr>
+              <tr>
+                <td class="td_con">
+                  <el-tag size="medium">企业已认证</el-tag>&nbsp;
+                </td>
+              </tr>
+              <tr>
+                <td colspan="2" class="td_con" style="padding-top:30px">{{formModel.address}}</td>
+              </tr>
+            </table>
+          </td>
+        </tr>
+      </table>
     </div>
     <span slot="footer" class="dialog-footer">
-      <el-button @click="closeDialog">取 消</el-button>
-      <el-button type="primary" @click="handleSubmit" :loading="submitting">确 定</el-button>
+      <el-button @click="closeDialog">关 闭</el-button>
     </span>
   </el-dialog>
 </template>
 <script>
-import Constant from "@/constant";
 import recruitmentApi from "@/api/job/recruitment";
-import dataDictionaryApi from "@/api/sys/dataDictionary";
-import cityApi from "@/api/base/city";
-import companyApi from "@/api/base/company";
-import workCategoryApi from "@/api/job/workCategory";
-import SelectTree from "@/components/SelectTree";
 
 export default {
   props: ["businessKey", "title"],
   data() {
     return {
       formModel: {},
-      ruleValidate: {
-        wageType: [{ required: true, message: "薪资不能为空", trigger: "blur" }],
-        workCategoryId: [{ required: true, message: "岗位分类不能为空", trigger: "blur" }],
-        companyId: [{ required: true, message: "企业不能为空", trigger: "blur" }],
-        title: [{ required: true, message: "岗位不能为空", trigger: "blur" }],
-        area: [{ required: true, message: "招聘地区不能为空", trigger: "blur"}],
-        address: [{ required: true, message: "地址不能为空", trigger: "blur" }],
-        positionMessage: [{ required: true, message: "职位描述不能为空", trigger: "blur" }],
-        requirements: [{ required: true, message: "任职要求不能为空", trigger: "blur" }],
-        positionNumber: [{ required: true, message: "求职人数不能为空", trigger: "blur" }],
-        workYear: [{ required: true, message: "工作年限不能为空", trigger: "blur" }],
-        education: [{ required: true, message: "学历要求不能为空", trigger: "blur" }],
-        positionSex: [{ required: true, message: "性别要求不能为空", trigger: "blur" }],
-        contactPerson: [{ required: true, message: "联系人不能为空", trigger: "blur" }],
-        tel: [{ required: true, message: "联系方式不能为空", trigger: "blur" }],
-        status: [{ required: true, message: "状态(关闭,开启等)不能为空", trigger: "blur" }],
-      },
       showDialog: true,
       loading: false,
       submitting: false,
-      educationResult: [],
-      positionSexResult: [],
-      areaResult: [],
-      companyResult: [],
-      wageTypeResult: [],
-      workYearResult: [],
-      workCategoryResult: [],
-      areaProps: {
-        value: "id",
-        label: "cityName"
-      },
-      companyProps: {
-        value: "id",
-        label: "name"
-      },
-      workCategoryProps: {
-        value: "id",
-        label: "name"
-      },
     };
   },
-  created() {
-    dataDictionaryApi
-    .findByCatalogName({
-      catalogName: "学历",
-    })
-    .then((response) => {
-      var jsonData = response.data;
-      this.educationResult = jsonData.data;
-    });
-
-    dataDictionaryApi
-    .findByCatalogName({
-      catalogName: "性别",
-    })
-    .then((response) => {
-      var jsonData = response.data;
-      this.positionSexResult = jsonData.data;
-    });
-
-    dataDictionaryApi
-    .findByCatalogName({
-      catalogName: "月薪范围",
-    })
-    .then((response) => {
-      var jsonData = response.data;
-      this.wageTypeResult = jsonData.data;
-    });
-
-    dataDictionaryApi
-    .findByCatalogName({
-      catalogName: "工作经验",
-    })
-    .then((response) => {
-      var jsonData = response.data;
-      this.workYearResult = jsonData.data;
-    });
-
-    cityApi.list().then(response=>{
-      var jsonData = response.data;
-
-      if(jsonData.result){
-        this.areaResult = jsonData.data;
-      }
-      else{
-        this.$message.error(jsonData.message + "");
-      }
-    });
-
-    companyApi.list().then(response=>{
-      var jsonData = response.data;
-
-      if(jsonData.result){
-        this.companyResult = jsonData.data;
-      }
-      else{
-        this.$message.error(jsonData.message + "");
-      }
-    });
-
-    workCategoryApi.listSelectTree().then(response=>{
-      var jsonData = response.data;
-
-      if(jsonData.result){
-        this.workCategoryResult = jsonData.data;
-      }
-      else{
-        this.$message.error(jsonData.message + "");
-      }
-    });
-  },
   methods: {
     closeDialog() {
       this.$emit("close", false);
     },
-    handleSubmit() {
-      var self = this;
-
-      this.$refs["form"].validate((valid) => {
-        if (valid) {
-          (function () {
-            var id = self.formModel.id;
-
-            if (id == null || id.length == 0) {
-              return recruitmentApi.add(self.formModel);
-            } else {
-              return recruitmentApi.update(self.formModel);
-            }
-          })().then(function (response) {
-            var jsonData = response.data;
-
-            if (jsonData.result) {
-              self.$message({
-                message: "保存成功!",
-                type: "success",
-              });
-
-              self.$emit("close", true);
-            } else {
-              self.$message({
-                message: jsonData.message + "",
-                type: "warning",
-              });
-
-              self.$emit("close", false);
-            }
-          });
-        }
-      });
-    },
   },
   mounted: function () {
     var self = this;
 
     (function () {
-      if (self.businessKey.length == 0) {
-        return recruitmentApi.create();
-      } else {
         return recruitmentApi.edit(self.businessKey);
-      }
     })()
       .then((response) => {
         var jsonData = response.data;
@@ -351,6 +141,7 @@ export default {
 
         if (jsonData.result) {
           self.formModel = jsonData.data;
+          console.log(self.formModel);
         } else {
           self.$message.error(jsonData.message + "");
         }
@@ -359,8 +150,5 @@ export default {
         self.$message.error(error + "");
       });
   },
-  components: {
-    "el-select-tree": SelectTree
-  },
 };
 </script>

+ 150 - 97
src/views/job/recruitment-list.vue

@@ -20,24 +20,23 @@
       class="demo-form-inline"
     >
       <el-form-item label="企业" prop="companyId">
-        <el-input
-          type="text"
-          size="mini"
-          v-model="queryModel.companyId"
-        ></el-input>
-      </el-form-item>
-      <el-form-item label="标题" prop="title">
-        <el-input type="text" size="mini" v-model="queryModel.title"></el-input>
+        <el-select-tree :props="companyProps" :options="companyResult" v-model="queryModel.companyId" size="mini"></el-select-tree>
       </el-form-item>
       <el-form-item label="招聘所属地区" prop="area">
-        <el-input type="text" size="mini" v-model="queryModel.area"></el-input>
+        <el-select-tree :props="areaProps" :options="areaResult" v-model="queryModel.area" size="mini"></el-select-tree>
       </el-form-item>
-      <el-form-item label="审批状态" prop="approveStatus">
-        <el-input
-          type="text"
-          size="mini"
-          v-model="queryModel.approveStatus"
-        ></el-input>
+      <el-form-item label="招聘岗位" prop="position">
+        <el-select-tree :props="positionProps" :options="positionResult" v-model="queryModel.position" size="mini"></el-select-tree>
+      </el-form-item>
+      <el-form-item label="招聘信息状态" prop="status">
+        <el-select v-model="queryModel.status" filterable placeholder="请选择" size="mini">
+          <el-option v-for="status in statusResult" :key="status.id" :label="status.name" :value="status.value"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="审核状态" prop="approveStatus">
+        <el-select v-model="queryModel.approveStatus" filterable placeholder="请选择" size="mini">
+          <el-option v-for="approveStatus in approveStatusResult" :key="approveStatus.id" :label="approveStatus.name" :value="approveStatus.value"></el-option>
+        </el-select>
       </el-form-item>
       <el-form-item>
         <el-button
@@ -59,32 +58,10 @@
     </el-form>
     <el-divider></el-divider>
     <el-row class="button-group">
-      <el-button
-        type="primary"
-        size="small"
-        plain
-        icon="el-icon-circle-plus"
-        @click="handleAdd"
-        >新增</el-button
-      >
-      <el-button
-        type="primary"
-        size="small"
-        plain
-        icon="el-icon-circle-plus"
-        :disabled="multipleSelection.length == 0"
-        @click="handleBatchDelete"
-        >删除选中项</el-button
-      >
+      <el-button type="primary" size="small" plain icon="el-icon-remove" :disabled="multipleSelection.length == 0" @click="handleBatchOffShelf">批量下架</el-button>
+      <el-button type="primary" size="small" plain icon="el-icon-error" :disabled="multipleSelection.length == 0" @click="handleBatchDelete">批量删除</el-button>
     </el-row>
-    <el-table
-      :data="tableData"
-      style="min-height: 400px"
-      v-loading="loading"
-      stripe
-      @sort-change="sortChange"
-      @selection-change="handleSelectionChange"
-    >
+    <el-table :data="tableData" style="min-height: 400px" v-loading="loading" stripe @sort-change="sortChange" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55"></el-table-column>
       <el-table-column prop="companyName" label="企业" width="180"></el-table-column>
       <el-table-column prop="title" label="岗位" width="180"></el-table-column>
@@ -94,10 +71,11 @@
       <el-table-column prop="wageTypeName" label="薪资" width="180"></el-table-column>
       <el-table-column prop="contactPerson" label="联系人" width="180"></el-table-column>
       <el-table-column prop="tel" label="联系方式" width="180"></el-table-column>
-      <el-table-column label="操作">
+      <el-table-column label="操作" width="150" fixed="right">
         <template slot-scope="{row}">
-          <el-button size="mini" type="warning" @click="handleEdit(row)">编辑</el-button>
-          <el-button size="mini" type="danger" @click="handleDelete(row)">删除</el-button>
+          <el-button v-if="row.status == 1" size="mini" type="text" @click="handleOffShelf(row)">下架</el-button>
+          <el-button size="mini" type="text" @click="handleDetail(row)">查看详情</el-button>
+          <el-button size="mini" type="text" @click="handleDelete(row)">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -120,7 +98,12 @@
 <script>
 import Constant from "@/constant";
 import RecruitmentDetail from "./recruitment-detail";
+import dataDictionaryApi from "@/api/sys/dataDictionary";
 import recruitmentApi from "@/api/job/recruitment";
+import companyApi from "@/api/base/company";
+import cityApi from "@/api/base/city";
+import workCategoryApi from "@/api/job/workCategory";
+import SelectTree from "@/components/SelectTree";
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
 
@@ -130,33 +113,11 @@ export default {
 
     return {
       queryModel: {
-        id: "",
         companyId: "",
-        title: "",
         area: "",
-        address: "",
         position: "",
-        positionMessage: "",
-        requirements: "",
-        positionNumber: "",
-        workYear: "",
-        education: "",
-        positionSex: "",
-        readTimes: "",
-        wageType: "",
-        isDiscussPersonally: "",
-        contactPerson: "",
-        tel: "",
         status: "",
-        approveStatus: "",
-        readingTimes: "",
-        collectionTimes: "",
-        deliveryTimes: "",
-        createBy: "",
-        createTime: "",
-        updateBy: "",
-        updateTime: "",
-        delFlag: "",
+        approveStatus: ""
       },
       loading: false,
       tableData: [],
@@ -171,8 +132,77 @@ export default {
       showModal: false,
       modalTitle: "",
       businessKey: "",
+      companyResult: [],
+      companyProps: {
+        value: "id",
+        label: "name"
+      },
+      areaResult: [],
+      areaProps: {
+        value: "id",
+        label: "cityName"
+      },
+      positionResult: [],
+      positionProps: {
+        value: "id",
+        label: "name"
+      },
+      statusResult: [],
+      approveStatusResult: [],
     };
   },
+  created() {
+    dataDictionaryApi
+    .findByCatalogName({
+      catalogName: "招聘信息状态",
+    })
+    .then((response) => {
+      var jsonData = response.data;
+      this.statusResult = jsonData.data;
+    });
+
+    dataDictionaryApi
+    .findByCatalogName({
+      catalogName: "招聘审批状态",
+    })
+    .then((response) => {
+      var jsonData = response.data;
+      this.approveStatusResult = jsonData.data;
+    });
+
+    companyApi.list().then(response=>{
+      var jsonData = response.data;
+
+      if(jsonData.result){
+        this.companyResult = jsonData.data;
+      }
+      else{
+        this.$message.error(jsonData.message + "");
+      }
+    });
+
+    cityApi.list().then(response=>{
+      var jsonData = response.data;
+
+      if(jsonData.result){
+        this.areaResult = jsonData.data;
+      }
+      else{
+        this.$message.error(jsonData.message + "");
+      }
+    });
+
+    workCategoryApi.listSelectTree().then(response=>{
+      var jsonData = response.data;
+
+      if(jsonData.result){
+        this.positionResult = jsonData.data;
+      }
+      else{
+        this.$message.error(jsonData.message + "");
+      }
+    });
+  },
   methods: {
     changePage(pageIndex) {
       var self = this;
@@ -185,36 +215,11 @@ export default {
       formData.append("pageIndex", self.pageIndex);
       formData.append("pageSize", self.pageSize);
 
-      formData.append("id", self.queryModel.id);
       formData.append("companyId", self.queryModel.companyId);
-      formData.append("title", self.queryModel.title);
       formData.append("area", self.queryModel.area);
-      formData.append("address", self.queryModel.address);
       formData.append("position", self.queryModel.position);
-      formData.append("positionMessage", self.queryModel.positionMessage);
-      formData.append("requirements", self.queryModel.requirements);
-      formData.append("positionNumber", self.queryModel.positionNumber);
-      formData.append("workYear", self.queryModel.workYear);
-      formData.append("education", self.queryModel.education);
-      formData.append("positionSex", self.queryModel.positionSex);
-      formData.append("readTimes", self.queryModel.readTimes);
-      formData.append("wageType", self.queryModel.wageType);
-      formData.append(
-        "isDiscussPersonally",
-        self.queryModel.isDiscussPersonally
-      );
-      formData.append("contactPerson", self.queryModel.contactPerson);
-      formData.append("tel", self.queryModel.tel);
       formData.append("status", self.queryModel.status);
       formData.append("approveStatus", self.queryModel.approveStatus);
-      formData.append("readingTimes", self.queryModel.readingTimes);
-      formData.append("collectionTimes", self.queryModel.collectionTimes);
-      formData.append("deliveryTimes", self.queryModel.deliveryTimes);
-      formData.append("createBy", self.queryModel.createBy);
-      formData.append("createTime", self.queryModel.createTime);
-      formData.append("updateBy", self.queryModel.updateBy);
-      formData.append("updateTime", self.queryModel.updateTime);
-      formData.append("delFlag", self.queryModel.delFlag);
 
       if (this.field != null) {
         formData.append("field", this.field);
@@ -259,12 +264,7 @@ export default {
     handleReset(name) {
       this.$refs[name].resetFields();
     },
-    handleAdd() {
-      this.modalTitle = "新增";
-      this.businessKey = "";
-      this.showModal = true;
-    },
-    handleEdit(record) {
+    handleDetail(record) {
       this.modalTitle = "编辑";
       this.businessKey = record.id;
       this.showModal = true;
@@ -329,12 +329,65 @@ export default {
         this.changePage(this.pageIndex);
       }
     },
+    handleOffShelf(record) {
+      var self = this;
+
+      self
+        .$confirm("是否确认下架?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        })
+        .then(() => {
+          recruitmentApi.offShelf(record.id).then(function (response) {
+            var jsonData = response.data;
+
+            if (jsonData.result) {
+              // var index = self.tableData.indexOf(record);
+              // self.tableData.splice(index, 1);
+              self.changePage(self.pageIndex);
+
+              self.$message({
+                type: "success",
+                message: "下架成功!",
+              });
+            }
+          });
+        });
+    },
+    handleBatchOffShelf() {
+      var self = this;
+
+      var idList = this.multipleSelection.map((record) => {
+        return record.id;
+      });
+
+      this.$confirm("是否确认下架选中项?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        recruitmentApi.batchOffShelf(idList).then(function (response) {
+          var jsonData = response.data;
+
+          if (jsonData.result) {
+            self.changePage(self.pageIndex);
+
+            self.$message({
+              type: "success",
+              message: "下架成功!",
+            });
+          }
+        });
+      });
+    },
   },
   mounted: function () {
     this.changePage(1);
   },
   components: {
     "recruitment-detail": RecruitmentDetail,
+    "el-select-tree": SelectTree
   },
 };
 </script>

+ 161 - 269
src/views/job/resume-detail.vue

@@ -1,165 +1,162 @@
-
 <style scoped>
 .user-panel {
   margin: 10px auto;
 }
+.td_tit1 {
+  font-size:22px;
+  color: #000;
+  height: 50px;
+}
+.td_tit2 {
+  font-size:16px;
+  height: 40px;
+}
+.td_tit3 {
+  width: 70px;
+  height: 30px;
+}
+.td_con {
+  min-width:100px;
+  color: #000;
+}
+.divider {
+  border-top:1px dashed #cccccc;
+  height: 1px;
+  overflow:hidden;
+}
 </style>
 <template>
-  <el-dialog
-    :visible.sync="showDialog"
-    :title="title"
-    :modal-append-to-body="false"
-    style="text-align: left"
-    @close="closeDialog"
-    :close-on-click-modal="false"
-  >
-    <div class="user-panel" v-loading="loading">
-      <el-form
-        ref="form"
-        :model="formModel"
-        :rules="ruleValidate"
-        :label-width="'100px'"
-      >
-        <el-form-item label="" prop="id">
-          <el-input
-            v-model="formModel.id"
-            placeholder="请输入"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="" prop="createBy">
-          <el-input
-            v-model="formModel.createBy"
-            placeholder="请输入"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="" prop="createTime">
-          <el-input
-            v-model="formModel.createTime"
-            placeholder="请输入"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="" prop="updateBy">
-          <el-input
-            v-model="formModel.updateBy"
-            placeholder="请输入"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="" prop="updateTime">
-          <el-input
-            v-model="formModel.updateTime"
-            placeholder="请输入"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="删除标示" prop="delFlag">
-          <el-input
-            v-model="formModel.delFlag"
-            placeholder="请输入删除标示"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="用户ID " prop="jobUserId">
-          <el-input
-            v-model="formModel.jobUserId"
-            placeholder="请输入用户ID "
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="性别" prop="sex">
-          <el-input
-            v-model="formModel.sex"
-            placeholder="请输入性别"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="职位分类" prop="positionCategoryId">
-          <el-input
-            v-model="formModel.positionCategoryId"
-            placeholder="请输入职位分类"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="工作经验" prop="workExp">
-          <el-input
-            v-model="formModel.workExp"
-            placeholder="请输入工作经验"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="学历" prop="education">
-          <el-input
-            v-model="formModel.education"
-            placeholder="请输入学历"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="期望工资" prop="dreamMoney">
-          <el-input
-            v-model="formModel.dreamMoney"
-            placeholder="请输入期望工资"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="期望工作地点" prop="dreamAdd">
-          <el-input
-            v-model="formModel.dreamAdd"
-            placeholder="请输入期望工作地点"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="出生年月" prop="birthday">
-          <el-input
-            v-model="formModel.birthday"
-            placeholder="请输入出生年月"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="个人介绍" prop="introduction">
-          <el-input
-            v-model="formModel.introduction"
-            placeholder="请输入个人介绍"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="简历状态(开启,审核,等" prop="status">
-          <el-input
-            v-model="formModel.status"
-            placeholder="请输入简历状态(开启,审核,等"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="审批状态(字典:简历审批状态" prop="approveStatus">
-          <el-input
-            v-model="formModel.approveStatus"
-            placeholder="请输入审批状态(字典:简历审批状态"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="工作状态(字典:工作在职状态" prop="jobStatus">
-          <el-input
-            v-model="formModel.jobStatus"
-            placeholder="请输入工作状态(字典:工作在职状态"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="附件" prop="resumeUrls">
-          <el-input
-            v-model="formModel.resumeUrls"
-            placeholder="请输入附件"
-            style="width: 300px"
-          ></el-input>
-        </el-form-item>
-      </el-form>
+  <el-dialog :visible.sync="showDialog" :title="title" :modal-append-to-body="false" style="text-align: left" @close="closeDialog" :close-on-click-modal="false">
+    <div class="user-panel">
+      <table style="width:100%;" border="0" cellpadding="0" cellspacing="0">
+        <tr>
+          <td rowspan="19" style="width:160px;" valign="top">
+            <el-avatar :size="125" shape="circle" :src="formModel.userPhoto+'?x-oss-process=image/resize,m_fill,w_64,h_64'"></el-avatar>
+          </td>
+          <td colspan="6" class="td_tit1">{{formModel.userName}}</td>
+        </tr>
+        <tr>
+          <td class="td_tit3">联系方式:</td>
+          <td class="td_con">{{formModel.userTel}}</td>
+          <td class="td_tit3">性别:</td>
+          <td class="td_con">{{formModel.sexName}}</td>
+          <td class="td_tit3">求职状态:</td>
+          <td class="td_con">{{formModel.jobStatusName}}</td>
+        </tr>
+        <tr>
+          <td class="td_tit3">身份证号:</td>
+          <td class="td_con">{{formModel.userIdCard}}</td>
+          <td class="td_tit3">年龄:</td>
+          <td class="td_con">{{formModel.userAge}}岁</td>
+          <td class="td_tit3">期望职位:</td>
+          <td class="td_con">{{formModel.positionCategoryName}}</td>
+        </tr>
+        <tr>
+          <td class="td_tit3">出生年月:</td>
+          <td class="td_con">{{formModel.birthday}}</td>
+          <td class="td_tit3">学历:</td>
+          <td class="td_con">{{formModel.educationName}}</td>
+          <td class="td_tit3">期望地点:</td>
+          <td class="td_con">{{formModel.dreamAdd}}</td>
+        </tr>
+        <tr>
+          <td class="td_tit3">常驻地址:</td>
+          <td class="td_con">{{formModel.userAddress}}</td>
+          <td class="td_tit3">工作经验:</td>
+          <td class="td_con">{{formModel.workExpName}}</td>
+          <td class="td_tit3">期望薪资:</td>
+          <td class="td_con">{{formModel.dreamMoneyName}}</td>
+        </tr>
+        <tr>
+          <td colspan="6" style="height:60px">
+            <el-button size="medium" type="primary" @click="handleEdit(row)">下载简历</el-button>
+            <el-button size="medium" type="danger" @click="handleDelete(row)">立即沟通</el-button>
+          </td>
+        </tr>
+        <tr>
+          <td colspan="6" class="divider"></td>
+        </tr>
+        <tr>
+          <td colspan="6" class="td_tit1">个人介绍</td>
+        </tr>
+        <tr>
+          <td colspan="6" class="td_con">{{formModel.introduction}}</td>
+        </tr>
+        <tr>
+          <td colspan="6" class="divider"></td>
+        </tr>
+        <tr>
+          <td colspan="6" class="td_tit1">工作经历</td>
+        </tr>
+        <tr>
+          <td colspan="6" class="td_con">
+            <table v-for="item in formModel.workList" :key="item.id" style="width:100%;" border="0" cellpadding="0" cellspacing="0">
+              <tr>
+                <td colspan="2" class="td_tit2">{{item.companyName}}</td>
+              </tr>
+              <tr>
+                <td class="td_tit3">工作时间:</td>
+                <td class="td_con">{{item.startTime}}-{{item.endTime}}</td>
+              </tr>
+              <tr>
+                <td class="td_tit3">在职职位:</td>
+                <td class="td_con">{{item.job}}</td>
+              </tr>
+              <tr>
+                <td class="td_tit3">工作职责:</td>
+                <td class="td_con">{{item.content}}</td>
+              </tr>
+            </table>
+          </td>
+        </tr>
+        <tr>
+          <td colspan="6" class="divider"></td>
+        </tr>
+        <tr>
+          <td colspan="6" class="td_tit1">教育经历</td>
+        </tr>
+        <tr>
+          <td colspan="6" class="td_con">
+            <table v-for="item in formModel.educateList" :key="item.id" style="width:100%;" border="0" cellpadding="0" cellspacing="0">
+              <tr>
+                <td colspan="2" class="td_tit2">{{item.schoolName}}</td>
+              </tr>
+              <tr>
+                <td class="td_tit3">在校时间:</td>
+                <td class="td_con">{{item.startTime}}-{{item.endTime}}</td>
+              </tr>
+              <tr>
+                <td class="td_tit3">学历:</td>
+                <td class="td_con">{{item.education}}</td>
+              </tr>
+              <tr>
+                <td class="td_tit3">专业:</td>
+                <td class="td_con">{{item.major}}</td>
+              </tr>
+            </table>
+          </td>
+        </tr>
+        <tr>
+          <td colspan="6" class="divider"></td>
+        </tr>
+        <tr>
+          <td colspan="6" class="td_tit1">人员就业轨迹</td>
+        </tr>
+        <tr>
+          <td colspan="6" class="td_con">
+            <div>
+              <el-timeline :reverse="true">
+                <el-timeline-item v-for="(workStep, index) in formModel.workStepList" :key="index" :timestamp="workStep.date">
+                  {{workStep.text}}
+                </el-timeline-item>
+              </el-timeline>
+            </div>
+          </td>
+        </tr>
+      </table>
     </div>
     <span slot="footer" class="dialog-footer">
-      <el-button @click="closeDialog">取 消</el-button>
-      <el-button type="primary" @click="handleSubmit" :loading="submitting"
-        >确 定</el-button
-      >
+      <el-button @click="closeDialog">关 闭</el-button>
     </span>
   </el-dialog>
 </template>
@@ -172,133 +169,28 @@ export default {
   data() {
     return {
       formModel: {},
-      ruleValidate: {
-        id: [{ required: true, message: "不能为空", trigger: "blur" }],
-        createBy: [{ required: true, message: "不能为空", trigger: "blur" }],
-        createTime: [{ required: true, message: "不能为空", trigger: "blur" }],
-        updateBy: [{ required: true, message: "不能为空", trigger: "blur" }],
-        updateTime: [{ required: true, message: "不能为空", trigger: "blur" }],
-        delFlag: [
-          { required: true, message: "删除标示不能为空", trigger: "blur" },
-        ],
-        jobUserId: [
-          { required: true, message: "用户ID 不能为空", trigger: "blur" },
-        ],
-        sex: [{ required: true, message: "性别不能为空", trigger: "blur" }],
-        positionCategoryId: [
-          { required: true, message: "职位分类不能为空", trigger: "blur" },
-        ],
-        workExp: [
-          { required: true, message: "工作经验不能为空", trigger: "blur" },
-        ],
-        education: [
-          { required: true, message: "学历不能为空", trigger: "blur" },
-        ],
-        dreamMoney: [
-          { required: true, message: "期望工资不能为空", trigger: "blur" },
-        ],
-        dreamAdd: [
-          { required: true, message: "期望工作地点不能为空", trigger: "blur" },
-        ],
-        birthday: [
-          { required: true, message: "出生年月不能为空", trigger: "blur" },
-        ],
-        introduction: [
-          { required: true, message: "个人介绍不能为空", trigger: "blur" },
-        ],
-        status: [
-          {
-            required: true,
-            message: "简历状态(开启,审核,等不能为空",
-            trigger: "blur",
-          },
-        ],
-        approveStatus: [
-          {
-            required: true,
-            message: "审批状态(字典:简历审批状态不能为空",
-            trigger: "blur",
-          },
-        ],
-        jobStatus: [
-          {
-            required: true,
-            message: "工作状态(字典:工作在职状态不能为空",
-            trigger: "blur",
-          },
-        ],
-        resumeUrls: [
-          { required: true, message: "附件不能为空", trigger: "blur" },
-        ],
-      },
       showDialog: true,
-      loading: false,
-      submitting: false,
     };
   },
   methods: {
     closeDialog() {
       this.$emit("close", false);
     },
-    handleSubmit() {
-      var self = this;
-
-      this.$refs["form"].validate((valid) => {
-        if (valid) {
-          (function () {
-            var id = self.formModel.id;
-
-            if (id == null || id.length == 0) {
-              return resumeApi.add(self.formModel);
-            } else {
-              return resumeApi.update(self.formModel);
-            }
-          })().then(function (response) {
-            var jsonData = response.data;
-
-            if (jsonData.result) {
-              self.$message({
-                message: "保存成功!",
-                type: "success",
-              });
-
-              self.$emit("close", true);
-            } else {
-              self.$message({
-                message: jsonData.message + "",
-                type: "warning",
-              });
-
-              self.$emit("close", false);
-            }
-          });
-        }
-      });
-    },
   },
   mounted: function () {
     var self = this;
 
-    (function () {
-      if (self.businessKey.length == 0) {
-        return resumeApi.create();
-      } else {
-        return resumeApi.edit(self.businessKey);
-      }
-    })()
-      .then((response) => {
-        var jsonData = response.data;
-        self.loading = false;
+    resumeApi.detail(self.businessKey).then(response=>{
+      var jsonData = response.data;
 
-        if (jsonData.result) {
-          self.formModel = jsonData.data;
-        } else {
-          self.$message.error(jsonData.message + "");
-        }
-      })
-      .catch((error) => {
-        self.$message.error(error + "");
-      });
+      if(jsonData.result){
+        self.formModel = jsonData.data;
+        console.log(self.formModel);
+      }
+      else{
+        self.$message.error(jsonData.message + "");
+      }
+    });
   },
 };
 </script>

+ 5 - 10
src/views/job/resume-list.vue

@@ -37,8 +37,7 @@
     </el-form>
     <el-divider></el-divider>
     <el-row class="button-group">
-      <el-button type="primary" size="small" plain icon="el-icon-circle-plus" @click="handleAdd" >新增</el-button>
-      <el-button type="primary" size="small" plain icon="el-icon-circle-plus" :disabled="multipleSelection.length == 0" @click="handleBatchDelete">删除选中项</el-button>
+      <el-button type="primary" size="small" plain icon="el-icon-remove" :disabled="multipleSelection.length == 0" @click="handleBatchDelete">删除选中项</el-button>
     </el-row>
     <el-table :data="tableData" style="min-height: 400px" v-loading="loading" stripe @sort-change="sortChange" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55"></el-table-column>
@@ -60,7 +59,7 @@
       <el-table-column prop="jobStatusName" label="当前状态" width="100"></el-table-column>
       <el-table-column prop="userIsAuthenticationName" label="实名制状态" width="100"></el-table-column>
       <el-table-column prop="statusName" label="上架状态" width="100"></el-table-column>
-      <el-table-column label="操作">
+      <el-table-column label="操作" width="150" fixed="right">
         <template slot-scope="{row}">
           <el-button size="mini" type="text" @click="handleEdit(row)">简历详情</el-button>
           <el-button v-if="row.status == '7a308001-f476-411a-8802-28992be86cb1'" size="mini" type="text" @click="handleChangeStatus(row)">上架</el-button>
@@ -125,6 +124,7 @@ export default {
         label: "name"
       },
       approveStatusResult: [],
+      statusResult: [],
     };
   },
   created() {
@@ -172,7 +172,7 @@ export default {
       formData.append("positionCategoryId", self.queryModel.positionCategoryId);
       formData.append("approveStatus", self.queryModel.approveStatus);
       formData.append("status", self.queryModel.status);
-      formData.append("jobStatus", self.queryModel.jobStatus);
+      formData.append("name", self.queryModel.name);
 
       if (this.field != null) {
         formData.append("field", this.field);
@@ -217,13 +217,8 @@ export default {
     handleReset(name) {
       this.$refs[name].resetFields();
     },
-    handleAdd() {
-      this.modalTitle = "新增";
-      this.businessKey = "";
-      this.showModal = true;
-    },
     handleEdit(record) {
-      this.modalTitle = "编辑";
+      this.modalTitle = "简历详情";
       this.businessKey = record.id;
       this.showModal = true;
     },

+ 1 - 0
src/views/sys/user-detail.vue

@@ -103,6 +103,7 @@ export default {
             if (id == null || id.length == 0) {
               return userApi.add(self.formModel);
             } else {
+              self.formModel.password = null;
               return userApi.update(self.formModel);
             }
           })().then(function(response) {

+ 45 - 0
yarn.lock

@@ -678,6 +678,13 @@
     core-js-pure "^3.0.0"
     regenerator-runtime "^0.13.2"
 
+"@babel/runtime@7.x":
+  version "7.15.3"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b"
+  integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==
+  dependencies:
+    regenerator-runtime "^0.13.4"
+
 "@babel/runtime@^7.6.3":
   version "7.7.4"
   resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.7.4.tgz#b23a856751e4bf099262f867767889c0e3fe175b"
@@ -772,6 +779,11 @@
   resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
   integrity sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=
 
+"@popperjs/core@^2.9.2":
+  version "2.9.3"
+  resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.3.tgz#8b68da1ebd7fc603999cf6ebee34a4899a14b88e"
+  integrity sha512-xDu17cEfh7Kid/d95kB6tZsLOmSWKCZKtprnhVepjsSaCij+lM3mItSJDuuHDMbCWTh8Ejmebwb+KONcCJ0eXQ==
+
 "@soda/friendly-errors-webpack-plugin@^1.7.1":
   version "1.7.1"
   resolved "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.7.1.tgz#706f64bcb4a8b9642b48ae3ace444c70334d615d"
@@ -820,6 +832,18 @@
   resolved "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
   integrity sha1-aQoUdbhPKohP0HzXl8APXzE1bqg=
 
+"@vant/icons@^1.5.3":
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/@vant/icons/-/icons-1.7.0.tgz#02d427532a8142c35db159da9c364fe6890c3ac9"
+  integrity sha512-sqKvtYcSgSd6+AU1nBPaZARn2Nzf8hi0ErLhfXVR6f+Y7R0gojGZVoxuB83yUI6+0LwbitW5IfN3E6qzEsu21Q==
+
+"@vant/popperjs@^1.0.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@vant/popperjs/-/popperjs-1.1.0.tgz#b4edee5bbfa6fb18705986e313d4fd5f17942a0f"
+  integrity sha512-8MD1gz146awV/uPxYjz4pet22f7a9YVKqk7T+gFkWFwT9mEcrIUEg/xPrdOnWKLP9puXyYtm7oVfSDSefZ/p/w==
+  dependencies:
+    "@popperjs/core" "^2.9.2"
+
 "@vue/babel-helper-vue-jsx-merge-props@^1.0.0":
   version "1.0.0"
   resolved "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.0.0.tgz#048fe579958da408fb7a8b2a3ec050b50a661040"
@@ -6981,6 +7005,11 @@ regenerator-runtime@^0.13.2:
   resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
   integrity sha1-fPanfY9cb2Drc8X8GVWyzrAea/U=
 
+regenerator-runtime@^0.13.4:
+  version "0.13.9"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
+  integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
+
 regenerator-transform@^0.14.0:
   version "0.14.1"
   resolved "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-transform%2Fdownload%2Fregenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb"
@@ -8446,6 +8475,17 @@ validate-npm-package-license@^3.0.1:
     spdx-correct "^3.0.0"
     spdx-expression-parse "^3.0.0"
 
+vant@^2.12.26:
+  version "2.12.26"
+  resolved "https://registry.yarnpkg.com/vant/-/vant-2.12.26.tgz#bd5b233e0464a2f94ef29c349b4b982bd814eea2"
+  integrity sha512-1JsFLt088joJgYbnIeunAIt2mySrypvIcwlpFlrcqEDs2mlb+HyGqpNjUL1bI2RhH9z3Qk7fJxY/1zs5VuhlKQ==
+  dependencies:
+    "@babel/runtime" "7.x"
+    "@vant/icons" "^1.5.3"
+    "@vant/popperjs" "^1.0.0"
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0"
+    vue-lazyload "1.2.3"
+
 vary@~1.1.2:
   version "1.1.2"
   resolved "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
@@ -8494,6 +8534,11 @@ vue-hot-reload-api@^2.3.0:
   resolved "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
   integrity sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=
 
+vue-lazyload@1.2.3:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/vue-lazyload/-/vue-lazyload-1.2.3.tgz#901f9ec15c7e6ca78781a2bae4a343686bdedb2c"
+  integrity sha512-DC0ZwxanbRhx79tlA3zY5OYJkH8FYp3WBAnAJbrcuoS8eye1P73rcgAZhyxFSPUluJUTelMB+i/+VkNU/qVm7g==
+
 vue-loader@^15.7.0:
   version "15.7.2"
   resolved "https://registry.npm.taobao.org/vue-loader/download/vue-loader-15.7.2.tgz#cc89e2716df87f70fe656c9da9d7f8bec06c73d6"