1
0
فهرست منبع

fix:完善细节

lsw 10 ماه پیش
والد
کامیت
0217cbe999

+ 1 - 1
admin-ui/src/App.vue

@@ -21,7 +21,7 @@ export default  {
 /**挂载iconfont字体图标*/
 @font-face {
 	font-family: 'iconfont';
-	src: url('https://at.alicdn.com/t/c/font_4225786_b254k34xnod.ttf?t=1693273272349') format('truetype');
+	src: url('https://at.alicdn.com/t/c/font_4620946_iqtdfey33er.ttf?t=1722870966842') format('truetype');
 	/* src: url('~@/static/font/iconfont.ttf') format('truetype'); */
 }
 .icon {

BIN
admin-ui/src/assets/images/profile.jpg


+ 77 - 24
admin-ui/src/assets/styles/extend.scss

@@ -150,7 +150,7 @@
   margin-top: 10px;
 }
 .el-textarea.is-disabled .el-textarea__inner {
-    color: #808080 !important;
+  color: #808080 !important;
 }
 .logItem {
   padding-bottom: 8px;
@@ -202,32 +202,32 @@
   padding: 80px 35px 90px 35px;
   margin: 0 auto;
   margin-top: -10px;
-.message-bubble-received {
-  background: #dcf8c6;
-  border-radius: 10px;
-  padding: 10px;
-  max-width: 80%;
-  word-wrap: break-word;
-  position: relative;
-  margin-left: 10px;
-  float: left;
-  clear: both;
-  font-size: 14px;
-  margin-top: 20px;
-  color: #262626;
+  .message-bubble-received {
+    background: #dcf8c6;
+    border-radius: 10px;
+    padding: 10px;
+    max-width: 80%;
+    word-wrap: break-word;
+    position: relative;
+    margin-left: 10px;
+    float: left;
+    clear: both;
+    font-size: 14px;
+    margin-top: 20px;
+    color: #262626;
 
-  &::before {
-    content: '';
-    position: absolute;
-    width: 0;
-    height: 0;
-    border-style: solid;
-    border-width: 0 10px 10px 10px;
-    border-color: transparent transparent #dcf8c6 transparent;
-    left: -10px;
+    &::before {
+      content: '';
+      position: absolute;
+      width: 0;
+      height: 0;
+      border-style: solid;
+      border-width: 0 10px 10px 10px;
+      border-color: transparent transparent #dcf8c6 transparent;
+      left: -10px;
+    }
   }
 }
-}
 .guise-mobile-2 {
   left: 20%;
 }
@@ -245,6 +245,24 @@
     background-color: #ddd;
     border-radius: 5px;
   }
+
+  .js {
+    .head {
+      text-align: center;
+      img {
+        width: 100px;
+        height: 140px;
+        border-radius: 5px;
+      }
+    }
+    .name {
+      margin-bottom: 10px;
+      text-align: center;
+      font-weight: bold;
+      font-size: 16px;
+      margin-top: 10px;
+    }
+  }
 }
 .mbg {
   background-color: #f1f1f1;
@@ -393,3 +411,38 @@
     margin-top: 10px;
   }
 }
+.cards {
+  border-radius: 10px;
+  border: 1px solid #1890ff;
+  padding: 20px;
+  overflow: hidden;
+  .avatar {
+    width: 120px;
+    height: 160px;
+    border-radius: 5px;
+    float: left;
+  }
+  .con {
+    padding-left: 15px;
+    float: left;
+    .title {
+      font-weight: bold;
+      font-size: 17px;
+    }
+    .desc {
+      font-size: 15px;
+      padding-top: 5px;
+    }
+    .ntc {
+      font-size: 12px;
+      padding-top: 10px;
+      color: #7b7b7b;
+    }
+    .xx {
+      margin-top: 15px;
+      a {
+        color: white !important;
+      }
+    }
+  }
+}

+ 5 - 7
admin-ui/src/assets/styles/ruoyi.scss

@@ -309,21 +309,19 @@ h6 {
 
 /* image */
 .img-circle {
-  border-radius: 50%;
+  border-radius: 5px;
 }
 
 .img-lg {
-  width: 120px;
-  height: 120px;
+  width: 100px;
+  height: 140px;
 }
 
 .avatar-upload-preview {
   position: absolute;
-  top: 50%;
-  transform: translate(50%, -50%);
   width: 200px;
-  height: 200px;
-  border-radius: 50%;
+  height: 240px;
+  border-radius: 5px;
   box-shadow: 0 0 4px #ccc;
   overflow: hidden;
 }

+ 3 - 3
admin-ui/src/layout/components/Navbar.vue

@@ -17,7 +17,7 @@
           <img :src="avatar" class="user-avatar" />
           <div class="cons">
             <div class="nickName">{{user.nickName}}</div>
-            <div class="desc omit">{{user.deptNameStr?user.deptNameStr:'无部门'}}</div>
+            <div class="desc omit">{{user.deptNameStr?user.deptNameStr:'无科室'}}</div>
           </div>
           <i class="el-icon-caret-bottom" />
         </div>
@@ -173,9 +173,9 @@ export default {
 
         .user-avatar {
           cursor: pointer;
-          width: 40px;
+          width: 30px;
           height: 40px;
-          border-radius: 50%;
+          border-radius: 3px;
         }
         .cons {
           float: right;

+ 2 - 0
admin-ui/src/store/getters.js

@@ -9,6 +9,8 @@ const getters = {
   avatar: state => state.user.avatar,
   name: state => state.user.name,
   introduction: state => state.user.introduction,
+  introduce: state => state.user.introduce,
+  nickName:state => state.user.nickName,
   roles: state => state.user.roles,
   permissions: state => state.user.permissions,
   permission_routes: state => state.permission.routes,

+ 6 - 0
admin-ui/src/store/modules/user.js

@@ -5,7 +5,9 @@ const user = {
   state: {
     token: getToken(),
     name: '',
+    nickName:'',
     id:'',
+    introduce:'',
     avatar: '',
     roles: [],
     permissions: []
@@ -33,6 +35,9 @@ const user = {
     deptNameStr: (state, deptNameStr) => {
       state.deptNameStr = deptNameStr
     },
+    introduce: (state, introduce) => {
+      state.introduce = introduce
+    },
     deptId: (state, deptId) => {
       state.deptId = deptId
     },
@@ -81,6 +86,7 @@ const user = {
           commit('SET_nickName', user.nickName)
           commit('deptId', user.deptId);
           commit('phone', user.phonenumber);
+          commit('introduce', user.introduce);
           if(user.dept){
             commit('deptNameStr', user.dept.deptName||'')
             commit('deptId', user.dept.deptId);

+ 184 - 100
admin-ui/src/views/index.vue

@@ -1,133 +1,199 @@
 <template>
   <div class="dashboard-editor-container">
     <div class="mtitle">
-      <span style="font-size: 19px">欢迎使用,{{ user.nickName }}</span>
-      <iframe
-        allowtransparency="true"
-        frameborder="0"
-        width="180"
-        height="36"
-        scrolling="no"
-        style="padding-top: 10px"
-        src="//tianqi.2345.com/plugin/widget/index.htm?s=3&z=2&t=0&v=0&d=2&bd=0&k=&f=#545555&ltf=#545555&htf=ffffff&q=1&e=1&a=1&c=72036&w=180&h=36&align=center"
-      ></iframe>
+      <span style="font-size: 19px">欢迎使用岑溪人民医院随访系统</span>
+      <iframe allowtransparency="true" frameborder="0" width="180" height="36" scrolling="no" style="padding-top: 10px" src="//tianqi.2345.com/plugin/widget/index.htm?s=3&z=2&t=0&v=0&d=2&bd=0&k=&f=#545555&ltf=#545555&htf=ffffff&q=1&e=1&a=1&c=72036&w=180&h=36&align=center"></iframe>
     </div>
-<!--    <panel-group :cdata="data.count" />
     <div class="chart-wrapper">
-      <div class="pop" style="width: 100%">
-        <div class="out" style="margin: 0px; margin-top: 5px">
+      <!--个人形象-->
+      <div class="pop" style="width: 65%">
+        <div class="out">
           <div class="int">
             <div class="bos">
               <div class="lab">
                 <div class="bsg"></div>
-                <div class="tit">
-                  <span>本年每月捐款金额统计</span>
-                </div>
-                <div class="years">
-                  <div class="ctype">
-                    <div class="year" :class="{ active: currentType == index }" @click="currentType = index" v-for="(item, index) in types" :key="index">{{ item.name }}</div>
+                <div class="tit">个人形象</div>
+              </div>
+              <div class="cards">
+                <div class="ctop">
+                  <img :src="avatar" class="avatar" />
+                  <div class="con">
+                    <div class="title">姓名:{{ nickName }}</div>
+                    <div class="desc">角色:{{ user.roleName ? user.roleName : '无角色' }}</div>
+                    <div class="desc">科室:{{ user.deptNameStr ? user.deptNameStr : '无科室' }}</div>
+                    <el-button icon="el-icon-edit" type="primary" class="xx">
+                      <router-link to="/user/profile">编辑我的形象</router-link>
+                    </el-button>
+                    <div class="ntc">只有医生才会在小程序上面展示个人形象</div>
                   </div>
-                  <div class="year" :class="{ active: currentYear == index }" v-for="(item, index) in data.year" :key="index" @click="selectYear(index)">{{ item.year }}年</div>
                 </div>
               </div>
-              <BarChart :chartData="chartData" :type="types[currentType].value"></BarChart>
             </div>
           </div>
         </div>
-      </div>
-      <div class="pop" style="width: 50%; margin-top: 10px">
-        <div class="out" style="margin: 0px">
+        <!--数据统计-->
+        <div class="out">
           <div class="int">
             <div class="bos">
               <div class="lab">
                 <div class="bsg"></div>
-                <div class="tit">捐赠项目排名</div>
+                <div class="tit">数据统计</div>
+              </div>
+              <div class="yr">
+                <div class="rout" style="padding-left: 0px">
+                  <div class="rint" style="background-color: rgb(242 232 255)">
+                    <div class="icon" style="color: #8642df">&#xe6b6;</div>
+                    <div class="rcon">
+                      <div class="rtt omit">所有患者</div>
+                      <div class="rdesc">{{ data.count.visit || 0 }}</div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+              <div class="yr">
+                <div class="rout">
+                  <div class="rint" style="background-color: rgb(255 245 229)">
+                    <div class="icon" style="color: #fab22e">&#xe716;</div>
+                    <div class="rcon">
+                      <div class="rtt omit">复诊提醒</div>
+                      <div class="rdesc">{{ data.count.up || 0 }}</div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+              <div class="yr">
+                <div class="rout">
+                  <div class="rint" style="background-color: rgb(237 246 254)">
+                    <div class="icon" style="color: #489afd">&#xe62f;</div>
+                    <div class="rcon">
+                      <div class="rtt omit">回访记录</div>
+                      <div class="rdesc">{{ data.count.record || 0 }}</div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+              <div class="yr">
+                <div class="rout" style="padding-right: 0px">
+                  <div class="rint" style="background-color: rgb(255 242 245)">
+                    <div class="icon" style="color: #fa5376">&#xe69a;</div>
+                    <div class="rcon">
+                      <div class="rtt omit">知识库</div>
+                      <div class="rdesc">{{ data.count.knowledge || 0 }}</div>
+                    </div>
+                  </div>
+                </div>
               </div>
-              <el-table :data="rankingProject" border height="270">
-                <el-table-column label="捐赠项目" align="left" prop="projectName" />
-                <el-table-column label="累计捐赠次数" align="center" prop="nums" width="130" />
-                <el-table-column label="累计捐赠(¥)" align="center" prop="money" width="150">
-                  <template slot-scope="scope">{{ scope.row.money.toFixed(2) || 0 }} 元</template>
-                </el-table-column>
-              </el-table>
             </div>
           </div>
         </div>
-      </div>
-      <div class="pop" style="width: 50%; margin-top: 10px">
-        <div class="out" style="margin: 0px; margin-left: 10px">
+        <div class="out">
           <div class="int">
             <div class="bos">
               <div class="lab">
                 <div class="bsg"></div>
-                <div class="tit">捐赠金额排名</div>
+                <div class="tit">快捷菜单</div>
+              </div>
+              <div class="yr" style="width: 20%" v-for="(item, index) in menu" :key="item.id" v-hasPermi="[item.hasPermi]">
+                <router-link :to="item.url">
+                  <div class="rout">
+                    <div class="rint" style="text-align: center; cursor: pointer">
+                      <span class="icon" :style="{ float: 'none', color: item.color }" v-html="item.icon">&#xe60d;</span>
+                      <div class="ctt">{{ item.name }}</div>
+                    </div>
+                  </div>
+                </router-link>
               </div>
-              <el-table :data="rankingName" border height="270">
-                <el-table-column label="捐赠者(单位/个人)" align="left" prop="projectName">
-                  <template slot-scope="scope">{{ scope.row.NAME || '匿名' }}</template>
-                </el-table-column>
-                <el-table-column label="单笔捐赠(¥)" align="center" prop="money" width="150" />
-                <el-table-column label="捐赠时间" align="center" prop="create_time" width="190" />
-              </el-table>
             </div>
           </div>
         </div>
       </div>
-    </div> -->
+      <!--手机预览-->
+      <div class="pop" style="width: 35%">
+        <div class="out mar0">
+          <div class="int">
+            <div class="bos">
+              <div class="div-mc">
+                <div class="guise-mobile">
+                  <div class="guise-mobile-show" ref="scrollbar">
+                    <div class="js">
+                      <div class="head">
+                        <img :src="avatar" />
+                      </div>
+                      <div class="name">{{ nickName }}</div>
+                      <div class="introduce" v-html="introduce" v-if="introduce"></div>
+                      <el-empty v-else description="暂无个人介绍" :image-size="100" v-else></el-empty>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
   </div>
 </template>
 
 <script>
-import PanelGroup from './dashboard/PanelGroup';
-import BarChart from './dashboard/BarChart';
+import { mapGetters } from 'vuex';
 import Vue from 'vue';
 export default {
   name: 'Index',
-  components: {
-    PanelGroup,
-    BarChart
-  },
+  components: {},
   data() {
     return {
       user: this.$store.state.user,
-      currentYear: 0, //当前年份
-      currentType: 0, //当前图表类型
-      types: [
-        { name: '柱状图', value: 'bar' },
-        { name: '折线图', value: 'line' }
-      ],
-      data: { count: { total: 0 }, year: [] },
-      chartData: [],
-      rankingProject: [], //捐赠项目排名
-      rankingName: [] //捐赠金额排名
+      data: { count: {} },
+      menu: [
+        {
+          icon: '&#xe6b6;',
+          color: '#607D8B',
+          name: '患者信息',
+          url: '/patient',
+          hasPermi: 'work:patient:list'
+        },
+        {
+          icon: '&#xe716;',
+          color: '#1890ff',
+          name: '复诊提醒',
+          url: '/follow/up',
+          hasPermi: 'work:up:list'
+        },
+        {
+          icon: '&#xe62f;',
+          color: '#FF5722',
+          name: '回访记录',
+          url: '/follow/record',
+          hasPermi: 'work:record:list'
+        },
+        {
+          icon: '&#xe60b;',
+          color: '#4CAF50',
+          name: '回访模板',
+          url: '/follow/template',
+          hasPermi: 'work:template:list'
+        },
+        {
+          icon: '&#xe69a;',
+          color: '#3F51B5',
+          name: '知识库',
+          url: '/knowledge',
+          hasPermi: 'work:knowledge:list'
+        }
+      ]
     };
   },
+  computed: {
+    ...mapGetters(['avatar', 'nickName', 'introduce'])
+  },
   created() {
-    //this.getData();
-    //this.getRanking();
+    this.getData();
   },
   methods: {
     getData() {
       this.ajax({ url: '/home/index' }).then((response) => {
         this.data = response.data;
-        this.currentYear = this.data.year.length - 1;
-        this.getRecord();
-      });
-    },
-    getRanking() {
-      this.ajax({ url: '/home/ranking' }).then((response) => {
-        this.rankingProject = response.data.rankingProject;
-        this.rankingName = response.data.rankingName;
-      });
-    },
-    getRecord() {
-      this.ajax({ url: '/home/record', data: { year: this.data.year[this.currentYear].year } }).then((response) => {
-        this.chartData = response.data;
       });
-    },
-    selectYear(index) {
-      this.currentYear = index;
-      this.getRecord();
     }
   }
 };
@@ -147,13 +213,13 @@ export default {
       width: 33.33%;
       overflow: hidden;
       .out {
-        margin: 10px;
-        box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.03);
+        margin: 16px 10px 10px 10px;
+        box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
         .int {
           padding: 15px;
           background: #fff;
           overflow: hidden;
-          border-radius: 5px;
+          border-radius: 7px;
         }
       }
     }
@@ -163,24 +229,42 @@ export default {
     padding: 0px 10px 0px 10px;
     width: 100%;
     border: 0px;
-    .years {
-      float: right;
-      margin-top: -30px;
-      overflow: hidden;
-      .ctype {
-        float: left;
-        margin-right: 30px;
-      }
-      .year {
-        float: left;
-        padding: 5px 10px;
-        background-color: #f6f6f6;
-        cursor: pointer;
-        font-size: 14px;
-        color: #545555;
-        &.active {
-          background-color: rgb(64, 158, 255);
-          color: white;
+    .yr {
+      float: left;
+      width: 25%;
+      .rout {
+        padding: 6px;
+        .rint {
+          padding: 10px;
+          border-radius: 5px;
+          overflow: hidden;
+          .icon {
+            float: left;
+            font-size: 30px;
+            background-color: white;
+            border-radius: 50%;
+            padding: 10px;
+            width: 50px;
+            height: 50px;
+            box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+          }
+          .rcon {
+            float: left;
+            padding-left: 12px;
+            width: calc(100% - 55px);
+            .rtt {
+              font-size: 14px;
+            }
+            .rdesc {
+              font-weight: bold;
+              padding-top: 7px;
+            }
+          }
+          .ctt {
+            color: #585858;
+            font-size: 14px;
+            padding-top: 18px;
+          }
         }
       }
     }

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

@@ -24,7 +24,7 @@
                 <div class="pull-right">{{ user.email }}</div>
               </li>
               <li class="list-group-item" v-if="!user.companyId">
-                所属部门
+                所属科室
                 <div class="pull-right" v-if="user.dept">{{ user.dept.deptName }}</div>
               </li>
               <li class="list-group-item">

+ 14 - 12
admin-ui/src/views/system/user/profile/userAvatar.vue

@@ -1,9 +1,9 @@
 <template>
   <div>
     <div class="user-info-head" @click="editCropper()"><img v-bind:src="options.img" title="点击上传头像" class="img-circle img-lg" /></div>
-    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="modalOpened"  @close="closeDialog">
+    <el-dialog :title="title" :visible.sync="open" width="800px" :close-on-click-modal="false" append-to-body @opened="modalOpened"  @close="closeDialog">
       <el-row>
-        <el-col :xs="24" :md="12" :style="{height: '350px'}">
+        <el-col :xs="24" :md="24" :style="{height: '350px'}">
           <vue-cropper
             ref="cropper"
             :img="options.img"
@@ -13,14 +13,13 @@
             :autoCropHeight="options.autoCropHeight"
             :fixedBox="options.fixedBox"
             @realTime="realTime"
+            :fixed="options.fixed"
+            :centerBox="options.centerBox"
+            :outputSize="options.outputSize"
+            :fixedNumber="[1,1.4]"
             v-if="visible"
           />
         </el-col>
-        <el-col :xs="24" :md="12" :style="{height: '350px'}">
-          <div class="avatar-upload-preview">
-            <img :src="previews.url" :style="previews.img" />
-          </div>
-        </el-col>
       </el-row>
       <br />
       <el-row>
@@ -75,9 +74,12 @@ export default {
       options: {
         img: store.getters.avatar, //裁剪图片的地址
         autoCrop: true, // 是否默认生成截图框
-        autoCropWidth: 200, // 默认生成截图框宽度
+        autoCropWidth: 150, // 默认生成截图框宽度
         autoCropHeight: 200, // 默认生成截图框高度
-        fixedBox: true // 固定截图框大小 不允许改变
+				fixed: true, // 是否开启截图框宽高固定比例
+				full: true, //是否输出原图比例的截图
+				fixedBox: false, //固定截图框大小 不允许改变
+				centerBox: true //截图框是否被限制在图片里面
       },
       previews: {}
     };
@@ -149,7 +151,7 @@ export default {
 .user-info-head {
   position: relative;
   display: inline-block;
-  height: 120px;
+  height: 140px;
 }
 
 .user-info-head:hover:after {
@@ -167,6 +169,6 @@ export default {
   -moz-osx-font-smoothing: grayscale;
   cursor: pointer;
   line-height: 110px;
-  border-radius: 50%;
+  border-radius: 5px;
 }
-</style>
+</style>

+ 5 - 9
admin-ui/src/views/system/user/profile/userInfo.vue

@@ -9,11 +9,8 @@
     <el-form-item label="邮箱" prop="email" v-if="!user.companyId">
       <el-input v-model="user.email" maxlength="50" />
     </el-form-item>
-    <el-form-item label="性别" v-if="!user.companyId">
-      <el-radio-group v-model="user.sex">
-        <el-radio label="0">男</el-radio>
-        <el-radio label="1">女</el-radio>
-      </el-radio-group>
+    <el-form-item label="简介" prop="introduce">
+      <editor v-model="user.introduce" placeholder="请输入" :height="400"></editor>
     </el-form-item>
     <el-form-item>
       <el-button type="primary" @click="submit">保存</el-button>
@@ -24,7 +21,7 @@
 
 <script>
 import { updateUserProfile } from '@/api/system/user';
-
+import store from '@/store';
 export default {
   props: {
     user: {
@@ -60,9 +57,8 @@ export default {
         if (valid) {
           updateUserProfile(this.user).then((response) => {
             this.$modal.msgSuccess('修改成功');
-            setTimeout(() => {
-              location.reload(true);
-            }, 1000);
+            store.commit('SET_nickName', this.user.nickName);
+            store.commit('introduce', this.user.introduce);
           });
         }
       });

+ 5 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java

@@ -68,16 +68,20 @@ public class SysProfileController extends BaseController {
                 && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
             return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
         }
+        if (user.getIntroduce() != null) {
+            user.setBrief(StringUtils.StripHT(user.getIntroduce()));
+        }
         user.setUserId(sysUser.getUserId());
         user.setPassword(null);
         user.setAvatar(null);
         user.setDeptId(null);
-        if (userService.updateUserProfile(user) > 0) {
+        if (userService.updateUserProfile(user)) {
             // 更新缓存用户信息
             sysUser.setNickName(user.getNickName());
             sysUser.setPhonenumber(user.getPhonenumber());
             sysUser.setEmail(user.getEmail());
             sysUser.setSex(user.getSex());
+            sysUser.setIntroduce(user.getIntroduce());
             tokenService.setLoginUser(loginUser);
             return AjaxResult.success();
         }

+ 28 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/IndexController.java

@@ -0,0 +1,28 @@
+package com.ruoyi.web.work.controller;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.web.work.mapper.UserMapper;
+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;
+
+/**
+ * 后台首页统计
+ */
+@RestController
+@RequestMapping("/home")
+public class IndexController extends BaseController {
+
+    @Autowired
+    private UserMapper userMapper;
+
+
+    @GetMapping("/index")
+    public AjaxResult index() {
+        AjaxResult result = new AjaxResult();
+        result.put("count", userMapper.statistics(getLoginUser().getUser()));
+        return AjaxResult.success(result);
+    }
+}

+ 4 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/UserMapper.java

@@ -1,10 +1,12 @@
 package com.ruoyi.web.work.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.web.work.domain.User;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author lsw
@@ -14,4 +16,6 @@ public interface UserMapper extends BaseMapper<User> {
     List<User> selectList(User user);
 
     User selectByOpenId(@Param("openId") String openId);
+
+    Map<String, Object> statistics(SysUser sysUser);
 }

+ 9 - 0
ruoyi-admin/src/main/resources/mapper/work/UserMapper.xml

@@ -16,4 +16,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         SELECT * FROM tb_user WHERE open_id=#{openId}
     </select>
 
+    <!--后台首页统计-->
+    <select id="statistics" resultType="java.util.Map">
+        SELECT
+                ( SELECT COUNT( id ) FROM tb_visit WHERE doctor_code =#{userName}) AS visit,
+                ( SELECT COUNT( id ) FROM tb_follow_record WHERE user_id =#{userId} AND type = 0 ) AS up,
+                ( SELECT COUNT( id ) FROM tb_follow_record WHERE user_id =#{userId} AND type = 1 ) AS record,
+                ( SELECT COUNT( id ) FROM tb_knowledge WHERE user_id =#{userId} ) AS knowledge
+    </select>
+
 </mapper>

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -153,7 +153,7 @@ public interface ISysUserService extends IService<SysUser> {
      * @param user 用户信息
      * @return 结果
      */
-    int updateUserProfile(SysUser user);
+    boolean updateUserProfile(SysUser user);
 
     /**
      * 修改用户头像

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -311,8 +311,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
      * @return 结果
      */
     @Override
-    public int updateUserProfile(SysUser user) {
-        return userMapper.updateUser(user);
+    public boolean updateUserProfile(SysUser user) {
+        return updateById(user);
     }
 
     /**