Jelajahi Sumber

feat:搜素增强

lizhi 2 bulan lalu
induk
melakukan
aa6267bd6c

+ 10 - 0
protected/controllers/CanteenController.php

@@ -45,6 +45,12 @@ class CanteenController extends Controller
         if ($name = Helper::getPostString('name')) {
             $filter['t.name'] = '%' . $name;
         }
+        if ($last_user_id = Helper::getPostInt('last_user_id')) {
+            $filter['t.last_user_id'] = $last_user_id;
+        }
+        if ($phone = Helper::getPostString('phone')) {
+            $filter['t.phone'] = $phone;
+        }
         if ($company_id = Helper::getPostInt('company_id')) {
             $rs = Helper::arrayColumn(
                 DB::getListWithCriteria(
@@ -64,6 +70,10 @@ class CanteenController extends Controller
         if ($date = Helper::getPostDate('date')) {
             $cri->addBetweenCondition('create_date', $date, $date . ' 23:59:59');
         }
+        $last_date = $_POST['last_date'];
+        if (is_array($last_date) && count($last_date) == 2 && $last_date[0] < $last_date[1]) {
+            $cri->addcondition("t.last_date > '{$last_date[0]}' and t.last_date < '{$last_date[1]}'");
+        }
         $data = DB::getListWithCriteria(self::$table, $cri);
         if (!empty($data['records'])) {
             $users = Helper::arrayColumn(

+ 10 - 0
protected/controllers/CompanyController.php

@@ -72,6 +72,12 @@ class CompanyController extends Controller
             );
             $filter['t.id'] = $ids?: -1;
         }
+        if ($last_user_id = Helper::getPostInt('last_user_id')) {
+            $filter['t.last_user_id'] = $last_user_id;
+        }
+        if ($bind_user_id = Helper::getPostInt('bind_user_id')) {
+            $filter['t.bind_user_id'] = $bind_user_id;
+        }
         // 被删除的关系要排除
         $delContactIds = Helper::arrayColumn(DB::getListWithCriteria('wx_company_contact', DbCriteria::simpleCompare(['is_del' => 1])->setSelect('id')), 'id');
         $followWhere = '';
@@ -84,6 +90,10 @@ class CompanyController extends Controller
             ->setJoin('LEFT JOIN wx_company_follow AS sf ON sf.company_id = t.id ' . $followWhere)
             ->setGroup('t.id')
             ->setOrder('t.id desc');
+        $last_date = $_POST['last_date'];
+        if (is_array($last_date) && count($last_date) == 2 && $last_date[0] < $last_date[1]) {
+            $cri->addcondition("t.last_date > '{$last_date[0]}' and t.last_date < '{$last_date[1]}'");
+        }
         $data = DB::getListWithCriteria(self::$table, $cri);
         if (!empty($data['records'])) {
             $users = Helper::arrayColumn(

+ 10 - 0
protected/controllers/CompanyRelationController.php

@@ -39,6 +39,12 @@ class CompanyRelationController extends Controller
         if ($name = Helper::getPostString('name')) {
             $filter['r.name'] = '%'.$name;
         }
+        if ($bind_user_id = Helper::getPostInt('bind_user_id')) {
+            $filter['r.bind_user_id'] = $bind_user_id;
+        }
+        if ($last_user_id = Helper::getPostInt('last_user_id')) {
+            $filter['r.last_user_id'] = $last_user_id;
+        }
         $cri = DbCriteria::simpleCompareWithPage($filter)
             ->setAlias('r')
             ->setSelect('r.*, s.name as company_name, group_concat(sf.id) AS follow_ids')
@@ -49,6 +55,10 @@ class CompanyRelationController extends Controller
         if ($date = Helper::getPostDate('date')) {
             $cri->addBetweenCondition('r.create_date', $date, $date . ' 23:59:59');
         }
+        $last_date = $_POST['last_date'];
+        if (is_array($last_date) && count($last_date) == 2 && $last_date[0] < $last_date[1]) {
+            $cri->addcondition("r.last_date > '{$last_date[0]}' and r.last_date < '{$last_date[1]}'");
+        }
         $data = DB::getListWithCriteria($this->table, $cri);
         if (!empty($data['records'])) {
             $users = Helper::arrayColumn(

+ 7 - 0
protected/controllers/FollowController.php

@@ -213,6 +213,9 @@ class FollowController extends Controller
         } else {
             $this->checkAuth($filter['t1.' .$this->tableArr['first_id']]);
         }
+        if ($user_id = Helper::getPostInt('user_id')) {
+            $filter['t1.user_id'] = $user_id;
+        }
         if ($phone = Helper::getPostString('phone')) {
             $rs = Helper::arrayColumn(DB::getListWithCriteria($this->tableArr['table2'], DbCriteria::simpleCompare(['phone' => $phone])->setSelect('id')), 'id');
             $filter['t1.' . $this->tableArr['second_id']] = $rs?: [-1];
@@ -227,6 +230,10 @@ class FollowController extends Controller
         } else {
             $criteria->setSelect('t1.*,t2.name as second_name,t2.weixin,t2.phone,t2.position');
         }
+        $range_date = $_POST['range_date'];
+        if (is_array($range_date) && count($range_date) == 2 && $range_date[0] < $range_date[1]) {
+            $criteria->addcondition("t1.create_date > '{$range_date[0]}' and t1.create_date < '{$range_date[1]}'");
+        }
         $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']);

+ 10 - 4
protected/controllers/SchoolController.php

@@ -50,11 +50,17 @@ class SchoolController extends Controller
         $filter['city'] = $address[1]?? null;
         $filter['area'] = $address[2]?? null;
         if ($name = Helper::getPostString('name')) {
-            $filter['name'] = '%' . $name;
+            $filter['t.name'] = '%' . $name;
         }
-        $is_cooperate = Helper::getPostInt('is_cooperate');
-        if ($is_cooperate != -1) {
-             $filter['is_cooperate'] = $is_cooperate;
+        foreach (['is_cooperate', 'is_eleme_in_school', 'is_eleme_out_school', 'is_meituan_in_school', 'is_meituan_out_school', 'can_go_upstairs', 'can_ride'] as $item) {
+            $v = Helper::getPostInt($item);
+            if ($v != -1) {
+                $filter['t.' . $item] = $v;
+            }
+        }
+        $bind_user_id = Helper::getPostInt('bind_user_id');
+        if ($bind_user_id > 0) {
+             $filter['t.bind_user_id'] = $bind_user_id;
         }
         // 被删除的关系要排除
         $delContactIds = Helper::arrayColumn(DB::getListWithCriteria('wx_school_contact', DbCriteria::simpleCompare(['is_del' => 1])->setSelect('id')), 'id');

+ 7 - 0
protected/controllers/SchoolRelationController.php

@@ -39,6 +39,9 @@ class SchoolRelationController extends Controller
         if ($name = Helper::getPostString('name')) {
             $filter['r.name'] = '%'.$name;
         }
+        if ($last_user_id = Helper::getPostString('last_user_id')) {
+            $filter['r.last_user_id'] = $last_user_id;
+        }
         $cri = DbCriteria::simpleCompareWithPage($filter)
             ->setAlias('r')
             ->setSelect('r.*, s.name as school_name, group_concat(sf.id) AS follow_ids')
@@ -49,6 +52,10 @@ class SchoolRelationController extends Controller
         if ($date = Helper::getPostDate('date')) {
             $cri->addBetweenCondition('r.create_date', $date, $date . ' 23:59:59');
         }
+        $last_date = $_POST['last_date'];
+        if (is_array($last_date) && count($last_date) == 2 && $last_date[0] < $last_date[1]) {
+            $cri->addcondition("r.last_date > '{$last_date[0]}' and r.last_date < '{$last_date[1]}'");
+        }
         $data = DB::getListWithCriteria($this->table, $cri);
         if (!empty($data['records'])) {
             $users = Helper::arrayColumn(

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

@@ -10,6 +10,7 @@
       @search="handleSearch"
       @reset="resetSearchParams"
       :selectList="selectList"
+      :user-list="userList"
     ></UserSearch>
 
     <ElCard class="art-table-card" shadow="never">
@@ -72,12 +73,16 @@
     phone: '',
     company_id: parseInt(<string>useRoute().query.company_id)  || '',
     date: useRoute().query.date || '',
+    user_id:0,
+    range_date:[],
   })
 
+  const userList = ref<Api.Common.SelectInfo[]>([])
   const selectList = ref<Api.Common.SelectRelationInfo[]>([])
   const getSelectList = async () => {
-    await commonApi.selectList(['school_canteen']).then(res => {
+    await commonApi.selectList(['school_canteen', 'user']).then(res => {
       selectList.value = res.school_canteen || []
+      userList.value = res.user || []
     })
   }
   getSelectList()

+ 32 - 1
web/src/views/canteen/follow/modules/user-search.vue

@@ -5,6 +5,8 @@
       :items="formItems"
       :selectList="selectList"
       :rules="rules"
+      :showExpand="false"
+      :isExpand="true"
       @reset="handleReset"
       @search="handleSearch"
   >
@@ -16,7 +18,8 @@ import { ref, computed, onMounted, h } from 'vue'
 
 interface Props {
   modelValue: Record<string, any>
-  selectList: Api.Common.SelectRelationInfo[]
+  selectList: Api.Common.SelectRelationInfo[],
+  userList: Api.Common.SelectInfo[]
 }
 interface Emits {
   (e: 'update:modelValue', value: Record<string, any>): void
@@ -64,6 +67,34 @@ const formItems = computed(() => [
       props: props1
     }
   },
+  {
+    label: '跟进人',
+    key: 'user_id',
+    type: 'select',
+    filterable: true,
+    props: {
+      emptyValues:[0],
+      valueOnClear:0,
+      options: props.userList.map((item) => ({
+        label: item.name,
+        value: item.id
+      })),
+    },
+  },
+  {
+    label: '跟进时间',
+    span: 6,
+    key: 'range_date',
+    type: 'datetimerange',
+    filterable: true,
+    props: {
+      type: 'datetimerange',
+      valueFormat: 'YYYY-MM-DD HH:mm:ss',
+      rangeSeparator: '至',
+      startPlaceholder: '开始日期时间',
+      endPlaceholder: '结束日期时间'
+    }
+  },
 ])
 
 // 事件

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

@@ -5,7 +5,14 @@
 <template>
   <div class="user-page art-full-height">
     <!-- 搜索栏 -->
-    <UserSearch v-model="searchForm" @search="handleSearch" @reset="resetSearchParams" :school-list="selectList" :company-list="companyList"></UserSearch>
+    <UserSearch v-model="searchForm"
+                @search="handleSearch"
+                @reset="resetSearchParams"
+                :school-list="selectList"
+                :company-list="companyList"
+                :user-list="userList"
+                labelPosition="left"
+    ></UserSearch>
 
     <!--   跟进弹窗   -->
     <FollowDialog
@@ -141,6 +148,9 @@ const searchForm = ref({
   school_id: parseInt(<string>useRoute().query.school_id)  || '',
   company_id: parseInt(<string>useRoute().query.company_id)  || '',
   date: useRoute().query.date || '',
+  last_user_id:0,
+  last_date:[],
+  phone:'',
 })
 
 const defaultValue = <Api.Canteen.ListItem>{
@@ -165,20 +175,19 @@ const defaultValue = <Api.Canteen.ListItem>{
 
 const currentRow = ref<Api.Canteen.ListItem>({...defaultValue})
 
+const userList = ref<Api.Common.SelectInfo[]>([])
 const selectList = ref<Api.Common.SelectRelationInfo[]>([])
 const companyList = ref<Api.Common.SelectInfo[]>([])
 
 const getSelectList = async () => {
-  await commonApi.selectList(['school_canteen', 'company']).then(res => {
+  await commonApi.selectList(['school_canteen', 'company', 'user']).then(res => {
     selectList.value = res.school_canteen || []
     companyList.value = res.company || []
+    userList.value = res.user || []
   })
 }
 getSelectList()
 
-
-
-
 const drawerUid = ref(0)
 
 /**

+ 43 - 2
web/src/views/canteen/list/user-search.vue

@@ -4,6 +4,8 @@
     v-model="formData"
     :items="formItems"
     :rules="rules"
+    :showExpand="false"
+    :isExpand="true"
     @reset="handleReset"
     @search="handleSearch"
   >
@@ -16,7 +18,8 @@
   interface Props {
     modelValue: Record<string, any>
     schoolList: Api.Common.SelectRelationInfo[]
-    companyList: Api.Common.SelectInfo[]
+    companyList: Api.Common.SelectInfo[],
+    userList: Api.Common.SelectInfo[]
   }
   interface Emits {
     (e: 'update:modelValue', value: Record<string, any>): void
@@ -74,7 +77,45 @@
           value: item.id
         }))
       }
-    }
+    },
+    {
+      label: '手机号',
+      key: 'phone',
+      type: 'input',
+      placeholder: '请输入手机号',
+      clearable: true
+    },
+    {
+      label: '最后跟进人',
+      key: 'last_user_id',
+      type: 'select',
+      labelWidth: '90px',
+      span:6,
+      filterable: true,
+      props: {
+        emptyValues:[0],
+        valueOnClear:0,
+        options: props.userList.map((item) => ({
+          label: item.name,
+          value: item.id
+        })),
+      },
+    },
+    {
+      label: '最后跟进时间',
+      key: 'last_date',
+      span:8,
+      labelWidth: '100px',
+      type: 'datetimerange',
+      filterable: true,
+      props: {
+        type: 'datetimerange',
+        valueFormat: 'YYYY-MM-DD HH:mm:ss',
+        rangeSeparator: '至',
+        startPlaceholder: '开始日期时间',
+        endPlaceholder: '结束日期时间'
+      }
+    },
   ])
 
   // 事件

+ 6 - 1
web/src/views/company/follow/index.vue

@@ -10,6 +10,7 @@
       @search="handleSearch"
       @reset="resetSearchParams"
       :selectList="selectList"
+      :user-list="userList"
     ></UserSearch>
 
     <ElCard class="art-table-card" shadow="never">
@@ -72,12 +73,16 @@
     phone: '',
     company_id: parseInt(<string>useRoute().query.company_id)  || '',
     date: useRoute().query.date || '',
+    user_id:0,
+    range_date:[],
   })
 
+  const userList = ref<Api.Common.SelectInfo[]>([])
   const selectList = ref<Api.Common.SelectRelationInfo[]>([])
   const getSelectList = async () => {
-    await commonApi.selectList(['company_relation']).then(res => {
+    await commonApi.selectList(['company_relation', 'user']).then(res => {
       selectList.value = res.company_relation || []
+      userList.value = res.user || []
     })
   }
   getSelectList()

+ 32 - 1
web/src/views/company/follow/modules/user-search.vue

@@ -5,6 +5,8 @@
       :items="formItems"
       :selectList="selectList"
       :rules="rules"
+      :showExpand="false"
+      :isExpand="true"
       @reset="handleReset"
       @search="handleSearch"
   >
@@ -16,7 +18,8 @@ import { ref, computed, onMounted, h } from 'vue'
 
 interface Props {
   modelValue: Record<string, any>
-  selectList: Api.Common.SelectRelationInfo[]
+  selectList: Api.Common.SelectRelationInfo[],
+  userList: Api.Common.SelectInfo[]
 }
 interface Emits {
   (e: 'update:modelValue', value: Record<string, any>): void
@@ -71,6 +74,34 @@ const formItems = computed(() => [
       props: props1
     }
   },
+  {
+    label: '跟进人',
+    key: 'user_id',
+    type: 'select',
+    filterable: true,
+    props: {
+      emptyValues:[0],
+      valueOnClear:0,
+      options: props.userList.map((item) => ({
+        label: item.name,
+        value: item.id
+      })),
+    },
+  },
+  {
+    label: '跟进时间',
+    span: 8,
+    key: 'range_date',
+    type: 'datetimerange',
+    filterable: true,
+    props: {
+      type: 'datetimerange',
+      valueFormat: 'YYYY-MM-DD HH:mm:ss',
+      rangeSeparator: '至',
+      startPlaceholder: '开始日期时间',
+      endPlaceholder: '结束日期时间'
+    }
+  },
 ])
 
 // 事件

+ 12 - 3
web/src/views/company/list/index.vue

@@ -5,7 +5,12 @@
 <template>
   <div class="user-page art-full-height">
     <!-- 搜索栏 -->
-    <UserSearch v-model="searchForm" @search="handleSearch" @reset="resetSearchParams" :schools="schools"></UserSearch>
+    <UserSearch v-model="searchForm"
+                @search="handleSearch"
+                @reset="resetSearchParams"
+                :schools="schools"
+                :user-list="userList"
+    ></UserSearch>
 
     <!--   跟进弹窗   -->
     <FollowDialog
@@ -136,7 +141,9 @@ const followDialogVisible = ref(false)
 const searchForm = ref({
   name: '',
   is_cooperate: -1,
-  address: []
+  address: [],
+  last_user_id:0,
+  last_date:[],
 })
 
 const defaultValue = <Api.Company.ListItem>{
@@ -157,12 +164,14 @@ const defaultValue = <Api.Company.ListItem>{
 
 const currentRow = ref<Api.Company.ListItem>({...defaultValue})
 
+const userList = ref<Api.Common.SelectInfo[]>([])
 const selectList = ref<Api.Common.SelectRelationInfo[]>([])
 const schools = ref<Api.Common.SelectInfo[]>([])
 const getSelectList = async () => {
-  await commonApi.selectList(['company_relation', 'school']).then(res => {
+  await commonApi.selectList(['company_relation', 'school', 'user']).then(res => {
     selectList.value = res.company_relation || []
     schools.value = res.school || []
+    userList.value = res.user || []
   })
 }
 getSelectList()

+ 50 - 2
web/src/views/company/list/user-search.vue

@@ -4,6 +4,8 @@
     v-model="formData"
     :items="formItems"
     :rules="rules"
+    :showExpand="false"
+    :isExpand="true"
     @reset="handleReset"
     @search="handleSearch"
   >
@@ -16,7 +18,8 @@
 
   interface Props {
     modelValue: Record<string, any>
-    schools: Api.Common.SelectInfo[]
+    schools: Api.Common.SelectInfo[],
+    userList: Api.Common.SelectInfo[]
   }
   interface Emits {
     (e: 'update:modelValue', value: Record<string, any>): void
@@ -75,7 +78,52 @@
           label: item.name
         }))
       }
-    }
+    },
+    {
+      label: '负责人',
+      key: 'bind_user_id',
+      type: 'select',
+      filterable: true,
+      props: {
+        emptyValues:[0],
+        valueOnClear:0,
+        options: props.userList.map((item) => ({
+          label: item.name,
+          value: item.id
+        })),
+      },
+    },
+    {
+      label: '最后跟进人',
+      key: 'last_user_id',
+      type: 'select',
+      labelWidth: '90px',
+      span:6,
+      filterable: true,
+      props: {
+        emptyValues:[0],
+        valueOnClear:0,
+        options: props.userList.map((item) => ({
+          label: item.name,
+          value: item.id
+        })),
+      },
+    },
+    {
+      label: '最后跟进时间',
+      key: 'last_date',
+      span:8,
+      labelWidth: '100px',
+      type: 'datetimerange',
+      filterable: true,
+      props: {
+        type: 'datetimerange',
+        valueFormat: 'YYYY-MM-DD HH:mm:ss',
+        rangeSeparator: '至',
+        startPlaceholder: '开始日期时间',
+        endPlaceholder: '结束日期时间'
+      }
+    },
   ])
 
   // 事件

+ 8 - 1
web/src/views/company/relation/index.vue

@@ -10,6 +10,8 @@
       @search="handleSearch"
       @reset="resetSearchParams"
       :selectList="selectList"
+      :user-list="userList"
+      labelPosition="left"
     ></UserSearch>
 
     <ElCard class="art-table-card" shadow="never">
@@ -145,12 +147,17 @@
     phone: '',
     company_id: parseInt(<string>useRoute().query.company_id)  || '',
     date: useRoute().query.date || '',
+    last_user_id:0,
+    last_date:[],
+    bind_user_id:0,
   })
 
+  const userList = ref<Api.Common.SelectInfo[]>([])
   const selectList = ref<Api.Common.SelectRelationInfo[]>([])
   const getSelectList = async () => {
-    await commonApi.selectList(['company_relation']).then(res => {
+    await commonApi.selectList(['company_relation', 'user']).then(res => {
       selectList.value = res.company_relation || []
+      userList.value = res.user || []
     })
   }
   getSelectList()

+ 36 - 2
web/src/views/company/relation/modules/user-search.vue

@@ -4,6 +4,8 @@
     v-model="formData"
     :items="formItems"
     :rules="rules"
+    :showExpand="false"
+    :isExpand="true"
     @reset="handleReset"
     @search="handleSearch"
   >
@@ -15,7 +17,8 @@
 
   interface Props {
     modelValue: Record<string, any>
-    selectList: Api.Common.SelectRelationInfo[]
+    selectList: Api.Common.SelectRelationInfo[],
+    userList: Api.Common.SelectInfo[]
   }
   interface Emits {
     (e: 'update:modelValue', value: Record<string, any>): void
@@ -60,7 +63,38 @@
           value: item.id
         }))
       }
-    }
+    },
+    {
+      label: '最后跟进人',
+      key: 'last_user_id',
+      type: 'select',
+      labelWidth: '90px',
+      span:6,
+      filterable: true,
+      props: {
+        emptyValues:[0],
+        valueOnClear:0,
+        options: props.userList.map((item) => ({
+          label: item.name,
+          value: item.id
+        })),
+      },
+    },
+    {
+      label: '最后跟进时间',
+      key: 'last_date',
+      span:8,
+      labelWidth: '100px',
+      type: 'datetimerange',
+      filterable: true,
+      props: {
+        type: 'datetimerange',
+        valueFormat: 'YYYY-MM-DD HH:mm:ss',
+        rangeSeparator: '至',
+        startPlaceholder: '开始日期时间',
+        endPlaceholder: '结束日期时间'
+      }
+    },
   ])
 
   // 事件

+ 6 - 1
web/src/views/school/follow/index.vue

@@ -10,6 +10,7 @@
       @search="handleSearch"
       @reset="resetSearchParams"
       :selectList="selectList"
+      :user-list="userList"
     ></UserSearch>
 
     <ElCard class="art-table-card" shadow="never">
@@ -72,12 +73,16 @@
     phone: '',
     school_id: parseInt(<string>useRoute().query.school_id)  || '',
     date: useRoute().query.date || '',
+    user_id:0,
+    range_date:[],
   })
 
+  const userList = ref<Api.Common.SelectInfo[]>([])
   const selectList = ref<Api.Common.SelectRelationInfo[]>([])
   const getSelectList = async () => {
-    await commonApi.selectList(['school_relation']).then(res => {
+    await commonApi.selectList(['school_relation', 'user']).then(res => {
       selectList.value = res.school_relation || []
+      userList.value = res.user || []
     })
   }
   getSelectList()

+ 32 - 1
web/src/views/school/follow/modules/user-search.vue

@@ -5,6 +5,8 @@
       :items="formItems"
       :selectList="selectList"
       :rules="rules"
+      :showExpand="false"
+      :isExpand="true"
       @reset="handleReset"
       @search="handleSearch"
   >
@@ -16,7 +18,8 @@ import { ref, computed, onMounted, h } from 'vue'
 
 interface Props {
   modelValue: Record<string, any>
-  selectList: Api.Common.SelectRelationInfo[]
+  selectList: Api.Common.SelectRelationInfo[],
+  userList: Api.Common.SelectInfo[]
 }
 interface Emits {
   (e: 'update:modelValue', value: Record<string, any>): void
@@ -71,6 +74,34 @@ const formItems = computed(() => [
       props: props1
     }
   },
+  {
+    label: '跟进人',
+    key: 'user_id',
+    type: 'select',
+    filterable: true,
+    props: {
+      emptyValues:[0],
+      valueOnClear:0,
+      options: props.userList.map((item) => ({
+        label: item.name,
+        value: item.id
+      })),
+    },
+  },
+  {
+    label: '跟进时间',
+    span: 8,
+    key: 'range_date',
+    type: 'datetimerange',
+    filterable: true,
+    props: {
+      type: 'datetimerange',
+      valueFormat: 'YYYY-MM-DD HH:mm:ss',
+      rangeSeparator: '至',
+      startPlaceholder: '开始日期时间',
+      endPlaceholder: '结束日期时间'
+    }
+  },
 ])
 
 // 事件

+ 12 - 7
web/src/views/school/list/index.vue

@@ -5,7 +5,7 @@
 <template>
   <div class="user-page art-full-height">
     <!-- 搜索栏 -->
-    <UserSearch v-model="searchForm" @search="handleSearch" @reset="resetSearchParams"></UserSearch>
+    <UserSearch v-model="searchForm" @search="handleSearch" @reset="resetSearchParams" :user-list="userList" labelPosition="top"></UserSearch>
 
     <!--   跟进弹窗   -->
     <FollowDialog
@@ -86,10 +86,6 @@
             </el-col>
 
             <el-col :sm="12">
-              <label>负责人:</label> <span>{{ currentRow.bind_user_id }}</span>
-            </el-col>
-
-            <el-col :sm="12">
               <label>是否有饿了么校内站:</label> <span>{{ currentRow.is_eleme_in_school ? '有' : '无' }}</span>
             </el-col>
 
@@ -189,7 +185,14 @@ const followDialogVisible = ref(false)
 const searchForm = ref({
   name: '',
   is_cooperate: -1,
-  address: []
+  address: [],
+  is_eleme_in_school:-1,
+  is_eleme_out_school:-1,
+  is_meituan_in_school:-1,
+  is_meituan_out_school:-1,
+  can_go_upstairs:-1,
+  can_ride:-1,
+  bind_user_id:0
 })
 
 const defaultValue = <Api.School.SchoolListItem>{
@@ -216,10 +219,12 @@ const defaultValue = <Api.School.SchoolListItem>{
 
 const currentRow = ref<Api.School.SchoolListItem>({...defaultValue})
 
+const userList = ref<Api.Common.SelectInfo[]>([])
 const selectList = ref<Api.Common.SelectRelationInfo[]>([])
 const getSelectList = async () => {
-  await commonApi.selectList(['school_relation']).then(res => {
+  await commonApi.selectList(['school_relation', 'user']).then(res => {
     selectList.value = res.school_relation || []
+    userList.value = res.user || []
   })
 }
 getSelectList()

+ 94 - 1
web/src/views/school/list/user-search.vue

@@ -16,6 +16,7 @@
 
   interface Props {
     modelValue: Record<string, any>
+    userList: Api.Common.SelectInfo[]
   }
   interface Emits {
     (e: 'update:modelValue', value: Record<string, any>): void
@@ -75,7 +76,99 @@
           { label: '未合作', value: 0 }
         ]
       }
-    }
+    },
+    {
+      label: '是否有饿了么校内站',
+      key: 'is_eleme_in_school',
+      type: 'select',
+      filterable: true,
+      props: {
+        options: [
+          { label: '全部', value: -1 },
+          { label: '有', value: 1 },
+          { label: '没有', value: 0 }
+        ]
+      }
+    },
+    {
+      label: '是否有饿了么校外站',
+      key: 'is_eleme_out_school',
+      type: 'select',
+      filterable: true,
+      props: {
+        options: [
+          { label: '全部', value: -1 },
+          { label: '有', value: 1 },
+          { label: '没有', value: 0 }
+        ]
+      }
+    },
+    {
+      label: '是否有美团校内站',
+      key: 'is_meituan_in_school',
+      type: 'select',
+      filterable: true,
+      props: {
+        options: [
+          { label: '全部', value: -1 },
+          { label: '有', value: 1 },
+          { label: '没有', value: 0 }
+        ]
+      }
+    },
+    {
+      label: '是否有美团校外站',
+      key: 'is_meituan_out_school',
+      type: 'select',
+      filterable: true,
+      props: {
+        options: [
+          { label: '全部', value: -1 },
+          { label: '有', value: 1 },
+          { label: '没有', value: 0 }
+        ]
+      }
+    },
+    {
+      label: '是否能上楼',
+      key: 'can_go_upstairs',
+      type: 'select',
+      filterable: true,
+      props: {
+        options: [
+          { label: '全部', value: -1 },
+          { label: '能', value: 1 },
+          { label: '不能', value: 0 }
+        ]
+      }
+    },
+    {
+      label: '是否允许骑电动车',
+      key: 'can_ride',
+      type: 'select',
+      filterable: true,
+      props: {
+        options: [
+          { label: '全部', value: -1 },
+          { label: '能', value: 1 },
+          { label: '不能', value: 0 }
+        ]
+      }
+    },
+    {
+      label: '负责人',
+      key: 'bind_user_id',
+      type: 'select',
+      filterable: true,
+      props: {
+        emptyValues:[0],
+        valueOnClear:0,
+        options: props.userList.map((item) => ({
+          label: item.name,
+          value: item.id
+        })),
+      },
+    },
   ])
 
   // 事件

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

@@ -10,6 +10,8 @@
       @search="handleSearch"
       @reset="resetSearchParams"
       :selectList="selectList"
+      :user-list="userList"
+      labelPosition="left"
     ></UserSearch>
 
     <ElCard class="art-table-card" shadow="never">
@@ -145,12 +147,16 @@
     phone: '',
     school_id: parseInt(<string>useRoute().query.school_id)  || '',
     date: useRoute().query.date || '',
+    last_user_id:0,
+    last_date:[],
   })
 
+  const userList = ref<Api.Common.SelectInfo[]>([])
   const selectList = ref<Api.Common.SelectRelationInfo[]>([])
   const getSelectList = async () => {
-    await commonApi.selectList(['school_relation']).then(res => {
+    await commonApi.selectList(['school_relation', 'user']).then(res => {
       selectList.value = res.school_relation || []
+      userList.value = res.user || []
     })
   }
   getSelectList()

+ 37 - 3
web/src/views/school/relation/modules/user-search.vue

@@ -4,6 +4,8 @@
     v-model="formData"
     :items="formItems"
     :rules="rules"
+    :showExpand="false"
+    :isExpand="true"
     @reset="handleReset"
     @search="handleSearch"
   >
@@ -15,7 +17,8 @@
 
   interface Props {
     modelValue: Record<string, any>
-    selectList: Api.Common.SelectRelationInfo[]
+    selectList: Api.Common.SelectRelationInfo[],
+    userList: Api.Common.SelectInfo[]
   }
   interface Emits {
     (e: 'update:modelValue', value: Record<string, any>): void
@@ -42,7 +45,7 @@
 
   // 表单配置
   const formItems = computed(() => [
-    { label: '用户名', key: 'name', type: 'input', placeholder: '请输入用户名', clearable: true },
+    { label: '关系人', key: 'name', type: 'input', placeholder: '请输入关系人', clearable: true },
     {
       label: '手机号',
       key: 'phone',
@@ -60,7 +63,38 @@
           value: item.id
         }))
       }
-    }
+    },
+    {
+      label: '最后跟进人',
+      key: 'last_user_id',
+      type: 'select',
+      labelWidth: '90px',
+      span:6,
+      filterable: true,
+      props: {
+        emptyValues:[0],
+        valueOnClear:0,
+        options: props.userList.map((item) => ({
+          label: item.name,
+          value: item.id
+        })),
+      },
+    },
+    {
+      label: '最后跟进时间',
+      key: 'last_date',
+      span:8,
+      labelWidth: '100px',
+      type: 'datetimerange',
+      filterable: true,
+      props: {
+        type: 'datetimerange',
+        valueFormat: 'YYYY-MM-DD HH:mm:ss',
+        rangeSeparator: '至',
+        startPlaceholder: '开始日期时间',
+        endPlaceholder: '结束日期时间'
+      }
+    },
   ])
 
   // 事件