Commit 7ea115fd authored by 徐光星's avatar 徐光星

feat: 积木增加历史记录表结构及查询等接口

parent 98b13b21
import { Console } from 'console';
import { Controller, Context } from 'egg'; import { Controller, Context } from 'egg';
import _, { omitBy } from 'lodash'; import _, { omitBy } from 'lodash';
import { v1 as uuidv1 } from 'uuid'; import { v1 as uuidv1 } from 'uuid';
...@@ -142,4 +141,53 @@ export default class EditorController extends Controller { ...@@ -142,4 +141,53 @@ export default class EditorController extends Controller {
public async getServerTime(ctx: Context) { public async getServerTime(ctx: Context) {
ctx.body = ctx.helper.ok(new Date().getTime()); ctx.body = ctx.helper.ok(new Date().getTime());
} }
// 恢复历史记录
public async recoverPageData(ctx: Context) {
const params = ctx.request.body;
const id = params.id;
const author = params.author;
console.log(params)
if (!id) {
ctx.body = {};
return;
}
const pageData = await ctx.model.PageHistory.findOne({where: {id: +id, tenantId: ctx.headers['qg-tenant-id']}})
const data = Object.assign({}, pageData.dataValues);
// 记录当前操作人
data.author = author;
delete data.updatedAt;
delete data.createdAt;
// 更新主表行数据
const uuid = pageData.uuid;
const updateData = Object.assign({}, data);
delete updateData.uuid;
delete updateData.pageId;
delete updateData.id;
await ctx.model.PageInfo.update(updateData, {where: { uuid: uuid, tenantId: ctx.headers['qg-tenant-id'] }});
await ctx.service.redis.del(`pageInfo:${uuid}`);
await ctx.service.redis.del(`page:${uuid}`);
// 创建新历史记录
const historyData = Object.assign({}, data);
delete historyData.id;
await ctx.model.PageHistory.create(historyData);
ctx.body = ctx.helper.ok({});
}
// 获取历史记录页面预览信息
public async getHistoryPreviewData(ctx: Context) {
const pageInfo = await ctx.model.PageHistory.findOne({where: { id: ctx.params.id }});
// console.log('sql', pageInfo);
if (ctx.query.lite && pageInfo) {
// 如果存在sheme移除掉
const page = JSON.parse(pageInfo.page || []);
for (let i = 0; i < page.elements.length; i++) {
delete page.elements[i].schame
}
if (page.scheme) {
delete page.scheme;
}
pageInfo.page = JSON.stringify(page);
}
ctx.body = ctx.helper.ok(pageInfo);
}
} }
\ No newline at end of file
...@@ -16,6 +16,8 @@ export default (application: Application) => { ...@@ -16,6 +16,8 @@ export default (application: Application) => {
router.get('/editor/get/template', controller.editor.getTemplateList); router.get('/editor/get/template', controller.editor.getTemplateList);
router.get('/editor/getServerTime', controller.editor.getServerTime); router.get('/editor/getServerTime', controller.editor.getServerTime);
router.get('/editor/get/:uuid', controller.editor.get); router.get('/editor/get/:uuid', controller.editor.get);
router.get('/editor/getHistoryPage/:id', controller.editor.getHistoryPreviewData);
router.post('/editor/recoverPageData', controller.editor.recoverPageData);
router.delete('/editor/:pageId', controller.editor.delete); router.delete('/editor/:pageId', controller.editor.delete);
router.get('/editor/login', controller.editor.login); router.get('/editor/login', controller.editor.login);
router.get('/editor', controller.editor.home); router.get('/editor', controller.editor.home);
......
...@@ -24,6 +24,9 @@ export default { ...@@ -24,6 +24,9 @@ export default {
getTemplateList() { getTemplateList() {
return http.get('editor/get/template'); return http.get('editor/get/template');
}, },
recoverPageData(params) {
return http.post(`editor/recoverPageData`, params);
},
getUpToken() { getUpToken() {
return axios.get(`${config.opapiHost}/upload/getToken`); return axios.get(`${config.opapiHost}/upload/getToken`);
}, },
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
</Modal> </Modal>
</template> </template>
<script> <script>
import editorApi from '@api/editor.api';
export default { export default {
props: { props: {
value: { value: {
...@@ -48,6 +49,50 @@ ...@@ -48,6 +49,50 @@
key: 'author', key: 'author',
title: '操作人', title: '操作人',
align: 'center' align: 'center'
},
{
title: '操作',
align: 'center',
render: (h, params) => {
const props = {
type: 'primary',
};
const style = {
display: 'inline-block',
margin: '5px',
};
return h(
'Poptip',
{
props: {
confirm: true,
transfer: true,
title: '确认恢复到此版本?',
},
style: {
...style,
},
on: {
'on-ok': async () => {
await editorApi.recoverPageData({
id: params.row.id,
author: JSON.parse(localStorage.getItem('user')).account || ''
});
window.location.reload();
},
},
},
[
h(
'Button',
{
...props
},
'恢复'
),
]
)
}
} }
] ]
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment