ly пре 3 година
родитељ
комит
91bc3a16a1

+ 3 - 1
master/src/main/java/com/ruoyi/project/officeConvert/OfficeConvertController.java

@@ -93,7 +93,9 @@ public class OfficeConvertController {
             // 文件转化
             documentConverter.convert(file).to(new File(RuoYiConfig.getProfile() + File.separator +"temp" + File.separator +converterPdf)).execute();
             //office文件需要给有表格的加一个边框 以免 排版出现问题
-           this.doActionConvertedFile(RuoYiConfig.getProfile() + File.separator +"temp" + File.separator +converterPdf);
+            if(newFilePath.endsWith(".xlsx")){
+                this.doActionConvertedFile(RuoYiConfig.getProfile() + File.separator +"temp" + File.separator +converterPdf);
+            }
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 18 - 0
master/src/main/java/com/ruoyi/project/system/controller/SysUserController.java

@@ -4,9 +4,11 @@ import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.ServletUtils;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.config.RuoYiConfig;
 import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.framework.security.service.TokenService;
 import com.ruoyi.framework.web.controller.BaseController;
@@ -23,6 +25,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -134,6 +137,21 @@ public class SysUserController extends BaseController
         return toAjax(userService.insertUser(user));
     }
 
+    /**
+     * 签名图上传
+     */
+    @Log(title = "签名图上传", businessType = BusinessType.UPDATE)
+    @PostMapping("/uploadFile")
+    public AjaxResult uploadFile(@RequestParam("file") MultipartFile file) throws IOException
+    {
+        if (!file.isEmpty())
+        {
+            String avatar = FileUploadUtils.upload(RuoYiConfig.getFilePath("/userSign"), file);
+            return AjaxResult.success(avatar);
+        }
+        return AjaxResult.error("上传图片异常,请联系管理员");
+    }
+
     /**
      * 修改用户
      */

+ 10 - 0
master/src/main/java/com/ruoyi/project/system/domain/SysUser.java

@@ -106,6 +106,8 @@ public class SysUser extends BaseEntity
     @Excel(name = "员工编号")
     private String staffId;
 
+    private String signUrl;
+
     public String getStaffId() {
         return staffId;
     }
@@ -359,6 +361,14 @@ public class SysUser extends BaseEntity
         this.deptCheckStrictly = deptCheckStrictly;
     }
 
+    public String getSignUrl() {
+        return signUrl;
+    }
+
+    public void setSignUrl(String signUrl) {
+        this.signUrl = signUrl;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 6 - 2
master/src/main/resources/mybatis/system/SysUserMapper.xml

@@ -27,6 +27,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="homeType"       column="home_type"       />
 		<result property="dataScope"          column="data_scope"            />
 		<result property="deptCheckStrictly"  column="dept_check_strictly"   />
+		<result property="signUrl"  column="sign_url"   />
 		<association property="dept"    column="dept_id" javaType="SysDept" resultMap="deptResult" />
 		<collection  property="roles"   javaType="java.util.List"        resultMap="RoleResult" />
 	</resultMap>
@@ -51,7 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 	<sql id="selectUserVo">
         select u.user_id,u.staffid,u.home_type, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
-			   u.data_scope, u.dept_check_strictly,
+			   u.data_scope, u.dept_check_strictly,u.sign_url,
         d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status,
         r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
         from sys_user u
@@ -195,6 +196,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">status,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
  			<if test="remark != null and remark != ''">remark,</if>
+			<if test="signUrl != null and signUrl != ''">sign_url,</if>
  			create_time
  		)values(
  			<if test="userId != null and userId != ''">#{userId},</if>
@@ -211,7 +213,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
- 			sysdate
+			<if test="signUrl != null and signUrl != ''">#{signUrl},</if>
+			sysdate
  		)
 	</insert>
 
@@ -235,6 +238,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="remark != null">remark = #{remark},</if>
 			<if test="dataScope != null and dataScope != ''">data_scope = #{dataScope},</if>
 			<if test="deptCheckStrictly != null">dept_check_strictly = #{deptCheckStrictly},</if>
+			<if test="signUrl != null">sign_url = #{signUrl},</if>
  			update_time = sysdate
  		</set>
  		where user_id = #{userId}

+ 77 - 1
ui/src/views/system/user/index.vue

@@ -337,6 +337,23 @@
             </el-form-item>
           </el-col>
         </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item :label="$t('签名')"  prop="locationUrl">
+              <el-upload
+                class="avatar-uploader"
+                :action="signPic.url"
+                :headers="signPic.headers"
+                :show-file-list="false"
+                :on-success="handleAvatarSuccess"
+                :before-upload="beforeAvatarUpload"
+                >
+                <img v-if="imageUrl" :src="imageUrl" class="avatar">
+                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+              </el-upload>
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-row>
           <el-col :span="24">
             <el-form-item :label="$t('备注')">
@@ -513,6 +530,14 @@ export default {
         // 上传的地址
         url: process.env.VUE_APP_BASE_API + "/system/user/importData"
       },
+      signPic: {
+        fileList: [],
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/system/user/uploadFile",
+      },
+      imageUrl: '',
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -644,8 +669,10 @@ export default {
         postIds: [],
         roleIds: [],
         deptIds: [],
-        deptCheckStrictly: true
+        deptCheckStrictly: true,
+        signUrl: undefined,
       };
+      this.imageUrl = undefined
       this.resetForm("form");
     },
     /** 搜索按钮操作 */
@@ -684,6 +711,10 @@ export default {
       const userId = row.userId || this.ids;
       getUser(userId).then(response => {
         this.form = response.data;
+        if (this.form.signUrl) {
+          this.imageUrl = process.env.VUE_APP_BASE_API +  this.form.signUrl
+
+        }
         this.postOptions = response.posts;
         this.roleOptions = response.roles;
         this.form.postIds = response.postIds;
@@ -855,6 +886,51 @@ export default {
       checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
       return checkedKeys;
     },
+    handleAvatarSuccess(res, file) {
+      this.imageUrl = URL.createObjectURL(file.raw);
+      this.form.signUrl = res.msg
+      console.log(this.form.locationUrl)
+    },
+    beforeAvatarUpload(file) {
+      const isJPG = file.type === 'image/jpeg' || file.type === 'image/png'
+      const isLt2M = file.size / 1024 / 1024 < 2;
+      if (!isJPG) {
+        this.$message.error('上传图片只能是 JPG、png 格式!');
+      }
+      if (!isLt2M) {
+        this.$message.error('上传图片大小不能超过 2MB!');
+      }
+      return isJPG && isLt2M;
+    },
+    handlePictureCardPreview(file) {
+      this.dialogImageUrl = file.url;
+      this.dialogVisible = true;
+    },
   }
 };
 </script>
+<style>
+.avatar-uploader .el-upload {
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+  border-color: #409EFF;
+}
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 178px;
+  height: 178px;
+  line-height: 178px;
+  text-align: center;
+}
+.avatar {
+  width: 178px;
+  height: 178px;
+  display: block;
+}
+</style>