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