From 2ad86d79453946ad7f6a3d84a3442e62b4fff0c3 Mon Sep 17 00:00:00 2001
From: zhanglipeng <chinazhanglipeng@qq.com>
Date: Tue, 9 Mar 2021 11:44:57 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E8=B4=B9=E9=A1=B9=E7=9B=AE=E6=8E=92?=
 =?UTF-8?q?=E5=BA=8F=E5=92=8C=E6=A0=B7=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ruoyi-ui/src/views/benyi/customer/index.vue   | 289 ++++++++++--------
 .../security/service/SysLoginService.java     |  13 +-
 .../web/controller/BaseController.java        |  40 ++-
 3 files changed, 193 insertions(+), 149 deletions(-)

diff --git a/ruoyi-ui/src/views/benyi/customer/index.vue b/ruoyi-ui/src/views/benyi/customer/index.vue
index 4d447c64f..3d95560f3 100644
--- a/ruoyi-ui/src/views/benyi/customer/index.vue
+++ b/ruoyi-ui/src/views/benyi/customer/index.vue
@@ -1,127 +1,139 @@
 <template>
   <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="88px"
-    >
-      <el-form-item label="客户姓名" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="请输入姓名"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="联系电话" prop="lxdh">
-        <el-input
-          v-model="queryParams.lxdh"
-          placeholder="请输入联系电话"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="幼儿园名称" prop="schoolname">
-        <el-input
-          v-model="queryParams.schoolname"
-          placeholder="请输入幼儿园名称"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="所在省" prop="sheng">
-        <el-input
-          v-model="queryParams.sheng"
-          placeholder="请输入所在省"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="客户来源" prop="khly">
-        <el-select v-model="queryParams.khly" placeholder="请选择客户来源">
-          <el-option
-            v-for="dict in lyOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="客户身份" prop="sflx">
-        <el-select v-model="queryParams.sflx" placeholder="请选择客户身份">
-          <el-option
-            v-for="dict in gxOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >搜索</el-button
-        >
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >重置</el-button
-        >
-      </el-form-item>
+    <el-form :model="queryParams" ref="queryForm" label-width="70px">
+      <el-row :gutter="10">
+        <el-col :xs="24" :ms="12" :md="5">
+          <el-form-item label="客户姓名" prop="name">
+            <el-input
+              v-model="queryParams.name"
+              placeholder="请输入姓名"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :ms="12" :md="5">
+          <el-form-item label="联系电话" prop="lxdh">
+            <el-input
+              v-model="queryParams.lxdh"
+              placeholder="请输入联系电话"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :ms="12" :md="5">
+          <el-form-item label="园所名称" prop="schoolname">
+            <el-input
+              v-model="queryParams.schoolname"
+              placeholder="请输入园所名称"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :ms="12" :md="5">
+          <el-form-item label="所在省" prop="sheng">
+            <el-input
+              v-model="queryParams.sheng"
+              placeholder="请输入所在省"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :ms="12" :md="5">
+          <el-form-item label="客户来源" prop="khly">
+            <el-select v-model="queryParams.khly" placeholder="请选择客户来源">
+              <el-option
+                v-for="dict in lyOptions"
+                :key="dict.dictValue"
+                :label="dict.dictLabel"
+                :value="dict.dictValue"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :ms="12" :md="5">
+          <el-form-item label="客户身份" prop="sflx">
+            <el-select v-model="queryParams.sflx" placeholder="请选择客户身份">
+              <el-option
+                v-for="dict in gxOptions"
+                :key="dict.dictValue"
+                :label="dict.dictLabel"
+                :value="dict.dictValue"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :ms="12" :md="4">
+          <el-form-item class="no-margin">
+            <el-button
+              type="primary"
+              icon="el-icon-search"
+              size="mini"
+              @click="handleQuery"
+              >搜索</el-button
+            >
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+              >重置</el-button
+            >
+          </el-form-item>
+        </el-col>
+      </el-row>
     </el-form>
 
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['benyi:customer:add']"
-          >新增</el-button
-        >
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['benyi:customer:edit']"
-          >修改</el-button
-        >
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['benyi:customer:remove']"
-          >删除</el-button
-        >
-      </el-col>
-    </el-row>
+    <div class="mb8 btn-list">
+      <el-button
+        type="primary"
+        icon="el-icon-plus"
+        size="mini"
+        @click="handleAdd"
+        v-hasPermi="['benyi:customer:add']"
+        >新增</el-button
+      >
+      <el-button
+        type="success"
+        icon="el-icon-edit"
+        size="mini"
+        :disabled="single"
+        @click="handleUpdate"
+        v-hasPermi="['benyi:customer:edit']"
+        >修改</el-button
+      >
+      <el-button
+        type="danger"
+        icon="el-icon-delete"
+        size="mini"
+        :disabled="multiple"
+        @click="handleDelete"
+        v-hasPermi="['benyi:customer:remove']"
+        >删除</el-button
+      >
+    </div>
 
     <el-table
       v-loading="loading"
+      border
       :data="customerList"
       @selection-change="handleSelectionChange"
       @sort-change="sortChange"
     >
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="客户姓名" align="center" prop="name" />
-      <el-table-column label="幼儿园名称" align="center" prop="schoolname" />
+      <el-table-column fixed label="客户姓名" align="center" prop="name" />
       <el-table-column
-        label="幼儿园人数"
+        fixed
+        label="园所名称"
+        align="center"
+        prop="schoolname"
+      />
+      <el-table-column
+        label="园所人数"
+        width="100"
         align="center"
         prop="rs"
         sortable="rs"
@@ -141,11 +153,23 @@
       <el-table-column label="联系电话" align="center" prop="lxdh" />
       <el-table-column label="微信号" align="center" prop="wx" />
       <el-table-column label="抖音号" align="center" prop="dy" />
-      <el-table-column label="其他联系方式" align="center" prop="qt" />
+      <el-table-column label="其他联系方式" width="100" align="center" prop="qt" />
       <el-table-column label="所在省" align="center" prop="sheng" />
       <el-table-column label="所在市" align="center" prop="shi" />
-      <el-table-column label="消费项目" align="center" prop="xfxm" sortable="xfxm" />
-      <el-table-column label="消费价值" align="center" prop="xfjz" sortable="xfjz" />
+      <el-table-column
+        label="消费项目"
+        align="center"
+        prop="xfxm"
+        width="110"
+        sortable="xfxm"
+      />
+      <el-table-column
+        label="消费价值"
+        width="110"
+        align="center"
+        prop="xfjz"
+        sortable="xfjz"
+      />
       <el-table-column
         label="录入人"
         align="center"
@@ -154,11 +178,13 @@
       />
       <el-table-column label="录入时间" align="center" prop="createTime" />
       <el-table-column label="过保时间" align="center" prop="gbtime" />
-      <el-table-column label="转换跟进" align="center" prop="zhgj" />
+      <el-table-column label="转换跟进" show-overflow-tooltip align="center" prop="zhgj" />
       <el-table-column
+        fixed="right"
         label="操作"
         align="center"
-        class-name="small-padding fixed-width"
+        width="60"
+        class-name="small-padding fixed-width edit-btns"
       >
         <template slot-scope="scope">
           <el-button
@@ -199,18 +225,18 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="幼儿园名称" prop="schoolname">
+            <el-form-item label="园所名称" prop="schoolname">
               <el-input
                 v-model="form.schoolname"
-                placeholder="请输入幼儿园名称"
+                placeholder="请输入园所名称"
               />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="幼儿园人数" prop="rs">
+            <el-form-item label="园所人数" prop="rs">
               <el-input-number
                 v-model="form.rs"
-                placeholder="请输入幼儿园人数"
+                placeholder="请输入园所人数"
               />
             </el-form-item>
           </el-col>
@@ -402,10 +428,10 @@ export default {
           { required: true, message: "客户姓名不能为空", trigger: "blur" },
         ],
         schoolname: [
-          { required: true, message: "幼儿园名称不能为空", trigger: "blur" },
+          { required: true, message: "园所名称不能为空", trigger: "blur" },
         ],
         lxdh: [
-          { required: true, message: "幼儿园名称不能为空", trigger: "blur" },
+          { required: true, message: "联系电话不能为空", trigger: "blur" },
         ],
         sheng: [
           {
@@ -629,4 +655,21 @@ export default {
     },
   },
 };
-</script>
\ No newline at end of file
+</script>
+<style lang="scss" scoped>
+.el-select {
+  width: 100%;
+}
+.my-date-picker {
+  width: 100%;
+}
+.edit-btns {
+  .el-button {
+    display: block;
+    margin: 0 auto;
+  }
+}
+.no-margin ::v-deep.el-form-item__content {
+  margin: 0 !important;
+}
+</style>
\ No newline at end of file
diff --git a/ruoyi/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java b/ruoyi/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java
index 159ac873d..081bc4cd8 100644
--- a/ruoyi/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java
+++ b/ruoyi/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java
@@ -82,15 +82,18 @@ public class SysLoginService {
         Collection<String> keys = redisCache.keys(Constants.LOGIN_TOKEN_KEY + "*");
         List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
         for (String key : keys) {
-            LoginUser user = redisCache.getCacheObject(key);
-            if (StringUtils.isNotEmpty(username) && StringUtils.isNotNull(user.getUser())) {
-                if (StringUtils.equals(username, user.getUsername())) {
-                    //存在已经登录用户,抛出异常
+            try {
+                LoginUser user = redisCache.getCacheObject(key);
+                if (StringUtils.isNotEmpty(username) && StringUtils.isNotNull(user.getUser())) {
+                    if (StringUtils.equals(username, user.getUsername())) {
+                        //存在已经登录用户,抛出异常
 //                    CustomException alreadyLoginExcep = new CustomException("该账号已在别处登陆", HttpStatus.ALREADY_LOGIN);
 //                    alreadyLoginExcep.setObj(username);
 //                    throw alreadyLoginExcep;
-                    redisCache.deleteObject(key);
+                        redisCache.deleteObject(key);
+                    }
                 }
+            } catch (Exception e) {
             }
         }
 
diff --git a/ruoyi/src/main/java/com/ruoyi/framework/web/controller/BaseController.java b/ruoyi/src/main/java/com/ruoyi/framework/web/controller/BaseController.java
index 69c186f5f..38ee9ccbc 100644
--- a/ruoyi/src/main/java/com/ruoyi/framework/web/controller/BaseController.java
+++ b/ruoyi/src/main/java/com/ruoyi/framework/web/controller/BaseController.java
@@ -24,15 +24,13 @@ import com.ruoyi.framework.web.page.TableSupport;
 
 /**
  * web层通用数据处理
- * 
+ *
  * @author ruoyi
  */
-public class BaseController
-{
+public class BaseController {
     protected final Logger logger = LoggerFactory.getLogger(BaseController.class);
 
-    public static String getUUID32()
-    {
+    public static String getUUID32() {
         return UUID.randomUUID().toString().replace("-", "").toLowerCase();
     }
 
@@ -40,14 +38,11 @@ public class BaseController
      * 将前台传递过来的日期格式的字符串,自动转化为Date类型
      */
     @InitBinder
-    public void initBinder(WebDataBinder binder)
-    {
+    public void initBinder(WebDataBinder binder) {
         // Date 类型转换
-        binder.registerCustomEditor(Date.class, new PropertyEditorSupport()
-        {
+        binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
             @Override
-            public void setAsText(String text)
-            {
+            public void setAsText(String text) {
                 setValue(DateUtils.parseDate(text));
             }
         });
@@ -56,14 +51,19 @@ public class BaseController
     /**
      * 设置请求分页数据
      */
-    protected void startPage()
-    {
+    protected void startPage() {
         PageDomain pageDomain = TableSupport.buildPageRequest();
         Integer pageNum = pageDomain.getPageNum();
         Integer pageSize = pageDomain.getPageSize();
-        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize))
-        {
+        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {
             String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
+//            System.out.println("order:" + orderBy);
+            //特殊情况处理 汉字排序
+            if (orderBy.equals("xfxm asc")) {
+                orderBy = "CONVERT(xfxm USING gbk) asc";
+            } else if (orderBy.equals("xfxm desc")) {
+                orderBy = "CONVERT(xfxm USING gbk) desc";
+            }
             PageHelper.startPage(pageNum, pageSize, orderBy);
         }
     }
@@ -71,9 +71,8 @@ public class BaseController
     /**
      * 响应请求分页数据
      */
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    protected TableDataInfo getDataTable(List<?> list)
-    {
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    protected TableDataInfo getDataTable(List<?> list) {
         TableDataInfo rspData = new TableDataInfo();
         rspData.setCode(HttpStatus.SUCCESS);
         rspData.setRows(list);
@@ -83,12 +82,11 @@ public class BaseController
 
     /**
      * 响应返回结果
-     * 
+     *
      * @param rows 影响行数
      * @return 操作结果
      */
-    protected AjaxResult toAjax(int rows)
-    {
+    protected AjaxResult toAjax(int rows) {
         return rows > 0 ? AjaxResult.success() : AjaxResult.error();
     }
 }