提交 91231104 编写于 作者: chenxiang@lab.ibiz5.com's avatar chenxiang@lab.ibiz5.com

20200428

上级 dc874fdc
...@@ -68,6 +68,7 @@ import DropDownListDynamic from './components/dropdown-list-dynamic/dropdown-lis ...@@ -68,6 +68,7 @@ import DropDownListDynamic from './components/dropdown-list-dynamic/dropdown-lis
import AppImagePreview from './components/app-image-preview/app-image-preview.vue' import AppImagePreview from './components/app-image-preview/app-image-preview.vue'
import AppFormatData from './components/app-format-data/app-format-data.vue' import AppFormatData from './components/app-format-data/app-format-data.vue'
import AppUploadFileInfo from './components/app-upload-file-info/app-upload-file-info.vue' import AppUploadFileInfo from './components/app-upload-file-info/app-upload-file-info.vue'
import ContextMenu from './components/context-menu/context-menu'
// 全局挂载UI实体服务注册中心 // 全局挂载UI实体服务注册中心
window['uiServiceRegister'] = uiServiceRegister; window['uiServiceRegister'] = uiServiceRegister;
...@@ -145,5 +146,6 @@ export const AppComponents = { ...@@ -145,5 +146,6 @@ export const AppComponents = {
v.component('app-image-preview', AppImagePreview); v.component('app-image-preview', AppImagePreview);
v.component('app-format-data', AppFormatData); v.component('app-format-data', AppFormatData);
v.component('app-upload-file-info', AppUploadFileInfo); v.component('app-upload-file-info', AppUploadFileInfo);
v.component('context-menu',ContextMenu);
}, },
}; };
\ No newline at end of file
...@@ -17,6 +17,22 @@ export default class AppFormatData extends Vue { ...@@ -17,6 +17,22 @@ export default class AppFormatData extends Vue {
*/ */
@Prop({default:'YYYY-MM-DD HH:mm:ss'}) public format?:string; @Prop({default:'YYYY-MM-DD HH:mm:ss'}) public format?:string;
/**
* 类型格式
*
* @type {string}
* @memberof AppFormatData
*/
@Prop() public dataType?:string;
/**
* 精度
*
* @type {string}
* @memberof AppFormatData
*/
@Prop({default:'2'}) public precision?:string;
/** /**
* 传入数据 * 传入数据
* *
...@@ -32,7 +48,30 @@ export default class AppFormatData extends Vue { ...@@ -32,7 +48,30 @@ export default class AppFormatData extends Vue {
*/ */
getcurValue(){ getcurValue(){
if(this.data){ if(this.data){
if(this.format){ if(Object.is(this.dataType,"DECIMAL") || Object.is(this.dataType,"FLOAT") || Object.is(this.dataType,"CURRENCY")){
let number = Number(this.data);
let precision = Number(this.precision);
if(Object.is(number,NaN)){
return this.data;
}else{
let result = "";
if(Object.is(this.dataType,"CURRENCY")){
result = Number(number.toFixed((Object.is(precision,NaN) ? 2 : precision))).toLocaleString('en-US');
}else{
result = number.toFixed((Object.is(precision,NaN) ? 2 : precision));
}
let index = result.indexOf(".");
let fornum = (Object.is(precision,NaN) ? 2 : precision) - result.length + index + 1;
if(Object.is(index,-1) && !Object.is(precision,0)){
result += ".";
}
for (let i = 0; i < fornum; i++) {
result += '0';
}
return result;
}
} else if (this.format){
if(this.format.indexOf('%1$t') !== -1){ if(this.format.indexOf('%1$t') !== -1){
return moment(this.data).format("YYYY-MM-DD HH:mm:ss"); return moment(this.data).format("YYYY-MM-DD HH:mm:ss");
}else{ }else{
......
...@@ -167,7 +167,7 @@ export default class CodeList extends Vue { ...@@ -167,7 +167,7 @@ export default class CodeList extends Vue {
} }
}); });
} else { } else {
let values: any[] = Object.is(_this.$util.typeOf(_this.value), 'NUM') ? [_this.value] : [...(_this.value as any).split(_this.valueSeparator)]; let values: any[] = Object.is(_this.$util.typeOf(_this.value), 'number') ? [_this.value] : [...(_this.value as any).split(_this.valueSeparator)];
values.map((value:any ,index: number)=>{ values.map((value:any ,index: number)=>{
const item = _this.getItem(items, value); const item = _this.getItem(items, value);
if(item){ if(item){
......
.context-menu-container {
// width: 100vw;
// height: 100vh;
// z-index: -10000;
// position: absolute;
// top: 0;
// left: 0;
line-height: 1;
.context-menu-content {
z-index: 10001;
position: absolute;
background: #FFF;
// border: 1px solid #e3e3e3;
}
.context-menus {
.context-menus-item {
list-style: none;
line-height: 36px;
padding: 0 13px;
margin: 0;
font-size: 14px;
color: #606266;
cursor: pointer;
outline: none;
display: flex;
.icon {
display: flex;
justify-content: center;
align-items: center;
font-size: 16px;
width: 20px;
margin-right: 8px;
}
}
.context-menus-item:hover {
background-color: #ecf5ff;
color: #66b1ff;
}
}
}
.context-menu {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
\ No newline at end of file
class ContextMenuService {
/**
* 容器Dom对象
*
* @private
* @memberof ContextMenuService
*/
private container: Element | undefined;
/**
* Creates an instance of ContextMenuService.
* @memberof ContextMenuService
*/
constructor() {
document.addEventListener('click', () => {
this.clearContainer();
});
}
/**
* 设置容器
*
* @param {Element} container
* @memberof ContextMenuService
*/
public setContainer(container: Element) {
if (container) {
this.clearContainer();
this.container = container;
} else {
console.error('容器Dom节点不存在');
}
}
/**
* 清楚容器
*
* @memberof ContextMenuService
*/
public clearContainer() {
if (this.container) {
this.container.remove();
}
}
}
const service = new ContextMenuService();
import { Vue, Component, Provide, Prop, Emit } from 'vue-property-decorator';
import './context-menu.less';
@Component({})
export default class ContextMenu extends Vue {
/**
* 设置右键菜单Class
*
* @type {string}
* @memberof ContextMenu
*/
@Prop()
public contextMenuClass?: string;
/**
* 设置右键菜单Style
*
* @type {*}
* @memberof ContextMenu
*/
@Prop()
public contextMenuStyle?: any;
/**
* 右键菜单数据,在调用renderContent时会传回去。
*
* @type {*}
* @memberof ContextMenu
*/
@Prop()
public data?: any;
/**
* 用于绘制右键菜单内容
*
* @type {any}
* @memberof ContextMenu
*/
@Prop()
public renderContent?: any;
/**
* 菜单数据
*
* @type {any[]}
* @memberof ContextMenu
*/
@Prop()
public menus?: any[]
/**
* 显示右键菜单
*
* @param {*} x x轴坐标
* @param {*} y y轴坐标
*/
public showContextMenu(x: number, y: number) {
// 创建全屏覆盖容器
const container = document.createElement('div');
service.setContainer(container);
container.oncontextmenu = () => {
container.remove();
};
document.body.appendChild(container);
// 创建Vue实例挂载
const mount = document.createElement('div');
container.appendChild(mount);
this.renderContextMenu({
top: y + 'px',
left: x + 'px'
}, mount, container);
}
/**
* 绘制菜单
*
* @param {*} position 菜单显示位置
* @param {*} mount Vue实例挂载
* @param {*} container 容器
* @returns
*/
public renderContextMenu(position: any, mount: any, container: any) {
const self = this;
new Vue({
data() {
return {
menus: self.menus
};
},
methods: {
destroy($event: Event) {
container.remove();
this.$destroy();
$event.stopPropagation();
},
onContextMenu($event: any) {
$event.preventDefault();
},
renderContent() {
let menus;
if (this.menus) {
menus = this.menus.map((item) => {
let icon;
if (item.icon) {
icon = <img src={item.icon} />;
}
if (item.iconcls) {
icon = <i class={item.iconcls}></i>;
}
return (
<li class='context-menus-item' on-click={() => self.menuClick(item, self.data)}>
{icon ? <div class="icon">{icon}</div> : null}
<div class="text">{item.text}</div>
</li>
);
});
}
return <ul class='context-menus'>{menus}</ul>;
}
},
render() {
let content;
if (self.renderContent) {
content = self.renderContent(self.data);
}
if (self.$slots.content) {
content = self.$slots.content;
}
if (this.menus) {
content = this.renderContent();
}
return (
<div class='context-menu-container context-menu' on-contextmenu={($event: any) => this.onContextMenu($event)} on-click={($event: Event) => this.destroy($event)}>
<div class='context-menu-content' style={position}>
{content}
</div>
</div>
);
}
}).$mount(mount);
}
/**
* 组件挂在完毕
*
* @memberof ContextMenu
*/
public mounted() {
const contextRef: any = this.$refs.context;
if (contextRef) {
contextRef.oncontextmenu = (event: MouseEvent) => {
event.preventDefault();
this.showContextMenu(event.clientX, event.clientY);
};
}
}
/**
* 菜单点击
*
* @param {*} data
* @memberof ContextMenu
*/
@Emit('menu-click')
public menuClick(item: any, data: any) { }
/**
* 绘制内容
*
* @returns
* @memberof ContextMenu
*/
public render() {
return (
<div class={'context-menu-component ' + this.contextMenuClass} style={this.contextMenuStyle} ref='context'>
{this.$slots.default}
</div>
);
}
}
\ No newline at end of file
...@@ -115,7 +115,7 @@ export class ViewBase extends Vue { ...@@ -115,7 +115,7 @@ export class ViewBase extends Vue {
@Watch('viewparam', { immediate: true, deep: true }) @Watch('viewparam', { immediate: true, deep: true })
protected onParamData(newVal: any, oldVal: any): void { protected onParamData(newVal: any, oldVal: any): void {
if (newVal) { if (newVal) {
for(let key in this.viewparams){ for (const key in this.viewparams) {
delete this.viewparams[key]; delete this.viewparams[key];
} }
Object.assign(this.viewparams, JSON.parse(this.viewparam)); Object.assign(this.viewparams, JSON.parse(this.viewparam));
...@@ -239,7 +239,7 @@ export class ViewBase extends Vue { ...@@ -239,7 +239,7 @@ export class ViewBase extends Vue {
* @memberof ViewBase * @memberof ViewBase
*/ */
protected parseViewParam(): void { protected parseViewParam(): void {
for(let key in this.context){ for (const key in this.context) {
delete this.context[key]; delete this.context[key];
} }
if (this.viewDefaultUsage) { if (this.viewDefaultUsage) {
......
// 视图基类 // 视图基类
export { ViewBase } from './core/view/ViewBase';
export { IndexViewBase } from './core/view/IndexViewBase'; export { IndexViewBase } from './core/view/IndexViewBase';
export { GridViewBase } from './core/view/GridViewBase'; export { GridViewBase } from './core/view/GridViewBase';
export { GridView9Base } from './core/view/GridView9Base'; export { GridView9Base } from './core/view/GridView9Base';
......
...@@ -133,7 +133,7 @@ export class ChartSeries { ...@@ -133,7 +133,7 @@ export class ChartSeries {
this.type = !Object.is(opts.type, '') ? opts.type : ''; this.type = !Object.is(opts.type, '') ? opts.type : '';
this.name = !Object.is(opts.name, '') ? opts.name : ''; this.name = !Object.is(opts.name, '') ? opts.name : '';
this.caption = !Object.is(opts.caption, '') ? opts.caption : ''; this.caption = !Object.is(opts.caption, '') ? opts.caption : '';
this.seriesIdField = !Object.is(opts.seriesIdField, '') ? opts.seriesIdField : ''; this.seriesIdField = (opts.seriesIdField && !Object.is(opts.seriesIdField, '')) ? opts.seriesIdField : (opts.seriesNameField && !Object.is(opts.seriesNameField, '')) ? opts.seriesNameField : '';
this.seriesNameField = !Object.is(opts.seriesNameField, '') ? opts.seriesNameField : ''; this.seriesNameField = !Object.is(opts.seriesNameField, '') ? opts.seriesNameField : '';
this.index = this.index ? this.index : 0; this.index = this.index ? this.index : 0;
this.chart = opts.chart ? opts.chart : null; this.chart = opts.chart ? opts.chart : null;
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册