Przeglądaj źródła

fead:优化小程序首页

lsw 9 miesięcy temu
rodzic
commit
996e9dbf65

+ 81 - 0
admin-ui/src/views/work/user/edit.vue

@@ -0,0 +1,81 @@
+<template>
+  <div class="cmain">
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-form-item label="微信id" prop="openId">
+          <el-input v-model="form.openId" placeholder="请输入微信id" clearable/>
+        </el-form-item>
+        <el-form-item label="状态" prop="state">
+          <el-input v-model="form.state" placeholder="请输入状态" clearable/>
+        </el-form-item>
+        <el-form-item label="创建者" prop="createBy">
+          <el-input v-model="form.createBy" placeholder="请输入创建者" clearable/>
+        </el-form-item>
+        <el-form-item label="创建时间" prop="createTime">
+          <el-date-picker clearable
+            v-model="form.createTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择创建时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="更新者" prop="updateBy">
+          <el-input v-model="form.updateBy" placeholder="请输入更新者" clearable/>
+        </el-form-item>
+        <el-form-item label="更新时间" prop="updateTime">
+          <el-date-picker clearable
+            v-model="form.updateTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择更新时间">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+    <div class="mfooter">
+      <el-button type="primary" @click="submitForm">确 定</el-button>
+      <el-button @click="$layer.close(layerid)">取 消</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      form: {},
+      rules: {
+        openId: [
+          { required: true, message: "微信id不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  mounted() {
+    if (this.param.id) {
+      this.ajax({ url: '/work/user/detail/' + this.param.id }).then(response => {
+        this.form = response.data;
+      });
+    }
+  },
+  methods: {
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id) {
+              this.ajax({method: 'post',url: '/work/user/edit', data: this.form }).then(response => {
+                  this.$modal.msgSuccess("修改成功");
+                  this.$layer.close(this.layerid);
+                  this.$parent.getList();
+              });
+          } else {
+              this.ajax({method: 'post',url: '/work/user/add', data: this.form }).then(response => {
+                  this.$modal.msgSuccess("新增成功");
+                  this.$layer.close(this.layerid);
+                  this.$parent.getList();
+               });
+          }
+        }
+      });
+    }
+  }
+};
+</script>

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

@@ -0,0 +1,95 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent>
+      <el-form-item label="微信id" prop="openId">
+        <el-input v-model="queryParams.openId" placeholder="请输入微信id"  @keyup.enter.native="handleQuery" clearable class="inp"/>
+      </el-form-item>
+      <el-form-item label="状态" prop="state">
+        <el-input v-model="queryParams.state" placeholder="请输入状态"  @keyup.enter.native="handleQuery" clearable class="inp"/>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-row :gutter="10" class="mb8">
+        <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:user:add']">新增</el-button>
+        <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit',ids)" v-hasPermi="['work:user:edit']">修改</el-button>
+        <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:user:remove']">删除{{ids.length>0?'('+ids.length+')':''}}</el-button>
+    </el-row>
+
+    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 270px)">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="微信id" align="center" prop="openId" />
+      <el-table-column label="状态" align="center" prop="state" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit',scope.row)" v-hasPermi="['work:user:edit']">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:user:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+      <template slot="empty">
+          <el-empty></el-empty>
+      </template>
+    </el-table>
+    <pagination v-if="response.total>0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
+  </div>
+</template>
+
+<script>
+import edit from './edit'
+export default {
+  name: "User",
+  data() {
+    return {
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+                      openId: null,
+                      state: null,
+                orderByColumn:'id', //排序字段
+                isAsc: 'desc' //排序方式
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.ajax({ url: '/work/user/list', data: this.queryParams }).then(response => {
+            this.response = response;
+      });
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    selects(rows) {
+      this.ids = rows.map(item => item.id)
+    },
+    op(tag, row) {
+          if (tag == 'add') {
+            this.iframe({ obj: edit, param: {}, title:'新增',width: '45%', height: '55%'});
+          }
+          if (tag == 'edit') {
+              const id = row.id || this.ids[0];
+              this.iframe({ obj: edit, param: {id: id}, title:'编辑',width: '50%', height: '50%'});
+          }
+    },
+    del(row) {
+        this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
+        this.get({ url: '/work/user/remove/' + (row.id || this.ids) }).then(response => {
+                this.$modal.msgSuccess('删除成功');
+                this.getList();
+            });
+        });
+    }
+  }
+};
+</script>

+ 14 - 0
app/common/common.scss

@@ -181,3 +181,17 @@
 		color: blue;
 	}
 }
+/**底部按钮操作******/
+.mfooter {
+	position: fixed;
+	width: 100%;
+	bottom: 30px;
+	text-align: center;
+	.btn {
+		border-radius: 35px;
+		width: 40%;
+		.icon {
+			padding-right: 5px;
+		}
+	}
+}

+ 14 - 0
app/pages.json

@@ -91,6 +91,20 @@
 			{
 				"navigationBarTitleText" : "医生介绍"
 			}
+		},
+		{
+			"path" : "pages/user/bind/index",
+			"style" : 
+			{
+				"navigationBarTitleText" : "我的就诊人"
+			}
+		},
+		{
+			"path" : "pages/user/bind/add",
+			"style" : 
+			{
+				"navigationBarTitleText" : "绑定就诊人"
+			}
 		}
 	],
 	"tabBar": {

+ 2 - 5
app/pages/department/index.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="msilde">
 		<view class="left">
-			<u-collapse accordion :value="list[0].deptId">
+			<u-collapse accordion >
 				<u-collapse-item :title="d.deptName" :name="d.deptId" v-for="(d, index) in list" :key="d.deptName">
 					<view :class="{ active: index == i.current }" v-for="(i, index) in d.children" :key="i.deptName" class="item" @click="selected(i, index)">{{ i.deptName }}</view>
 				</u-collapse-item>
@@ -21,7 +21,7 @@ export default {
 	data() {
 		return {
 			item: {},
-			list: [{ deptId: 0 }]
+			list: []
 		};
 	},
 	onLoad(e) {
@@ -33,9 +33,6 @@ export default {
 				url: '/app/department/list',
 				success: (res) => {
 					this.list = res.data.data;
-					if (this.list.length > 0 && this.list[0].children.length > 0) {
-						this.selected(this.list[0].children[0], 0);
-					}
 				}
 			});
 		},

+ 1 - 4
app/pages/doctor/index.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="msilde">
 		<view class="left">
-			<u-collapse accordion :value="list[0].deptId">
+			<u-collapse accordion >
 				<u-collapse-item :title="d.deptName" :name="d.deptId" v-for="(d, index) in list" :key="d.deptName">
 					<view :class="{ active: index == i.current }" v-for="(i, index) in d.children" :key="i.deptName" class="item" @click="selected(i, index)">{{ i.deptName }}</view>
 				</u-collapse-item>
@@ -40,9 +40,6 @@ export default {
 				url: '/app/department/list',
 				success: (res) => {
 					this.list = res.data.data;
-					if (this.list.length > 0 && this.list[0].children.length > 0) {
-						this.selected(this.list[0].children[0], 0);
-					}
 				}
 			});
 		},

+ 19 - 0
app/pages/user/bind/add.vue

@@ -0,0 +1,19 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+<style lang="scss">
+
+</style>

+ 83 - 0
app/pages/user/bind/index.vue

@@ -0,0 +1,83 @@
+<template>
+	<view class="main">
+		<view class="list">
+			<view class="item" v-for="(item, index) in list" :key="index" @click="go('/pages/knowledge/detail?id=' + item.id)">
+				<view class="title omit">
+					<text class="icon" v-if="item.top === 1">&#xe61f;</text>
+					<text>{{ item.title }}</text>
+				</view>
+				<view class="desc">
+					<text>{{ item.type }}</text>
+					<text>发布于 {{ item.createTime }}</text>
+				</view>
+			</view>
+			<u-empty v-if="list.length == 0" text="你还未绑定就诊人"></u-empty>
+		</view>
+		<view class="mfooter">
+			<button class="btn" @click="go('/pages/job/position/manage/full_time_push')">
+				<text class="icon">&#xe8d5;</text>
+				<text>去绑定</text>
+			</button>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			list: []
+		};
+	},
+	onLoad(e) {
+		this.getData();
+	},
+	methods: {
+		getData() {
+			this.http.request({
+				url: '/app/user/bind/list',
+				data: this.param,
+				loading: 'false',
+				success: (res) => {
+					this.list = res.data.data;
+				}
+			});
+		},
+		go(url) {
+			uni.navigateTo({ url: url });
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.list {
+	padding: 10px 12px;
+	background-color: white;
+	margin: 10px;
+	border-radius: 10px;
+	.item {
+		border-radius: 5px;
+		padding: 13px 12px 13px 12px;
+		margin-bottom: 10px;
+		overflow: hidden;
+		border-bottom: 1px solid $line;
+		.title {
+			font-size: 15px;
+			font-weight: bold;
+			.icon {
+				color: orangered;
+				padding-right: 3px;
+			}
+		}
+		.desc {
+			font-size: 14px;
+			padding-top: 10px;
+			color: $font-c;
+			text {
+				padding-right: 30px;
+			}
+		}
+	}
+}
+</style>

+ 4 - 4
app/pages/user/index.vue

@@ -1,9 +1,9 @@
 <template>
 	<view class="main">
-		<view class="user" @click="go('/pages/user/info')">
+		<view class="user" @click="go('/pages/user/bind/index')">
 			<image :src="user.avatar ? ip + user.avatar : '../../static/favicon.png'" class="head"></image>
 			<view class="con" v-if="user.id">
-				<view class="nickName">{{ user.nickName ? user.nickName : '个人用户' }}</view>
+				<view class="nickName">{{ user.patientName ? user.patientName : '还未绑定就诊人' }}</view>
 				<view class="welcome">欢迎使用岑溪人民医院小程序</view>
 			</view>
 			<view class="con" v-else>
@@ -51,8 +51,8 @@ export default {
 		};
 	},
 	onShow() {
-/* 		 		this.user = {
-			token: 'eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6Ijk2YzQxNmYyLWI0MTMtNDVkMi05MjE0LTZiN2FiZmQwYTU0NCJ9.2m4Ha8fOGPcUJiNNaI6YVhgtvHLLoeaYNtWnWVQNstRn-2i3wOiJEjMXE1p_yuyPKFMRsk5ibNQpE_gWD9sehA'
+		/* 		 		this.user = {
+			token: 'eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjE3MTkwODMzLWNiNDgtNDkxMC1iZjE1LTEzNDYzMDNkZDI0YSJ9.AWgnb6GT20QIb8DxUwqt0LHaPmfb9WXKlCM1xm20AyOHpnCUtYdf1sCO47gReeIjVKm1MGBoTytUV5YxE5buew'
 		};
 		uni.setStorageSync('user', this.user); */
 		if (this.hasLogin()) {

+ 1 - 0
app/uni_modules/uview-ui/components/u-empty/u-empty.vue

@@ -89,6 +89,7 @@ $u-empty-slot-margin-top: 20rpx !default;
 		justify-content: center;
 		align-items: center;
 		margin-top: -10px;
+		padding-bottom: 10px;
 	}
 }
 .u-slot-wrap {

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

@@ -2,8 +2,10 @@ 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.BindUser;
 import com.ruoyi.web.work.domain.dto.LoginDto;
 import com.ruoyi.web.work.domain.dto.UserEditDto;
+import com.ruoyi.web.work.service.IBindUserService;
 import com.ruoyi.web.work.service.IUserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -12,6 +14,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.rmi.ServerException;
+import java.util.List;
 
 @RestController
 @RequestMapping("/app/user")
@@ -21,12 +24,22 @@ public class Api_UserController extends BaseController {
     @Autowired
     IUserService userService;
 
+    @Autowired
+    IBindUserService bindUserService;
+
     @ApiOperation(value = "微信登录")
     @PostMapping("/login")
     public AjaxResult login(@Validated @RequestBody LoginDto dto) throws ServerException {
         return userService.login(dto);
     }
 
+    @GetMapping("/bind/list")
+    public AjaxResult list(BindUser bindUser) {
+        bindUser.setUserId(getUser().getId());
+        List<BindUser> list = bindUserService.selectList(bindUser);
+        return AjaxResult.success(list);
+    }
+
     @GetMapping("/info")
     public AjaxResult info() {
         return userService.info();

+ 46 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/BindUser.java

@@ -0,0 +1,46 @@
+package com.ruoyi.web.work.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+/**
+ * @author lsw
+ * @date 2024-07-26
+ */
+@Data
+@TableName(value = "tb_bind_user")
+@Accessors(chain = true)
+public class BindUser{
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    @ApiModelProperty(value = "患者id")
+    private Long patientId;
+
+    @ApiModelProperty(value = "小程序id")
+    private Long userId;
+
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @ApiModelProperty(value = "患者姓名")
+    @TableField(exist = false)
+    private String patientName;
+
+    @ApiModelProperty(value = "患者手机号")
+    @TableField(exist = false)
+    private String phone;
+
+    @ApiModelProperty(value = "患者身份证")
+    @TableField(exist = false)
+    private String sfzh;
+
+}

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

@@ -24,6 +24,12 @@ public class User{
     @ApiModelProperty(value = "微信id")
     private String openId;
 
+    @ApiModelProperty(value = "当前患者id")
+    private Long patientId;
+
+    @ApiModelProperty(value = "当前患者姓名")
+    private String patientName;
+
     @ApiModelProperty(value = "状态:0=正常,1=停用")
     private Integer state;
 

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

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

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

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

+ 24 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/BindUserServiceImpl.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.BindUserMapper;
+import com.ruoyi.web.work.domain.BindUser;
+import com.ruoyi.web.work.service.IBindUserService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @author lsw
+ * @date 2024-07-26
+ */
+@Service
+public class BindUserServiceImpl extends ServiceImpl<BindUserMapper, BindUser> implements IBindUserService {
+    @Autowired
+    private BindUserMapper bindUserMapper;
+
+    @Override
+    public List<BindUser> selectList(BindUser bindUser) {
+        return bindUserMapper.selectList(bindUser);
+    }
+}

+ 22 - 0
ruoyi-admin/src/main/resources/mapper/work/BindUserMapper.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="com.ruoyi.web.work.mapper.BindUserMapper">
+    
+    <select id="selectList" resultType="com.ruoyi.web.work.domain.BindUser">
+        SELECT
+        u.*,
+        p.NAME AS patientName,
+        p.phone,
+        p.sfzh
+        FROM
+        tb_bind_user u
+        LEFT JOIN tb_patient p ON p.id = u.patient_id
+        <where>  
+            <if test="patientId != null "> and u.patient_id = #{patientId}</if>
+            <if test="userId != null "> and u.user_id = #{userId}</if>
+        </where>
+    </select>
+
+</mapper>