feat: 支持通过拼音搜索联系人

This commit is contained in:
kuaifan 2022-06-23 19:36:10 +08:00
parent d386b4e7ac
commit adf9225180
5 changed files with 74 additions and 19 deletions

View File

@ -271,8 +271,10 @@ class UsersController extends AbstractController
return Base::retError('昵称不可以少于2个字');
} elseif (mb_strlen($nickname) > 20) {
return Base::retError('昵称最多只能设置20个字');
} else {
} elseif ($nickname != $user->nickname) {
$user->nickname = $nickname;
$user->az = Base::getFirstCharter($nickname);
$user->pinyin = Base::cn2pinyin($nickname);
}
}
// 职位/职称
@ -289,7 +291,6 @@ class UsersController extends AbstractController
//
$user->save();
User::token($user);
User::AZUpdate($user->userid);
//
if (empty($user->userimg)) {
$user->userimg = $user->getUserimgAttribute(null);
@ -367,7 +368,7 @@ class UsersController extends AbstractController
*/
public function search()
{
$builder = User::select(['userid', 'email', 'nickname', 'profession', 'userimg', 'az', 'line_at', 'disable_at']);
$builder = User::select(['userid', 'email', 'nickname', 'profession', 'userimg', 'az', 'pinyin', 'line_at', 'disable_at']);
//
$keys = Request::input('keys');
$sorts = Request::input('sorts');
@ -640,6 +641,8 @@ class UsersController extends AbstractController
return Base::retError('昵称最多只能设置20个字');
} else {
$upArray['nickname'] = $nickname;
$upArray['az'] = Base::getFirstCharter($nickname);
$upArray['pinyin'] = Base::cn2pinyin($nickname);
}
}
// 职位/职称

View File

@ -14,6 +14,7 @@ use Carbon\Carbon;
* @property int $userid
* @property array $identity 身份
* @property string|null $az A-Z
* @property string|null $pinyin 拼音(主要用于搜索)
* @property string|null $email 邮箱
* @property string $nickname 昵称
* @property string|null $profession 职位/职称
@ -52,6 +53,7 @@ use Carbon\Carbon;
* @method static \Illuminate\Database\Eloquent\Builder|User whereLoginNum($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereNickname($value)
* @method static \Illuminate\Database\Eloquent\Builder|User wherePassword($value)
* @method static \Illuminate\Database\Eloquent\Builder|User wherePinyin($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereProfession($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereTaskDialogId($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereUpdatedAt($value)
@ -226,8 +228,9 @@ class User extends AbstractModel
$inArray = array_merge($inArray, $other);
}
$user = User::createInstance($inArray);
$user->az = Base::getFirstCharter($user->nickname);
$user->pinyin = Base::cn2pinyin($user->nickname);
$user->save();
User::AZUpdate($user->userid);
return $user->find($user->userid);
}
@ -427,7 +430,7 @@ class User extends AbstractModel
if (isset($_A["__static_userid2basic_" . $userid])) {
return $_A["__static_userid2basic_" . $userid];
}
$fields = ['userid', 'email', 'nickname', 'profession', 'userimg', 'az', 'line_at', 'disable_at'];
$fields = ['userid', 'email', 'nickname', 'profession', 'userimg', 'az', 'pinyin', 'line_at', 'disable_at'];
$userInfo = self::whereUserid($userid)->select($fields)->first();
if ($userInfo) {
$userInfo->online = $userInfo->getOnlineStatus();
@ -447,19 +450,6 @@ class User extends AbstractModel
return $basic ? $basic->nickname : '';
}
/**
* 更新首字母
* @param $userid
*/
public static function AZUpdate($userid)
{
$row = self::whereUserid($userid)->first();
if ($row) {
$row->az = Base::getFirstCharter($row->nickname);
$row->save();
}
}
/**
* 是否需要验证码
* @param $email

View File

@ -2849,6 +2849,23 @@ class Base
return $first ? strtoupper($first) : '#';
}
/**
* 中文转拼音
* @param $str
* @return string
*/
public static function cn2pinyin($str)
{
if (empty($str)) {
return '';
}
if (!preg_match("/^[a-zA-Z0-9_.]+$/", $str)) {
$pinyin = new Pinyin();
$str = $pinyin->permalink($str, '');
}
return $str;
}
/**
* 缓存数据
* @param $name

View File

@ -0,0 +1,45 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddWebUsersPinyin extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$isAdd = false;
Schema::table('users', function (Blueprint $table) use (&$isAdd) {
if (!Schema::hasColumn('users', 'pinyin')) {
$isAdd = true;
$table->string('pinyin', 255)->nullable()->default('')->after('az')->comment('拼音(主要用于搜索)');
}
});
if ($isAdd) {
\App\Models\User::chunkById(100, function ($lists) {
/** @var \App\Models\User $item */
foreach ($lists as $item) {
$item->pinyin = \App\Module\Base::cn2pinyin($item->nickname);
$item->save();
}
});
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn("pinyin");
});
}
}

View File

@ -286,7 +286,7 @@ export default {
return [];
}
if (contactsKey) {
return contactsData.filter(item => $A.strExists(`${item.email}||${item.nickname}`, contactsKey))
return contactsData.filter(item => $A.strExists(`${item.email}||${item.nickname}||${item.profession}||${item.pinyin}`, contactsKey))
}
return contactsData;
},