Commit 98b13b21 authored by 徐光星's avatar 徐光星

feat: 增加历史记录model、查询

parent ba6342c1
import { Console } from 'console';
import { Controller, Context } from 'egg';
import _, { omitBy } from 'lodash';
import { v1 as uuidv1 } from 'uuid';
......@@ -17,8 +18,8 @@ export default class EditorController extends Controller {
const pageInfo = ctx.request.body;
try {
const result = await ctx.model.PageInfo.create({ ...pageInfo, uuid: uuidv1().replace(/-/g, ''), tenantId: ctx.headers['qg-tenant-id']});
const uuid = result.dataValues.uuid;
await ctx.model.PageHistory.create({ ...pageInfo, uuid, tenantId: ctx.headers['qg-tenant-id']});
const { uuid, id } = result.dataValues;
await ctx.model.PageHistory.create({ ...pageInfo, uuid, pageId: id, tenantId: ctx.headers['qg-tenant-id']});
ctx.body = ctx.helper.ok(result);
await ctx.service.redis.del(`pageInfo:${uuid}`);
await ctx.service.redis.del(`page:${uuid}`);
......@@ -41,7 +42,9 @@ export default class EditorController extends Controller {
const uuid = pageInfo.uuid;
try {
const result = await ctx.model.PageInfo.update(pageInfo, {where: { uuid: pageInfo.uuid, tenantId: ctx.headers['qg-tenant-id'] }});
await ctx.model.PageHistory.create({ ...pageInfo, tenantId: ctx.headers['qg-tenant-id']});
const pageData = await ctx.model.PageInfo.findOne({where: { uuid }});
const pageId = pageData.id;
await ctx.model.PageHistory.create({ ...pageInfo, uuid, pageId, tenantId: ctx.headers['qg-tenant-id']});
await ctx.service.redis.del(`pageInfo:${uuid}`);
await ctx.service.redis.del(`page:${uuid}`);
ctx.body = ctx.helper.ok(result);
......@@ -96,7 +99,10 @@ export default class EditorController extends Controller {
where = { ...where, isTemplate: 1 };
}
const { count: total, rows: data } = await ctx.model.PageInfo.findAndCountAll({ where, limit: +pageSize || 10,
offset: (+pageNo - 1) * +pageSize || 0, order: [['updated_at', 'DESC']], include: [PageHistory]});
offset: (+pageNo - 1) * +pageSize || 0, order: [['updated_at', 'DESC']], include: [PageHistory.scope('relative')]});
data.map(item => {
item.pageHistory && item.pageHistory.reverse();
})
ctx.body = ctx.helper.ok({ total, data });
}
......@@ -130,7 +136,7 @@ export default class EditorController extends Controller {
public async delete(ctx: Context) {
const pageInfo = await ctx.model.PageInfo.update({ enable: 0 }, {where: { id: +ctx.params.pageId, tenantId: ctx.headers['qg-tenant-id'] }});
const pageData = await ctx.model.PageInfo.find({where: { id: +ctx.params.pageId, tenantId: ctx.headers['qg-tenant-id'] }});
await ctx.model.PageHistory.destroy({where: { uuid: pageData.dataValues.uuid }});
await ctx.model.PageHistory.destroy({where: { pageId: pageData.dataValues.id }});
ctx.body = ctx.helper.ok(pageInfo);
}
public async getServerTime(ctx: Context) {
......
/**
* @desc 页面信息表
*/
import { AutoIncrement, Column, DataType, Model, PrimaryKey, Table, AllowNull, ForeignKey, BelongsTo } from 'sequelize-typescript';
import { PageInfo } from './pageInfo';
import { AutoIncrement, Column, DataType, Model, PrimaryKey, Table, AllowNull, ForeignKey, BelongsTo, DefaultScope, Scopes } from 'sequelize-typescript';
import { PageInfo } from './pageInfo';
// @DefaultScope(() => ({
// attributes: ['id', 'primaryColor', 'secondaryColor', 'producedAt'],
// }))
@Scopes({
relative: {
attributes: ['id', 'author', 'updatedAt', 'createdAt']
}
})
@Table({
modelName: 'page_history',
freezeTableName: true
......@@ -41,15 +51,14 @@
})
pageKeywords: string;
@ForeignKey(() => PageInfo)
@Column({
field: 'uuid',
type: DataType.UUID
})
uuid: string;
@BelongsTo(() => PageInfo)
pageInfo: PageInfo;
// @BelongsTo(() => PageInfo)
// pageInfo: PageInfo;
@Column({
field: 'redirectUrl',
......@@ -121,6 +130,24 @@
})
updatedAt: string;
@Column({
type: DataType.DATE,
field: 'created_at',
get() {
const moment = require('moment');
const createdAt = this.getDataValue('createdAt');
return moment(createdAt).format('YYYY-MM-DD HH:mm:ss');
},
})
createdAt: string;
@ForeignKey(() => PageInfo)
@Column({
field: 'page_id',
type: DataType.INTEGER(11)
})
pageId: number;
@Column({
type: DataType.INTEGER(11),
field: 'tenant_id',
......
......@@ -127,4 +127,5 @@ export class PageInfo extends Model<PageInfo> {
pageHistory: PageHistory[];
}
export default () => PageInfo;
\ No newline at end of file
<template>
<Modal width="700" v-model="show" title="历史记录" @on-visible-change="change">
<Table
:columns="columns"
:data="records"
class="tableStyle"
/>
<span slot="footer"></span>
</Modal>
</template>
<script>
export default {
props: {
value: {
type: Boolean,
default: false
},
records: {
type: Array,
default() {
return []
}
}
},
watch: {
value(val) {
this.show = val;
}
},
data() {
return {
show: false,
columns: [
{
title: '版本',
align: 'center',
render: (h, params) => {
console.log(params);
return h('span', this.records.length - params.index)
}
},
{
title: '更新时间',
key: 'updatedAt',
align: 'center'
},
{
key: 'author',
title: '操作人',
align: 'center'
}
]
}
},
created() {
this.show = this.value;
console.log(this.records, 123)
},
methods: {
change(val) {
if (!val) {
this.close();
}
},
close() {
this.$emit('close');
}
}
}
</script>
\ No newline at end of file
......@@ -82,15 +82,16 @@
/>
</template>
</div>
<recordsModal v-model="showRecordsModal" :records="records" @close="showRecordsModal = false" />
</div>
</template>
<script>
import Treeselect from '@riophae/vue-treeselect';
import '@riophae/vue-treeselect/dist/vue-treeselect.css';
import { cloneDeep } from 'lodash';
import recordsModal from './components/records.vue'
export default {
components: { Treeselect },
components: { Treeselect, recordsModal },
props: {
columns: {
type: Array,
......@@ -114,7 +115,9 @@ export default {
},
showSelected: false, // todo
searchCondition: [],
selectedTab: '1'
selectedTab: '1',
records: [],
showRecordsModal: false
};
},
watch: {
......@@ -133,6 +136,11 @@ export default {
}
},
methods: {
showRecords(data) {
// 展示历史记录
this.records = data || [];
this.showRecordsModal = true;
},
changePageNo(page) {
this.query(page);
this.$emit('on-page-change', page);
......
......@@ -145,6 +145,22 @@ export default {
},
'修改'
),
h(
'Button',
{
props,
style: {
...style,
display: params.row.pageHistory && params.row.pageHistory.length ? 'inline-block' : 'none'
},
on: {
click: () => {
this.$refs.qgTable.showRecords(params.row.pageHistory);
},
},
},
'历史记录'
),
h(
'Poptip',
{
......
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