Bladeren bron

feat:列表跟进显示

lizhi 3 maanden geleden
bovenliggende
commit
1fcf228647

+ 15 - 9
protected/controllers/CanteenController.php

@@ -31,19 +31,19 @@ class CanteenController extends Controller
 
     public function actionList()
     {
-        $filter = ['is_del' => 0];
+        $filter = ['t.is_del' => 0];
         $schoolId = Helper::getPostString('school_id');
         if ($schoolId) {
             if (!$this->checkSchoolId($schoolId)) {
-                $filter['school_id'] = -1;
+                $filter['t.school_id'] = -1;
             } else {
-                $filter['school_id'] = $schoolId;
+                $filter['t.school_id'] = $schoolId;
             }
         } else {
-            $filter['school_id'] = $this->getSchoolFilter();
+            $filter['t.school_id'] = $this->getSchoolFilter();
         }
         if ($name = Helper::getPostString('name')) {
-            $filter['name'] = '%' . $name;
+            $filter['t.name'] = '%' . $name;
         }
         if ($company_id = Helper::getPostInt('company_id')) {
             $rs = Helper::arrayColumn(
@@ -53,17 +53,22 @@ class CanteenController extends Controller
                 ),
                 'canteen_id'
             );
-            $filter['id'] = $rs ?: [-1];
+            $filter['t.id'] = $rs ?: [-1];
         }
-        $cri = DbCriteria::simpleCompareWithPage($filter)->setOrder('id desc');
+        $cri = DbCriteria::simpleCompareWithPage($filter)
+            ->setAlias('t')
+            ->setSelect('t.*, group_concat(sf.id) AS follow_ids')
+            ->addJoin('LEFT JOIN wx_canteen_follow AS sf ON sf.canteen_id = t.id')
+            ->setGroup('t.id')
+            ->setOrder('t.id desc');
         if ($date = Helper::getPostDate('date')) {
             $cri->addBetweenCondition('create_date', $date, $date . ' 23:59:59');
         }
         $data = DB::getListWithCriteria(self::$table, $cri);
         if (!empty($data['records'])) {
             $users = Helper::arrayColumn(
-                DB::getListWithCriteria('useradmin', DbCriteria::simpleCompare(['id' => array_column($data['records'], 'last_user_id')])->setSelect('id, username')),
-                'username',
+                DB::getListWithCriteria('useradmin', DbCriteria::simpleCompare(['id' => array_column($data['records'], 'last_user_id')])->setSelect('id, username,avatar')),
+                null,
                 'id'
             );
             $schools = Helper::arrayColumn(
@@ -80,6 +85,7 @@ class CanteenController extends Controller
                 'name',
                 'canteen_id'
             );
+            $data['records'] = FollowSrv::formatWithFollowList($data['records'], 'wx_canteen_follow', $users);
             $data['records'] = array_map(function ($item) use ($users, $schools, $relations) {
                 $item['last_user_name'] = $users[$item['last_user_id']] ?? '-';
                 $item['school_name'] = $schools[$item['school_id']] ?? '-';

+ 15 - 3
protected/controllers/CompanyController.php

@@ -72,14 +72,26 @@ class CompanyController extends Controller
             );
             $filter['id'] = $ids?: -1;
         }
-        $cri = DbCriteria::simpleCompareWithPage($filter)->setOrder('id desc');;
+        // 被删除的关系要排除
+        $delContactIds = Helper::arrayColumn(DB::getListWithCriteria('wx_company_contact', DbCriteria::simpleCompare(['is_del' => 1])->setSelect('id')), 'id');
+        $followWhere = '';
+        if ($delContactIds) {
+            $followWhere = ' AND sf.contact_id NOT IN (' . implode(',', $delContactIds) . ')';
+        }
+        $cri = DbCriteria::simpleCompareWithPage($filter)
+            ->setAlias('t')
+            ->setSelect('t.*, group_concat(sf.id) AS follow_ids')
+            ->setJoin('LEFT JOIN wx_company_follow AS sf ON sf.company_id = t.id ' . $followWhere)
+            ->setGroup('t.id')
+            ->setOrder('t.id desc');
         $data = DB::getListWithCriteria(self::$table, $cri);
         if (!empty($data['records'])) {
             $users = Helper::arrayColumn(
-                DB::getListWithCriteria('useradmin', DbCriteria::simpleCompare([])->setSelect('id, username')),
-                'username',
+                DB::getListWithCriteria('useradmin', DbCriteria::simpleCompare([])->setSelect('id, username,avatar')),
+                null,
                 'id'
             );
+            $data['records'] = FollowSrv::formatWithFollowList($data['records'], 'wx_school_follow', $users);
             $data['records'] = array_map(function ($item) use ($users) {
                 $item['last_user_name'] = $users[$item['last_user_id']] ?? '-';
                 $item['bind_user_name'] = $users[$item['bind_user_id']] ?? '-';

+ 6 - 3
protected/controllers/CompanyRelationController.php

@@ -41,8 +41,10 @@ class CompanyRelationController extends Controller
         }
         $cri = DbCriteria::simpleCompareWithPage($filter)
             ->setAlias('r')
-            ->setSelect('r.*, s.name as company_name')
+            ->setSelect('r.*, s.name as company_name, group_concat(sf.id) AS follow_ids')
             ->setJoin('LEFT JOIN wx_company s ON s.id=r.company_id')
+            ->addJoin('LEFT JOIN wx_school_follow AS sf ON sf.school_id = r.id')
+            ->setGroup('r.id')
             ->setOrder('r.id desc');
         if ($date = Helper::getPostDate('date')) {
             $cri->addBetweenCondition('r.create_date', $date, $date . ' 23:59:59');
@@ -50,10 +52,11 @@ class CompanyRelationController extends Controller
         $data = DB::getListWithCriteria($this->table, $cri);
         if (!empty($data['records'])) {
             $users = Helper::arrayColumn(
-                DB::getListWithCriteria('useradmin', DbCriteria::simpleCompare([])->setSelect('id, username')),
-                'username',
+                DB::getListWithCriteria('useradmin', DbCriteria::simpleCompare([])->setSelect('id, username,avatar')),
+                null,
                 'id'
             );
+            $data['records'] = FollowSrv::formatWithFollowList($data['records'], 'wx_school_follow', $users);
             $data['records'] = array_map(function ($item) use ($users) {
                 $item['last_user_name'] = $users[$item['last_user_id']] ?? '-';
                 return $item;

+ 10 - 3
protected/controllers/SchoolController.php

@@ -42,7 +42,7 @@ class SchoolController extends Controller
     public function actionList()
     {
         $filter = [
-            'is_del' => 0,
+            't.is_del' => 0,
             't.id' => $this->getSchoolFilter()
         ];
         $address = Helper::getArrParam($_POST, 'address', Helper::PARAM_KEY_TYPE['array_string']);
@@ -56,9 +56,16 @@ class SchoolController extends Controller
         if ($is_cooperate != -1) {
              $filter['is_cooperate'] = $is_cooperate;
         }
-        $cri = DbCriteria::simpleCompareWithPage($filter)->setAlias('t')
+        // 被删除的关系要排除
+        $delContactIds = Helper::arrayColumn(DB::getListWithCriteria('wx_school_contact', DbCriteria::simpleCompare(['is_del' => 1])->setSelect('id')), 'id');
+        $followWhere = '';
+        if ($delContactIds) {
+            $followWhere = ' AND sf.contact_id NOT IN (' . implode(',', $delContactIds) . ')';
+        }
+        $cri = DbCriteria::simpleCompareWithPage($filter)
+            ->setAlias('t')
             ->setSelect('t.*, group_concat(sf.id) AS follow_ids')
-            ->setJoin('LEFT JOIN wx_school_follow AS sf ON sf.school_id = t.id')
+            ->setJoin('LEFT JOIN wx_school_follow AS sf ON sf.school_id = t.id ' . $followWhere)
             ->setGroup('t.id')
             ->setOrder('t.id desc');
         $data = DB::getListWithCriteria(self::$table, $cri);

+ 3 - 0
web/src/typings/api.d.ts

@@ -327,6 +327,7 @@ declare namespace Api {
       last_user_id: number // 最后一次跟进人
       last_user_name: string // 最后一次跟进人
       last_date: string // 最后一次跟进时间
+      follow_list: Api.Common.FollowItem[]
     }
 
     interface ListData {
@@ -353,6 +354,7 @@ declare namespace Api {
       last_user_id: number // 最后一次跟进人
       last_user_name: string // 最后一次跟进人
       last_date: string // 最后一次跟进时间
+      follow_list: Api.Common.FollowItem[]
     }
 
     interface contactListData {
@@ -393,6 +395,7 @@ declare namespace Api {
       last_date: string // 最后一次跟进时间
       last_user_name: string // 最后一次跟进人
       bind_user_name: string // 最后一次跟进人
+      follow_list: Api.Common.FollowItem[]
     }
 
     interface ListData {

+ 14 - 17
web/src/views/canteen/list/index.vue

@@ -22,7 +22,7 @@
       <!-- 表格头部 -->
       <ArtTableHeader v-model:columns="columnChecks" @refresh="refreshData">
         <template #left>
-          <ElButton type="primary" @click="edit()" v-ripple v-auth="130101">新增食堂</ElButton>
+          <ElButton type="primary" @click="edit()" v-ripple v-auth="130301">新增食堂</ElButton>
         </template>
       </ArtTableHeader>
 
@@ -35,12 +35,15 @@
           @pagination:size-change="handleSizeChange"
           @pagination:current-change="handleCurrentChange"
       >
-        <template #person_num="scope">
-          <ElInput
-              v-model="scope.row.person_num"
-              placeholder="scope.row.person_num"
-              @blur="doUpdateAttr(scope)"
-          />
+        <template #follow_list="scope">
+          <el-row>
+            <el-col :sm="20">
+              <FollowProver :follow_list="scope.row.follow_list" />
+            </el-col>
+            <el-col :sm="4">
+              <ElButton size="small" @click="follow(scope.row)" v-ripple v-auth="120301" type="primary">跟进</ElButton>
+            </el-col>
+          </el-row>
         </template>
 
         <template #is_eleme_in_school="scope">
@@ -146,6 +149,7 @@ import {schoolRelationApi} from "@/api/schoolRelationApi";
 import {companyApi} from "@/api/companyApi";
 import {commonApi} from "@/api/commonApi";
 import { detectDeviceType } from '@/utils'
+import FollowProver from "@/components/custom/FollowProver.vue";
 
 defineOptions({name: 'User'})
 
@@ -177,7 +181,8 @@ const defaultValue = <Api.Canteen.ListItem>{
   memo: "",
   last_user_id: 0,
   last_user_name: '',
-  last_date: ''
+  last_date: '',
+  follow_list: []
 }
 
 const currentRow = ref<Api.Canteen.ListItem>({...defaultValue})
@@ -272,15 +277,7 @@ const {
       { prop:'memo', label:'备注', showOverflowTooltip:true },
       { prop:'last_user_name', label:'最后一次跟进人' },
       { prop:'last_date', label:'最后一次跟进时间' },
-      {
-        prop: '', label: '跟进记录', formatter: (row) => {
-          return h(ElButton, {
-            size: 'small',
-            type: 'primary',
-            onClick: () => follow(row),
-          }, () => '跟进')
-        }
-      },
+      {prop: 'follow_list', label: '跟进记录', useSlot: true, width: 400},
       {
         prop: 'operation',
         label: '操作',

+ 14 - 15
web/src/views/company/list/index.vue

@@ -35,13 +35,18 @@
           @pagination:size-change="handleSizeChange"
           @pagination:current-change="handleCurrentChange"
       >
-        <template #person_num="scope">
-          <ElInput
-              v-model="scope.row.person_num"
-              placeholder="scope.row.person_num"
-              @blur="doUpdateAttr(scope)"
-          />
+
+        <template #follow_list="scope">
+          <el-row>
+            <el-col :sm="20">
+              <FollowProver :follow_list="scope.row.follow_list" />
+            </el-col>
+            <el-col :sm="4">
+              <ElButton size="small" @click="follow(scope.row)" v-ripple v-auth="140301" type="primary">跟进</ElButton>
+            </el-col>
+          </el-row>
         </template>
+
       </ArtTable>
 
     </ElCard>
@@ -119,6 +124,7 @@ import {companyRelationApi} from "@/api/companyRelationApi";
 import {schoolApi} from "@/api/schoolApi";
 import {commonApi} from "@/api/commonApi";
 import { detectDeviceType } from '@/utils'
+import FollowProver from "@/components/custom/FollowProver.vue";
 
 defineOptions({name: 'User'})
 
@@ -146,6 +152,7 @@ const defaultValue = <Api.Company.ListItem>{
   last_date: '',
   last_user_name: '',
   bind_user_name: '',
+  follow_list: []
 }
 
 const currentRow = ref<Api.Company.ListItem>({...defaultValue})
@@ -229,15 +236,7 @@ const {
       { prop:'last_user_name', label:'最后一次跟进人' },
       { prop:'last_date', label:'最后一次跟进时间' },
       { prop:'bind_user_name', label:'负责人' },
-      {
-        prop: '', label: '跟进记录', formatter: (row) => {
-          return h(ElButton, {
-            type: 'primary',
-            size: 'small',
-            onClick: () => follow(row),
-          }, () => '跟进')
-        }
-      },
+      {prop: 'follow_list', label: '跟进记录', useSlot: true, width: 400},
       {prop: 'memo', label: '备注', showOverflowTooltip: true},
       {
         prop: 'operation',

+ 14 - 9
web/src/views/company/relation/index.vue

@@ -30,6 +30,18 @@
         @pagination:size-change="handleSizeChange"
         @pagination:current-change="handleCurrentChange"
       >
+
+        <template #follow_list="scope">
+          <el-row>
+            <el-col :sm="20">
+              <FollowProver :follow_list="scope.row.follow_list" />
+            </el-col>
+            <el-col :sm="4">
+              <ElButton size="small" @click="follow(scope.row)" v-ripple v-auth="120301" type="primary">跟进</ElButton>
+            </el-col>
+          </el-row>
+        </template>
+
       </ArtTable>
 
       <!-- 餐饮公司关系弹窗 -->
@@ -111,6 +123,7 @@
   import {followApi} from "@/api/followApi";
   import {commonApi} from "@/api/commonApi";
   import { detectDeviceType } from '@/utils'
+  import FollowProver from "@/components/custom/FollowProver.vue";
 
   defineOptions({ name: 'companyRelation' })
 
@@ -180,15 +193,7 @@
         { prop: 'phone', label: '手机号' },
         { prop: 'weixin', label: '微信号' },
         { prop: 'position', label: '职位' },
-        {
-          prop: '', label: '跟进记录', formatter: (row) => {
-            return h(ElButton, {
-              size: 'small',
-              type: 'primary',
-              onClick: () => follow(row),
-            }, () => '跟进')
-          }
-        },
+        {prop: 'follow_list', label: '跟进记录', useSlot: true, width: 400},
         { prop:'last_user_name', label:'最后一次跟进人' },
         { prop:'last_date', label:'最后一次跟进时间' },
         { prop: 'memo', label: '备注', showOverflowTooltip: true },

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

@@ -37,7 +37,7 @@
               <FollowProver :follow_list="scope.row.follow_list" />
             </el-col>
             <el-col :sm="4">
-              <ElButton size="small" @click="follow(scope.row)" v-ripple v-auth="130301" type="primary">跟进</ElButton>
+              <ElButton size="small" @click="follow(scope.row)" v-ripple v-auth="120301" type="primary">跟进</ElButton>
             </el-col>
           </el-row>
         </template>