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个字'); return Base::retError('昵称不可以少于2个字');
} elseif (mb_strlen($nickname) > 20) { } elseif (mb_strlen($nickname) > 20) {
return Base::retError('昵称最多只能设置20个字'); return Base::retError('昵称最多只能设置20个字');
} else { } elseif ($nickname != $user->nickname) {
$user->nickname = $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->save();
User::token($user); User::token($user);
User::AZUpdate($user->userid);
// //
if (empty($user->userimg)) { if (empty($user->userimg)) {
$user->userimg = $user->getUserimgAttribute(null); $user->userimg = $user->getUserimgAttribute(null);
@ -367,7 +368,7 @@ class UsersController extends AbstractController
*/ */
public function search() 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'); $keys = Request::input('keys');
$sorts = Request::input('sorts'); $sorts = Request::input('sorts');
@ -640,6 +641,8 @@ class UsersController extends AbstractController
return Base::retError('昵称最多只能设置20个字'); return Base::retError('昵称最多只能设置20个字');
} else { } else {
$upArray['nickname'] = $nickname; $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 int $userid
* @property array $identity 身份 * @property array $identity 身份
* @property string|null $az A-Z * @property string|null $az A-Z
* @property string|null $pinyin 拼音(主要用于搜索)
* @property string|null $email 邮箱 * @property string|null $email 邮箱
* @property string $nickname 昵称 * @property string $nickname 昵称
* @property string|null $profession 职位/职称 * @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 whereLoginNum($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereNickname($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 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 whereProfession($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereTaskDialogId($value) * @method static \Illuminate\Database\Eloquent\Builder|User whereTaskDialogId($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|User whereUpdatedAt($value)
@ -226,8 +228,9 @@ class User extends AbstractModel
$inArray = array_merge($inArray, $other); $inArray = array_merge($inArray, $other);
} }
$user = User::createInstance($inArray); $user = User::createInstance($inArray);
$user->az = Base::getFirstCharter($user->nickname);
$user->pinyin = Base::cn2pinyin($user->nickname);
$user->save(); $user->save();
User::AZUpdate($user->userid);
return $user->find($user->userid); return $user->find($user->userid);
} }
@ -427,7 +430,7 @@ class User extends AbstractModel
if (isset($_A["__static_userid2basic_" . $userid])) { if (isset($_A["__static_userid2basic_" . $userid])) {
return $_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(); $userInfo = self::whereUserid($userid)->select($fields)->first();
if ($userInfo) { if ($userInfo) {
$userInfo->online = $userInfo->getOnlineStatus(); $userInfo->online = $userInfo->getOnlineStatus();
@ -447,19 +450,6 @@ class User extends AbstractModel
return $basic ? $basic->nickname : ''; 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 * @param $email

View File

@ -2849,6 +2849,23 @@ class Base
return $first ? strtoupper($first) : '#'; 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 * @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 []; return [];
} }
if (contactsKey) { 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; return contactsData;
}, },