فهرست منبع

fix:签名换行问题及跟进列表页面刷新问题

lizhi 3 ماه پیش
والد
کامیت
84adf8a03a

+ 7 - 6
protected/components/Controller.php

@@ -32,7 +32,7 @@ class Controller extends CController
             }
             header("Access-Control-Allow-Origin:" . Yii::app()->request->hostInfo);
         }
-        
+
         header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
         header("Access-Control-Allow-Headers: Content-Type, Authorization, Cookie");
         if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
@@ -61,13 +61,14 @@ class Controller extends CController
             $stringArray[] = $k . '=' . trim($v);
         }
         sort($stringArray, SORT_STRING);
-        $query = implode('&', $stringArray);
-        $sign = strtoupper(hash('sha256', $query . 'qwer'));
+        $query = implode('&', $stringArray) . 'qwer';
+        $query = str_replace(["\r", "\n"], '', $query);
+        $sign = strtoupper(hash('sha256', $query));
         if ($sign != $postSign) {
-            Logger::errorMult($query, $sign);
-            \CVarDumper::dump([$query, $sign, $postSign], 6, 1);die;
+            Logger::errorMult('签名错误', $query, $sign);
+            return false;
         }
-        return $postSign == $sign;
+        return true;
     }
 
     /**

+ 33 - 30
protected/controllers/FollowController.php

@@ -7,22 +7,22 @@ class FollowController extends Controller
             'table' => 'school_follow',
             'first_id' => 'school_id',
             'second_id' => 'contact_id',
-            'table1' => 'school',
-            'table2' => 'school_contact',
+            'table1' => 'wx_school',
+            'table2' => 'wx_school_contact',
         ],
         'canteen' => [
             'table' => 'canteen_follow',
             'first_id' => 'school_id',
             'second_id' => 'canteen_id',
-            'table1' => 'school',
-            'table2' => 'canteen',
+            'table1' => 'wx_school',
+            'table2' => 'wx_canteen',
         ],
         'company' => [
             'table' => 'company_follow',
             'first_id' => 'company_id',
             'second_id' => 'contact_id',
-            'table1' => 'company',
-            'table2' => 'company_contact',
+            'table1' => 'wx_company',
+            'table2' => 'wx_company_contact',
         ]
     ];
 
@@ -133,10 +133,17 @@ class FollowController extends Controller
         }
         $this->checkAuth($firstId);
         $filter = [
-            $this->tableArr['first_id'] => $firstId,
-            $this->tableArr['second_id'] => Helper::getPostInt('second_id') ? : null,
+            't1.' . $this->tableArr['first_id'] => $firstId,
+            't1.' . $this->tableArr['second_id'] => Helper::getPostInt('second_id') ? : null,
         ];
         $criteria = DbCriteria::simpleCompare($filter)->setOrder('id desc');
+        $criteria->setAlias('t1')->addCondition('t2.id > 0');
+        if ($this->type == 'canteen') {
+            $criteria->setSelect('t1.*,t2.name,t2.weixin,t2.phone');
+        } else {
+            $criteria->setSelect('t1.*,t2.name,t2.weixin,t2.phone,t2.position');
+        }
+        $criteria->join = "left join {$this->tableArr['table2']} t2 on t2.id = t1.{$this->tableArr['second_id']} and t2.is_del = 0";
         $data = DB::getListWithCriteria($this->tableArr['table'], $criteria);
         $data['records'] = $this->formatFollowList($data['records']);
         Helper::ok($data['records']);
@@ -192,26 +199,35 @@ class FollowController extends Controller
         $schoolArr = Helper::getArrParam($_POST, 'school', Helper::PARAM_KEY_TYPE['array_int']);
         if ($schoolArr) {
             $filter = [
-                $this->tableArr['first_id'] => $schoolArr[0]? : null,
-                $this->tableArr['second_id'] => $schoolArr[1]? : null,
+                't1.' . $this->tableArr['first_id'] => $schoolArr[0]? : null,
+                't1.' . $this->tableArr['second_id'] => $schoolArr[1]? : null,
             ];
         } else {
             $filter = [
-                $this->tableArr['first_id'] => Helper::getPostInt('first_id')? : null,
-                $this->tableArr['second_id'] => Helper::getPostInt('second_id')? : null,
+                't1.' . $this->tableArr['first_id'] => Helper::getPostInt('first_id')? : null,
+                't1.' . $this->tableArr['second_id'] => Helper::getPostInt('second_id')? : null,
             ];
         }
-        if (empty($filter[$this->tableArr['first_id']])) {
-            $filter[$this->tableArr['first_id']] = $this->type == 'company' ? $this->getCompanyFilter() : $this->getSchoolFilter();
+        if (empty($filter['t1.' .$this->tableArr['first_id']])) {
+            $filter['t1.' . $this->tableArr['first_id']] = $this->type == 'company' ? $this->getCompanyFilter() : $this->getSchoolFilter();
+        } else {
+            $this->checkAuth($filter['t1.' .$this->tableArr['first_id']]);
         }
         if ($phone = Helper::getPostString('phone')) {
             $rs = Helper::arrayColumn(DB::getListWithCriteria($this->tableArr['table2'], DbCriteria::simpleCompare(['phone' => $phone])->setSelect('id')), 'id');
-            $filter[$this->tableArr['second_id']] = $rs?: [-1];
+            $filter['t1.' . $this->tableArr['second_id']] = $rs?: [-1];
         }
         $criteria = DbCriteria::simpleCompareWithPage($filter)->setOrder('id desc');
         if ($date = Helper::getPostDate('date')) {
-            $criteria->addBetweenCondition('create_date', $date, $date . ' 23:59:59');
+            $criteria->addBetweenCondition('t1.create_date', $date, $date . ' 23:59:59');
         }
+        $criteria->setAlias('t1')->addCondition('t2.id > 0');
+        if ($this->type == 'canteen') {
+            $criteria->setSelect('t1.*,t2.name as second_name,t2.weixin,t2.phone');
+        } else {
+            $criteria->setSelect('t1.*,t2.name as second_name,t2.weixin,t2.phone,t2.position');
+        }
+        $criteria->join = "left join {$this->tableArr['table2']} t2 on t2.id = t1.{$this->tableArr['second_id']} and t2.is_del = 0";
         $data = DB::getListWithCriteria($this->tableArr['table'], $criteria);
         $data['records'] = $this->formatFollowList($data['records']);
         Helper::ok($data);
@@ -238,16 +254,6 @@ class FollowController extends Controller
             $cri = DbCriteria::simpleCompare(['id' => $firstIds])->setSelect('id,name');
             $firsts = Helper::arrayColumn(DB::getListWithCriteria($this->tableArr['table1'], $cri), 'name', 'id');
         }
-        // 关系人
-        $secondIds = array_unique(array_filter(array_column($list, $field2)));
-        $seconds = [];
-        if ($secondIds) {
-            $cri = DbCriteria::simpleCompare(['id' => $secondIds])->setSelect('id,name,position,weixin,phone');
-            if ($this->type == 'canteen') {
-                $cri->setSelect('id,name,weixin,phone');
-            }
-            $seconds = Helper::arrayColumn(DB::getListWithCriteria($this->tableArr['table2'], $cri), null, 'id');
-        }
         foreach ($list as &$item) {
             $uid = $item['user_id'];
             $f1 = $item[$field1];
@@ -257,10 +263,7 @@ class FollowController extends Controller
             $item['user_name'] = $users[$uid]['username'] ?? '';
             $item['avatar'] = $users[$uid]['avatar'] ? Helper::getImageUrl($users[$uid]['avatar']) : '';
             $item['first_name'] = $firsts[$f1] ?? '';
-            $item['second_name'] = $seconds[$f2]['name'] ?? '';
-            $item['position'] = $seconds[$f2]['position'] ?? '';
-            $item['weixin'] = $seconds[$f2]['weixin'] ?? '';
-            $item['phone'] = $seconds[$f2]['phone'] ?? '';
+            $item['position'] = $item['position'] ?? '';
         }
         return $list;
     }

+ 1 - 2
protected/include/DbCriteria.php

@@ -333,9 +333,8 @@ class DbCriteria extends \CDbCriteria
             // 这里倒序会导致 :ycp5 覆盖 :ycp50
             $params = array_reverse($params);
             $sql = str_replace(array_keys($params), array_values($params), $sql);
-            $sql = str_replace("\n", ' ', $sql);
         }
-
+        $sql = str_replace("\n", ' ', $sql);
         return $this->getLockStatus() ? $sql." FOR UPDATE" : $sql;
     }
 

+ 3 - 3
web/src/router/routes/asyncRoutes.ts

@@ -121,7 +121,7 @@ export const asyncRoutes: AppRouteRecord[] = [
                 component: RoutesAlias.SchoolFollow,
                 meta: {
                     title: 'menus.school.follow',
-                    keepAlive: true,
+                    // keepAlive: true,
                     authList: [
                         {
                             id: 120300,
@@ -210,7 +210,7 @@ export const asyncRoutes: AppRouteRecord[] = [
                 component: RoutesAlias.CanteenFollow,
                 meta: {
                     title: 'menus.canteen.follow',
-                    keepAlive: true,
+                    // keepAlive: true,
                     authList: [
                         {
                             id: 130300,
@@ -327,7 +327,7 @@ export const asyncRoutes: AppRouteRecord[] = [
                 component: RoutesAlias.CompanyFollow,
                 meta: {
                     title: 'menus.company.follow',
-                    keepAlive: true,
+                    // keepAlive: true,
                     authList: [
                         {
                             id: 140300,

+ 3 - 1
web/src/utils/http/index.ts

@@ -220,13 +220,15 @@ function getSign(formData: FormData) {
     }
   });
   const sortedKeys = Object.keys(params).sort()
-  const queryString = sortedKeys.map((key) => {
+  let queryString = sortedKeys.map((key) => {
     if (Array.isArray(params[key])) {
       return `${key}=${params[key].join(',').trim()}`
     } else {
       return `${key}=${params[key].trim()}`
     }
   }).join('&') + 'qwer'
+  queryString = queryString.replace(/[\r\n]+/g, '')
+  console.error(`%c queryString == `, 'background:#41b883 ; padding:1px; color:#fff', queryString);
   let sign = CryptoJS.SHA256(queryString).toString().toUpperCase()
   return sign
 }

+ 0 - 1
web/src/views/canteen/follow/index.vue

@@ -108,7 +108,6 @@
       columnsFactory: () => [
         { prop:'first_name', label:'校园(园区)' },
         { prop:'second_name', label:'食堂' },
-        { prop:'position', label:'职位' },
         { prop:'phone', label:'手机号' },
         { prop:'weixin', label:'微信号' },
         { prop:'chat_imgs', label:'微信聊天记录', formatter: (row) => {

+ 1 - 1
web/src/views/school/list/index.vue

@@ -274,7 +274,7 @@ const {
     excludeParams: [],
     columnsFactory: () => [
       {
-        prop: 'name', label: '学校(校区)', formatter: (row) => {
+        prop: 'name', label: '学校(校区)', showOverflowTooltip: true, formatter: (row) => {
           return h(ElButton, {
             type: 'primary',
             link: true,