提交 10b77fec 编写于 作者: ibizdev's avatar ibizdev

xignzi006 发布系统代码

上级 a8d2b60c
......@@ -93,6 +93,27 @@ export default {
title: '日程安排',
},
},
edit_head_form: {
details: {
grouppanel4: "分组面板",
formpage1: "基本信息",
srfupdatedate: "更新时间",
srforikey: "",
srfkey: "市场活动",
srfmajortext: "活动名称",
srftempmode: "",
srfuf: "",
srfdeid: "",
srfsourcekey: "",
template: "模板",
expectedrevenue: "估计收入",
statuscode: "状态描述",
owneridyominame: "负责人",
campaignid: "市场活动",
},
uiactions: {
},
},
info_head_form: {
details: {
grouppanel1: "分组面板",
......@@ -118,6 +139,7 @@ export default {
campaignid: "市场活动",
},
uiactions: {
edit_head: "头编辑",
},
},
main_form: {
......@@ -214,27 +236,6 @@ export default {
uiactions: {
},
},
edit_head_form: {
details: {
grouppanel4: "分组面板",
formpage1: "基本信息",
srfupdatedate: "更新时间",
srforikey: "",
srfkey: "市场活动",
srfmajortext: "活动名称",
srftempmode: "",
srfuf: "",
srfdeid: "",
srfsourcekey: "",
template: "模板",
expectedrevenue: "估计收入",
statuscode: "状态描述",
owneridyominame: "负责人",
campaignid: "市场活动",
},
uiactions: {
},
},
main_grid: {
columns: {
campaignname: "活动名称",
......
......@@ -92,6 +92,27 @@ export default {
title: '日程安排',
},
},
edit_head_form: {
details: {
grouppanel4: '分组面板',
formpage1: '基本信息',
srfupdatedate: '更新时间',
srforikey: '',
srfkey: '市场活动',
srfmajortext: '活动名称',
srftempmode: '',
srfuf: '',
srfdeid: '',
srfsourcekey: '',
template: '模板',
expectedrevenue: '估计收入',
statuscode: '状态描述',
owneridyominame: '负责人',
campaignid: '市场活动',
},
uiactions: {
},
},
info_head_form: {
details: {
grouppanel1: '分组面板',
......@@ -117,6 +138,7 @@ export default {
campaignid: '市场活动',
},
uiactions: {
edit_head: '头编辑',
},
},
main_form: {
......@@ -213,27 +235,6 @@ export default {
uiactions: {
},
},
edit_head_form: {
details: {
grouppanel4: '分组面板',
formpage1: '基本信息',
srfupdatedate: '更新时间',
srforikey: '',
srfkey: '市场活动',
srfmajortext: '活动名称',
srftempmode: '',
srfuf: '',
srfdeid: '',
srfsourcekey: '',
template: '模板',
expectedrevenue: '估计收入',
statuscode: '状态描述',
owneridyominame: '负责人',
campaignid: '市场活动',
},
uiactions: {
},
},
main_grid: {
columns: {
campaignname: '活动名称',
......
.option-view {
--option-view: 0;
}
// 避免空文件,后台不让空文件过
.campaign-edit-head {
--campaign-edit-head: 0;
}
<script lang='tsx'>
import { Component } from 'vue-property-decorator';
import CampaignEdit_HeadBase from './campaign-edit-head-base.vue';
import view_form from '@widgets/campaign/edit-head-form/edit-head-form.vue';
@Component({
components: {
view_form,
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
vm.$store.commit('addCurPageViewtag', { route: to, viewtag: vm.viewtag });
});
},
})
export default class CampaignEdit_Head extends CampaignEdit_HeadBase {
}
</script>
\ No newline at end of file
......@@ -38,6 +38,7 @@ export const PageComponents = {
Vue.component('service-appointment-edit-view', () => import('@pages/service/service-appointment-edit-view/service-appointment-edit-view.vue'));
Vue.component('account-grid-view', () => import('@pages/base/account-grid-view/account-grid-view.vue'));
Vue.component('activity-pointer-grid-view', () => import('@pages/base/activity-pointer-grid-view/activity-pointer-grid-view.vue'));
Vue.component('campaign-edit-head', () => import('@pages/marketing/campaign-edit-head/campaign-edit-head.vue'));
Vue.component('invoice-grid-view', () => import('@pages/finance/invoice-grid-view/invoice-grid-view.vue'));
Vue.component('account-info-distribution', () => import('@pages/base/account-info-distribution/account-info-distribution.vue'));
Vue.component('account-pickup-view', () => import('@pages/base/account-pickup-view/account-pickup-view.vue'));
......
......@@ -608,6 +608,20 @@ const router = new Router({
},
component: () => import('@pages/base/activity-pointer-grid-view/activity-pointer-grid-view.vue'),
},
{
path: 'campaigns/:campaign?/edit_head/:edit_head?',
meta: {
caption: 'entities.campaign.views.edit_head.title',
info:'',
parameters: [
{ pathName: 'central', parameterName: 'central' },
{ pathName: 'campaigns', parameterName: 'campaign' },
{ pathName: 'edit_head', parameterName: 'edit_head' },
],
requireAuth: true,
},
component: () => import('@pages/marketing/campaign-edit-head/campaign-edit-head.vue'),
},
{
path: 'invoices/:invoice?/gridview/:gridview?',
meta: {
......@@ -1371,6 +1385,19 @@ const router = new Router({
},
component: () => import('@pages/marketing/campaign-summary-head/campaign-summary-head.vue'),
},
{
path: '/campaigns/:campaign?/edit_head/:edit_head?',
meta: {
caption: 'entities.campaign.views.edit_head.title',
info:'',
parameters: [
{ pathName: 'campaigns', parameterName: 'campaign' },
{ pathName: 'edit_head', parameterName: 'edit_head' },
],
requireAuth: true,
},
component: () => import('@pages/marketing/campaign-edit-head/campaign-edit-head.vue'),
},
{
path: '/products/:product?/editview/:editview?',
meta: {
......
......@@ -39,6 +39,7 @@ export const viewstate: any = {
viewaction: '',
viewdatachange: false,
refviews: [
'546a88448f9751bcbfb37734514ef2d8',
],
},
{
......@@ -254,6 +255,15 @@ export const viewstate: any = {
'd8b664607bd727900320b23da3fafaf2',
],
},
{
viewtag: '546a88448f9751bcbfb37734514ef2d8',
viewmodule: 'Marketing',
viewname: 'CampaignEdit_Head',
viewaction: '',
viewdatachange: false,
refviews: [
],
},
{
viewtag: '573c48d02ab5eef37c4cf701be87fcb5',
viewmodule: 'Product',
......
.studio-view.view-container.mode-style2 {
.view-header {
height: 40px;
}
}
\ No newline at end of file
import { Component } from 'vue-property-decorator';
import { VueLifeCycleProcessing } from '@/studio-core';
import { StudioViewBase } from '../studio-view/studio-view-base';
import './studio-view-style2.less';
/**
* 视图布局模式2
*
* @export
* @class StudioViewStyle2
* @extends {Vue}
*/
@Component({})
@VueLifeCycleProcessing()
export class StudioViewStyle2 extends StudioViewBase {
/**
* 容器样式
*
* @protected
* @param {{ [str: string]: boolean }} [classNames]
* @returns {{ [str: string]: boolean }}
* @memberof StudioViewStyle2
*/
protected getContainerClass(classNames?: { [str: string]: boolean }): { [str: string]: boolean } {
return super.getContainerClass({
'mode-style2': true
});
}
/**
* 绘制视图布局内容
*
* @protected
* @returns {*}
* @memberof StudioViewStyle2
*/
protected renderContent(): any {
return [
this.isShowHeader ? <div class="view-header">
{this.$slots.toolbar ? <div class="toolbar">{this.$slots.toolbar}</div> : null}
</div> : null,
<div class="view-content">
{this.$slots.default}
</div>,
this.$slots.footer ? <div class="view-footer">
{this.$slots.footer}
</div> : null
];
}
}
\ No newline at end of file
......@@ -82,21 +82,21 @@ export class StudioViewBase extends Vue {
}
/**
* 绘制内容
* 绘制视图内容
*
* @protected
* @returns {*}
* @memberof StudioViewBase
*/
public render(): any {
return <div class={this.getContainerClass()}>
{Environment.devMode ? <view-config-actions viewName={this.viewName} viewTitle={this.viewTitle} /> : null}
{this.isShowHeader ? <div class="view-header">
protected renderContent(): any {
return [
this.isShowHeader ? <div class="view-header">
{this.$slots.title ? <div class="title">{this.$slots.title}</div> : null}
{this.$slots.toolbar ? <div class="toolbar">{this.$slots.toolbar}</div> : null}
{this.$slots.quickGroupSearch ? <div class="quick-group-search">{this.$slots.quickGroupSearch}</div> : null}
{this.$slots.quickSearchForm ? <div class="quick-search-form">{this.$slots.quickSearchForm}</div> : null}
{this.$slots.quickSearch ? <div class="quick-search">{this.$slots.quickSearch}</div> : null}
</div> : null}
</div> : null,
<div class={{ 'view-content': true, 'show-search-form': this.$slots.searchForm }}>
{this.$slots.searchForm ? <div class="search-form-wrapper">
{this.$slots.searchForm}
......@@ -104,10 +104,23 @@ export class StudioViewBase extends Vue {
<div class="content-wrapper">
{this.$slots.default}
</div>
</div>
{this.$slots.footer ? <div class="view-footer">
</div>,
this.$slots.footer ? <div class="view-footer">
{this.$slots.footer}
</div> : null}
</div> : null
];
}
/**
* 绘制内容
*
* @returns {*}
* @memberof StudioViewBase
*/
public render(): any {
return <div class={this.getContainerClass()}>
{Environment.devMode ? <view-config-actions viewName={this.viewName} viewTitle={this.viewTitle} /> : null}
{this.renderContent()}
</div>;
}
......
......@@ -55,14 +55,6 @@ export class UserInfo extends Vue {
this.changeTheme(name);
return;
}
if (name === 'custom-logout') {
const leftTime = new Date();
leftTime.setTime(leftTime.getSeconds() - 1000);
document.cookie = "ibzuaa-token=;expires=" + leftTime.toUTCString();
localStorage.removeItem('token');
location.href = location.origin + location.pathname + '#/login?redirect=' + encodeURIComponent(location.href);
return;
}
const item: any = this.findMenuByName(name);
if (item) {
this.menuClick(item);
......@@ -199,15 +191,9 @@ export class UserInfo extends Vue {
<dropdownItem name="app-theme-blue-dark" title="黑色主题">蓝黑</dropdownItem>
</dropdownMenu>
</dropdown>
<dropdown class="user-menu-child" placement="left-start">
<dropdownItem name="custom-logout" title="退出登录">
<icon type="md-log-out" />
退出登录
</dropdownItem>
</dropdown>
</dropdownMenu>
</template>
</dropdown>
</dropdown>;
}
}
\ No newline at end of file
// 导出装饰器
export { VueLifeCycleProcessing } from './decorators/VueLifeCycleProcessing';
export { SingletonMode } from './decorators/SingletonMode';
// 组件 Start
import { AppLayout } from './components/layout/app-layout/app-layout';
import { AppHeader } from './components/layout/app-header/app-header';
......@@ -9,6 +13,7 @@ import { AppContentBottomExp } from './components/layout/app-content-bottom-exp/
import { AppFooter } from './components/layout/app-footer/app-footer';
import { MenuIcon } from './components/menu-icon/menu-icon';
import { UserInfo } from './components/user-info/user-info';
import { StudioViewStyle2 } from './components/studio-view-style2/studio-view-style2';
import { StudioView } from './components/studio-view/studio-view';
import { StudioEmbedView } from './components/studio-embed-view/studio-embed-view';
import { ViewConfigActions } from './components/view-config-actions/view-config-actions';
......@@ -41,6 +46,7 @@ export const StudioCore = {
v.component('app-footer', AppFooter);
v.component('menu-icon', MenuIcon);
v.component('user-info', UserInfo);
v.component('studio-view-style2', StudioViewStyle2);
v.component('studio-view', StudioView);
v.component('studio-embed-view', StudioEmbedView);
v.component('view-config-actions', ViewConfigActions);
......
......@@ -99,6 +99,69 @@ export default class CampaignUIServiceBase extends UIService {
public initDeMainStateMap(){
}
/**
* 头编辑
*
* @param {any[]} args 当前数据
* @param {any} context 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @param {*} [srfParentDeName] 父实体名称
* @returns {Promise<any>}
*/
public async Campaign_Edit_Head(args: any[], context:any = {} ,params: any={}, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
let data: any = {};
let parentContext:any = {};
let parentViewParam:any = {};
const _this: any = actionContext;
const _args: any[] = Util.deepCopy(args);
const actionTarget: string | null = 'SINGLEKEY';
Object.assign(context, { campaign: '%campaign%' });
Object.assign(params, { campaignid: '%campaign%' });
Object.assign(params, { campaignname: '%campaignname%' });
if(_this.context){
parentContext = _this.context;
}
if(_this.viewparams){
parentViewParam = _this.viewparams;
}
context = UIActionTool.handleContextParam(actionTarget,_args,parentContext,parentViewParam,context);
data = UIActionTool.handleActionParam(actionTarget,_args,parentContext,parentViewParam,params);
context = Object.assign({},actionContext.context,context);
let parentObj:any = {srfparentdename:srfParentDeName?srfParentDeName:null,srfparentkey:srfParentDeName?context[srfParentDeName.toLowerCase()]:null};
Object.assign(data,parentObj);
Object.assign(context,parentObj);
let deResParameters: any[] = [];
const parameters: any[] = [
{ pathName: 'campaigns', parameterName: 'campaign' },
];
const openPopOver = (view: any, data: any) => {
let container: Subject<any> = actionContext.$apppopover.openPop($event, view, context,data);
container.subscribe((result: any) => {
if (!result || !Object.is(result.ret, 'OK')) {
return;
}
const _this: any = actionContext;
if(window.opener){
window.opener.postMessage({status:'OK',identification:'WF'},Environment.uniteAddress);
window.close();
}
return result.datas;
});
}
const view: any = {
viewname: 'campaign-edit-head',
height: 0,
width: 300,
title: actionContext.$t('entities.campaign.views.edit_head.title'),
placement: 'POPOVER',
};
openPopOver(view, data);
}
/**
* 获取指定数据的重定向页面
......
/**
* Edit_Head 部件模型
*
* @export
* @class Edit_HeadModel
*/
export default class Edit_HeadModel {
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof Edit_HeadModel
*/
public getDataItems(): any[] {
return [
{
name: 'srfwfmemo',
prop: 'srfwfmemo',
dataType: 'TEXT',
},
// 前端新增修改标识,新增为"0",修改为"1"或未设值
{
name: 'srffrontuf',
prop: 'srffrontuf',
dataType: 'TEXT',
},
{
name: 'srfupdatedate',
prop: 'updatedate',
dataType: 'DATETIME',
},
{
name: 'srforikey',
},
{
name: 'srfkey',
prop: 'campaignid',
dataType: 'GUID',
},
{
name: 'srfmajortext',
prop: 'campaignname',
dataType: 'TEXT',
},
{
name: 'srftempmode',
},
{
name: 'srfuf',
},
{
name: 'srfdeid',
},
{
name: 'srfsourcekey',
},
{
name: 'template',
prop: 'template',
dataType: 'YESNO',
},
{
name: 'expectedrevenue',
prop: 'expectedrevenue',
dataType: 'BIGDECIMAL',
},
{
name: 'statuscode',
prop: 'statuscode',
dataType: 'NSCODELIST',
},
{
name: 'owneridyominame',
prop: 'owneridyominame',
dataType: 'TEXT',
},
{
name: 'campaignid',
prop: 'campaignid',
dataType: 'GUID',
},
{
name: 'campaign',
prop: 'campaignid',
dataType: 'FONTKEY',
},
]
}
}
\ No newline at end of file
<script lang='tsx'>
import { Component } from 'vue-property-decorator';
import Edit_HeadBase from './edit-head-form-base.vue';
@Component({
components: {
}
})
export default class Edit_Head extends Edit_HeadBase {
}
</script>
\ No newline at end of file
......@@ -67,7 +67,7 @@
<i-button type="primary" @click="button1_click($event)"
style="">
<i class="fa fa-edit" style="margin-right: 2px;"></i>
<span >{{$t('entities.campaign.info_head_form.details.button1')}}</span>
</i-button>
</div>
......@@ -101,6 +101,7 @@ import { UIActionTool,Util } from '@/utils';
import CampaignService from '@/service/campaign/campaign-service';
import Info_HeadService from './info-head-form-service';
import CampaignUIService from '@/uiservice/campaign/campaign-ui-service';
import { FormButtonModel, FormPageModel, FormItemModel, FormDRUIPartModel, FormPartModel, FormGroupPanelModel, FormIFrameModel, FormRowItemModel, FormTabPageModel, FormTabPanelModel, FormUserControlModel } from '@/model/form-detail';
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
......@@ -190,6 +191,34 @@ export default class Info_HeadBase extends Vue implements ControlInterface {
public appEntityService: CampaignService = new CampaignService({ $store: this.$store });
/**
* 逻辑事件
*
* @param {*} [params={}]
* @param {*} [tag]
* @param {*} [$event]
* @memberof
*/
public form_button1_click(params: any = {}, tag?: any, $event?: any) {
// 取数
let datas: any[] = [];
let xData: any = null;
// _this 指向容器对象
const _this: any = this;
let paramJO:any = {};
let contextJO:any = {};
xData = this;
if (_this.getDatas && _this.getDatas instanceof Function) {
datas = [..._this.getDatas()];
}
if(params){
datas = [params];
}
// 界面行为
const curUIService:CampaignUIService = new CampaignUIService();
curUIService.Campaign_Edit_Head(datas,contextJO, paramJO, $event, xData,this,"Campaign");
}
/**
* 关闭视图
......@@ -537,7 +566,8 @@ export default class Info_HeadBase extends Vue implements ControlInterface {
,
grouppanel3: new FormGroupPanelModel({ caption: '分组面板', detailType: 'GROUPPANEL', name: 'grouppanel3', visible: true, isShowCaption: false, form: this, uiActionGroup: { caption: '', langbase: 'entities.campaign.info_head_form', extractMode: 'ITEM', details: [] } })
,
button1: new FormButtonModel({ caption: '编辑', detailType: 'BUTTON', name: 'button1', visible: true, isShowCaption: true, form: this })
button1: new FormButtonModel({ caption: '编辑', detailType: 'BUTTON', name: 'button1', visible: true, isShowCaption: false, form: this, uiaction: { type: 'DEUIACTION',
tag: 'Edit_Head', actiontarget: 'SINGLEKEY' } })
,
grouppanel4: new FormGroupPanelModel({ caption: '分组面板', detailType: 'GROUPPANEL', name: 'grouppanel4', visible: true, isShowCaption: false, form: this, uiActionGroup: { caption: '', langbase: 'entities.campaign.info_head_form', extractMode: 'ITEM', details: [] } })
,
......@@ -992,6 +1022,16 @@ export default class Info_HeadBase extends Vue implements ControlInterface {
}
/**
* 表单 编辑 事件
*
* @memberof @memberof Info_Head
*/
public button1_click($event: any): void {
this.form_button1_click(null, null, $event);
}
/**
* 分组界面行为事件
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册