Files
fastmovieai/fastmovie-admin/app/admin/controller/AdminController.php
T
李建琦 eae151fd57 FastMovieAI AI短剧创作平台 二开基线
- 源码: xhadmincn/FastMovieAI (Apache 2.0)
- 二开: Docker部署, Swoole改Select, route.php修复, 补update/VERSION
- vendor/示例资源已gitignore
2026-08-26 18:37:36 +08:00

602 lines
20 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace app\admin\controller;
use app\Basic;
use app\expose\build\builder\FormBuilder;
use app\expose\build\builder\TableBuilder;
use app\expose\enum\Action;
use app\expose\enum\ResponseEvent;
use app\expose\enum\State;
use app\expose\enum\Week;
use app\model\Admin;
use app\model\AdminRole;
use app\validate\Admin as ValidateAdmin;
use support\Request;
use think\facade\Db;
class AdminController extends Basic
{
public function indexGetTable(Request $request)
{
$builder = new TableBuilder;
$builder->addAction('操作', [
'width' => '200px',
'fixed' => 'right'
]);
$builder->addTableAction('编辑', [
'path' => 'Admin/update',
'props' => [
'type' => 'primary',
'title' => '编辑《{nickname}》管理员'
],
'component' => [
'name' => 'button',
'props' => [
'type' => 'primary',
'size' => 'small'
]
]
]);
$builder->addTableAction('删除', [
'model' => Action::COMFIRM['value'],
'path' => 'Admin/delete',
'where' => [
['is_system', '!=', 1]
],
'props' => [
'type' => 'error',
'message' => '确定要删除《{nickname}》管理员吗?',
'confirmButtonClass' => 'el-button--danger'
],
'component' => [
'name' => 'button',
'props' => [
'type' => 'danger',
'size' => 'small'
]
]
]);
$builder->addFooter();
$builder->addFooterAction('移动到', [
'model' => Action::DIALOG['value'],
'path' => 'Admin/moveRole',
'props' => [
'title' => '移动到',
],
'component' => [
'name' => 'button',
'props' => [
'type' => 'primary'
]
]
]);
$builder->addHeader();
$builder->addHeaderAction('创建管理员', [
'path' => 'Admin/create',
'props' => [
'type' => 'success',
'title' => '创建管理员'
],
'component' => [
'name' => 'button',
'props' => [
'type' => 'success'
]
]
]);
$formBuilder = new FormBuilder;
$formBuilder->add('username', '账号', 'input', '', [
'col' => [
'xs' => 24,
'sm' => 12,
'md' => 8,
'lg' => 6,
'xl' => 4
],
'props' => [
'placeholder' => '账号搜索',
'clearable' => true
]
]);
$formBuilder->add('mobile', '手机号', 'input', '', [
'col' => [
'xs' => 24,
'sm' => 12,
'md' => 8,
'lg' => 6,
'xl' => 4
],
'props' => [
'placeholder' => '手机号搜索',
'clearable' => true
]
]);
$builder->addScreen($formBuilder);
$builder->add('id', 'ID', [
'props' => [
'width' => '80px'
]
]);
$builder->add('userinfo', '管理员', [
'component' => [
'name' => 'table-userinfo',
'props' => [
'nickname' => 'nickname',
'avatar' => 'headimg',
'info' => 'username',
'nicknameTags' => [
[
'field' => 'new_text',
'props' => [
'type' => 'danger',
'size' => 'small'
]
],
[
'field' => 'new_text1',
'props' => [
'type' => 'success',
'size' => 'small'
]
]
],
'tags' => [
[
'field' => 'role_name',
'props' => [
'type' => 'success'
]
]
],
]
],
'props' => [
'minWidth' => '300px'
]
]);
$builder->add('contact', '联系方式', [
'props' => [
'width' => '280px'
],
'component' => [
'name' => 'table-times',
'props' => [
'group' => [
[
'field' => 'mobile',
'label' => '手机号'
],
[
'field' => 'email',
'label' => '邮箱'
],
[
'field' => 'wx_openid',
'label' => 'OpenID'
]
]
]
]
]);
$builder->add('allow_week', '工作日', [
'component' => [
'name' => 'tag',
'options' => Week::getOptions()
],
'props' => [
'width' => '240px'
]
]);
$builder->add('allow_work', '工作时间', [
'component' => [
'name' => 'tag',
'options' => [
[
'index' => 0,
'props' => [
'type' => 'success'
]
],
[
'index' => 1,
'props' => [
'type' => 'danger'
]
]
]
],
'props' => [
'width' => '200px'
]
]);
$builder->add('online_time', '活动', [
'props' => [
'width' => '200px'
],
'component' => [
'name' => 'table-times',
'props' => [
'group' => [
[
'field' => 'online_time',
'label' => '在线'
],
[
'field' => 'login_time',
'label' => '登录'
],
[
'component' => 'tag',
'field' => 'login_ip',
'label' => '登录IP',
'props' => [
'size' => 'small',
]
]
]
]
]
]);
$builder->add('state', '状态', [
'component' => [
'name' => 'switch',
'api' => 'Admin/indexUpdateState',
'props' => [
'active-value' => State::YES['value'],
'inactive-value' => State::NO['value']
]
],
'props' => [
'width' => '100px'
]
]);
$builder->add('create_time', '时间', [
'props' => [
'width' => '200px'
],
'component' => [
'name' => 'table-times',
'props' => [
'group' => [
[
'field' => 'create_time',
'label' => '创建'
],
[
'field' => 'update_time',
'label' => '更新'
]
]
]
]
]);
$builder = $builder->builder();
return $this->resData($builder);
}
public function index(Request $request)
{
$limit = $request->get('limit', 10);
$where = [];
$username = $request->get('username');
if ($username) {
$where[] = ['username', 'like', "%{$username}%"];
}
$mobile = $request->get('mobile');
if ($mobile) {
$where[] = ['mobile', 'like', "%{$mobile}%"];
}
$list = Admin::alias('a')->where($where)
->join('admin_role b', 'b.id=a.role_id')
->field('a.*,b.name as role_name,b.is_system')
->order('a.id desc')->paginate($limit)->each(function ($item) {
$item->username = "UserName" . $item->username;
$item->new_text = '新';
$item->new_text1 = 'T';
$allow_work = [];
$allow_work[] = $item->allow_time_start;
$allow_work[] = $item->allow_time_end;
$item->allow_work = $allow_work;
});
return $this->resData($list);
}
public function indexUpdateState(Request $request)
{
$id = $request->post('id');
$field = $request->post('field');
$value = $request->post('value');
$Admin = Admin::where(['id' => $id])->find();
if (!$Admin) {
return $this->fail('管理员不存在');
}
$Role = AdminRole::where(['id' => $Admin->role_id])->find();
if ($Role && $Role->is_system && !$value) {
return $this->fail('系统管理员不允许操作');
}
$Admin->{$field} = $value;
if ($Admin->save()) {
return $this->success();
}
return $this->fail('操作失败');
}
public function delete(Request $request)
{
$id = $request->post('id');
$Admin = Admin::where(['id' => $id])->find();
if (!$Admin) {
return $this->fail('管理员不存在');
}
$Role = AdminRole::where(['id' => $Admin->role_id])->find();
if ($Role && $Role->is_system) {
return $this->fail('系统管理员不允许操作');
}
if ($Admin->delete()) {
return $this->success();
}
return $this->fail('操作失败');
}
public function create(Request $request)
{
if ($request->method() === 'POST') {
$D = $request->post();
try {
$validate = new ValidateAdmin;
$validate->check($D);
} catch (\Throwable $th) {
return $this->exception($th);
}
$Role = AdminRole::where(['id' => $D['role_id']])->find();
if (!$Role) {
return $this->fail('角色不存在');
}
$Admin = new Admin;
$Admin->role_id = $D['role_id'];
$Admin->username = $D['username'];
$Admin->nickname = $D['nickname'];
$Admin->headimg = $D['headimg'];
$Admin->mobile = $D['mobile'];
$Admin->email = $D['email'];
$Admin->wx_openid = $D['wx_openid'];
if ($D['password']) {
$Admin->password = $D['password'];
}
if ($Role->is_system) {
$Admin->allow_time_start = '00:00:00';
$Admin->allow_time_end = '23:59:59';
$Admin->allow_week = Week::getValues();
} else {
$Admin->allow_time_start = $D['allow_time'][0];
$Admin->allow_time_end = $D['allow_time'][1];
$Admin->allow_week = $D['allow_week'];
}
if ($Admin->save()) {
return $this->event(ResponseEvent::UPDATE_USERINFO, '保存成功');
}
return $this->fail('保存失败');
}
$builder = $this->getFormBuilder();
return $this->resData($builder);
}
public function update(Request $request)
{
if ($request->method() === 'POST') {
$D = $request->post();
try {
$validate = new ValidateAdmin;
$validate->check($D);
} catch (\Throwable $th) {
return $this->exception($th);
}
$Admin = Admin::where(['id' => $D['id']])->find();
if (!$Admin) {
return $this->fail('管理员不存在');
}
$Role = AdminRole::where(['id' => $D['role_id']])->find();
if (!$Role) {
return $this->fail('角色不存在');
}
$Admin->role_id = $D['role_id'];
$Admin->username = $D['username'];
$Admin->nickname = $D['nickname'];
$Admin->headimg = $D['headimg'];
$Admin->mobile = $D['mobile'];
$Admin->email = $D['email'];
$Admin->wx_openid = $D['wx_openid'];
if ($D['password']) {
$Admin->password = $D['password'];
}
$Admin->allow_time_start = $D['allow_time'][0];
$Admin->allow_time_end = $D['allow_time'][1];
$Admin->allow_week = $D['allow_week'];
if ($Admin->save()) {
return $this->event(ResponseEvent::UPDATE_USERINFO, '保存成功');
}
return $this->fail('保存失败');
}
$id = $request->get('id');
$Admin = Admin::where(['id' => $id])->withoutField('password')->find();
$Role = AdminRole::where(['id' => $Admin->role_id])->find();
if (!$Role) {
$Admin->role_id = '';
}
$is_system = $Role && $Role->is_system;
$builder = $this->getFormBuilder($is_system);
$Admin->allow_time = [
$Admin->allow_time_start,
$Admin->allow_time_end
];
$builder->setData($Admin->toArray());
return $this->resData($builder);
}
private function getFormBuilder($is_system = false)
{
$builder = new FormBuilder;
$builder->add('role_id', '所属角色', 'cascader', null, [
'required' => true,
'props' => [
'options' => AdminRole::options(),
'filterable' => true,
'props' => [
'checkStrictly' => true,
'emitPath' => false
]
]
]);
$builder->add('username', '账号', 'input', '', [
'required' => true,
'props' => [
'maxlength' => 30,
'show-word-limit' => true
]
]);
$builder->add('password', '密码', 'input', '', [
'props' => [
'placeholder' => '不修改密码请留空',
'maxlength' => 30,
'show-word-limit' => true
]
]);
$builder->add('nickname', '昵称', 'input', '', [
'required' => true,
'maxlength' => 30,
'show-word-limit' => true
]);
$builder->add('headimg', '头像', 'bundle', '', [
'props' => [
'accept' => 'image/*',
'multiple' => 1
]
]);
$builder->add('mobile', '手机号', 'input', '', [
'props' => [
'maxlength' => 11,
'show-word-limit' => true
]
]);
$builder->add('email', '邮箱', 'input', '', [
'props' => [
'maxlength' => 50,
'show-word-limit' => true
]
]);
$SystemRoleId = AdminRole::systemRole('id');
$builder->add('allow_time', '工作时间范围', 'time-picker', $is_system ? ['00:00:00', '23:59:59'] : ['08:00:00', '18:00:00'], [
'where' => [
['role_id', 'not in', $SystemRoleId]
],
'props' => [
'is-range' => true,
'value-format' => 'HH:mm:ss',
'disabled' => $is_system
]
]);
$builder->add('allow_week', '工作日', 'checkbox', [], [
'options' => Week::getOptions(),
'where' => [
['role_id', 'not in', $SystemRoleId]
],
'subProps' => [
'border' => true,
'disabled' => $is_system
]
]);
$builder->add('wx_openid', 'OpenID', 'input', '', []);
return $builder;
}
public function moveRole(Request $request)
{
if ($request->method() === 'POST') {
$D = $request->post();
if (!$D['role_id']) {
return $this->fail('请选择角色');
}
$Role = AdminRole::where(['id' => $D['role_id']])->find();
if (!$Role) {
return $this->fail('角色不存在');
}
$ids = explode(',', $D['id']);
$Admin = Admin::whereIn('id', $ids)->select();
Db::startTrans();
try {
foreach ($Admin as $item) {
$item->role_id = $D['role_id'];
$item->save();
}
Db::commit();
} catch (\Throwable $th) {
Db::rollback();
return $this->exception($th);
}
return $this->event(ResponseEvent::UPDATE_USERINFO, '保存成功');
}
$builder = new FormBuilder(null,null,[
'labelPosition' => 'right',
'label-width' => "400px",
'class' => 'w-80 mx-auto',
'size' => 'large',
]);
$builder->add('role_id', '所属角色', 'cascader', null, [
'required' => true,
'props' => [
'options' => AdminRole::options(),
'filterable' => true,
'props' => [
'checkStrictly' => true,
'emitPath' => false
]
]
]);
return $this->resData($builder);
}
public function updateSelf(Request $request)
{
$id = $request->admin_uid;
if ($request->method() === 'POST') {
$D = $request->post();
$D['id'] = $id;
try {
$validate = new ValidateAdmin;
$validate->scene('self')->check($D);
} catch (\Throwable $th) {
return $this->exception($th);
}
$Admin = Admin::where(['id' => $D['id']])->find();
if (!$Admin) {
return $this->fail('管理员不存在');
}
$Admin->username = $D['username'];
$Admin->nickname = $D['nickname'];
$Admin->headimg = $D['headimg'];
$Admin->mobile = $D['mobile'];
$Admin->email = $D['email'];
$Admin->wx_openid = $D['wx_openid'];
if ($D['password']) {
$Admin->password = $D['password'];
}
if ($Admin->save()) {
return $this->event(ResponseEvent::UPDATE_USERINFO, '保存成功');
}
return $this->fail('保存失败');
}
$Admin = Admin::where(['id' => $id])->withoutField('password')->find();
if (!$Admin) {
return $this->fail('管理员不存在');
}
$builder = $this->getFormBuilder();
$builder->remove('role_id');
$builder->remove('allow_time');
$builder->remove('allow_week');
$builder->setData($Admin->toArray());
return $this->resData($builder);
}
public function getSelfInfo(Request $request)
{
$id = $request->admin_uid;
$Admin = Admin::where(['id' => $id])->withoutField('password')->find();
if (!$Admin) {
return $this->fail('管理员不存在');
}
return $this->resData(Admin::getTokenInfo($Admin));
}
}