parent
4d18d28632
commit
6b17bbf818
@ -0,0 +1,5 @@ |
||||
DB_HOST = 127.0.0.1 |
||||
DB_PORT = 3306 |
||||
DB_NAME = |
||||
DB_USER = |
||||
DB_PASSWORD = |
@ -0,0 +1,54 @@ |
||||
<?php |
||||
|
||||
namespace app\admin\controller; |
||||
|
||||
use app\admin\model\Platform; |
||||
use support\Request; |
||||
use support\Response; |
||||
use think\db\exception\DbException; |
||||
|
||||
class PlatformController extends BaseController |
||||
{ |
||||
public function add(Request $request) |
||||
{ |
||||
$data = $request->post(); |
||||
$res = Platform::create($data); |
||||
if ($res->id) { |
||||
return success(); |
||||
} else { |
||||
return error('添加失败'); |
||||
} |
||||
} |
||||
|
||||
public function edit(Request $request) |
||||
{ |
||||
$data = $request->post(); |
||||
$res = Platform::update($data); |
||||
if ($res) { |
||||
return success(); |
||||
} else { |
||||
return error('修改失败'); |
||||
} |
||||
} |
||||
|
||||
public function delete(Request $request) |
||||
{ |
||||
$id = $request->post('id'); |
||||
$res = Platform::destroy($id); |
||||
if ($res) { |
||||
return success(); |
||||
} else { |
||||
return error(); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @param Request $request |
||||
* @return array|Response |
||||
* @throws DbException |
||||
*/ |
||||
public function list(Request $request) |
||||
{ |
||||
return success(Platform::list($request)); |
||||
} |
||||
} |
@ -0,0 +1,29 @@ |
||||
<?php |
||||
|
||||
namespace app\admin\model; |
||||
|
||||
use app\common\model\Platform as PlatformModel; |
||||
use support\Request; |
||||
use think\db\exception\DbException; |
||||
|
||||
/** |
||||
* @property mixed $id |
||||
*/ |
||||
class Platform extends PlatformModel |
||||
{ |
||||
/** |
||||
* @param Request $request |
||||
* @return array |
||||
* @throws DbException |
||||
*/ |
||||
public static function list(Request $request): array |
||||
{ |
||||
$params = self::buildWhere($request); |
||||
return self::where($params['where']) |
||||
->order('id', 'desc') |
||||
->paginate([ |
||||
'page' => $params['current_page'], |
||||
'list_rows' => $params['page_size'] |
||||
])->toArray(); |
||||
} |
||||
} |
@ -0,0 +1,15 @@ |
||||
<?php |
||||
|
||||
namespace app\common\model; |
||||
|
||||
/** |
||||
* 开放平台参数 |
||||
*/ |
||||
class Platform extends BaseModel |
||||
{ |
||||
static protected array $column = [ |
||||
['key' => 'name', 'name' => '公司名称'], |
||||
['key' => 'app_id', 'name' => 'app_id'], |
||||
]; |
||||
protected $table = 'platform'; |
||||
} |
@ -0,0 +1,75 @@ |
||||
<?php |
||||
|
||||
return [ |
||||
'enable' => true, |
||||
'jwt' => [ |
||||
/** 算法类型 HS256、HS384、HS512、RS256、RS384、RS512、ES256、ES384、Ed25519 */ |
||||
'algorithms' => 'HS256', |
||||
|
||||
/** access令牌秘钥 */ |
||||
'access_secret_key' => '2022d3d3LmJq', |
||||
|
||||
/** access令牌过期时间,单位:秒。默认 2 小时 */ |
||||
'access_exp' => 7200, |
||||
|
||||
/** refresh令牌秘钥 */ |
||||
'refresh_secret_key' => '2022KTxigxc9o50c', |
||||
|
||||
/** refresh令牌过期时间,单位:秒。默认 7 天 */ |
||||
'refresh_exp' => 604800, |
||||
|
||||
/** refresh 令牌是否禁用,默认不禁用 false */ |
||||
'refresh_disable' => false, |
||||
|
||||
/** 令牌签发者 */ |
||||
'iss' => 'webman.tinywan.cn', |
||||
|
||||
/** 某个时间点后才能访问,单位秒。(如:30 表示当前时间30秒后才能使用) */ |
||||
'nbf' => 0, |
||||
|
||||
/** 时钟偏差冗余时间,单位秒。建议这个余地应该不大于几分钟 */ |
||||
'leeway' => 60, |
||||
|
||||
/** 是否允许单设备登录,默认不允许 false */ |
||||
'is_single_device' => false, |
||||
|
||||
/** 缓存令牌时间,单位:秒。默认 7 天 */ |
||||
'cache_token_ttl' => 604800, |
||||
|
||||
/** 缓存令牌前缀,默认 JWT:TOKEN: */ |
||||
'cache_token_pre' => 'JWT:TOKEN:', |
||||
|
||||
/** 用户信息模型 */ |
||||
'user_model' => function ($uid) { |
||||
return []; |
||||
}, |
||||
|
||||
/** access令牌私钥 */ |
||||
'access_private_key' => <<<EOD |
||||
-----BEGIN RSA PRIVATE KEY----- |
||||
... |
||||
-----END RSA PRIVATE KEY----- |
||||
EOD, |
||||
|
||||
/** access令牌公钥 */ |
||||
'access_public_key' => <<<EOD |
||||
-----BEGIN PUBLIC KEY----- |
||||
... |
||||
-----END PUBLIC KEY----- |
||||
EOD, |
||||
|
||||
/** refresh令牌私钥 */ |
||||
'refresh_private_key' => <<<EOD |
||||
-----BEGIN RSA PRIVATE KEY----- |
||||
... |
||||
-----END RSA PRIVATE KEY----- |
||||
EOD, |
||||
|
||||
/** refresh令牌公钥 */ |
||||
'refresh_public_key' => <<<EOD |
||||
-----BEGIN PUBLIC KEY----- |
||||
... |
||||
-----END PUBLIC KEY----- |
||||
EOD, |
||||
], |
||||
]; |
@ -0,0 +1,36 @@ |
||||
<?php |
||||
|
||||
return [ |
||||
'default' => 'mysql', |
||||
'connections' => [ |
||||
'mysql' => [ |
||||
// 数据库类型 |
||||
'type' => 'mysql', |
||||
// 服务器地址 |
||||
'hostname' => getenv('DB_HOST'), |
||||
// 数据库名 |
||||
'database' => getenv('DB_NAME'), |
||||
// 数据库用户名 |
||||
'username' => getenv('DB_USER'), |
||||
// 数据库密码 |
||||
'password' => getenv('DB_PASSWORD'), |
||||
// 数据库连接端口 |
||||
'hostport' => getenv('DB_PORT'), |
||||
// 数据库连接参数 |
||||
'params' => [ |
||||
// 连接超时3秒 |
||||
\PDO::ATTR_TIMEOUT => 3, |
||||
], |
||||
// 数据库编码默认采用utf8 |
||||
'charset' => 'utf8', |
||||
// 数据库表前缀 |
||||
'prefix' => '', |
||||
// 断线重连 |
||||
'break_reconnect' => true, |
||||
// 关闭SQL监听日志 |
||||
'trigger_sql' => false, |
||||
// 自定义分页类 |
||||
'bootstrap' => '' |
||||
], |
||||
], |
||||
]; |
@ -0,0 +1,40 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
const api = { |
||||
Add: '/platform/add', |
||||
List: '/platform/list', |
||||
Edit: '/platform/edit', |
||||
Delete: '/platform/delete' |
||||
} |
||||
|
||||
export function addPlatform(parameter) { |
||||
return request({ |
||||
url: api.Add, |
||||
method: 'post', |
||||
data: parameter |
||||
}) |
||||
} |
||||
|
||||
export function getPlatform(parameter) { |
||||
return request({ |
||||
url: api.List, |
||||
method: 'get', |
||||
params: parameter |
||||
}) |
||||
} |
||||
|
||||
export function editPlatform(parameter) { |
||||
return request({ |
||||
url: api.Edit, |
||||
method: 'post', |
||||
data: parameter |
||||
}) |
||||
} |
||||
|
||||
export function deletePlatform(parameter) { |
||||
return request({ |
||||
url: api.Delete, |
||||
method: 'post', |
||||
data: parameter |
||||
}) |
||||
} |
@ -0,0 +1,193 @@ |
||||
<template> |
||||
<page-header-wrapper :title="false" content="开放平台参数配置"> |
||||
<a-card :bordered="false"> |
||||
<div class="table-page-search-wrapper"> |
||||
<a-form layout="inline"> |
||||
<a-row :gutter="48"> |
||||
<a-col :md="8" :sm="24"> |
||||
<a-form-item label="名称"> |
||||
<a-input v-model="queryParam.name" placeholder=""/> |
||||
</a-form-item> |
||||
</a-col> |
||||
<a-col :md="8" :sm="24"> |
||||
<a-form-item label="app_id"> |
||||
<a-input v-model="queryParam.app_id" placeholder=""/> |
||||
</a-form-item> |
||||
</a-col> |
||||
<span :style="advanced && { float: 'right', overflow: 'hidden' } || {} " |
||||
class="table-page-search-submitButtons"> |
||||
<a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button> |
||||
<a-button style="margin-left: 8px" @click="() => this.queryParam = {}">重置</a-button> |
||||
</span> |
||||
</a-row> |
||||
</a-form> |
||||
</div> |
||||
|
||||
<div class="table-operator"> |
||||
<a-button icon="plus" type="primary" @click="handleAdd">新建</a-button> |
||||
</div> |
||||
|
||||
<s-table |
||||
ref="table" |
||||
:columns="columns" |
||||
:data="loadData" |
||||
rowKey="id" |
||||
showPagination="auto" |
||||
size="default" |
||||
> |
||||
<span slot="action" slot-scope="text, record"> |
||||
<template> |
||||
<a @click="handleEdit(record)">编辑</a> |
||||
<a-divider type="vertical"/> |
||||
<a-popconfirm title="确定删除该记录吗?" @confirm="handleDel(record.id)"> |
||||
<a>删除</a> |
||||
</a-popconfirm> |
||||
</template> |
||||
</span> |
||||
</s-table> |
||||
|
||||
<create-form |
||||
ref="createModal" |
||||
:loading="confirmLoading" |
||||
:model="mdl" |
||||
:visible="visible" |
||||
@cancel="handleCancel" |
||||
@ok="handleOk" |
||||
/> |
||||
</a-card> |
||||
</page-header-wrapper> |
||||
</template> |
||||
|
||||
<script> |
||||
import {Ellipsis, STable} from '@/components' |
||||
import {addPlatform, deletePlatform, editPlatform, getPlatform} from '@/api/platform' |
||||
import CreateForm from './modules/CreateForm' |
||||
|
||||
const columns = [ |
||||
{ |
||||
title: '名称', |
||||
dataIndex: 'name' |
||||
}, |
||||
{ |
||||
title: 'app_id', |
||||
dataIndex: 'app_id' |
||||
}, |
||||
{ |
||||
title: 'secret', |
||||
dataIndex: 'secret' |
||||
}, |
||||
{ |
||||
title: 'token', |
||||
dataIndex: 'token' |
||||
}, |
||||
{ |
||||
title: 'aes_key', |
||||
dataIndex: 'aes_key' |
||||
}, |
||||
{ |
||||
title: '更新时间', |
||||
dataIndex: 'update_time', |
||||
sorter: true |
||||
}, |
||||
{ |
||||
title: '操作', |
||||
dataIndex: 'action', |
||||
width: '150px', |
||||
scopedSlots: {customRender: 'action'} |
||||
} |
||||
] |
||||
|
||||
export default { |
||||
name: 'account', |
||||
components: { |
||||
STable, |
||||
Ellipsis, |
||||
CreateForm |
||||
}, |
||||
data() { |
||||
this.columns = columns |
||||
return { |
||||
// create model |
||||
visible: false, |
||||
confirmLoading: false, |
||||
mdl: null, |
||||
// 高级搜索 展开/关闭 |
||||
advanced: false, |
||||
// 查询参数 |
||||
queryParam: {}, |
||||
// 加载数据方法 必须为 Promise 对象 |
||||
loadData: parameter => { |
||||
const requestParameters = Object.assign({}, parameter, this.queryParam) |
||||
return getPlatform(requestParameters) |
||||
.then(res => { |
||||
return res.data |
||||
}) |
||||
}, |
||||
selectedRowKeys: [], |
||||
selectedRows: [] |
||||
} |
||||
}, |
||||
created() { |
||||
// getRoleList({ t: new Date() }) |
||||
}, |
||||
computed: {}, |
||||
methods: { |
||||
handleAdd() { |
||||
this.mdl = null |
||||
this.visible = true |
||||
}, |
||||
handleEdit(record) { |
||||
this.visible = true |
||||
this.mdl = {...record} |
||||
}, |
||||
handleOk() { |
||||
const form = this.$refs.createModal.form |
||||
this.confirmLoading = true |
||||
form.validateFields((errors, values) => { |
||||
if (!errors) { |
||||
console.log('values', values) |
||||
if (values.id > 0) { |
||||
editPlatform(values).then(res => { |
||||
this.visible = false |
||||
form.resetFields() |
||||
this.$refs.table.refresh() |
||||
this.$message.info(res['msg']) |
||||
}).catch(e => { |
||||
console.log(e) |
||||
}).finally(() => { |
||||
this.confirmLoading = false |
||||
}) |
||||
} else { |
||||
addPlatform(values).then(res => { |
||||
this.visible = false |
||||
form.resetFields() |
||||
this.$refs.table.refresh() |
||||
this.$message.info(res['msg']) |
||||
}).catch(e => { |
||||
console.log(e) |
||||
}).finally(() => { |
||||
this.confirmLoading = false |
||||
}) |
||||
} |
||||
} else { |
||||
this.confirmLoading = false |
||||
} |
||||
}) |
||||
}, |
||||
handleCancel() { |
||||
this.visible = false |
||||
const form = this.$refs.createModal.form |
||||
form.resetFields() // 清理表单数据(可不做) |
||||
}, |
||||
handleDel(id) { |
||||
deletePlatform({id}).then(res => { |
||||
// 刷新表格 |
||||
this.$refs.table.refresh() |
||||
this.$message.info(res['msg']) |
||||
}).catch(e => { |
||||
console.log(e) |
||||
}) |
||||
} |
||||
} |
||||
} |
||||
</script> |
@ -0,0 +1,82 @@ |
||||
<template> |
||||
<a-modal |
||||
:confirmLoading="loading" |
||||
:visible="visible" |
||||
:width="640" |
||||
title="新建" |
||||
@cancel="() => { $emit('cancel') }" |
||||
@ok="() => { $emit('ok') }" |
||||
> |
||||
<a-spin :spinning="loading"> |
||||
<a-form :form="form" v-bind="formLayout"> |
||||
<!-- 检查是否有 id 并且大于0,大于0是修改。其他是新增,新增不显示主键ID --> |
||||
<a-form-item v-show="model && model.id > 0" label="主键ID"> |
||||
<a-input v-decorator="['id', { initialValue: 0 }]" disabled/> |
||||
</a-form-item> |
||||
<a-form-item label="名称"> |
||||
<a-input v-decorator="['name', {rules: [{required: true, message: '请输入名称'}]}]"/> |
||||
</a-form-item> |
||||
<a-form-item label="app_id"> |
||||
<a-input v-decorator="['app_id', {rules: [{required: true, message: '请输入app_id'}]}]"/> |
||||
</a-form-item> |
||||
<a-form-item label="secret"> |
||||
<a-input v-decorator="['secret', {rules: [{required: true, message: '请输入secret'}]}]"/> |
||||
</a-form-item> |
||||
<a-form-item label="token"> |
||||
<a-input v-decorator="['token', {rules: [{required: true, message: '请输入token'}]}]"/> |
||||
</a-form-item> |
||||
<a-form-item label="aes_key"> |
||||
<a-input v-decorator="['aes_key', {rules: [{required: true, message: '请输入aes_key'}]}]"/> |
||||
</a-form-item> |
||||
</a-form> |
||||
</a-spin> |
||||
</a-modal> |
||||
</template> |
||||
|
||||
<script> |
||||
import pick from 'lodash.pick' |
||||
|
||||
// 表单字段 |
||||
const fields = ['id', 'name', 'app_id', 'secret', 'token', 'aes_key'] |
||||
|
||||
export default { |
||||
props: { |
||||
visible: { |
||||
type: Boolean, |
||||
required: true |
||||
}, |
||||
loading: { |
||||
type: Boolean, |
||||
default: () => false |
||||
}, |
||||
model: { |
||||
type: Object, |
||||
default: () => null |
||||
} |
||||
}, |
||||
data() { |
||||
this.formLayout = { |
||||
labelCol: { |
||||
xs: {span: 24}, |
||||
sm: {span: 7} |
||||
}, |
||||
wrapperCol: { |
||||
xs: {span: 24}, |
||||
sm: {span: 13} |
||||
} |
||||
} |
||||
return { |
||||
form: this.$form.createForm(this) |
||||
} |
||||
}, |
||||
created() { |
||||
// 防止表单未注册 |
||||
fields.forEach(v => this.form.getFieldDecorator(v)) |
||||
|
||||
// 当 model 发生改变时,为表单设置值 |
||||
this.$watch('model', () => { |
||||
this.model && this.form.setFieldsValue(pick(this.model, fields)) |
||||
}) |
||||
} |
||||
} |
||||
</script> |
Loading…
Reference in new issue