FastMovieAI AI短剧创作平台 二开基线
- 源码: xhadmincn/FastMovieAI (Apache 2.0) - 二开: Docker部署, Swoole改Select, route.php修复, 补update/VERSION - vendor/示例资源已gitignore
This commit is contained in:
@@ -0,0 +1,601 @@
|
||||
<?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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user