lsw 1 year ago
parent
commit
22a57cdc8e

+ 1 - 1
admin-ui/src/views/work/user/index.vue

@@ -39,7 +39,7 @@
           <el-tag type="success" v-if="scope.row.isContract == 1">已签署</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="关联企业" align="center" prop="isCompany" width="130" />
+      <el-table-column label="关联企业" align="center" prop="isCompany" width="130" />
       <el-table-column label="账号状态" align="center" prop="state" width="100">
         <template slot-scope="scope">
           <div class="switch">

+ 4 - 4
app/common/http.js

@@ -31,7 +31,7 @@ const request = (opt) => {
 		});
 	}
 	uni.request({
-		url: ip+opt.url,
+		url: ip + opt.url,
 		data: opt.data,
 		method: opt.method,
 		header: opt.header,
@@ -49,9 +49,9 @@ const request = (opt) => {
 				return;
 			}
 			/*******************系统内部错误***************************/
-			if (res.data.code === 500) {
+			if (res.data.code === 500 || res.data.status === 404) {
 				uni.showModal({
-					content: res.data.msg,
+					content: res.data.msg || res.data.message,
 					showCancel: false
 				});
 				opt.fail(res);
@@ -83,7 +83,7 @@ const getUser = () => {
 	return uni.getStorageSync('user');
 }
 module.exports = {
-	ip:ip,
+	ip: ip,
 	request,
 	getUser
 };

+ 1 - 1
app/components/card/card.vue

@@ -65,7 +65,7 @@ export default {
 								if (data.code == 200) {
 									this.fileName = data.fileName;
 									this.$emit('input', data.fileName);
-									this.ocr({ imageUrl: 'http://123.60.57.26/api/profile/upload/2024/04/22/1713726675590.jpg', side: this.side });
+									this.ocr({ imageUrl: this.side == 'face' ? 'http://123.60.57.26/api/profile/upload/2024/04/22/1713726675590.jpg' : 'http://123.60.57.26/api/profile/upload/2024/04/22/1713749068044.jpg', side: this.side });
 								} else {
 									uni.showModal({ content: data.msg, showCancel: false });
 								}

+ 1 - 1
app/pages.json

@@ -34,7 +34,7 @@
 			}
 		},
 		{
-			"path" : "pages/authentication/index",
+			"path" : "pages/auth/index",
 			"style" : 
 			{
 				"navigationBarTitleText" : "实名认证",

+ 26 - 11
app/pages/authentication/index.vue → app/pages/auth/index.vue

@@ -16,20 +16,33 @@
 						<card v-model="item.p1" text="点击拍摄/上传人像面" icon="&#xe690;" :read="item.isAuthentication === 1" side="face" @success="success"></card>
 					</view>
 					<view class="r50">
-						<card v-model="item.p2" text="点击拍摄/上传国徽面" icon="&#xe61f;" :read="item.isAuthentication === 1" side="back"></card>
+						<card v-model="item.p2" text="点击拍摄/上传国徽面" icon="&#xe61f;" :read="item.isAuthentication === 1" side="back" @success="success"></card>
 					</view>
 				</view>
 			</view>
-			<view class="form" v-else>
-				<view class="form_group">
-					<view class="lable re">姓名</view>
-					<input type="text" placeholder="请输入姓名" v-model="item.name" :disabled="item.isAuthentication === 1" />
+			<view v-else>
+				<view class="form">
+					<view class="form_group">
+						<view class="lable re">姓名</view>
+						<input type="text" placeholder="请输入姓名" v-model="item.name" :disabled="item.isAuthentication === 1" />
+					</view>
+					<view class="form_group">
+						<view class="lable re">身份证</view>
+						<input type="text" placeholder="请输入身份证" v-model="item.idCard" :disabled="item.isAuthentication === 1" />
+					</view>
 				</view>
-				<view class="form_group">
-					<view class="lable re">身份证</view>
-					<input type="text" placeholder="请输入姓名" v-model="item.idCard" :disabled="item.isAuthentication === 1" />
+				<view class="form" style="margin-top: 15px">
+					<view class="form_group">
+						<view class="lable re">手机号</view>
+						<input type="text" placeholder="请输入手机号" v-model="item.phone" :disabled="item.isAuthentication === 1" />
+					</view>
+					<view class="form_group">
+						<view class="lable re">支付宝账号</view>
+						<input type="text" placeholder="请输入支付宝账号" v-model="item.alipay" :disabled="item.isAuthentication === 1" />
+					</view>
 				</view>
 			</view>
+
 			<button class="btn" @click="next()" v-if="step === 1">下一步</button>
 			<button class="btn" @click="save()" v-if="step === 2 && item.isAuthentication != 1">确定</button>
 		</view>
@@ -81,20 +94,22 @@ export default {
 				{ name: 'name', checkType: 'notnull', errorMsg: '请输入姓名' },
 				{ name: 'idCard', checkType: 'notnull', errorMsg: '请输入身份证' },
 				{ name: 'p1', checkType: 'notnull', errorMsg: '请上传身份证人面像' },
-				{ name: 'p2', checkType: 'notnull', errorMsg: '请上传身份证人徽面' }
+				{ name: 'p2', checkType: 'notnull', errorMsg: '请上传身份证人徽面' },
+				{ name: 'phone', checkType: 'phone', errorMsg: '请请输入手机号' },
+				{ name: 'alipay', checkType: 'notnull', errorMsg: '请输入支付宝账号' }
 			];
 			if (!this.verify.check(this.item, rule)) {
 				uni.showModal({ content: this.verify.error, showCancel: false });
 				return false;
 			}
 			this.http.request({
-				url: '/app/user/authentication',
+				url: '/app/user/auth',
 				data: this.item,
 				method: 'POST',
 				success: (res) => {
 					uni.showModal({
 						title: '提示',
-						content: '提交成功,等待后台审核。',
+						content: '实名认证成功。',
 						showCancel: false,
 						success: (res) => {
 							uni.navigateBack();

+ 16 - 11
app/pages/index/index.vue

@@ -11,7 +11,7 @@
 		<view class="flow">
 			<view class="title">操作流程</view>
 			<!--实名认证-->
-			<view class="item" @click="go('/pages/authentication/index')">
+			<view class="item" @click="go('auth')">
 				<view class="icon tb">&#xe600;</view>
 				<view class="con">
 					<view class="bt">实名认证</view>
@@ -27,7 +27,7 @@
 				</view>
 			</view>
 			<!--关联企业-->
-			<view class="item" @click="go('/pages/company/index')">
+			<view class="item" @click="go('company')">
 				<view class="icon tb">&#xe623;</view>
 				<view class="con">
 					<view class="bt">关联企业</view>
@@ -43,7 +43,7 @@
 				</view>
 			</view>
 			<!--开始接包-->
-			<view class="item">
+			<view class="item" @click="go('packages')">
 				<view class="icon tb">&#xe604;</view>
 				<view class="con">
 					<view class="bt">开始接包</view>
@@ -51,11 +51,11 @@
 					<view class="zt">{{ !user.isCompany || user.isCompany == 0 ? '请先完成上一步' : '去接包' }}</view>
 				</view>
 				<view class="state">
-					<view class="go" :style="{ backgroundColor: user.isCompany > 0 ? '#5a7afc' : '#d6d6d6' }" @click="tab()">去接包</view>
+					<view class="go" :style="{ backgroundColor: user.isCompany > 0 ? '#5a7afc' : '#d6d6d6' }">去接包</view>
 				</view>
 			</view>
 			<!--电子签约-->
-			<view class="item">
+			<view class="item" @click="go('contract')">
 				<view class="icon tb">&#xe6ed;</view>
 				<view class="con">
 					<view class="bt">电子签约</view>
@@ -108,15 +108,20 @@ export default {
 		},
 		go(url) {
 			if (this.hasLogin()) {
-				uni.navigateTo({ url: url });
+				if (url == 'auth') {
+					uni.navigateTo({ url: '/pages/auth/index' });
+				}
+				if (url == 'company' && this.user.isAuthentication === 1) {
+					uni.navigateTo({ url: '/pages/company/index' });
+				}
+				if (url == 'packages' && this.user.isCompany > 0) {
+					uni.switchTab({ url: '/pages/packages/index' });
+				}
+				if (url == 'contract') {
+				}
 			} else {
 				uni.navigateTo({ url: '/pages/user/login' });
 			}
-		},
-		tab() {
-			if (this.user.isCompany > 0) {
-				uni.switchTab({ url: '/pages/packages/index' });
-			}
 		}
 	}
 };

+ 27 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/api/Api_ContractController.java

@@ -0,0 +1,27 @@
+package com.ruoyi.web.work.api;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.web.work.service.IContractService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 合同模板
+ *
+ * @author lsw
+ * @date 2024-04-22
+ */
+@RestController
+@RequestMapping("/work/contract")
+public class Api_ContractController extends BaseController {
+    @Autowired
+    private IContractService contractService;
+
+    @GetMapping(value = "/detail")
+    public AjaxResult detail() {
+        return AjaxResult.success(contractService.selectContract());
+    }
+}

+ 4 - 4
ruoyi-admin/src/main/java/com/ruoyi/web/work/api/Api_UserController.java

@@ -2,7 +2,7 @@ package com.ruoyi.web.work.api;
 
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.web.work.api.config.BaseController;
-import com.ruoyi.web.work.domain.dto.AuthenticationDto;
+import com.ruoyi.web.work.domain.dto.AuthDto;
 import com.ruoyi.web.work.domain.dto.LoginDto;
 import com.ruoyi.web.work.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,9 +26,9 @@ public class Api_UserController extends BaseController {
      *
      * @return
      */
-    @PostMapping("/authentication")
-    public AjaxResult authentication(@Validated @RequestBody AuthenticationDto dto) {
-        return userService.authentication(dto);
+    @PostMapping("/auth")
+    public AjaxResult auth(@Validated @RequestBody AuthDto dto) {
+        return userService.auth(dto);
     }
 
     @GetMapping("/info")

+ 66 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/ContractDetailController.java

@@ -0,0 +1,66 @@
+package com.ruoyi.web.work.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.web.work.domain.ContractDetail;
+import com.ruoyi.web.work.service.IContractDetailService;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 合同签约管理
+ * @author lsw
+ * @date 2024-04-22
+ */
+@RestController
+@RequestMapping("/work/detail")
+public class ContractDetailController extends BaseController {
+    @Autowired
+    private IContractDetailService contractDetailService;
+
+    @PreAuthorize("@ss.hasPermi('work:detail:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ContractDetail contractDetail){
+        startPage();
+        List<ContractDetail> list = contractDetailService.selectList(contractDetail);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:detail:query')")
+    @GetMapping(value = "/detail/{id}")
+    public AjaxResult detail(@PathVariable("id") Long id){
+        return AjaxResult.success(contractDetailService.getById(id));
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:detail:add')")
+    @Log(title = "合同签约管理", businessType = BusinessType.INSERT)
+    @PostMapping("/add")
+    public AjaxResult add(@RequestBody ContractDetail contractDetail){
+        return toAjax(contractDetailService.save(contractDetail));
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:detail:edit')")
+    @Log(title = "合同签约管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult edit(@RequestBody ContractDetail contractDetail){
+        return toAjax(contractDetailService.updateById(contractDetail));
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:detail:remove')")
+    @Log(title = "合同签约管理", businessType = BusinessType.DELETE)
+    @GetMapping("/remove/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids){
+        return toAjax(contractDetailService.removeByIds(Arrays.asList(ids)));
+    }
+}

+ 50 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/ContractDetail.java

@@ -0,0 +1,50 @@
+package com.ruoyi.web.work.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.experimental.Accessors;
+/**
+ * @author lsw
+ * @date 2024-04-22
+ */
+@Data
+@TableName(value = "tb_contract_detail")
+@Accessors(chain = true)
+public class ContractDetail{
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    @ApiModelProperty(value = "关联模板")
+    private Long contractId;
+
+    @ApiModelProperty(value = "关联用户")
+    private Long userId;
+
+    @ApiModelProperty(value = "合同路径")
+    private String url;
+
+    @ApiModelProperty(value = "状态:0=正常,1=停用")
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateBy;
+
+    @TableField(fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+
+}

+ 15 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/User.java

@@ -33,6 +33,21 @@ public class User{
     @ApiModelProperty(value = "身份证")
     private String idCard;
 
+    @ApiModelProperty(value = "性别")
+    private String sex;
+
+    @ApiModelProperty(value = "家庭地址")
+    private String address;
+
+    @ApiModelProperty(value = "民族")
+    private String nationality;
+
+    @ApiModelProperty(value = "生日")
+    private String birth;
+
+    @ApiModelProperty(value = "有效期")
+    private String endDate;
+
     @ApiModelProperty(value = "开户行")
     private String bankName;
 

+ 24 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/dto/AuthenticationDto.java → ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/dto/AuthDto.java

@@ -6,7 +6,7 @@ import lombok.Data;
 import javax.validation.constraints.NotBlank;
 
 @Data
-public class AuthenticationDto {
+public class AuthDto {
 
     @NotBlank(message = "姓名不能为空")
     @ApiModelProperty(value = "姓名")
@@ -23,4 +23,27 @@ public class AuthenticationDto {
     @NotBlank(message = "身份证人徽面不能为空")
     @ApiModelProperty(value = "身份证人徽面")
     private String p2;
+
+    @NotBlank(message = "手机号不能为空")
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+
+    @NotBlank(message = "支付宝账号不能为空")
+    @ApiModelProperty(value = "支付宝")
+    private String alipay;
+
+    @ApiModelProperty(value = "性别")
+    private String sex;
+
+    @ApiModelProperty(value = "家庭地址")
+    private String address;
+
+    @ApiModelProperty(value = "民族")
+    private String nationality;
+
+    @ApiModelProperty(value = "生日")
+    private String birth;
+
+    @ApiModelProperty(value = "有效期")
+    private String endDate;
 }

+ 13 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/ContractDetailMapper.java

@@ -0,0 +1,13 @@
+package com.ruoyi.web.work.mapper;
+
+import java.util.List;
+import com.ruoyi.web.work.domain.ContractDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @author lsw
+ * @date 2024-04-22
+ */
+public interface ContractDetailMapper extends BaseMapper<ContractDetail> {
+    List<ContractDetail> selectList(ContractDetail contractDetail);
+}

+ 7 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/ContractMapper.java

@@ -1,8 +1,10 @@
 package com.ruoyi.web.work.mapper;
 
-import java.util.List;
-import com.ruoyi.web.work.domain.Contract;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.web.work.domain.Contract;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * @author lsw
@@ -10,4 +12,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ContractMapper extends BaseMapper<Contract> {
     List<Contract> selectList(Contract contract);
+
+    @Select("SELECT * FROM tb_contract WHERE state=0 ORDER BY id DESC LIMIT 1")
+    Contract selectContract();
 }

+ 13 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/IContractDetailService.java

@@ -0,0 +1,13 @@
+package com.ruoyi.web.work.service;
+
+import java.util.List;
+import com.ruoyi.web.work.domain.ContractDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @author lsw
+ * @date 2024-04-22
+ */
+public interface IContractDetailService extends IService<ContractDetail>{
+    List<ContractDetail> selectList(ContractDetail contractDetail);
+}

+ 5 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/IContractService.java

@@ -1,8 +1,9 @@
 package com.ruoyi.web.work.service;
 
-import java.util.List;
-import com.ruoyi.web.work.domain.Contract;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.web.work.domain.Contract;
+
+import java.util.List;
 
 /**
  * @author lsw
@@ -10,4 +11,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IContractService extends IService<Contract>{
     List<Contract> selectList(Contract contract);
+
+    Contract selectContract();
 }

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/IUserService.java

@@ -3,7 +3,7 @@ package com.ruoyi.web.work.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.web.work.domain.User;
-import com.ruoyi.web.work.domain.dto.AuthenticationDto;
+import com.ruoyi.web.work.domain.dto.AuthDto;
 import com.ruoyi.web.work.domain.dto.LoginDto;
 
 import java.util.List;
@@ -17,5 +17,5 @@ public interface IUserService extends IService<User>{
 
     AjaxResult login(LoginDto dto);
 
-    AjaxResult authentication(AuthenticationDto dto);
+    AjaxResult auth(AuthDto dto);
 }

+ 24 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/ContractDetailServiceImpl.java

@@ -0,0 +1,24 @@
+package com.ruoyi.web.work.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.web.work.mapper.ContractDetailMapper;
+import com.ruoyi.web.work.domain.ContractDetail;
+import com.ruoyi.web.work.service.IContractDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @author lsw
+ * @date 2024-04-22
+ */
+@Service
+public class ContractDetailServiceImpl extends ServiceImpl<ContractDetailMapper, ContractDetail> implements IContractDetailService {
+    @Autowired
+    private ContractDetailMapper contractDetailMapper;
+
+    @Override
+    public List<ContractDetail> selectList(ContractDetail contractDetail) {
+        return contractDetailMapper.selectList(contractDetail);
+    }
+}

+ 11 - 5
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/ContractServiceImpl.java

@@ -1,12 +1,13 @@
 package com.ruoyi.web.work.service.impl;
 
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.ruoyi.web.work.mapper.ContractMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.web.work.domain.Contract;
+import com.ruoyi.web.work.mapper.ContractMapper;
 import com.ruoyi.web.work.service.IContractService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * @author lsw
@@ -21,4 +22,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
     public List<Contract> selectList(Contract contract) {
         return contractMapper.selectList(contract);
     }
+
+    @Override
+    public Contract selectContract() {
+        return contractMapper.selectContract();
+    }
 }

+ 9 - 5
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/UserServiceImpl.java

@@ -9,7 +9,7 @@ import com.ruoyi.common.utils.http.HttpUtils;
 import com.ruoyi.web.work.api.config.TokenServices;
 import com.ruoyi.web.work.api.util.AppUtil;
 import com.ruoyi.web.work.domain.User;
-import com.ruoyi.web.work.domain.dto.AuthenticationDto;
+import com.ruoyi.web.work.domain.dto.AuthDto;
 import com.ruoyi.web.work.domain.dto.LoginDto;
 import com.ruoyi.web.work.mapper.UserMapper;
 import com.ruoyi.web.work.service.IUserService;
@@ -65,15 +65,19 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     }
 
     @Override
-    public AjaxResult authentication(AuthenticationDto dto) {
+    public AjaxResult auth(AuthDto dto) {
         User user = getById(AppUtil.getUser().getId());
+        if (user == null) {
+            return AjaxResult.error("用户信息不存在");
+        }
         if (user.getIsAuthentication() == 1) {
-            return AjaxResult.error("已经认证通过");
+            return AjaxResult.error("你的信息已认证通过");
         }
         BeanUtils.copyProperties(dto, user);
         user.setIsAuthentication(1);
-        user.setId(AppUtil.getUser().getId());
-        updateById(user);
+        if (!updateById(user)) {
+            return AjaxResult.error("实名认证失败,请联系客服");
+        }
         return AjaxResult.success();
     }
 }