Commit c0eed525 authored by Xuguangxing's avatar Xuguangxing

feat: 编辑器增加页面有效期起止及活动结束后目标url字段

parent 23f666b0
...@@ -47,6 +47,36 @@ export class PageInfo extends Model<PageInfo> { ...@@ -47,6 +47,36 @@ export class PageInfo extends Model<PageInfo> {
}) })
uuid: string; uuid: string;
@Column({
field: 'redirectUrl',
type: DataType.STRING(255),
get() {
const redirectUrl = this.getDataValue('redirectUrl');
return !redirectUrl ? '' : redirectUrl;
},
})
redirectUrl: string;
@Column({
field: 'validEndTime',
type: DataType.STRING(32),
get() {
const validEndTime = this.getDataValue('validEndTime');
return !validEndTime ? '' : validEndTime;
},
})
validEndTime: string;
@Column({
field: 'validStartTime',
type: DataType.STRING(32),
get() {
const validStartTime = this.getDataValue('validStartTime');
return !validStartTime ? '' : validStartTime;
},
})
validStartTime: string;
@Column({ @Column({
type: DataType.INTEGER(1) type: DataType.INTEGER(1)
}) })
......
...@@ -14,7 +14,7 @@ export default class DynamicForm extends Vue { ...@@ -14,7 +14,7 @@ export default class DynamicForm extends Vue {
@Getter('pageData') pageData; @Getter('pageData') pageData;
@State(state => state.tenant.cartAndShareBtn) cartAndShareBtn; @State(state => state.tenant.cartAndShareBtn) cartAndShareBtn;
@Prop(Boolean) value; @Prop(Boolean) value;
validTime: string = '';
showPopup: boolean = false; showPopup: boolean = false;
loadingSave: boolean = false; loadingSave: boolean = false;
loadingPreview: boolean = false; loadingPreview: boolean = false;
...@@ -34,9 +34,10 @@ export default class DynamicForm extends Vue { ...@@ -34,9 +34,10 @@ export default class DynamicForm extends Vue {
@Watch('pageData', { immediate: true }) @Watch('pageData', { immediate: true })
onPageDataChange(newVal) { onPageDataChange(newVal) {
const { pageName, pageDescribe, pageKeywords, coverImage, isPublish, isTemplate, page } = this.pageInfo; const { pageName, pageDescribe, pageKeywords, coverImage, isPublish, isTemplate, page, validStartTime, validEndTime, redirectUrl } = this.pageInfo;
const { shareOpenMethod, shareCoverImage, diversion } = page.props; const { shareOpenMethod, shareCoverImage, diversion } = page.props;
this.formCustom = { pageName, pageDescribe, pageKeywords, coverImage, isPublish: !!isPublish, isTemplate: !!isTemplate, shareCoverImage, shareOpenMethod, diversion }; this.formCustom = { pageName, pageDescribe, pageKeywords, coverImage, isPublish: !!isPublish, isTemplate: !!isTemplate, shareCoverImage, shareOpenMethod, diversion, validStartTime, validEndTime, redirectUrl };
this.validTime = validStartTime && validEndTime ? `${validStartTime} - ${validEndTime}` : '';
} }
@Watch('value') @Watch('value')
...@@ -65,6 +66,11 @@ export default class DynamicForm extends Vue { ...@@ -65,6 +66,11 @@ export default class DynamicForm extends Vue {
this.$emit('input', val); this.$emit('input', val);
} }
validTimeChange(val) {
this.formCustom.validStartTime = val[0] || '';
this.formCustom.validEndTime = val[1] || '';
}
preview() { preview() {
this.formCustom.pageName = this.formCustom.pageName || '未命名'; this.formCustom.pageName = this.formCustom.pageName || '未命名';
this.handleSubmit('preview'); this.handleSubmit('preview');
......
<template> <template>
<Modal v-model="showPopup" width="380" @on-visible-change="change" class-name='basic-form'> <Modal v-model="showPopup" width="380" @on-visible-change="change" class-name='basic-form'>
<!-- {{formCustom}} -->
<Form @submit.native.prevent ref="formCustom" :model="formCustom" :rules="ruleCustom" :label-width="80" label-position="left"> <Form @submit.native.prevent ref="formCustom" :model="formCustom" :rules="ruleCustom" :label-width="80" label-position="left">
<FormItem label="页面名称" prop="pageName"> <FormItem label="页面名称" prop="pageName">
<Input v-model="formCustom.pageName" placeholder="请输入页面名称"></Input> <Input v-model="formCustom.pageName" placeholder="请输入页面名称"></Input>
...@@ -24,8 +25,14 @@ ...@@ -24,8 +25,14 @@
<FormItem label="是否发布" prop="isPublish"> <FormItem label="是否发布" prop="isPublish">
<i-switch v-model="formCustom.isPublish"></i-switch> <i-switch v-model="formCustom.isPublish"></i-switch>
</FormItem> </FormItem>
<FormItem label="活动有效期" prop="redirectUrl">
<DatePicker v-model="validTime" @on-change="validTimeChange" type="datetimerange" placeholder="选填,留空默认长期有效" style="width: 100%"></DatePicker>
</FormItem>
<FormItem label="活动结束url" prop="redirectUrl">
<Input v-model="formCustom.redirectUrl" placeholder="选填,留空默认首页" :rows="3"></Input>
</FormItem>
<FormItem label="导流url" prop="diversion"> <FormItem label="导流url" prop="diversion">
<Input v-model="formCustom.diversion" placeholder="可选,具体url请联系对应导流项目的产品或开发" :rows="3"></Input> <Input v-model="formCustom.diversion" placeholder="选填,具体url请联系对应导流项目的产品或开发" :rows="3"></Input>
</FormItem> </FormItem>
<FormItem label="设为模板" prop="isTemplate" v-if="formCustom.isPublish"> <FormItem label="设为模板" prop="isTemplate" v-if="formCustom.isPublish">
<i-switch v-model="formCustom.isTemplate"></i-switch> <i-switch v-model="formCustom.isTemplate"></i-switch>
......
...@@ -89,7 +89,7 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin, ...@@ -89,7 +89,7 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin,
pageData = this.handleComAchorScrollEnable(); pageData = this.handleComAchorScrollEnable();
pageData = this.handleGoodsTabs(); pageData = this.handleGoodsTabs();
pageData = this.handleCouponIds(pageData); pageData = this.handleCouponIds(pageData);
const { pageName, pageDescribe, pageKeywords, coverImage, isPublish, isTemplate, shareCoverImage, shareOpenMethod, diversion } = pageConfig; const { pageName, pageDescribe, pageKeywords, coverImage, isPublish, isTemplate, shareCoverImage, shareOpenMethod, diversion, validStartTime, validEndTime, redirectUrl } = pageConfig;
// !diversion shareCoverImage shareOpenMethod没有作为单独的sql字段存储下来,只是单纯的存储到的redis中 // !diversion shareCoverImage shareOpenMethod没有作为单独的sql字段存储下来,只是单纯的存储到的redis中
// 目前对此打了补丁,存放到page的props中 // 目前对此打了补丁,存放到page的props中
pageData.props.diversion = diversion; pageData.props.diversion = diversion;
...@@ -99,7 +99,7 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin, ...@@ -99,7 +99,7 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin,
// 如果存在sheme, 移除页面中的sacheme // 如果存在sheme, 移除页面中的sacheme
delete pageData.scheme; delete pageData.scheme;
separateAllScheme(pageData.elements); separateAllScheme(pageData.elements);
const pageInfo = { diversion, page: JSON.stringify(pageData), author: user?.account, isPublish, pageName, pageDescribe, pageKeywords, coverImage, isTemplate, shareCoverImage, shareOpenMethod } as pageInfo; const pageInfo = { diversion, page: JSON.stringify(pageData), author: user?.account, isPublish, pageName, pageDescribe, pageKeywords, coverImage, isTemplate, shareCoverImage, shareOpenMethod, validStartTime, validEndTime, redirectUrl } as pageInfo;
if (this.uuid) { pageInfo.uuid = this.uuid; } if (this.uuid) { pageInfo.uuid = this.uuid; }
await this.savePageData({ pageInfo, pageData: this.pageData }); await this.savePageData({ pageInfo, pageData: this.pageData });
if (this.uuid) { await this.getPageDate({ pageId: this.uuid }); } if (this.uuid) { await this.getPageDate({ pageId: this.uuid }); }
......
...@@ -59,6 +59,9 @@ export interface PageInfo { ...@@ -59,6 +59,9 @@ export interface PageInfo {
uuid?: string; uuid?: string;
tenantId?: number; tenantId?: number;
diversion?: string; diversion?: string;
redirectUrl?: string;
validStartTime?: string;
validEndTime?: string;
} }
export default interface EditorState { export default interface EditorState {
...@@ -83,6 +86,9 @@ export const defaultState = { ...@@ -83,6 +86,9 @@ export const defaultState = {
isPublish: false, isPublish: false,
isTemplate: false, isTemplate: false,
uuid: '', uuid: '',
validEndTime: '',
validStartTime: '',
redirectUrl: '',
page: { page: {
commonStyle: { commonStyle: {
backgroundColor: '#f7f8fa', backgroundColor: '#f7f8fa',
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
"test": "cross-env NODE_ENV=production EGG_SERVER_ENV=sit egg-scripts start --port 80 --workers 1", "test": "cross-env NODE_ENV=production EGG_SERVER_ENV=sit egg-scripts start --port 80 --workers 1",
"stop": "egg-scripts stop", "stop": "egg-scripts stop",
"backend": "nohup egg-scripts start --port 7001 --workers 4", "backend": "nohup egg-scripts start --port 7001 --workers 4",
"dev": "cross-env NODE_ENV=test APOLLO_CLUSTER=k8s NAMESPACE=yxm npm run apollo && egg-bin dev -r egg-ts-helper/register --port 7002", "dev": "cross-env NODE_ENV=test APOLLO_CLUSTER=k8s NAMESPACE=ds npm run apollo && egg-bin dev -r egg-ts-helper/register --port 7002",
"debug": "egg-bin debug -r egg-ts-helper/register", "debug": "egg-bin debug -r egg-ts-helper/register",
"apollo": "node bin/apollo.js", "apollo": "node bin/apollo.js",
"build": "npm run tsc && cross-env NODE_ENV=production APOLLO_CLUSTER=3C npm run apollo && cross-env COS_ENV=production easy build --devtool", "build": "npm run tsc && cross-env NODE_ENV=production APOLLO_CLUSTER=3C npm run apollo && cross-env COS_ENV=production easy build --devtool",
......
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