huangxiao hai 1 mes
pai
achega
5979f07248

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 17 - 0
doc/backup.json


+ 236 - 0
src/main/java/net/mingsoft/tf/action/RecruitmentSubmissionAction.java

@@ -0,0 +1,236 @@
+package net.mingsoft.tf.action;
+
+import java.util.List;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import cn.hutool.core.util.ObjectUtil;
+import java.util.*;
+
+import net.mingsoft.base.entity.ResultData;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import java.util.stream.Collectors;
+
+import org.springframework.web.bind.annotation.*;
+import net.mingsoft.tf.biz.IRecruitmentSubmissionBiz;
+import net.mingsoft.tf.entity.RecruitmentSubmissionEntity;
+import net.mingsoft.base.entity.BaseEntity;
+import net.mingsoft.basic.util.BasicUtil;
+import net.mingsoft.basic.util.StringUtil;
+import net.mingsoft.basic.bean.EUListBean;
+import net.mingsoft.basic.annotation.LogAnn;
+import net.mingsoft.basic.constant.e.BusinessTypeEnum;
+import org.apache.commons.lang3.StringUtils;
+
+
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Hidden;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+
+/**
+* 招聘投递管理控制层
+* @author 阿白
+* 创建日期:2025年12月13日 下午2:01:00<br/>
+* 历史修订:<br/>
+*/
+@Tag(name = "后台-招聘投递接口")
+@Controller("tfRecruitmentSubmissionAction")
+@RequestMapping("/${ms.manager.path}/tf/recruitmentSubmission")
+public class RecruitmentSubmissionAction extends net.mingsoft.tf.action.BaseAction{
+
+
+    /**
+    * 注入招聘投递业务层
+    */
+    @Autowired
+    private IRecruitmentSubmissionBiz recruitmentSubmissionBiz;
+
+    /**
+    * 返回主界面index
+    */
+    @Hidden
+    @GetMapping("/index")
+    public String index() {
+        return "/tf/recruitment-submission/index";
+    }
+
+
+    /**
+    * 返回编辑界面recruitmentSubmission的form
+    */
+    @Hidden
+    @GetMapping("/form")
+    public String form() {
+        return "/tf/recruitment-submission/form";
+    }
+
+
+    /**
+    * 查询招聘投递列表
+    * @param recruitmentSubmission 招聘投递实体
+    */
+    @Operation(summary = "查询招聘投递列表接口")
+    @Parameters({
+        @Parameter(name = "submissionName", description = "姓名", in = ParameterIn.QUERY),
+        @Parameter(name = "submissionTel", description = "联系电话", in = ParameterIn.QUERY),
+        @Parameter(name = "submissionEmail", description = "邮件", in = ParameterIn.QUERY),
+        @Parameter(name = "recruitmentId", description = "招聘ID", in = ParameterIn.QUERY),
+    })
+    @RequestMapping(value ="/list",method = {RequestMethod.GET,RequestMethod.POST})
+    @ResponseBody
+    @RequiresPermissions("tf:recruitmentSubmission:view")
+    public ResultData list(@ModelAttribute @Parameter(hidden = true) RecruitmentSubmissionEntity recruitmentSubmission) {
+        BasicUtil.startPage();
+        List recruitmentSubmissionList = null;
+        if ( recruitmentSubmission.getSqlWhere() != null){
+            recruitmentSubmissionList = recruitmentSubmissionBiz.query(recruitmentSubmission);
+        } else {
+            LambdaQueryWrapper<RecruitmentSubmissionEntity> wrapper = new LambdaQueryWrapper<>(recruitmentSubmission).orderByDesc(RecruitmentSubmissionEntity::getCreateDate);
+            recruitmentSubmissionList = recruitmentSubmissionBiz.list(wrapper);
+        }
+        return ResultData.build().success(new EUListBean(recruitmentSubmissionList,(int)BasicUtil.endPage(recruitmentSubmissionList).getTotal()));
+    }
+
+
+    /**
+    * 获取招聘投递
+    * @param recruitmentSubmission 招聘投递实体
+    */
+    @Operation(summary = "获取招聘投递列表接口")
+    @Parameter(name = "id", description = "主键ID", required =true,in = ParameterIn.QUERY)
+    @GetMapping("/get")
+    @ResponseBody
+    @RequiresPermissions("tf:recruitmentSubmission:view")
+    public ResultData get(@ModelAttribute @Parameter(hidden = true) RecruitmentSubmissionEntity recruitmentSubmission) {
+        if (StringUtils.isBlank(recruitmentSubmission.getId())) {
+            return ResultData.build().error(getResString("err.error",this.getResString("id")));
+        }
+        RecruitmentSubmissionEntity _recruitmentSubmission = (RecruitmentSubmissionEntity)recruitmentSubmissionBiz.getById(recruitmentSubmission.getId());
+        return ResultData.build().success(_recruitmentSubmission);
+    }
+
+
+    /**
+    * 保存招聘投递
+    * @param recruitmentSubmission 招聘投递实体
+    */
+    @Operation(summary = "保存招聘投递列表接口")
+    @Parameters({
+        @Parameter(name = "submissionName", description = "姓名", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "submissionTel", description = "联系电话", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "submissionEmail", description = "邮件", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "submissionFile", description = "附件", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "recruitmentId", description = "招聘ID", required = false, in = ParameterIn.QUERY),
+    })
+    @PostMapping("/save")
+    @ResponseBody
+    @LogAnn(title = "保存招聘投递", businessType = BusinessTypeEnum.INSERT)
+    public ResultData save(@ModelAttribute @Parameter(hidden = true) RecruitmentSubmissionEntity recruitmentSubmission) {
+
+        if (  StringUtils.isNotBlank(recruitmentSubmission.getSubmissionName()) && !StringUtil.checkLength(recruitmentSubmission.getSubmissionName()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("submission.name"), "0", "255"));
+        }
+        if (  StringUtils.isNotBlank(recruitmentSubmission.getSubmissionTel()) && !StringUtil.checkLength(recruitmentSubmission.getSubmissionTel()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("submission.tel"), "0", "255"));
+        }
+        if (  StringUtils.isNotBlank(recruitmentSubmission.getSubmissionEmail()) && !StringUtil.checkLength(recruitmentSubmission.getSubmissionEmail()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("submission.email"), "0", "255"));
+        }
+        if (  StringUtils.isNotBlank(recruitmentSubmission.getRecruitmentId()) && !StringUtil.checkLength(recruitmentSubmission.getRecruitmentId()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("recruitment.id"), "0", "255"));
+        }
+        recruitmentSubmissionBiz.save(recruitmentSubmission);
+        return ResultData.build().success(recruitmentSubmission);
+    }
+
+    /**
+    *  删除招聘投递
+    *
+    * @param recruitmentSubmissions 招聘投递实体
+    */
+    @Operation(summary = "批量删除招聘投递列表接口")
+    @PostMapping("/delete")
+    @ResponseBody
+    @LogAnn(title = "删除招聘投递", businessType = BusinessTypeEnum.DELETE)
+    @RequiresPermissions("tf:recruitmentSubmission:del")
+    public ResultData delete(@RequestBody List<RecruitmentSubmissionEntity> recruitmentSubmissions) {
+        List<String> ids = (List)recruitmentSubmissions.stream().map((p) -> {return p.getId();}).collect(Collectors.toList());
+        return this.recruitmentSubmissionBiz.removeByIds(ids) ? ResultData.build().success() : ResultData.build().error(this.getResString("err.error", new String[]{this.getResString("id")}));
+    }
+
+    /**
+    *	更新招聘投递列表
+    *
+    * @param recruitmentSubmission 招聘投递实体
+    */
+    @Operation(summary = "更新招聘投递列表接口")
+    @Parameters({
+        @Parameter(name = "id", description = "主键ID", required =true,in = ParameterIn.QUERY),
+        @Parameter(name = "submissionName", description = "姓名", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "submissionTel", description = "联系电话", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "submissionEmail", description = "邮件", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "submissionFile", description = "附件", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "recruitmentId", description = "招聘ID", required = false, in = ParameterIn.QUERY),
+    })
+    @PostMapping("/update")
+    @ResponseBody
+    @LogAnn(title = "更新招聘投递", businessType = BusinessTypeEnum.UPDATE)
+    @RequiresPermissions("tf:recruitmentSubmission:update")
+    public ResultData update(@ModelAttribute @Parameter(hidden = true) RecruitmentSubmissionEntity recruitmentSubmission) {
+        //先查询数据是否存在
+        RecruitmentSubmissionEntity _recruitmentSubmission = (RecruitmentSubmissionEntity)recruitmentSubmissionBiz.getById(recruitmentSubmission.getId());
+        if(_recruitmentSubmission == null) {
+            return ResultData.build().error(getResString("err.not.exist",recruitmentSubmission.getId() ));
+        }
+
+        if (  StringUtils.isNotBlank(recruitmentSubmission.getSubmissionName()) && !StringUtil.checkLength(recruitmentSubmission.getSubmissionName()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("submission.name"), "0", "255"));
+        }
+        if (  StringUtils.isNotBlank(recruitmentSubmission.getSubmissionTel()) && !StringUtil.checkLength(recruitmentSubmission.getSubmissionTel()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("submission.tel"), "0", "255"));
+        }
+        if (  StringUtils.isNotBlank(recruitmentSubmission.getSubmissionEmail()) && !StringUtil.checkLength(recruitmentSubmission.getSubmissionEmail()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("submission.email"), "0", "255"));
+        }
+        if (  StringUtils.isNotBlank(recruitmentSubmission.getRecruitmentId()) && !StringUtil.checkLength(recruitmentSubmission.getRecruitmentId()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("recruitment.id"), "0", "255"));
+        }
+        recruitmentSubmissionBiz.updateById(recruitmentSubmission);
+        return ResultData.build().success(recruitmentSubmission);
+    }
+
+    @GetMapping("verify")
+    @ResponseBody
+    public ResultData verify(String fieldName, String fieldValue, String id,String idName) {
+        boolean verify = false;
+        if (StringUtils.isBlank(id)) {
+            verify = super.validated("RECRUITMENT_SUBMISSION",fieldName,fieldValue);
+        } else {
+            verify = super.validated("RECRUITMENT_SUBMISSION",fieldName,fieldValue,id,idName);
+        }
+        if (verify) {
+            return ResultData.build().success(false);
+        }else {
+            return ResultData.build().success(true);
+        }
+    }
+
+}

+ 16 - 0
src/main/java/net/mingsoft/tf/biz/IRecruitmentSubmissionBiz.java

@@ -0,0 +1,16 @@
+package net.mingsoft.tf.biz;
+
+import net.mingsoft.base.biz.IBaseBiz;
+import net.mingsoft.tf.entity.RecruitmentSubmissionEntity;
+
+
+/**
+ * 招聘投递业务
+ * @author 阿白
+ * 创建日期:2025年12月13日 下午2:01:00<br/>
+ * 历史修订:<br/>
+ */
+public interface IRecruitmentSubmissionBiz extends IBaseBiz<RecruitmentSubmissionEntity> {
+
+
+}

+ 34 - 0
src/main/java/net/mingsoft/tf/biz/impl/RecruitmentSubmissionBizImpl.java

@@ -0,0 +1,34 @@
+package net.mingsoft.tf.biz.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import net.mingsoft.base.biz.impl.BaseBizImpl;
+import net.mingsoft.base.dao.IBaseDao;
+import java.util.*;
+import net.mingsoft.tf.entity.RecruitmentSubmissionEntity;
+import net.mingsoft.tf.biz.IRecruitmentSubmissionBiz;
+import net.mingsoft.tf.dao.IRecruitmentSubmissionDao;
+
+/**
+* 招聘投递管理持久化层
+* @author 阿白
+* 创建日期:2025年12月13日 下午2:01:00<br/>
+* 历史修订:<br/>
+*/
+@Service("tfrecruitmentSubmissionBizImpl")
+public class RecruitmentSubmissionBizImpl extends BaseBizImpl<IRecruitmentSubmissionDao,RecruitmentSubmissionEntity> implements IRecruitmentSubmissionBiz {
+
+
+    @Autowired
+    private IRecruitmentSubmissionDao recruitmentSubmissionDao;
+
+
+    @Override
+    protected IBaseDao getDao() {
+        // TODO Auto-generated method stub
+        return recruitmentSubmissionDao;
+    }
+
+
+
+}

+ 14 - 0
src/main/java/net/mingsoft/tf/dao/IRecruitmentSubmissionDao.java

@@ -0,0 +1,14 @@
+package net.mingsoft.tf.dao;
+
+import net.mingsoft.base.dao.IBaseDao;
+import java.util.*;
+import net.mingsoft.tf.entity.RecruitmentSubmissionEntity;
+
+/**
+ * 招聘投递持久层
+ * @author 阿白
+ * 创建日期:2025年12月13日 下午2:01:00<br/>
+ * 历史修订:<br/>
+ */
+public interface IRecruitmentSubmissionDao extends IBaseDao<RecruitmentSubmissionEntity> {
+}

+ 22 - 0
src/main/java/net/mingsoft/tf/dao/IRecruitmentSubmissionDao.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="net.mingsoft.tf.dao.IRecruitmentSubmissionDao">
+
+	<resultMap id="resultMap" type="net.mingsoft.tf.entity.RecruitmentSubmissionEntity">
+				<result column="SUBMISSION_NAME" property="submissionName" /><!--姓名 -->
+				<result column="SUBMISSION_TEL" property="submissionTel" /><!--联系电话 -->
+				<result column="SUBMISSION_EMAIL" property="submissionEmail" /><!--邮件 -->
+				<result column="SUBMISSION_FILE" property="submissionFile" /><!--附件 -->
+				<result column="RECRUITMENT_ID" property="recruitmentId" /><!--招聘ID -->
+	</resultMap>
+
+	<select id="query" resultMap="resultMap">
+		SELECT * FROM MDIY_FORM_RECRUITMENT_SUBMISSION
+		<where>
+			DEL=0
+			<include refid="net.mingsoft.base.dao.IBaseDao.sqlWhere"></include>
+		</where>
+		 ORDER BY ID DESC
+	</select>
+
+</mapper>

+ 122 - 0
src/main/java/net/mingsoft/tf/entity/RecruitmentSubmissionEntity.java

@@ -0,0 +1,122 @@
+package net.mingsoft.tf.entity;
+
+
+import org.springframework.format.annotation.DateTimeFormat;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import net.mingsoft.base.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.SqlCondition;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+
+import java.util.Date;
+/**
+* 招聘投递实体
+* @author 阿白
+* 创建日期:2025年12月13日 下午2:01:00<br/>
+* 历史修订:<br/>
+*/
+@TableName("MDIY_FORM_RECRUITMENT_SUBMISSION")
+public class RecruitmentSubmissionEntity extends BaseEntity {
+
+private static final long serialVersionUID = 1765605660801L;
+
+    /**
+    * 姓名
+    */
+    @TableField(condition = SqlCondition.LIKE)
+    private String submissionName;
+    /**
+    * 联系电话
+    */
+    @TableField(condition = SqlCondition.LIKE)
+    private String submissionTel;
+    /**
+    * 邮件
+    */
+    @TableField(condition = SqlCondition.LIKE)
+    private String submissionEmail;
+    /**
+    * 附件
+    */
+    
+    private String submissionFile;
+    /**
+    * 招聘ID
+    */
+    @TableField(condition = SqlCondition.LIKE)
+    private String recruitmentId;
+
+
+    /**
+    * 设置姓名
+    */
+    public void setSubmissionName(String submissionName) {
+        this.submissionName = submissionName;
+    }
+
+    /**
+    * 获取姓名
+    */
+    public String getSubmissionName() {
+        return this.submissionName;
+    }
+    /**
+    * 设置联系电话
+    */
+    public void setSubmissionTel(String submissionTel) {
+        this.submissionTel = submissionTel;
+    }
+
+    /**
+    * 获取联系电话
+    */
+    public String getSubmissionTel() {
+        return this.submissionTel;
+    }
+    /**
+    * 设置邮件
+    */
+    public void setSubmissionEmail(String submissionEmail) {
+        this.submissionEmail = submissionEmail;
+    }
+
+    /**
+    * 获取邮件
+    */
+    public String getSubmissionEmail() {
+        return this.submissionEmail;
+    }
+    /**
+    * 设置附件
+    */
+    public void setSubmissionFile(String submissionFile) {
+        this.submissionFile = submissionFile;
+    }
+
+    /**
+    * 获取附件
+    */
+    public String getSubmissionFile() {
+        return this.submissionFile;
+    }
+    /**
+    * 设置招聘ID
+    */
+    public void setRecruitmentId(String recruitmentId) {
+        this.recruitmentId = recruitmentId;
+    }
+
+    /**
+    * 获取招聘ID
+    */
+    public String getRecruitmentId() {
+        return this.recruitmentId;
+    }
+
+
+}

+ 5 - 0
src/main/java/net/mingsoft/tf/resources/resources_en_US.properties

@@ -59,3 +59,8 @@ investment.promotion.status=investment promotion status
 investment.promotion.intro=investment promotion intro
 investment.promotion.desc=investment promotion desc
 investment.promotion.img=investment promotion img
+submission.name=submission name
+submission.tel=submission tel
+submission.email=submission email
+submission.file=submission file
+recruitment.id=recruitment id

+ 5 - 0
src/main/java/net/mingsoft/tf/resources/resources_zh_CN.properties

@@ -59,3 +59,8 @@ investment.promotion.status=\u53d1\u5e03\u72b6\u6001
 investment.promotion.intro=\u62db\u5546\u7b80\u4ecb
 investment.promotion.desc=\u62db\u5546\u63cf\u8ff0
 investment.promotion.img=\u623f\u5c4b\u56fe\u7247
+submission.name=\u59d3\u540d
+submission.tel=\u8054\u7cfb\u7535\u8bdd
+submission.email=\u90ae\u4ef6
+submission.file=\u9644\u4ef6
+recruitment.id=\u62db\u8058ID

+ 301 - 0
src/main/webapp/WEB-INF/manager/tf/recruitment-submission/form.ftl

@@ -0,0 +1,301 @@
+    <!DOCTYPE html>
+    <html>
+
+    <head>
+        <title>招聘投递</title>
+            <#include "../../include/head-file.ftl">
+
+    </head>
+
+    <body>
+    <div id="form" v-cloak>
+        <el-header class="ms-header ms-tr" height="50px">
+            <el-button type="primary" class="iconfont icon-baocun" size="default" @click="save()" :loading="saveDisabled">保存</el-button>
+            <el-button size="default" class="iconfont icon-fanhui" plain @click="back()">返回</el-button>
+        </el-header>
+        <el-main class="ms-container" v-loading="loading">
+            <el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="right" size="default">
+
+                        <el-row
+                                :gutter="0"
+                                justify="start" align="top">
+                                <el-col :span=12>
+            <!--姓名-->
+
+	        <el-form-item  label="姓名" prop="submissionName">
+	            <el-input
+                        v-model="form.submissionName"
+                         :disabled="false"
+                          :readonly="false"
+                          :style="{width:  '100%'}"
+                          :clearable="true"
+                        placeholder="请输入姓名">
+                </el-input>
+	        </el-form-item>   
+                                </el-col>
+                                <el-col :span=12>
+            <!--联系电话-->
+
+	        <el-form-item  label="联系电话" prop="submissionTel">
+	            <el-input
+                        v-model="form.submissionTel"
+                         :disabled="false"
+                          :readonly="false"
+                          :style="{width:  '100%'}"
+                          :clearable="true"
+                        placeholder="请输入联系电话">
+                </el-input>
+	        </el-form-item>   
+                                </el-col>
+                        </el-row>
+                        <el-row
+                                :gutter="0"
+                                justify="start" align="top">
+                                <el-col :span=12>
+            <!--邮件-->
+
+	        <el-form-item  label="邮件" prop="submissionEmail">
+	            <el-input
+                        v-model="form.submissionEmail"
+                         :disabled="false"
+                          :readonly="false"
+                          :style="{width:  '100%'}"
+                          :clearable="true"
+                        placeholder="请输入邮件">
+                </el-input>
+	        </el-form-item>   
+                                </el-col>
+                                <el-col :span=12>
+        <!--附件-->
+    
+        <el-form-item  label="附件" prop="submissionFile">
+             <el-upload
+                    :file-list="form.submissionFile"
+                    :action="ms.manager+'/file/upload.do'"
+                    :limit="1"
+                    multiple
+                    accept=".pdf,.doc,.docx"
+                    :on-remove="submissionFileHandleRemove"
+                    :on-exceed="submissionFileHandleExceed"
+                    :on-preview="submissionFileHandlePreview"
+                    :on-success="submissionFileSuccess"
+                    :on-error="submissionFileError"
+                    :disabled="false"
+                    :data="{uploadPath:'/tf/','isRename':true,'appId':true}">
+                <el-button size="small" type="primary">点击上传</el-button>
+                <template #tip>
+                  <div class="el-upload__tip">最多上传1个文件</div>
+               </template>
+            </el-upload>
+        </el-form-item>
+   
+                                </el-col>
+                        </el-row>
+            <!--招聘ID-->
+
+            </el-form>
+        </el-main>
+    </div>
+    </body>
+
+    </html>
+
+<script>
+    var formVue = new _Vue({
+        el: '#form',
+
+        data:function() {
+            return {
+                loading:false,
+                saveDisabled: false,
+                //表单数据
+                form: {
+                    // 姓名
+                    submissionName:'',
+                    // 联系电话
+                    submissionTel:'',
+                    // 邮件
+                    submissionEmail:'',
+                    // 附件
+                    submissionFile: [],
+                    // 招聘ID
+                    recruitmentId:'',
+
+                },
+                rules:{
+                        // 姓名
+                        submissionName: [{"min":0,"max":255,"message":"姓名长度必须为0-255"}],
+                        // 联系电话
+                        submissionTel: [{"min":0,"max":255,"message":"联系电话长度必须为0-255"}],
+                        // 邮件
+                        submissionEmail: [{"type":"email","message":"邮件格式不正确"},{"min":0,"max":255,"message":"邮件长度必须为0-255"}],
+                        // 招聘ID
+                        recruitmentId: [{"min":0,"max":255,"message":"招聘ID长度必须为0-255"}],
+
+                },
+
+            }
+        },
+        watch:{
+
+        },
+        components:{
+        },
+        computed:{
+        },
+        methods: {
+
+            back: function (){
+                ms.util.openSystemUrl("/tf/recruitmentSubmission/index.do",true);
+            },
+
+            save:function() {
+                var that = this;
+                var url = ms.manager + "/tf/recruitmentSubmission/save.do"
+                if (that.form.id > 0) {
+                    url = ms.manager + "/tf/recruitmentSubmission/update.do";
+                }
+
+                this.$refs.form.validate(function(valid) {
+                    if (valid) {
+                        that.saveDisabled = true;
+                        var form = JSON.parse(JSON.stringify(that.form));
+											if (form.submissionFile.length>0) {												
+												form.submissionFile.forEach(function (value) {
+													value.url = value.url.replace(new RegExp('^'+ms.contextpath), "");
+												});  
+												form.submissionFile = JSON.stringify(form.submissionFile);
+											} else {
+												form.submissionFile = '';
+											}
+                        ms.http.post(url, form).then(function (res) {
+                            if (res.result) {
+                                that.$notify({
+                                    title: "成功",
+                                    message: "保存成功",
+                                    type: 'success'
+                                });
+                                ms.util.openSystemUrl("/tf/recruitmentSubmission/index.do",that.form.id > 0);
+                            } else {
+                                that.$notify({
+                                    title: "错误",
+                                    message: res.msg,
+                                    type: 'warning'
+                                });
+                            }
+
+                            that.saveDisabled = false;
+                        }).catch(function (err) {
+                            console.log(err);
+                            that.saveDisabled = false;
+                        });
+                    } else {
+                        return false;
+                    }
+                })
+            },
+
+            //获取当前招聘投递
+            get:function(id) {
+                var that = this;
+                this.loading = true
+                ms.http.get(ms.manager + "/tf/recruitmentSubmission/get.do", {"id":id}).then(function (res) {
+                    that.loading = false
+                    if(res.result&&res.data) {
+                                                                               if (res.data.submissionFile) {
+                          res.data.submissionFile = JSON.parse(res.data.submissionFile);
+                          res.data.submissionFile.forEach(function (value) {
+                             if(!value.url.startsWith("http://") && !value.url.startsWith("https://")){
+								value.url =  ms.contextpath + value.url;
+							 }
+                          });
+                      } else {
+                          res.data.submissionFile = [];
+                      }
+                   
+                        that.form = res.data;
+                    }
+                });
+            },
+        // submissionFile删除
+        submissionFileHandleRemove: function (file, files) {
+        	var index = -1;
+        	index = this.form.submissionFile.findIndex(function (text) {
+        		return text.uid == file.uid;
+        	});
+        	if (index != -1) {
+        		this.form.submissionFile.splice(index, 1);
+        	}
+        },
+        //submissionFile上传超过限制
+        submissionFileHandleExceed: function (files, fileList) {
+        	this.$notify({
+        		title: '失败',
+        		message: '当前最多上传1个文件测试',
+        		type: 'warning'
+        	});
+        },
+        //submissionFile预览
+        submissionFileHandlePreview: function (file){
+        	if (file.url.startsWith("http://") || file.url.startsWith("https://")){
+				window.open(file.url);
+			}else {
+				window.open(file.url);
+			}
+        },
+        //submissionFile上传成功
+        submissionFileSuccess: function (response, file, fileList) {
+        	if (response.result) {
+				if(!response.data.startsWith("http://") && !response.data.startsWith("https://")) {
+					file.url = ms.contextpath + response.data;
+				}else{
+					file.url = response.data;
+				}
+        		this.form.submissionFile.push({
+        			url: response.data,
+        			name: file.name,
+        			uid: file.uid
+        		});
+        	} else {
+					// 移除上传附件
+					var index = fileList.indexOf(file);
+					if (index > -1) {
+						fileList.splice(index, 1);
+					}
+        		this.$notify({
+        			title: '失败',
+        			message: response.msg,
+        			type: 'warning'
+        		});
+        	}
+        },
+// 上传文件错误回调
+            submissionFileError: function (err, file, fileList) {
+                if (err.message) {
+                    this.$notify({
+                        type: 'warning',
+                        title: '失败',
+                        message: '文件上传失败:' + JSON.parse(err.message).msg
+                    });
+                } else {
+                    this.$notify({
+                        type: 'warning',
+                        title: '失败',
+                        message: '文件上传失败'
+                    });
+                }
+            },
+        },
+        created:function() {
+            var that = this;
+
+            this.form.id = ms.util.getParameter("id");
+            if (this.form.id) {
+                this.get(this.form.id);
+            }
+        }
+    });
+
+</script>
+    <style scoped>
+    </style>

+ 379 - 0
src/main/webapp/WEB-INF/manager/tf/recruitment-submission/index.ftl

@@ -0,0 +1,379 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>招聘投递</title>
+        <#include "../../include/head-file.ftl">
+</head>
+<body>
+<div id="index" class="ms-index" v-cloak>
+        <el-header class="ms-header" height="50px">
+        <el-col :span=12>
+            <@shiro.hasPermission name="tf:recruitmentSubmission:save">
+                <el-button type="primary" class="el-icon-plus" size="default" @click="save()">新增</el-button>
+
+            </@shiro.hasPermission>
+            <@shiro.hasPermission name="tf:recruitmentSubmission:del">
+                <el-button type="danger" class="el-icon-delete" size="default" @click="del(selectionList)"  :disabled="!selectionList.length">删除</el-button>
+            </@shiro.hasPermission>
+        </el-col>
+        </el-header>
+        <div class="ms-search">
+            <el-row>
+                <el-form :model="form"  ref="searchForm"  label-width="120px" size="default">
+                        <el-row>
+                                        <el-col :span=8>
+            <!--姓名-->
+
+	        <el-form-item  label="姓名" prop="submissionName">
+	            <el-input
+                        v-model="form.submissionName"
+                         :disabled="false"
+                          :readonly="false"
+                          :style="{width:  '100%'}"
+                          :clearable="true"
+                        placeholder="请输入姓名">
+                </el-input>
+	        </el-form-item>   
+                                        </el-col>
+                                <el-col :span=16 style="display: flex;justify-content: end;padding-right: 10px;">
+                                    <el-button type="primary" class="el-icon-search" size="default" @click="currentPage=1;list(true)">搜索</el-button>
+                                    <el-button @click="rest"  class="el-icon-refresh" size="default">重置</el-button>
+                                    <ms-search ref="search" @search="search" :search-json="searchJson" :search-key="historyKey"></ms-search>
+                                </el-col>
+                        </el-row>
+                </el-form>
+            </el-row>
+        </div>
+    <el-main class="ms-container">
+        <el-table class="ms-table-pagination" v-loading="loading" ref="multipleTable" border :data="dataList" tooltip-effect="dark" @selection-change="handleSelectionChange">
+                <template #empty>
+                    {{emptyText}}
+                </template>
+                    <el-table-column type="selection" width="40" :selectable="isChecked"></el-table-column>
+                            <el-table-column label="姓名"   align="left" prop="submissionName">
+                            </el-table-column>
+                            <el-table-column label="联系电话"   align="left" prop="submissionTel">
+                            </el-table-column>
+                            <el-table-column label="邮件"   align="left" prop="submissionEmail">
+                            </el-table-column>
+                            <el-table-column label="招聘ID"   align="left" prop="recruitmentId">
+                            </el-table-column>
+                    <el-table-column  min-width="180" align="center" label="创建时间" prop="createDate"></el-table-column>
+                    <el-table-column label="操作"  width="180" align="center" fixed="right">
+                            <template #default="scope">
+                                <@shiro.hasPermission name="tf:recruitmentSubmission:update">
+                                    <el-link type="primary" :underline="false" @click="save(scope.row.id)">编辑</el-link>
+                                </@shiro.hasPermission>
+                            <@shiro.hasPermission name="tf:recruitmentSubmission:del">
+                                <el-link type="primary" :underline="false" @click="del([scope.row])" v-if="scope.row.del!=3">删除</el-link>
+                            </@shiro.hasPermission>
+                </template>
+                </el-table-column>
+            </el-table>
+                <el-pagination
+                        background
+                        :page-sizes="[10,20,30,40,50,100]"
+                        layout="total, sizes, prev, pager, next, jumper"
+                        :current-page="currentPage"
+                        :page-size="pageSize"
+                        :total="total"
+                        class="ms-pagination"
+                        @current-change='currentChange'
+                        @size-change="sizeChange">
+                </el-pagination>
+    </el-main>
+</div>
+
+</body>
+
+</html>
+<script>
+    var indexVue = new _Vue({
+        el: '#index',
+		provide() {
+			return {
+				searchParent: this //筛选使用
+			};
+		},
+        data:function() {
+            return {
+				        searchJson:[
+    {
+    "isSearch": "true",
+    "action": "and",
+    "field": "SUBMISSION_NAME",
+    "el": "eq",
+    "model": "submissionName",
+    "name": "姓名",
+    "type": "input"
+    },
+    {
+    "isSearch": "",
+    "action": "and",
+    "field": "SUBMISSION_TEL",
+    "el": "eq",
+    "model": "submissionTel",
+    "name": "联系电话",
+    "type": "input"
+    },
+    {
+    "isSearch": "",
+    "action": "and",
+    "field": "SUBMISSION_EMAIL",
+    "el": "eq",
+    "model": "submissionEmail",
+    "name": "邮件",
+    "type": "input"
+    },
+{
+    "action":"and",
+    "field": "SUBMISSION_FILE",
+    "el": "empty",
+    "model": "submissionFile",
+    "name": "附件",
+    "type": "fileupload"
+},    {
+    "isSearch": "",
+    "action": "and",
+    "field": "RECRUITMENT_ID",
+    "el": "eq",
+    "model": "recruitmentId",
+    "name": "招聘ID",
+    "type": "input"
+    },
+                ],
+                dataList: [], //招聘投递列表
+                selectionList:[],//招聘投递列表选中
+                total: 0, //总记录数量
+                pageSize: 10, //页面数量
+                currentPage:1, //初始页
+                manager: ms.manager,
+                loading: true,//加载状态
+                emptyText:'',//提示文字
+                //搜索表单
+                form:{
+                    sqlWhere:null
+                },
+                //历史记录参数
+                historyKey: "tf_recruitment_submission_history"
+            }
+        },
+        watch:{
+
+        },
+        methods:{
+            isChecked: function(row) {
+                if(row.del == 3) {
+                    return false;
+                }
+                return true;
+            },
+            //查询列表
+            list: function(isSearch) {
+                var that = this;
+                var data = {}; //搜索参数
+                that.loading = true;
+                var page={
+                    pageNo: that.currentPage,
+                    pageSize : that.pageSize
+                }
+                var form = JSON.parse(JSON.stringify(that.form))
+
+
+                if(isSearch) {
+                    //删除空字符串
+                    for (var key in form){
+                        if(form[key] === undefined || form[key] === null){
+                            delete  form[key]
+                        }
+                    }
+                    form.sqlWhere ? data = Object.assign({}, {sqlWhere: form.sqlWhere}, page) : data = Object.assign({}, form, page)
+                } else {
+                    data = page;
+                }
+                sessionStorage.setItem(that.historyKey,JSON.stringify({form: form, page: page}));
+                ms.http.post(ms.manager+"/tf/recruitmentSubmission/list.do",data).then(
+                    function(res) {
+                        if (!res.result||res.data.total <= 0) {
+                            that.emptyText ="暂无数据"
+                            that.dataList = [];
+                            that.total = 0;
+                        } else {
+                            that.emptyText = '';
+                            that.total = res.data.total;
+                            that.dataList = res.data.rows;
+                        }
+                        that.loading = false;
+                    }).catch(function(err) {
+                    that.loading = false;
+                    console.log(err);
+                });
+
+            },
+            //招聘投递列表选中
+            handleSelectionChange:function(val){
+                this.selectionList = val;
+            },
+            //删除
+            del: function(row){
+                var that = this;
+                that.$confirm("此操作将永久删除所选内容, 是否继续", "提示", {
+                    confirmButtonText: "确认",
+                    cancelButtonText: "取消",
+                    type: 'warning'
+                }).then(function() {
+                    ms.http.post(ms.manager+"/tf/recruitmentSubmission/delete.do", row.length?row:[row],{
+                        headers: {
+                            'Content-Type': 'application/json'
+                        }
+                    }).then(
+                        function(res){
+                            if (res.result) {
+                                that.$notify({
+                                    title:'成功',
+                                    type: 'success',
+                                    message:"删除成功"
+                                });
+                                //删除成功,刷新列表
+                                that.list();
+                            }else {
+                                that.$notify({
+                                    title: "错误",
+                                    message: res.msg,
+                                    type: 'warning'
+                                });
+                            }
+                        });
+                }).catch(function(err) {
+                    //删除如果用户取消会抛出异常,所以需要catch一下
+                    console.log(err)
+                });
+            },
+            //新增
+            save:function(id){
+                if(id){
+                    ms.util.openSystemUrl("/tf/recruitmentSubmission/form.do?id="+id);
+                }else {
+                    ms.util.openSystemUrl("/tf/recruitmentSubmission/form.do");
+                }
+            },
+
+            //pageSize改变时会触发
+            sizeChange:function(pagesize) {
+                this.loading = true;
+                this.pageSize = pagesize;
+                this.list(true);
+            },
+            //currentPage改变时会触发
+            currentChange:function(currentPage) {
+                this.loading = true;
+                this.currentPage = currentPage;
+                this.list(true);
+            },
+            search:function(data){
+                this.form.sqlWhere = JSON.stringify(data);
+                this.list(true);
+            },
+            //重置表单
+            rest:function(){
+                this.currentPage = 1;
+                this.form = {
+                    sqlWhere:null
+                };
+                this.$refs.searchForm.resetFields();
+                this.list(true);
+            },
+        // submissionFile删除
+        submissionFileHandleRemove: function (file, files) {
+        	var index = -1;
+        	index = this.form.submissionFile.findIndex(function (text) {
+        		return text.uid == file.uid;
+        	});
+        	if (index != -1) {
+        		this.form.submissionFile.splice(index, 1);
+        	}
+        },
+        //submissionFile上传超过限制
+        submissionFileHandleExceed: function (files, fileList) {
+        	this.$notify({
+        		title: '失败',
+        		message: '当前最多上传1个文件测试',
+        		type: 'warning'
+        	});
+        },
+        //submissionFile预览
+        submissionFileHandlePreview: function (file){
+        	if (file.url.startsWith("http://") || file.url.startsWith("https://")){
+				window.open(file.url);
+			}else {
+				window.open(file.url);
+			}
+        },
+        //submissionFile上传成功
+        submissionFileSuccess: function (response, file, fileList) {
+        	if (response.result) {
+				if(!response.data.startsWith("http://") && !response.data.startsWith("https://")) {
+					file.url = ms.contextpath + response.data;
+				}else{
+					file.url = response.data;
+				}
+        		this.form.submissionFile.push({
+        			url: response.data,
+        			name: file.name,
+        			uid: file.uid
+        		});
+        	} else {
+					// 移除上传附件
+					var index = fileList.indexOf(file);
+					if (index > -1) {
+						fileList.splice(index, 1);
+					}
+        		this.$notify({
+        			title: '失败',
+        			message: response.msg,
+        			type: 'warning'
+        		});
+        	}
+        },
+// 上传文件错误回调
+            submissionFileError: function (err, file, fileList) {
+                if (err.message) {
+                    this.$notify({
+                        type: 'warning',
+                        title: '失败',
+                        message: '文件上传失败:' + JSON.parse(err.message).msg
+                    });
+                } else {
+                    this.$notify({
+                        type: 'warning',
+                        title: '失败',
+                        message: '文件上传失败'
+                    });
+                }
+            },
+
+        },
+        mounted:function(){
+            var that = this;
+
+            //如果存在历史参数,恢复页面结果
+            if(sessionStorage.getItem(this.historyKey) && ms.util.getParameter("isBack") == 'true') {
+                var _history = JSON.parse(sessionStorage.getItem(this.historyKey))
+                this.form = _history.form;
+                this.total = parseInt(_history.total);
+                this.currentPage = parseInt(_history.page.pageNo);
+                this.pageSize = parseInt(_history.page.pageSize);
+            }
+
+            this.list(true);
+        },
+		created:function(){
+			var that = this;
+        }
+    })
+</script>
+    <style scoped>
+        #index .ms-container {
+            height: calc(100vh - 141px);
+        }
+    </style>

+ 19 - 0
src/main/webapp/static/locale/lang/recruitment-submission/en_US.js

@@ -0,0 +1,19 @@
+var en_US ={
+    form:{
+                gridYjonp:{
+            text:'栅格布局',
+            placeholder:'',
+            help:'',
+        },
+        gridXnwcb:{
+            text:'栅格布局',
+            placeholder:'',
+            help:'',
+        },
+        recruitmentId:{
+            text:'招聘ID',
+            placeholder:'请输入招聘ID',
+            help:'',
+        },
+    }
+}

+ 20 - 0
src/main/webapp/static/locale/lang/recruitment-submission/zh_CN.js

@@ -0,0 +1,20 @@
+
+var zh_CN ={
+    form:{
+                gridYjonp:{
+            text:'栅格布局',
+            placeholder:'',
+            help:'',
+        },
+        gridXnwcb:{
+            text:'栅格布局',
+            placeholder:'',
+            help:'',
+        },
+        recruitmentId:{
+            text:'招聘ID',
+            placeholder:'请输入招聘ID',
+            help:'',
+        },
+    }
+}

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio