提交 60d9e01e 编写于 作者: ibizdev's avatar ibizdev

xignzi006 发布系统代码

上级 b3737bd6
/**
* 竞争对手宣传资料
*
* @export
* @interface CompetitorSalesLiterature
*/
export interface CompetitorSalesLiterature {
/**
* 建立时间
*
* @returns {*}
* @memberof CompetitorSalesLiterature
*/
createdate?: any;
/**
* 建立人
*
* @returns {*}
* @memberof CompetitorSalesLiterature
*/
createman?: any;
/**
* 关系标识
*
* @returns {*}
* @memberof CompetitorSalesLiterature
*/
relationshipsid?: any;
/**
* 关系名称
*
* @returns {*}
* @memberof CompetitorSalesLiterature
*/
relationshipsname?: any;
/**
* 关系类型
*
* @returns {*}
* @memberof CompetitorSalesLiterature
*/
relationshipstype?: any;
/**
* 更新时间
*
* @returns {*}
* @memberof CompetitorSalesLiterature
*/
updatedate?: any;
/**
* 更新人
*
* @returns {*}
* @memberof CompetitorSalesLiterature
*/
updateman?: any;
/**
* 竞争对手
*
* @returns {*}
* @memberof CompetitorSalesLiterature
*/
entityid?: any;
/**
* 销售宣传资料
*
* @returns {*}
* @memberof CompetitorSalesLiterature
*/
entity2id?: any;
/**
* 竞争对手
*
* @returns {*}
* @memberof CompetitorSalesLiterature
*/
entityname?: any;
/**
* 销售宣传资料
*
* @returns {*}
* @memberof CompetitorSalesLiterature
*/
entity2name?: any;
}
\ No newline at end of file
......@@ -30,6 +30,7 @@ import quote_en_US from '@locale/lanres/entities/quote/quote_en_US';
import campaignactivity_en_US from '@locale/lanres/entities/campaign-activity/campaign-activity_en_US';
import listlead_en_US from '@locale/lanres/entities/list-lead/list-lead_en_US';
import opportunitycompetitor_en_US from '@locale/lanres/entities/opportunity-competitor/opportunity-competitor_en_US';
import competitorsalesliterature_en_US from '@locale/lanres/entities/competitor-sales-literature/competitor-sales-literature_en_US';
import salesliteratureitem_en_US from '@locale/lanres/entities/sales-literature-item/sales-literature-item_en_US';
import contact_en_US from '@locale/lanres/entities/contact/contact_en_US';
import product_en_US from '@locale/lanres/entities/product/product_en_US';
......@@ -176,6 +177,7 @@ export default {
campaignactivity: campaignactivity_en_US,
listlead: listlead_en_US,
opportunitycompetitor: opportunitycompetitor_en_US,
competitorsalesliterature: competitorsalesliterature_en_US,
salesliteratureitem: salesliteratureitem_en_US,
contact: contact_en_US,
product: product_en_US,
......
......@@ -30,6 +30,7 @@ import quote_zh_CN from '@locale/lanres/entities/quote/quote_zh_CN';
import campaignactivity_zh_CN from '@locale/lanres/entities/campaign-activity/campaign-activity_zh_CN';
import listlead_zh_CN from '@locale/lanres/entities/list-lead/list-lead_zh_CN';
import opportunitycompetitor_zh_CN from '@locale/lanres/entities/opportunity-competitor/opportunity-competitor_zh_CN';
import competitorsalesliterature_zh_CN from '@locale/lanres/entities/competitor-sales-literature/competitor-sales-literature_zh_CN';
import salesliteratureitem_zh_CN from '@locale/lanres/entities/sales-literature-item/sales-literature-item_zh_CN';
import contact_zh_CN from '@locale/lanres/entities/contact/contact_zh_CN';
import product_zh_CN from '@locale/lanres/entities/product/product_zh_CN';
......@@ -176,6 +177,7 @@ export default {
campaignactivity: campaignactivity_zh_CN,
listlead: listlead_zh_CN,
opportunitycompetitor: opportunitycompetitor_zh_CN,
competitorsalesliterature: competitorsalesliterature_zh_CN,
salesliteratureitem: salesliteratureitem_zh_CN,
contact: contact_zh_CN,
product: product_zh_CN,
......
export default {
fields: {
createdate: "建立时间",
createman: "建立人",
relationshipsid: "关系标识",
relationshipsname: "关系名称",
relationshipstype: "关系类型",
updatedate: "更新时间",
updateman: "更新人",
entityid: "竞争对手",
entity2id: "销售宣传资料",
entityname: "竞争对手",
entity2name: "销售宣传资料",
},
};
export default {
fields: {
createdate: "建立时间",
createman: "建立人",
relationshipsid: "关系标识",
relationshipsname: "关系名称",
relationshipstype: "关系类型",
updatedate: "更新时间",
updateman: "更新人",
entityid: "竞争对手",
entity2id: "销售宣传资料",
entityname: "竞争对手",
entity2name: "销售宣传资料",
},
};
\ No newline at end of file
......@@ -768,6 +768,140 @@ mock.onPost(new RegExp(/^\/opportunities\/?([a-zA-Z0-9\-\;]{0,35})\/save$/)).rep
});
// FetchTop5
mock.onGet(new RegExp(/^\/accounts\/([a-zA-Z0-9\-\;]{1,35})\/contacts\/([a-zA-Z0-9\-\;]{1,35})\/opportunities\/fetchtop5$/)).reply((config: any) => {
console.groupCollapsed("实体:opportunity 方法: FetchTop5");
console.table({url:config.url, method: config.method, data:config.data});
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
const paramArray:Array<any> = ['accountid','contactid'];
let tempValue: any = {};
const matchArray:any = new RegExp(/^\/accounts\/([a-zA-Z0-9\-\;]{1,35})\/contacts\/([a-zA-Z0-9\-\;]{1,35})\/opportunities\/fetchtop5$/).exec(config.url);
if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){
paramArray.forEach((item: any, index: number) => {
Object.defineProperty(tempValue, item, {
enumerable: true,
value: matchArray[index + 1]
});
});
}
let items = mockDatas ? mockDatas : [];
if (items.length > 0 && paramArray.length > 0) {
paramArray.forEach((paramkey: any) => {
if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) {
let keysGrounp: Array<any> = tempValue[paramkey].split(new RegExp(/[\;]/));
let tempArray: Array<any> = [];
keysGrounp.forEach((singlekey: any) => {
let _items = items.filter((item: any) => { return item[paramkey] == singlekey });
if(_items.length >0){
tempArray.push(..._items);
}
})
items = tempArray;
} else {
items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] });
}
})
}
console.groupCollapsed("response数据 status: "+status+" data: ");
console.table(items);
console.groupEnd();
console.groupEnd();
return [status, items];
});
// FetchTop5
mock.onGet(new RegExp(/^\/contacts\/([a-zA-Z0-9\-\;]{1,35})\/opportunities\/fetchtop5$/)).reply((config: any) => {
console.groupCollapsed("实体:opportunity 方法: FetchTop5");
console.table({url:config.url, method: config.method, data:config.data});
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
const paramArray:Array<any> = ['contactid'];
let tempValue: any = {};
const matchArray:any = new RegExp(/^\/contacts\/([a-zA-Z0-9\-\;]{1,35})\/opportunities\/fetchtop5$/).exec(config.url);
if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){
paramArray.forEach((item: any, index: number) => {
Object.defineProperty(tempValue, item, {
enumerable: true,
value: matchArray[index + 1]
});
});
}
let items = mockDatas ? mockDatas : [];
if (items.length > 0 && paramArray.length > 0) {
paramArray.forEach((paramkey: any) => {
if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) {
let keysGrounp: Array<any> = tempValue[paramkey].split(new RegExp(/[\;]/));
let tempArray: Array<any> = [];
keysGrounp.forEach((singlekey: any) => {
let _items = items.filter((item: any) => { return item[paramkey] == singlekey });
if(_items.length >0){
tempArray.push(..._items);
}
})
items = tempArray;
} else {
items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] });
}
})
}
console.groupCollapsed("response数据 status: "+status+" data: ");
console.table(items);
console.groupEnd();
console.groupEnd();
return [status, items];
});
// FetchTop5
mock.onGet(new RegExp(/^\/opportunities\/fetchtop5$/)).reply((config: any) => {
console.groupCollapsed("实体:opportunity 方法: FetchTop5");
console.table({url:config.url, method: config.method, data:config.data});
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
console.groupCollapsed("response数据 status: "+status+" data: ");
console.table(mockDatas);
console.groupEnd();
console.groupEnd();
return [status, mockDatas ? mockDatas : []];
});
// FetchTop5
mock.onGet(new RegExp(/^\/opportunities\/fetchtop5(\?[\w-./?%&=,]*)*$/)).reply((config: any) => {
console.groupCollapsed("实体:opportunity 方法: FetchTop5");
console.table({url:config.url, method: config.method, data:config.data});
if(config.url.includes('page')){
let url = config.url.split('?')[1];
let params = qs.parse(url);
Object.assign(config, params);
}
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
let total = mockDatas.length;
let records: Array<any> = [];
if(!config.page || !config.size){
records = mockDatas;
}else{
if((config.page-1)*config.size < total){
records = mockDatas.slice(config.page,config.size);
}
}
console.groupCollapsed("response数据 status: "+status+" data: ");
console.table(records ? records : []);
console.groupEnd();
console.groupEnd();
return [status, records ? records : []];
});
// FetchDefault
mock.onGet(new RegExp(/^\/accounts\/([a-zA-Z0-9\-\;]{1,35})\/contacts\/([a-zA-Z0-9\-\;]{1,35})\/opportunities\/fetchdefault$/)).reply((config: any) => {
console.groupCollapsed("实体:opportunity 方法: FetchDefault");
......
......@@ -39,6 +39,7 @@ import './entity/quotes/quotes';
import './entity/campaign-activitys/campaign-activitys';
import './entity/list-leads/list-leads';
import './entity/opportunity-competitors/opportunity-competitors';
import './entity/competitor-sales-literatures/competitor-sales-literatures';
import './entity/sales-literature-items/sales-literature-items';
import './entity/contacts/contacts';
import './entity/products/products';
......
import { Http,Util } from '@/utils';
import EntityService from '../entity-service';
/**
* 竞争对手宣传资料服务对象基类
*
* @export
* @class CompetitorSalesLiteratureServiceBase
* @extends {EntityServie}
*/
export default class CompetitorSalesLiteratureServiceBase extends EntityService {
/**
* Creates an instance of CompetitorSalesLiteratureServiceBase.
*
* @param {*} [opts={}]
* @memberof CompetitorSalesLiteratureServiceBase
*/
constructor(opts: any = {}) {
super(opts);
}
/**
* 初始化基础数据
*
* @memberof CompetitorSalesLiteratureServiceBase
*/
public initBasicData(){
this.APPLYDEKEY ='competitorsalesliterature';
this.APPDEKEY = 'relationshipsid';
this.APPDENAME = 'competitorsalesliteratures';
this.APPDETEXT = 'relationshipsname';
this.APPNAME = 'crm';
this.SYSTEMNAME = 'ibizbusinesscentral';
}
// 实体接口
/**
* Select接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof CompetitorSalesLiteratureServiceBase
*/
public async Select(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.competitorsalesliterature){
return Http.getInstance().get(`/salesliteratures/${context.salesliterature}/competitorsalesliteratures/${context.competitorsalesliterature}/select`,isloading);
}
return Http.getInstance().get(`/competitorsalesliteratures/${context.competitorsalesliterature}/select`,isloading);
}
/**
* CheckKey接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof CompetitorSalesLiteratureServiceBase
*/
public async CheckKey(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.competitorsalesliterature){
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().post(`/salesliteratures/${context.salesliterature}/competitorsalesliteratures/${context.competitorsalesliterature}/checkkey`,data,isloading);
return res;
}
return Http.getInstance().post(`/competitorsalesliteratures/${context.competitorsalesliterature}/checkkey`,data,isloading);
}
/**
* Update接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof CompetitorSalesLiteratureServiceBase
*/
public async Update(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.competitorsalesliterature){
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().put(`/salesliteratures/${context.salesliterature}/competitorsalesliteratures/${context.competitorsalesliterature}`,data,isloading);
return res;
}
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().put(`/competitorsalesliteratures/${context.competitorsalesliterature}`,data,isloading);
return res;
}
/**
* Get接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof CompetitorSalesLiteratureServiceBase
*/
public async Get(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.competitorsalesliterature){
let res:any = await Http.getInstance().get(`/salesliteratures/${context.salesliterature}/competitorsalesliteratures/${context.competitorsalesliterature}`,isloading);
return res;
}
let res:any = await Http.getInstance().get(`/competitorsalesliteratures/${context.competitorsalesliterature}`,isloading);
return res;
}
/**
* Remove接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof CompetitorSalesLiteratureServiceBase
*/
public async Remove(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.competitorsalesliterature){
return Http.getInstance().delete(`/salesliteratures/${context.salesliterature}/competitorsalesliteratures/${context.competitorsalesliterature}`,isloading);
}
return Http.getInstance().delete(`/competitorsalesliteratures/${context.competitorsalesliterature}`,isloading);
}
/**
* Create接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof CompetitorSalesLiteratureServiceBase
*/
public async Create(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && true){
let masterData:any = {};
Object.assign(data,masterData);
if(!data.srffrontuf || data.srffrontuf !== "1"){
data[this.APPDEKEY] = null;
}
if(data.srffrontuf){
delete data.srffrontuf;
}
let tempContext:any = JSON.parse(JSON.stringify(context));
let res:any = await Http.getInstance().post(`/salesliteratures/${context.salesliterature}/competitorsalesliteratures`,data,isloading);
return res;
}
let masterData:any = {};
Object.assign(data,masterData);
if(!data.srffrontuf || data.srffrontuf !== "1"){
data[this.APPDEKEY] = null;
}
if(data.srffrontuf){
delete data.srffrontuf;
}
let tempContext:any = JSON.parse(JSON.stringify(context));
let res:any = await Http.getInstance().post(`/competitorsalesliteratures`,data,isloading);
return res;
}
/**
* Save接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof CompetitorSalesLiteratureServiceBase
*/
public async Save(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.competitorsalesliterature){
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().post(`/salesliteratures/${context.salesliterature}/competitorsalesliteratures/${context.competitorsalesliterature}/save`,data,isloading);
return res;
}
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().post(`/competitorsalesliteratures/${context.competitorsalesliterature}/save`,data,isloading);
return res;
}
/**
* GetDraft接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof CompetitorSalesLiteratureServiceBase
*/
public async GetDraft(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && true){
let res:any = await Http.getInstance().get(`/salesliteratures/${context.salesliterature}/competitorsalesliteratures/getdraft`,isloading);
res.data.competitorsalesliterature = data.competitorsalesliterature;
return res;
}
let res:any = await Http.getInstance().get(`/competitorsalesliteratures/getdraft`,isloading);
res.data.competitorsalesliterature = data.competitorsalesliterature;
return res;
}
/**
* FetchDefault接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof CompetitorSalesLiteratureServiceBase
*/
public async FetchDefault(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && true){
let tempData:any = JSON.parse(JSON.stringify(data));
return Http.getInstance().get(`/salesliteratures/${context.salesliterature}/competitorsalesliteratures/fetchdefault`,tempData,isloading);
}
let tempData:any = JSON.parse(JSON.stringify(data));
return Http.getInstance().get(`/competitorsalesliteratures/fetchdefault`,tempData,isloading);
}
}
\ No newline at end of file
import { Http,Util } from '@/utils';
import CompetitorSalesLiteratureServiceBase from './competitor-sales-literature-service-base';
/**
* 竞争对手宣传资料服务对象
*
* @export
* @class CompetitorSalesLiteratureService
* @extends {CompetitorSalesLiteratureServiceBase}
*/
export default class CompetitorSalesLiteratureService extends CompetitorSalesLiteratureServiceBase {
/**
* Creates an instance of CompetitorSalesLiteratureService.
*
* @param {*} [opts={}]
* @memberof CompetitorSalesLiteratureService
*/
constructor(opts: any = {}) {
super(opts);
}
}
\ No newline at end of file
......@@ -71,6 +71,7 @@ export class EntityServiceRegister {
this.allEntityService.set('campaignactivity', () => import('@/service/campaign-activity/campaign-activity-service'));
this.allEntityService.set('listlead', () => import('@/service/list-lead/list-lead-service'));
this.allEntityService.set('opportunitycompetitor', () => import('@/service/opportunity-competitor/opportunity-competitor-service'));
this.allEntityService.set('competitorsalesliterature', () => import('@/service/competitor-sales-literature/competitor-sales-literature-service'));
this.allEntityService.set('salesliteratureitem', () => import('@/service/sales-literature-item/sales-literature-item-service'));
this.allEntityService.set('contact', () => import('@/service/contact/contact-service'));
this.allEntityService.set('product', () => import('@/service/product/product-service'));
......
......@@ -48,6 +48,9 @@ export default class ProductSalesLiteratureServiceBase extends EntityService {
* @memberof ProductSalesLiteratureServiceBase
*/
public async Select(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.productsalesliterature){
return Http.getInstance().get(`/salesliteratures/${context.salesliterature}/productsalesliteratures/${context.productsalesliterature}/select`,isloading);
}
return Http.getInstance().get(`/productsalesliteratures/${context.productsalesliterature}/select`,isloading);
}
......@@ -61,6 +64,9 @@ export default class ProductSalesLiteratureServiceBase extends EntityService {
* @memberof ProductSalesLiteratureServiceBase
*/
public async Remove(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.productsalesliterature){
return Http.getInstance().delete(`/salesliteratures/${context.salesliterature}/productsalesliteratures/${context.productsalesliterature}`,isloading);
}
return Http.getInstance().delete(`/productsalesliteratures/${context.productsalesliterature}`,isloading);
}
......@@ -74,6 +80,10 @@ export default class ProductSalesLiteratureServiceBase extends EntityService {
* @memberof ProductSalesLiteratureServiceBase
*/
public async Get(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.productsalesliterature){
let res:any = await Http.getInstance().get(`/salesliteratures/${context.salesliterature}/productsalesliteratures/${context.productsalesliterature}`,isloading);
return res;
}
let res:any = await Http.getInstance().get(`/productsalesliteratures/${context.productsalesliterature}`,isloading);
return res;
}
......@@ -88,6 +98,12 @@ export default class ProductSalesLiteratureServiceBase extends EntityService {
* @memberof ProductSalesLiteratureServiceBase
*/
public async Update(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.productsalesliterature){
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().put(`/salesliteratures/${context.salesliterature}/productsalesliteratures/${context.productsalesliterature}`,data,isloading);
return res;
}
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().put(`/productsalesliteratures/${context.productsalesliterature}`,data,isloading);
......@@ -104,6 +120,12 @@ export default class ProductSalesLiteratureServiceBase extends EntityService {
* @memberof ProductSalesLiteratureServiceBase
*/
public async CheckKey(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.productsalesliterature){
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().post(`/salesliteratures/${context.salesliterature}/productsalesliteratures/${context.productsalesliterature}/checkkey`,data,isloading);
return res;
}
return Http.getInstance().post(`/productsalesliteratures/${context.productsalesliterature}/checkkey`,data,isloading);
}
......@@ -117,6 +139,11 @@ export default class ProductSalesLiteratureServiceBase extends EntityService {
* @memberof ProductSalesLiteratureServiceBase
*/
public async GetDraft(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && true){
let res:any = await Http.getInstance().get(`/salesliteratures/${context.salesliterature}/productsalesliteratures/getdraft`,isloading);
res.data.productsalesliterature = data.productsalesliterature;
return res;
}
let res:any = await Http.getInstance().get(`/productsalesliteratures/getdraft`,isloading);
res.data.productsalesliterature = data.productsalesliterature;
return res;
......@@ -132,6 +159,12 @@ export default class ProductSalesLiteratureServiceBase extends EntityService {
* @memberof ProductSalesLiteratureServiceBase
*/
public async Save(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.productsalesliterature){
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().post(`/salesliteratures/${context.salesliterature}/productsalesliteratures/${context.productsalesliterature}/save`,data,isloading);
return res;
}
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().post(`/productsalesliteratures/${context.productsalesliterature}/save`,data,isloading);
......@@ -148,6 +181,19 @@ export default class ProductSalesLiteratureServiceBase extends EntityService {
* @memberof ProductSalesLiteratureServiceBase
*/
public async Create(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && true){
let masterData:any = {};
Object.assign(data,masterData);
if(!data.srffrontuf || data.srffrontuf !== "1"){
data[this.APPDEKEY] = null;
}
if(data.srffrontuf){
delete data.srffrontuf;
}
let tempContext:any = JSON.parse(JSON.stringify(context));
let res:any = await Http.getInstance().post(`/salesliteratures/${context.salesliterature}/productsalesliteratures`,data,isloading);
return res;
}
let masterData:any = {};
Object.assign(data,masterData);
if(!data.srffrontuf || data.srffrontuf !== "1"){
......@@ -171,6 +217,10 @@ export default class ProductSalesLiteratureServiceBase extends EntityService {
* @memberof ProductSalesLiteratureServiceBase
*/
public async FetchDefault(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && true){
let tempData:any = JSON.parse(JSON.stringify(data));
return Http.getInstance().get(`/salesliteratures/${context.salesliterature}/productsalesliteratures/fetchdefault`,tempData,isloading);
}
let tempData:any = JSON.parse(JSON.stringify(data));
return Http.getInstance().get(`/productsalesliteratures/fetchdefault`,tempData,isloading);
}
......
......@@ -48,6 +48,9 @@ export default class SalesLiteratureItemServiceBase extends EntityService {
* @memberof SalesLiteratureItemServiceBase
*/
public async Select(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.salesliteratureitem){
return Http.getInstance().get(`/salesliteratures/${context.salesliterature}/salesliteratureitems/${context.salesliteratureitem}/select`,isloading);
}
return Http.getInstance().get(`/salesliteratureitems/${context.salesliteratureitem}/select`,isloading);
}
......@@ -61,6 +64,12 @@ export default class SalesLiteratureItemServiceBase extends EntityService {
* @memberof SalesLiteratureItemServiceBase
*/
public async Save(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.salesliteratureitem){
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().post(`/salesliteratures/${context.salesliterature}/salesliteratureitems/${context.salesliteratureitem}/save`,data,isloading);
return res;
}
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().post(`/salesliteratureitems/${context.salesliteratureitem}/save`,data,isloading);
......@@ -77,6 +86,10 @@ export default class SalesLiteratureItemServiceBase extends EntityService {
* @memberof SalesLiteratureItemServiceBase
*/
public async Get(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.salesliteratureitem){
let res:any = await Http.getInstance().get(`/salesliteratures/${context.salesliterature}/salesliteratureitems/${context.salesliteratureitem}`,isloading);
return res;
}
let res:any = await Http.getInstance().get(`/salesliteratureitems/${context.salesliteratureitem}`,isloading);
return res;
}
......@@ -91,6 +104,11 @@ export default class SalesLiteratureItemServiceBase extends EntityService {
* @memberof SalesLiteratureItemServiceBase
*/
public async GetDraft(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && true){
let res:any = await Http.getInstance().get(`/salesliteratures/${context.salesliterature}/salesliteratureitems/getdraft`,isloading);
res.data.salesliteratureitem = data.salesliteratureitem;
return res;
}
let res:any = await Http.getInstance().get(`/salesliteratureitems/getdraft`,isloading);
res.data.salesliteratureitem = data.salesliteratureitem;
return res;
......@@ -106,6 +124,9 @@ export default class SalesLiteratureItemServiceBase extends EntityService {
* @memberof SalesLiteratureItemServiceBase
*/
public async Remove(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.salesliteratureitem){
return Http.getInstance().delete(`/salesliteratures/${context.salesliterature}/salesliteratureitems/${context.salesliteratureitem}`,isloading);
}
return Http.getInstance().delete(`/salesliteratureitems/${context.salesliteratureitem}`,isloading);
}
......@@ -119,6 +140,12 @@ export default class SalesLiteratureItemServiceBase extends EntityService {
* @memberof SalesLiteratureItemServiceBase
*/
public async Update(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.salesliteratureitem){
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().put(`/salesliteratures/${context.salesliterature}/salesliteratureitems/${context.salesliteratureitem}`,data,isloading);
return res;
}
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().put(`/salesliteratureitems/${context.salesliteratureitem}`,data,isloading);
......@@ -135,6 +162,12 @@ export default class SalesLiteratureItemServiceBase extends EntityService {
* @memberof SalesLiteratureItemServiceBase
*/
public async CheckKey(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && context.salesliteratureitem){
let masterData:any = {};
Object.assign(data,masterData);
let res:any = await Http.getInstance().post(`/salesliteratures/${context.salesliterature}/salesliteratureitems/${context.salesliteratureitem}/checkkey`,data,isloading);
return res;
}
return Http.getInstance().post(`/salesliteratureitems/${context.salesliteratureitem}/checkkey`,data,isloading);
}
......@@ -148,6 +181,19 @@ export default class SalesLiteratureItemServiceBase extends EntityService {
* @memberof SalesLiteratureItemServiceBase
*/
public async Create(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && true){
let masterData:any = {};
Object.assign(data,masterData);
if(!data.srffrontuf || data.srffrontuf !== "1"){
data[this.APPDEKEY] = null;
}
if(data.srffrontuf){
delete data.srffrontuf;
}
let tempContext:any = JSON.parse(JSON.stringify(context));
let res:any = await Http.getInstance().post(`/salesliteratures/${context.salesliterature}/salesliteratureitems`,data,isloading);
return res;
}
let masterData:any = {};
Object.assign(data,masterData);
if(!data.srffrontuf || data.srffrontuf !== "1"){
......@@ -171,6 +217,10 @@ export default class SalesLiteratureItemServiceBase extends EntityService {
* @memberof SalesLiteratureItemServiceBase
*/
public async FetchDefault(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
if(context.salesliterature && true){
let tempData:any = JSON.parse(JSON.stringify(data));
return Http.getInstance().get(`/salesliteratures/${context.salesliterature}/salesliteratureitems/fetchdefault`,tempData,isloading);
}
let tempData:any = JSON.parse(JSON.stringify(data));
return Http.getInstance().get(`/salesliteratureitems/fetchdefault`,tempData,isloading);
}
......
import { Environment } from '@/environments/environment';
import { UIActionTool,Util } from '@/utils';
import UIService from '../ui-service';
import { Subject } from 'rxjs';
import CompetitorSalesLiteratureService from '@/service/competitor-sales-literature/competitor-sales-literature-service';
/**
* 竞争对手宣传资料UI服务对象基类
*
* @export
* @class CompetitorSalesLiteratureUIServiceBase
*/
export default class CompetitorSalesLiteratureUIServiceBase extends UIService {
/**
* 是否支持工作流
*
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
public isEnableWorkflow:boolean = false;
/**
* 当前UI服务对应的数据服务对象
*
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
public dataService:CompetitorSalesLiteratureService = new CompetitorSalesLiteratureService();
/**
* 所有关联视图
*
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
public allViewMap: Map<string, Object> = new Map();
/**
* 状态值
*
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
public stateValue: number = 0;
/**
* 状态属性
*
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
public stateField: string = "";
/**
* 主状态属性集合
*
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
public mainStateFields:Array<any> = [];
/**
* 主状态集合Map
*
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
public allDeMainStateMap:Map<string,string> = new Map();
/**
* Creates an instance of CompetitorSalesLiteratureUIServiceBase.
*
* @param {*} [opts={}]
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
constructor(opts: any = {}) {
super(opts);
this.initViewMap();
this.initDeMainStateMap();
}
/**
* 初始化视图Map
*
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
public initViewMap(){
}
/**
* 初始化主状态集合
*
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
public initDeMainStateMap(){
}
/**
* 获取指定数据的重定向页面
*
* @param srfkey 数据主键
* @param isEnableWorkflow 重定向视图是否需要处理流程中的数据
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
public async getRDAppView(srfkey:string,isEnableWorkflow:boolean){
this.isEnableWorkflow = isEnableWorkflow;
// 进行数据查询
let result:any = await this.dataService.Get({competitorsalesliterature:srfkey});
const curData:any = result.data;
//判断当前数据模式,默认为true,todo
const iRealDEModel:boolean = true;
let bDataInWF:boolean = false;
let bWFMode:any = false;
// 计算数据模式
if (this.isEnableWorkflow) {
bDataInWF = await this.dataService.testDataInWF({stateValue:this.stateValue,stateField:this.stateField},curData);
if (bDataInWF) {
bDataInWF = true;
bWFMode = await this.dataService.testUserExistWorklist(null,curData);
}
}
let strPDTViewParam:string = await this.getDESDDEViewPDTParam(curData, bDataInWF, bWFMode);
//若不是当前数据模式,处理strPDTViewParam,todo
//查找视图
//返回视图
return this.allViewMap.get(strPDTViewParam);
}
/**
* 获取实际的数据类型
*
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
public getRealDEType(entity:any){
}
/**
* 获取实体单数据实体视图预定义参数
*
* @param curData 当前数据
* @param bDataInWF 是否有数据在工作流中
* @param bWFMode 是否工作流模式
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
public async getDESDDEViewPDTParam(curData:any, bDataInWF:boolean, bWFMode:boolean){
let strPDTParam:string = '';
if (bDataInWF) {
// 判断数据是否在流程中
}
//多表单,todo
const isEnableMultiForm:boolean = false;
const multiFormDEField:string|null =null;
if (isEnableMultiForm && multiFormDEField) {
const objFormValue:string = curData[multiFormDEField];
if(!Environment.isAppMode){
return 'MOBEDITVIEW'+objFormValue;
}
return 'EDITVIEW'+objFormValue;
}
if(!Environment.isAppMode){
if(this.getDEMainStateTag(curData)){
return `MOBEDITVIEW:MSTAG:${ await this.getDEMainStateTag(curData)}`;
}
return 'MOBEDITVIEW:';
}
if(this.getDEMainStateTag(curData)){
return `EDITVIEW:MSTAG:${ await this.getDEMainStateTag(curData)}`;
}
return 'EDITVIEW:';
}
/**
* 获取数据对象的主状态标识
*
* @param curData 当前数据
* @memberof CompetitorSalesLiteratureUIServiceBase
*/
public async getDEMainStateTag(curData:any){
if(this.mainStateFields.length === 0) return null;
this.mainStateFields.forEach((singleMainField:any) =>{
if(!(singleMainField in curData)){
console.error(`当前数据对象不包含属性singleMainField,可能会发生错误`);
}
})
let strTag:String = "";
for (let i = 0; i <= 1; i++) {
let strTag:string = (curData[this.mainStateFields[0]])?(i == 0) ? curData[this.mainStateFields[0]] : "":"";
if (this.mainStateFields.length >= 2) {
for (let j = 0; j <= 1; j++) {
let strTag2:string = (curData[this.mainStateFields[1]])?`${strTag}__${(j == 0) ? curData[this.mainStateFields[1]] : ""}`:strTag;
if (this.mainStateFields.length >= 3) {
for (let k = 0; k <= 1; k++) {
let strTag3:string = (curData[this.mainStateFields[2]])?`${strTag2}__${(k == 0) ? curData[this.mainStateFields[2]] : ""}`:strTag2;
// 判断是否存在
return this.allDeMainStateMap.get(strTag3);
}
}else{
return this.allDeMainStateMap.get(strTag2);
}
}
}else{
return this.allDeMainStateMap.get(strTag);
}
}
return null;
}
}
\ No newline at end of file
import CompetitorSalesLiteratureUIServiceBase from './competitor-sales-literature-ui-service-base';
/**
* 竞争对手宣传资料UI服务对象
*
* @export
* @class CompetitorSalesLiteratureUIService
*/
export default class CompetitorSalesLiteratureUIService extends CompetitorSalesLiteratureUIServiceBase {
/**
* Creates an instance of CompetitorSalesLiteratureUIService.
*
* @param {*} [opts={}]
* @memberof CompetitorSalesLiteratureUIService
*/
constructor(opts: any = {}) {
super(opts);
}
}
\ No newline at end of file
......@@ -71,6 +71,7 @@ export class UIServiceRegister {
this.allUIService.set('campaignactivity', () => import('@/uiservice/campaign-activity/campaign-activity-ui-service'));
this.allUIService.set('listlead', () => import('@/uiservice/list-lead/list-lead-ui-service'));
this.allUIService.set('opportunitycompetitor', () => import('@/uiservice/opportunity-competitor/opportunity-competitor-ui-service'));
this.allUIService.set('competitorsalesliterature', () => import('@/uiservice/competitor-sales-literature/competitor-sales-literature-ui-service'));
this.allUIService.set('salesliteratureitem', () => import('@/uiservice/sales-literature-item/sales-literature-item-ui-service'));
this.allUIService.set('contact', () => import('@/uiservice/contact/contact-ui-service'));
this.allUIService.set('product', () => import('@/uiservice/product/product-ui-service'));
......
......@@ -3,6 +3,33 @@
<app-build @handleClick="handleClick.apply(_self, arguments)"></app-build>
</row>
<row v-if="!isHasCustomized">
<i-col :md="{ span: 24, offset: 0 }">
<card class="portlet-card" :bordered="false" dis-hover :padding="0">
<span>
<div class='portlet-container db-container1 ' :style="{}">
<row>
<i-col :md="{ span: 24, offset: 0 }">
<div class="portlet-without-title">
<card class="portlet-card" :bordered="false" dis-hover :padding="0">
<span>
<view_db_sysportlet1
:viewState="viewState"
:viewparams="viewparams"
:context="context"
:height="300"
name="db_sysportlet1"
ref='db_sysportlet1'
@closeview="closeView($event)">
</view_db_sysportlet1>
</span>
</card>
</div>
</i-col>
</row>
</div>
</span>
</card>
</i-col>
</row>
<row v-if="isHasCustomized" style="width: 100%;min-height: calc(100% - 40px);">
<div class="portlet-container" style="position: relative;width:100%;">
......
......@@ -3,6 +3,7 @@
import { Component } from 'vue-property-decorator';
import { VueLifeCycleProcessing } from '@/studio-core';
import { CenteralPortal_dbDashboardBase } from './centeral-portal-db-dashboard-base';
import view_db_sysportlet1 from '@widgets/opportunity/part-cht-001-portlet/part-cht-001-portlet.vue';
/**
......@@ -14,6 +15,7 @@ import { CenteralPortal_dbDashboardBase } from './centeral-portal-db-dashboard-b
*/
@Component({
components: {
view_db_sysportlet1,
}
})
......
/**
* CHART_001 部件模型
*
* @export
* @class CHART_001Model
*/
export default class CHART_001Model {
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof CHART_001Db_sysportlet1_chartMode
*/
public getDataItems(): any[] {
return [
{
name:'size',
prop:'size'
},
{
name:'query',
prop:'query'
},
{
name:'page',
prop:'page'
},
{
name:'sort',
prop:'sort'
}
]
}
}
\ No newline at end of file
import { Http,Util,Errorlog } from '@/utils';
import ControlService from '@/widgets/control-service';
import OpportunityService from '@/service/opportunity/opportunity-service';
import CHART_001Model from './chart-001-chart-model';
/**
* CHART_001 部件服务对象
*
* @export
* @class CHART_001Service
*/
export default class CHART_001Service extends ControlService {
/**
* 商机服务对象
*
* @type {OpportunityService}
* @memberof CHART_001Service
*/
public appEntityService: OpportunityService = new OpportunityService({ $store: this.getStore() });
/**
* 设置从数据模式
*
* @type {boolean}
* @memberof CHART_001Service
*/
public setTempMode(){
this.isTempMode = false;
}
/**
* Creates an instance of CHART_001Service.
*
* @param {*} [opts={}]
* @memberof CHART_001Service
*/
constructor(opts: any = {}) {
super(opts);
this.model = new CHART_001Model();
}
/**
* 查询数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof CHART_001Service
*/
@Errorlog
public search(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise<any> {
const {data:Data,context:Context} = this.handleRequestData(action,context,data,true);
return new Promise((resolve: any, reject: any) => {
const _appEntityService: any = this.appEntityService;
let result: Promise<any>;
if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
result = _appEntityService[action](Context,Data, isloading);
}else{
result =_appEntityService.FetchDefault(Context,Data, isloading);
}
result.then((response) => {
resolve(response);
}).catch(response => {
reject(response);
});
});
}
}
\ No newline at end of file
<div class="app-data-chart ">
<div v-if="isNoData" class="chart-no-data"><i class="el-icon-data-analysis"></i>暂无数据</div>
<div v-else class="app-charts" :id="chartId" style="height: 300px;padding: 6px 0;"></div>
</div>
\ No newline at end of file
.app-data-chart {
width: 100%;
height: 100%;
.chart-no-data{
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
i{
margin-right: 5px;
}
}
}
\ No newline at end of file
<template src="./chart-001-chart.html"/>
<script lang='tsx'>
import { Component } from 'vue-property-decorator';
import { VueLifeCycleProcessing } from '@/studio-core';
import { CHART_001ChartBase } from './chart-001-chart-base';
/**
* db_sysportlet1_chart部件
*
* @export
* @class CHART_001Chart
* @extends {CHART_001ChartBase}
*/
@Component({
components: {
}
})
@VueLifeCycleProcessing()
export default class CHART_001Chart extends CHART_001ChartBase { }
</script>
import { Http } from '@/utils';
import ControlService from '@/widgets/control-service';
/**
* PART_CHT_001 部件服务对象
*
* @export
* @class PART_CHT_001Service
*/
export default class PART_CHT_001Service extends ControlService {
}
<div class='portlet part-cht-001 ' :style="{'height': isAdaptiveSize ? 'calc(100% - 16px)' : getHeight,}">
<p class='portlet-title'>
<span>
商机
</span>
</p>
<div class="portlet-with-title">
<!-- 测试 -->
<view_db_sysportlet1_chart
:viewState="viewState"
:viewparams="viewparams"
:context="context"
fetchAction="FetchTop5"
:showBusyIndicator="true"
name="db_sysportlet1_chart"
ref='db_sysportlet1_chart'
@closeview="closeView($event)">
</view_db_sysportlet1_chart>
</div>
</div>
<template src="./part-cht-001-portlet.html"/>
<script lang='tsx'>
import { Component } from 'vue-property-decorator';
import { VueLifeCycleProcessing } from '@/studio-core';
import { PART_CHT_001PortletBase } from './part-cht-001-portlet-base';
import view_db_sysportlet1_chart from '@widgets/opportunity/chart-001-chart/chart-001-chart.vue';
/**
* db_sysportlet1部件
*
* @export
* @class PART_CHT_001Portlet
* @extends {PART_CHT_001PortletBase}
*/
@Component({
components: {
view_db_sysportlet1_chart,
}
})
@VueLifeCycleProcessing()
export default class PART_CHT_001Portlet extends PART_CHT_001PortletBase { }
</script>
......@@ -135,6 +135,10 @@ zuul:
path: /opportunitycompetitors/**
serviceId: ibizbusinesscentral-centralapi
stripPrefix: false
competitorsalesliterature:
path: /competitorsalesliteratures/**
serviceId: ibizbusinesscentral-centralapi
stripPrefix: false
salesliteratureitem:
path: /salesliteratureitems/**
serviceId: ibizbusinesscentral-centralapi
......
......@@ -19,6 +19,7 @@ import com.alibaba.fastjson.JSONObject;
public interface OpportunityMapper extends BaseMapper<Opportunity>{
Page<Opportunity> searchTop5(IPage page, @Param("srf") OpportunitySearchContext context, @Param("ew") Wrapper<Opportunity> wrapper) ;
Page<Opportunity> searchDefault(IPage page, @Param("srf") OpportunitySearchContext context, @Param("ew") Wrapper<Opportunity> wrapper) ;
@Override
Opportunity selectById(Serializable id);
......
......@@ -38,6 +38,7 @@ public interface IOpportunityService extends IService<Opportunity>{
boolean checkKey(Opportunity et) ;
boolean save(Opportunity et) ;
void saveBatch(List<Opportunity> list) ;
Page<Opportunity> searchTop5(OpportunitySearchContext context) ;
Page<Opportunity> searchDefault(OpportunitySearchContext context) ;
List<Opportunity> selectByParentaccountid(String accountid) ;
void removeByParentaccountid(String accountid) ;
......
......@@ -272,6 +272,15 @@ public class OpportunityServiceImpl extends ServiceImpl<OpportunityMapper, Oppor
}
/**
* 查询集合 Top5
*/
@Override
public Page<Opportunity> searchTop5(OpportunitySearchContext context) {
com.baomidou.mybatisplus.extension.plugins.pagination.Page<Opportunity> pages=baseMapper.searchTop5(context.getPages(),context,context.getSelectCond());
return new PageImpl<Opportunity>(pages.getRecords(), context.getPageable(), pages.getTotal());
}
/**
* 查询集合 DEFAULT
*/
......
......@@ -87,7 +87,7 @@
"dename":"Opportunity",
"delogicname":"商机",
"sysmoudle":{"id":"SALES","name":"Sales"},
"dedataset":[{"id":"Default" , "name":"DEFAULT"}],
"dedataset":[{"id":"Top5" , "name":"Top5"},{"id":"Default" , "name":"DEFAULT"}],
"deaction":[{"id":"Win" , "name":"作为赢单" , "type":"USERCUSTOM" },{"id":"Lose" , "name":"作为弃单" , "type":"USERCUSTOM" },{"id":"Get" , "name":"Get" , "type":"BUILTIN" },{"id":"GetDraft" , "name":"GetDraft" , "type":"BUILTIN" },{"id":"Create" , "name":"Create" , "type":"BUILTIN" },{"id":"Remove" , "name":"Remove" , "type":"BUILTIN" },{"id":"Update" , "name":"Update" , "type":"BUILTIN" },{"id":"CheckKey" , "name":"CheckKey" , "type":"BUILTIN" },{"id":"Save" , "name":"Save" , "type":"BUILTIN" }],
"datascope":[{"id":"all","name":"全部数据"}, {"id":"createman","name":"创建人"}]
}
......@@ -260,6 +260,14 @@
"datascope":[{"id":"all","name":"全部数据"}, {"id":"createman","name":"创建人"}]
}
, {
"dename":"CompetitorSalesLiterature",
"delogicname":"竞争对手宣传资料",
"sysmoudle":{"id":"SALES","name":"Sales"},
"dedataset":[{"id":"Default" , "name":"DEFAULT"}],
"deaction":[{"id":"CheckKey" , "name":"CheckKey" , "type":"BUILTIN" },{"id":"Update" , "name":"Update" , "type":"BUILTIN" },{"id":"Get" , "name":"Get" , "type":"BUILTIN" },{"id":"Remove" , "name":"Remove" , "type":"BUILTIN" },{"id":"Create" , "name":"Create" , "type":"BUILTIN" },{"id":"Save" , "name":"Save" , "type":"BUILTIN" },{"id":"GetDraft" , "name":"GetDraft" , "type":"BUILTIN" }],
"datascope":[{"id":"all","name":"全部数据"}, {"id":"createman","name":"创建人"}]
}
, {
"dename":"SalesLiteratureItem",
"delogicname":"销售附件",
"sysmoudle":{"id":"SALES","name":"Sales"},
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册