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

chitanda 发布系统代码 [TrainSys,网页端]

上级 b25f8b01
......@@ -104,4 +104,12 @@ export interface ToolbarItem {
* @memberof ToolbarItem
*/
items?: any[];
/**
* 动态样式
*
* @type {*}
* @memberof ToolbarItem
*/
dynaClass:any;
}
......@@ -2,7 +2,6 @@ import { Component, Model, Prop, Vue, Watch } from 'vue-property-decorator';
import * as monaco from 'monaco-editor';
import 'monaco-editor/esm/vs/basic-languages/javascript/javascript.contribution';
import 'monaco-editor/esm/vs/editor/contrib/find/findController.js';
import './app-code-editor.less';
import { CreateElement } from 'vue';
interface IToolbarItem {
key: string; //标识
......@@ -267,11 +266,10 @@ export class AppCodeEditor extends Vue {
render(h: CreateElement) {
return (
<div class='app-code-editor'>
<div class={{ toolbar: true, [this.theme]: true }}>
<div class='left-toolbar'>
<div class={{ 'app-code-editor__header': true, [this.theme]: true }}>
<div class='app-code-editor__header__left__toolbar'>
<i-select
v-model={this.presentLanguage}
style='width:110px'
disabled={!this.isChangeLanguage}
on-on-change={this.onLanguageChange}
>
......@@ -284,7 +282,7 @@ export class AppCodeEditor extends Vue {
})}
</i-select>
</div>
<div class='right-toolbar'>
<div class='app-code-editor__header__right__toolbar'>
{this.rightToolbarItems.map((toolbarItem: IToolbarItem) => {
return toolbarItem.visible ? (
<div
......@@ -298,7 +296,7 @@ export class AppCodeEditor extends Vue {
})}
</div>
</div>
<div class='code-editor-wrapper' ref='codeEditor'></div>
<div class='app-code-editor__content' ref='codeEditor'></div>
</div>
);
}
......
......@@ -56,18 +56,18 @@ export class ContainerLoadingService implements ILoadingService {
this.loadingComponent = Loading.service({
fullscreen: true,
target: element,
customClass: 'container-loading app-loading',
customClass: 'app-loading',
});
this.isLoading = true;
// loading Dom
const userEle = `<div class="app-loading-icon">
<div class="icon-content">
<div class="app-loading-icon-item active-color"></div>
<div class="app-loading-icon-item"></div>
const userEle = `<div class="app-loading__icon">
<div class="app-loading__icon__content">
<div class="content__item is-active"></div>
<div class="content__item"></div>
</div>
<div class="icon-content">
<div class="app-loading-icon-item"></div>
<div class="app-loading-icon-item"></div>
<div class="app-loading__icon__content">
<div class="content__item"></div>
<div class="content__item"></div>
</div>
</div>`;
const loadingEle = element.lastChild;
......
......@@ -80,14 +80,14 @@ export class CtrlLoadingService {
});
this.isLoading = true;
// 自定义loading元素
const userEle = `<div class="app-loading-icon">
<div class="icon-content">
<div class="app-loading-icon-item active-color"></div>
<div class="app-loading-icon-item"></div>
const userEle = `<div class="app-loading__icon">
<div class="app-loading__icon__content">
<div class="content__item is-active"></div>
<div class="content__item"></div>
</div>
<div class="icon-content">
<div class="app-loading-icon-item"></div>
<div class="app-loading-icon-item"></div>
<div class="app-loading__icon__content">
<div class="content__item"></div>
<div class="content__item"></div>
</div>
</div>`;
const loadingEle = selection.lastChild;
......@@ -123,14 +123,14 @@ export class CtrlLoadingService {
});
this.isLoading = true;
// 自定义loading元素
const userEle = `<div class="app-loading-icon">
<div class="icon-content">
<div class="app-loading-icon-item active-color"></div>
<div class="app-loading-icon-item"></div>
const userEle = `<div class="app-loading__icon">
<div class="app-loading__icon__content">
<div class="content__item is-active"></div>
<div class="content__item"></div>
</div>
<div class="icon-content">
<div class="app-loading-icon-item"></div>
<div class="app-loading-icon-item"></div>
<div class="app-loading__icon__content">
<div class="content__item"></div>
<div class="content__item"></div>
</div>
</div>`;
const loadingEle = selection.lastChild;
......
......@@ -11,15 +11,15 @@
<template v-for="(usertask, usertaskIndex) in data.usertasks">
<tr :key="usertaskIndex">
<td align="right" valign="top">
<div class="date">
<div class="usertaskname">{{ usertask.userTaskName }}</div>
<div class="arrow" @click="changeExpand(usertask)">
<div class="tbody__date">
<div class="tbody__date-usertaskname">{{ usertask.userTaskName }}</div>
<div class="tbody__date-arrow" @click="changeExpand(usertask)">
<i :class="usertask.isShow ? 'el-icon-arrow-down' : 'el-icon-arrow-up'" />
</div>
</div>
</td>
<td>
<div class="timeline">
<div class="tbody__timeline">
<template v-if="usertask.identitylinks && usertask.identitylinks.length > 0">
{{ $t('components.appwfapproval.wait') }}
<strong>
......@@ -41,12 +41,12 @@
v-if="usertask.comments && usertask.comments.length > 0"
class="action-timeline-item"
>
<div class="timeline-time">
<div class="action-timeline-item__time">
{{
formatDate(usertask.comments[0].time, 'MM月DD日 HH:mm')
}}&nbsp;{{ usertask.comments[0].authorName }}
</div>
<div class="timeline-content">
<div class="action-timeline-item__content">
{{ usertask.comments[0].type }}&nbsp;{{
usertask.comments[0].fullMessage
}}
......@@ -56,12 +56,12 @@
<template v-else>
<template v-for="(comment, commentIndex) in usertask.comments">
<li :key="commentIndex" class="action-timeline-item">
<div class="timeline-time">
<div class="action-timeline-item__time">
{{ formatDate(comment.time, 'MM月DD日 HH:mm') }} &nbsp;{{
comment.authorName
}}
</div>
<div class="timeline-content">
<div class="action-timeline-item__content">
{{ comment.type }}&nbsp;{{ comment.fullMessage }}
</div>
</li>
......@@ -188,8 +188,4 @@ export default class ActionTimeline extends Vue {
this.$forceUpdate();
}
}
</script>
<style lang='less'>
@import './action-timeline.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -62,8 +62,4 @@ export default class AppAbout extends Vue {
}
}
}
</script>
<style lang="less">
@import './app-about.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -111,8 +111,4 @@ export default class AppActionBar extends Vue {
}
}
</script>
<style lang='less'>
@import './app-actionbar.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -106,8 +106,4 @@ export default class AppAddressSelection extends Vue {
}
}
</script>
<style lang='less'>
@import './app-address-selection.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -430,8 +430,4 @@ export default class AppAlert extends Vue {
}
}
</script>
<style lang="less">
@import './app-alert.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="app-anchor" ref="app-anchor">
<div class="line"></div>
<div class="app-anchor__line"></div>
<div
:class="['anchor-points', item.active ? 'active' : 'inactive']"
:class="['app-anchor__points', item.active ? 'app-anchor--active' : 'app-anchor--inactive']"
v-for="(item, index) in datas"
:key="item.codeName"
@click.stop="handleClick(item, index)"
:ref="item.codeName"
>
<span class="dot" v-if="item.active"></span>{{ item.caption }}
<span class="points__dot" v-if="item.active"></span>{{ item.caption }}
</div>
</div>
</template>
......@@ -206,6 +206,3 @@ export default class AppAnchor extends Vue {
}
}
</script>
<style lang="less">
@import './app-anchor.less';
</style>
<template>
<el-autocomplete
class="text-value"
class="app-autocomplete"
:disabled="disabled || readonly"
v-model="curvalue"
popper-class="app-autocomplete__popper"
size="small"
:readonly="Object.is('AC_FS', editorType) || Object.is('AC_FS_NOBUTTON', editorType) ? true : false"
:trigger-on-focus="Object.is('AC_NOBUTTON', editorType) ? false : true"
......@@ -359,8 +360,4 @@ export default class AppAutocomplete extends Vue {
return true;
}
}
</script>
<style lang='less'>
@import './app-autocomplete.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class='show-type'>
<button-group v-show="!showTypeDir">
<i-button class="collapse-btn" type="primary" @click="clickCollapse('left')">
<icon type="ios-arrow-back"/>
<div class="app-build">
<button-group v-show="!showTypeDir">
<i-button class="app-build__btn" type="primary" @click="clickCollapse('left')">
<icon type="ios-arrow-back" />
</i-button>
</button-group>
<button-group v-show="showTypeDir">
<el-tooltip :content="$t('components.appbuild.custom')">
<i-button icon="md-build" type="primary" @click="handleClick"></i-button>
</el-tooltip>
<i-button class="collapse-btn" type="primary" @click="clickCollapse('right')">
<icon type="ios-arrow-forward"/>
</i-button>
</button-group>
</div>
</button-group>
<button-group v-show="showTypeDir">
<el-tooltip :content="$t('components.appbuild.custom')">
<i-button icon="md-build" type="primary" @click="handleClick"></i-button>
</el-tooltip>
<i-button class="app-build__btn" type="primary" @click="clickCollapse('right')">
<icon type="ios-arrow-forward" />
</i-button>
</button-group>
</div>
</template>
<script lang="ts">
<script lang="ts">
import { Vue, Component } from 'vue-property-decorator';
@Component({
})
@Component({})
export default class AppBuild extends Vue {
/**
......@@ -32,7 +31,6 @@ export default class AppBuild extends Vue {
*/
public showTypeDir: boolean = false;
/**
* 点击伸缩
*
......@@ -45,15 +43,11 @@ export default class AppBuild extends Vue {
/**
* 工具点击
*
*
*@memberof AppBuild
*/
public handleClick(){
this.$emit("handleClick")
public handleClick() {
this.$emit('handleClick');
}
}
</script>
<style lang="less">
@import './app-build.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -187,8 +187,4 @@ export default class AppButton extends Vue {
this.$emit('onClick', event);
}
}
</script>
<style lang='less'>
@import './app-button.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="calendar-time-line">
<div class="header">
<div class="left">
<div class="app-calendar-time-line">
<div class="app-calendar-time-line__header">
<div class="app-calendar-time-line__header__left">
<ButtonGroup>
<Button v-for="(button,index) in leftButton" :key="index" size="default" type="primary" @click="buttonClick(button)">
<i v-if="button.icon" :class="button.icon" />
......@@ -16,10 +16,10 @@
{{button.text ? button.text : ''}}
</Button>
</div>
<div class="center">
<div class="app-calendar-time-line__header__center">
<h2 class="current-date">{{currentDate}}</h2>
</div>
<div class="right">
<div class="app-calendar-time-line__header__right">
<ButtonGroup>
<Button v-for="(button,index) in rightButton" :key="index" :class="{'button-active-color': Object.is(defaultView, button.tag)}" size="default" type="primary" @click="buttonClick(button)">
<i v-if="button.icon" :class="button.icon" />
......@@ -29,20 +29,20 @@
</ButtonGroup>
</div>
</div>
<div class="container">
<div class="app-calendar-time-line__container">
<Split v-model="split" mode="horizontal" ref="calendar-time-line" @on-move-end="onMoveEnd">
<div slot="left" :class="['group',defaultView]">
<div class="group-header">
<div slot="left" :class="['app-calendar-time-line__container__left',defaultView]">
<div class="left__header">
<div>{{title}}</div>
</div>
<div class="group-items">
<div v-for="(group, index) in currentGroupSchedule" :key="index" class="group-item" :style="group.style">
<div class="left__items">
<div v-for="(group, index) in currentGroupSchedule" :key="index" class="left-item" :style="group.style">
<span>{{group.name}}</span>
</div>
</div>
</div>
<div slot="right" class="main-container">
<div v-for="(date, index) in currentTimeQuantum" :key="index" class="time-line">
<div slot="right" class="app-calendar-time-line__container__right">
<div v-for="(date, index) in currentTimeQuantum" :key="index" class="right__time-line">
<div v-if="Object.is(defaultView, 'dayview')" class="dayview" :style="{'width': dayviewWidth + 'px'}">
<div class="dayview-header">
<div class="date">{{date}}</div>
......@@ -1003,8 +1003,4 @@ export default class AppClaendarTimeline extends Vue{
this.partitionTime();
}
}
</script>
<style lang='less'>
@import './app-calendar-timeline.less';
</style>
</script>
\ No newline at end of file
......@@ -327,8 +327,4 @@ export default class AppCheckBox extends Vue {
}
}
}
</script>
<style lang='less'>
@import './app-checkbox-list.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -73,7 +73,3 @@ export default class AppCheckbox extends Vue {
}
}
</script>
<style lang="less">
@import './app-checkbox.less';
</style>
......@@ -185,7 +185,3 @@ export default class AppColorPicker extends Vue {
}
}
</script>
<style lang="less">
@import './app-color-picker.less';
</style>
......@@ -3,7 +3,7 @@
<span v-if="color" :style="{ color:textColor }">{{ text ? text : '---' }}</span>
<template v-else>
<template v-if="dataValue && dataValue.length > 0">
<span v-for="(textItem,index) of dataValue" :key="index" class="text-color" :style="{ backgroundColor: textItem.color, borderColor: textItem.color}">
<span v-for="(textItem,index) of dataValue" :key="index" class="app-color-span__item" :style="{ backgroundColor: textItem.color, borderColor: textItem.color}">
{{ textItem.srfmajortext ? textItem.srfmajortext : '---'}}
</span>
</template>
......@@ -149,14 +149,4 @@ export default class AppColorSpan extends Vue {
this.load();
}
}
</script>
<style lang="less">
.text-color{
padding: 2px 8px;
margin: 6px 6px 6px 0px;
border-radius: 12px;
font-size: 13px;
border: 2px solid rgb(170, 167, 167);
}
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -46,7 +46,3 @@ export default class AppColumnFormat extends Vue {
}
}
</script>
<style lang="less">
@import './app-column-format.less';
</style>
......@@ -422,8 +422,4 @@ export default class AppColumnLink extends Vue {
}
}
}
</script>
<style lang='less'>
@import './app-column-link.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="column-render">
<div class="app-column-render">
{{textValue}}
<template v-if="Object.is(type,'input')">
<input-box :disabled="disabled" v-model="editorvalue" @change="($event)=>{onEditorValueChange($event)}"></input-box>
......@@ -144,8 +144,4 @@ export default class AppColumnRender extends Vue {
}
}
</script>
<style lang='less'>
@import "./app-column-render.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="app-common-microcom">
<template v-if="multiple" class="app-common-microcom-multiple">
<checkbox-group v-model="selectArray" @on-change="selectChange">
<template v-if="multiple">
<checkbox-group v-model="selectArray" @on-change="selectChange" class="app-common-microcom__checkbox">
<checkbox v-for="(item,index) in datas" :key="index" :label="item.id" :disabled="disabled || item.disabled || readonly">
<span>{{item.label}}{{item.mdeptname ? `(${item.mdeptname})` : ''}}</span>
</checkbox>
</checkbox-group>
</template>
<template v-else class="app-common-microcom-radio">
<el-radio-group v-model="selectArray[0]">
<template v-else>
<el-radio-group v-model="selectArray[0]" class="app-common-microcom__radio">
<el-radio v-for="(item,index) in datas" :key="index" :label="item.id" :disabled="disabled || item.disabled || readonly" @change="selectChange(item)">
{{ item.label }}{{item.mdeptname ? `(${item.mdeptname})` : ''}}
</el-radio>
......@@ -451,8 +451,4 @@ export default class AppCommonMicrocom extends Vue {
}
}
}
</script>
<style lang='less'>
@import "./app-common-microcom.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div ref="designContainer" class="app-dashboard-design">
<div class="design-tree">
<el-select v-model="filterVal" clearable class="design-filter">
<div class="app-dashboard-design__tree">
<el-select v-model="filterVal" clearable class="tree__filter">
<template v-for="item of groups">
<el-option :key="item.value" :value="item.value" :label="item.name"></el-option>
</template>
</el-select>
<div class="design-tree-content">
<div class="tree__content">
<el-menu v-show="!filterVal" :unique-opened="true">
<template v-for="(item, index) of list">
<el-submenu :key="item.type + index" :index="item.type + index">
......@@ -14,7 +14,7 @@
<template v-for="(item2, index2) of item.children">
<el-submenu :key="item2.type + index2" :index="item2.type + index2">
<div slot="title">{{item2.name}}</div>
<el-menu-item ref="dragDivItem" :class="{'drag-div-item': true, 'is-disable': isDisabled(item3)}" v-for="(item3, index3) of item2.children" :key="item3.type + index3" :index="item3.type + index3" :tag="item3.portletCodeName">
<el-menu-item ref="dragDivItem" :class="{'is-disable': isDisabled(item3)}" v-for="(item3, index3) of item2.children" :key="item3.type + index3" :index="item3.type + index3" :tag="item3.portletCodeName">
<i :class="item2.portletImage"/>{{item3.portletName}}
</el-menu-item>
</el-submenu>
......@@ -27,7 +27,7 @@
<el-submenu v-show="filterVal == item.value" :key="item.value" :index="item.value">
<div slot="title">{{item.name}}</div>
<template v-for="item2 of item.children">
<el-menu-item ref="dragDivItem" :class="{'drag-div-item': true, 'is-disable': isDisabled(item2)}" :key="item2.portletCodeName" :index="item.portletCodeName" :tag="item2.portletCodeName">
<el-menu-item ref="dragDivItem" :class="{'is-disable': isDisabled(item2)}" :key="item2.portletCodeName" :index="item.portletCodeName" :tag="item2.portletCodeName">
<i :class="item2.portletImage"/>{{item2.portletName}}
</el-menu-item>
</template>
......@@ -35,12 +35,12 @@
</template>
</el-menu>
</div>
<div ref="dragDiv" v-if="dragItem" class="drag-tree-item">{{dragItem.caption}}</div>
<div ref="dragDiv" v-if="dragItem" class="tree__caption">{{dragItem.caption}}</div>
</div>
<div class="design-panel" ref="gridLayoutPanel">
<div class="app-dashboard-design__panel" ref="gridLayoutPanel">
<grid-layout
ref="gridLayout"
:class="['app-grid-layout', isDragEnter ? 'layout-draging': '']"
:class="['app-dashboard-design__panel__layout', isDragEnter ? 'is-dragging': '']"
:layout.sync="layoutModel"
:col-num="layoutColNum"
:row-height="layoutRowH"
......@@ -53,7 +53,7 @@
:style="{minHeight: `${10 * (layoutRowH + 10) + 10}px`}"
>
<div
class="app-grid-layout-mask"
class="app-dashboard-design__mask"
:style="{backgroundSize: `calc((100% - 10px) / ${layoutColNum}) ${layoutRowH + 10}px`}"
></div>
<grid-item
......@@ -67,12 +67,12 @@
:key="item.i"
v-show="!dragItem || dragItem.portletCodeName != item.portletCodeName"
>
<el-card class="app-grid-layout-item">
<el-card class="panel__layout-item">
<div slot="header">
<span>{{item.portletName}}</span>
<i class="el-icon-close" @click="removeItem(item.i)"></i>
</div>
<component is="app-control-shell" :dynamicProps="{ context: JSON.parse(JSON.stringify(context)), viewparams: {}}" :staticProps="{viewDefaultUsage:false,viewState: viewState, modelData: item.modelData }"></component>
<component :is="'app-control-shell'" :dynamicProps="{ context: JSON.parse(JSON.stringify(context)), viewparams: {}}" :staticProps="{viewDefaultUsage:false,viewState: viewState, modelData: item.modelData }"></component>
</el-card>
</grid-item>
</grid-layout>
......@@ -489,8 +489,4 @@ export default class AppDashboardDesign extends Vue {
}
}
}
</script>
<style lang="less">
@import "./app-dashboard-design.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -135,8 +135,4 @@ export default class AppDateRange extends Vue {
}
}
}
</script>
<style lang='less'>
@import './app-date-range.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="app-debug-actions" v-if="isShow">
<div class="actions">
<div class="app-debug-actions__actions">
<button-group vertical>
<i-button :title="$t('components.appdebugactions.button')" :type="sdc.isShowTool ? 'warning' : 'info'" ghost @click="() => sdc.showToolChange()" :icon="sdc.isShowTool ? 'ios-bug' : 'ios-bug-outline'" ></i-button>
</button-group>
</div>
<div class="show-buttons">
<div class="app-debug-actions__show-buttons">
<div class="button"><i class="ivu-icon ivu-icon-ios-arrow-down" /></div>
</div>
</div>
......@@ -42,7 +42,4 @@ export default class AppDebugActions extends Vue {
public sdc: StudioActionUtil = StudioActionUtil.getInstance();
}
</script>
<style lang = "less">
@import "./app-debug-actions.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -476,7 +476,4 @@ export default class AppDepartmentPersonnel extends Vue {
}
}
</script>
<style lang="less">
@import './app-department-personnel.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -306,8 +306,4 @@ export default class AppDepartmentSelect extends Vue {
}
}
</script>
<style lang='less'>
@import './app-department-select.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -127,14 +127,3 @@ export default {
},
};
</script>
<style lang="less">
.app-element-tree-node {
.el-input--small .el-input__inner {
height: 24px !important;
line-height: 24px !important;
}
.el-tree-node.is-expanded > .el-tree-node__children {
padding-top: 2px;
}
}
</style>
......@@ -13,17 +13,17 @@
viewModelData: this.viewModelData,
}"
@viewdataschange="setValue($event)"
style="height: 100%"
class="view-container2"
>
</component>
</div>
<template v-if="placeholder">
<div v-if="value" class="app-embed-value">
<div v-if="value" class="app-embed-picker__value">
<span v-for="(item, index) in value.split(',')" :key="index">
{{ item }}
</span>
</div>
<div v-else class="app-embed-placeholder">{{ placeholder }}</div>
<div v-else class="app-embed-picker__placeholder">{{ placeholder }}</div>
</template>
</div>
<div v-else>{{ emptyText }}</div>
......@@ -285,8 +285,4 @@ export default class AppEmbedPicker extends Vue {
}
}
}
</script>
<style lang='less'>
@import './app-embed-picker.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -184,7 +184,3 @@ export default class AppExportExcel extends Vue {
}
</script>
<style lang='less'>
@import './app-export-excel.less';
</style>
......@@ -2,7 +2,6 @@ import { Component, Vue, Prop } from 'vue-property-decorator';
import { Http, getSessionStorage, AppServiceBase } from 'ibiz-core';
import { getCookie } from 'qx-util';
import { CreateElement } from 'vue';
import './app-file-upload-camera.less';
@Component({})
export default class AppFileUploadCamera extends Vue {
......@@ -260,41 +259,41 @@ export default class AppFileUploadCamera extends Vue {
public render(h: CreateElement) {
return (
<div class="file-upload-camera2">
<div class="camera-container">
<div class="camera-select">
<span>{this.$t('components.camera.choose')}</span>
{/* <el-radio-group v-model={this.videoSelect}>
{this.options ? this.options.map((items: any,index) => {
return <el-radio label={items.value} on-change={(event)=>{this.getStream()}}>{items.label}</el-radio>
}):''}
</el-radio-group> */}
<el-select class="video-select" x-placement="top-start" v-model={this.videoSelect} popper-append-to-body={false} size="mini" on-change={(event: any)=>{this.getStream()}}>
{
this.options ? this.options.map((items: any,index: any) => {
return <el-option value={items.value} label={items.label}></el-option>
}) : ""
}
</el-select>
</div>
<div class="video-container">
<video class="viedo-source" ref="videoSource" autoplay crossOrigin='Anonymous' style="transform:rotate(90deg)"></video>
</div>
<div class="action-container">
<div>
<el-button size="small" class="elBtn" type="primary" on-click={()=>{this.leftRotate()}} icon="el-icon-refresh-left">{this.$t('components.camera.left')}</el-button>
<el-button size="small" class="elBtn" type="primary" on-click={()=>{this.rightRotate()}} icon="el-icon-refresh-right">{this.$t('components.camera.right')}</el-button>
<el-button size="small" class="elBtn" type="primary" on-click={()=>{this.takePicture()}} icon="el-icon-camera-solid">{this.$t('components.camera.photo')}</el-button>
<el-button size="small" class="elBtn" type="primary" on-click={()=>{this.saveImg()}} icon="el-icon-document-checked">{this.$t('components.camera.save')}</el-button>
{/* <el-button size="small" class="elBtn" type="primary" on-click={()=>{this.parseBarcode()}}>识别条码</el-button> */}
<div class="file-upload__camera-container">
<div class="camera-select">
<span>{this.$t('components.camera.choose')}</span>
{/* <el-radio-group v-model={this.videoSelect}>
{this.options ? this.options.map((items: any,index) => {
return <el-radio label={items.value} on-change={(event)=>{this.getStream()}}>{items.label}</el-radio>
}):''}
</el-radio-group> */}
<el-select class="camera-select__video-select" x-placement="top-start" v-model={this.videoSelect} popper-append-to-body={false} size="mini" on-change={(event: any)=>{this.getStream()}}>
{
this.options ? this.options.map((items: any,index: any) => {
return <el-option value={items.value} label={items.label}></el-option>
}) : ""
}
</el-select>
</div>
<div class="camera-video-container">
<video class="viedo-source" ref="videoSource" autoplay crossOrigin='Anonymous' style="transform:rotate(90deg)"></video>
</div>
<div class="camera-action-container">
<div>
<el-button size="small" class="elBtn" type="primary" on-click={()=>{this.leftRotate()}} icon="el-icon-refresh-left">{this.$t('components.camera.left')}</el-button>
<el-button size="small" class="elBtn" type="primary" on-click={()=>{this.rightRotate()}} icon="el-icon-refresh-right">{this.$t('components.camera.right')}</el-button>
<el-button size="small" class="elBtn" type="primary" on-click={()=>{this.takePicture()}} icon="el-icon-camera-solid">{this.$t('components.camera.photo')}</el-button>
<el-button size="small" class="elBtn" type="primary" on-click={()=>{this.saveImg()}} icon="el-icon-document-checked">{this.$t('components.camera.save')}</el-button>
{/* <el-button size="small" class="elBtn" type="primary" on-click={()=>{this.parseBarcode()}}>识别条码</el-button> */}
</div>
</div>
</div>
</div>
<div class="img-container">
<div class="file-upload__img-container">
{
this.rederImgContainer()
}
</div>
<el-dialog class="dialog-handlepicture" visible={this.dialogVisible} before-close={this.handleClose} append-to-body={true}><img src={this.dialogImageUrl} width="100%"/></el-dialog>
<el-dialog class="file-upload__dialog-handlepicture" visible={this.dialogVisible} before-close={this.handleClose} append-to-body={true}><img src={this.dialogImageUrl} width="100%"/></el-dialog>
</div>
);
}
......
<template>
<div class="app-file-upload">
<el-row>
<el-col v-if="rowPreview && files.length > 0" :span="12" class="upload-col">
<el-button size='mini' class="button-preview" icon='el-icon-view' :disabled="disabled" @click="()=>{this.dialogVisible = true;}">{{$t('components.appfileupload.preview')}}<Badge :count="files.length" type="info"></Badge></el-button>
</el-col>
<el-col :span="(rowPreview && files.length > 0) ? 12 : 24" class="upload-col">
<el-upload
:disabled="disabled || (!this.multiple && files.length > 0) || readonly"
:file-list="files"
:limit="multiple ? limit: 1"
:accept="accept"
:action="uploadUrl"
:multiple="multiple"
:headers="headers"
:before-upload="beforeUpload"
:before-remove="onRemove"
:on-success="onSuccess"
:on-error="onError"
:on-preview="onDownload"
:drag="isdrag"
:show-file-list="!rowPreview"
:on-exceed="handleExceed"
>
<el-button v-if="!isdrag" size='mini' icon='el-icon-upload' :disabled="disabled || (!this.multiple && files.length > 0) || readonly">{{$t('components.appfileupload.caption')}}</el-button>
<i v-if="isdrag" class="el-icon-upload"></i>
<div v-if="isdrag" class="el-upload__text" v-html="$t('components.appfileupload.uploadtext')"></div>
</el-upload>
</el-col>
</el-row>
<modal width="80%" v-model="dialogVisible" footer-hide class-name='upload-preview-modal'>
<ul class="">
<li v-for="(file,index) in files" :key="index" class="preview-file-list-item">
<div class='preview-file-list-img'>
<el-image :src="getImgURLOfBase64(file)" class='' style=''>
<div slot='error' class='image-slot'>
<img src="@/assets/img/picture.png" style='width:100%;height:100%;'>
</div>
</el-image>
<div class='preview-file-list-actions' @mouseenter="()=>{showActions = true;}" @mouseleave="()=>{showActions = false;}">
<span v-show="showActions" class='action-download'>
<i class='el-icon-download' @click="onDownload(file)"></i>
</span>
<span v-show="showActions" :style="{ 'display': disabled? 'none' : 'inline-block' }" class='action-delete'>
<i class='el-icon-delete' @click="onRemove(file, files)"></i>
</span>
<div class="app-file-upload">
<el-row>
<el-col v-if="rowPreview && files.length > 0" :span="12" class="app-file-upload__preview">
<el-button size='mini' class="file__preview-btn" icon='el-icon-view' :disabled="disabled" @click="()=>{this.dialogVisible = true;}">{{$t('components.appfileupload.preview')}}<Badge :count="files.length" type="info"></Badge></el-button>
</el-col>
<el-col :span="(rowPreview && files.length > 0) ? 12 : 24" class="app-file-upload__upload">
<el-upload
:disabled="disabled || (!this.multiple && files.length > 0) || readonly"
:file-list="files"
:limit="multiple ? limit: 1"
:accept="accept"
:action="uploadUrl"
:multiple="multiple"
:headers="headers"
:before-upload="beforeUpload"
:before-remove="onRemove"
:on-success="onSuccess"
:on-error="onError"
:on-preview="onDownload"
:drag="isdrag"
:show-file-list="!rowPreview"
:on-exceed="handleExceed"
>
<el-button v-if="!isdrag" size='mini' icon='el-icon-upload' :disabled="disabled || (!this.multiple && files.length > 0) || readonly">{{$t('components.appfileupload.caption')}}</el-button>
<i v-if="isdrag" class="el-icon-upload"></i>
<div v-if="isdrag" class="el-upload__isdrag-text" v-html="$t('components.appfileupload.uploadtext')"></div>
</el-upload>
</el-col>
</el-row>
<modal width="80%" v-model="dialogVisible" footer-hide class-name='app-file-upload__modal'>
<ul class="app-file-upload__modal__content">
<li v-for="(file,index) in files" :key="index" class="app-file-upload__modal__item">
<div>
<el-image :src="getImgURLOfBase64(file)">
<div slot='error' class='item__image'>
<img src="@/assets/img/picture.png" style='width:100%;height:100%;'>
</div>
</el-image>
<div class='item__action' @mouseenter="()=>{showActions = true;}" @mouseleave="()=>{showActions = false;}">
<span v-show="showActions" class='item__action__download'>
<i class='el-icon-download' @click="onDownload(file)"></i>
</span>
<span v-show="showActions" :style="{ 'display': disabled? 'none' : 'inline-block' }" class='item__action__delete'>
<i class='el-icon-delete' @click="onRemove(file, files)"></i>
</span>
</div>
</div>
</div>
<div class="file-name">{{file.name}}</div>
</li>
</ul>
</modal>
</div>
</template>
<div class="item__caption">{{file.name}}</div>
</li>
</ul>
</modal>
</div>
</template>
<script lang="ts">
import { Component, Vue, Prop, Watch } from 'vue-property-decorator';
......@@ -715,8 +715,4 @@ export default class AppFileUpload extends Vue {
this.$warning(`${this.$t('components.appfileupload.limitselect')} ${this.limit}`);
}
}
</script>
<style lang='less'>
@import './app-file-upload.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="form-druipart">
<div class="app-form-druipart">
<component
v-if="Object.keys(viewdata).length > 0"
ref="appFormDruipart"
:is="'app-view-shell'"
:key="uuid"
class="viewcontainer2"
class="view-container2"
:staticProps="{
viewDefaultUsage: false,
inputState: this.formDruipart,
......@@ -583,7 +583,4 @@ export default class AppFormDRUIPart extends Vue {
}
}
}
</script>
<style lang = "less">
@import './app-form-druipart.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
import { Vue, Component, Prop } from 'vue-property-decorator';
import { Util } from 'ibiz-core';
import './app-form-group-data-panel.less';
/**
* 表单分组
......@@ -76,11 +75,11 @@ export default class AppFormGroupDataPanel extends Vue {
const { getPSDEField, codeList, unitName } = item.editor;
if (index > 0) {
items.push(
<span class='seperator'>|</span>
<span class='panel__separator'>|</span>
);
};
items.push(
<span class="data-item">
<span class="panel__item">
<app-span
name={item.name}
value={this.data[item.name]}
......@@ -95,7 +94,7 @@ export default class AppFormGroupDataPanel extends Vue {
</span>
);
});
return <span class="form-group-data-panel">{items}</span>;
return <span class="app-form-group-data-panel">{items}</span>;
}
}
}
......@@ -12,17 +12,17 @@
</app-form-group2>
</template>
<template v-else>
<card v-if="isShowCaption === true" :bordered="false" :dis-hover="true" :class="classes">
<p :class="titleClass" slot='title'>
<icon v-if="titleBarCloseMode !== 0" :type="collapseContant ? 'ios-arrow-dropright-circle' : 'ios-arrow-dropdown-circle'"
<card v-if="isShowCaption === true" :bordered="false" :dis-hover="true">
<p :class="[titleClass, 'app-form-group__header']" slot='title'>
<icon v-if="titleBarCloseMode !== 0" class="header__icon" :type="collapseContant ? 'ios-arrow-dropright-circle' : 'ios-arrow-dropdown-circle'"
@click="clickCollapse"></icon>
<i v-if="iconInfo && iconInfo.cssClass" :class="iconInfo.cssClass" style="margin-right: 4px;" />
<img v-else-if="iconInfo && iconInfo.imagePath" :src="iconInfo.imagePath" style="margin-right: 4px;" alt="">
<i v-if="iconInfo && iconInfo.cssClass" :class="[iconInfo.cssClass, 'header__icon']" />
<img v-else-if="iconInfo && iconInfo.imagePath" class="header__icon" :src="iconInfo.imagePath" alt="">
<span>{{caption}}</span>
</p>
<template slot='extra'>
<template v-if="uiActionGroup">
<span class="ui-actions">
<span class="app-form-group__actions">
<a>
<template v-if="uiActionGroup.extractMode && Object.is(uiActionGroup.extractMode, 'ITEMS')">
<dropdown :transfer="true" trigger='click'>
......@@ -31,7 +31,7 @@
</a>
<dropdown-menu slot='list' v-if="uiActionGroup.details && Array.isArray(uiActionGroup.details)">
<dropdown-item v-for="(detail,index) in (uiActionGroup.details)" :key="index" :name="detail.name">
<span class='item' v-show="detail.visible" :style="{'pointer-events':detail.disabled?'none':'auto','color':detail.disabled?'#7b7979':'#2d8cf0'}" @click="doUIAction($event, detail)">
<span :class="{'app-form-group__action__item': true, 'is-disable': detail.disabled}" v-show="detail.visible" @click="doUIAction($event, detail)">
<template v-if="detail.isShowIcon">
<template v-if="detail.icon && !Object.is(detail.icon, '')">
<i :class="detail.icon" ></i>
......@@ -59,10 +59,10 @@
</dropdown>
</template>
<template v-if="!(uiActionGroup.extractMode && Object.is(uiActionGroup.extractMode, 'ITEMS'))">
<span class='item-extract-mode'>
<span class='app-form-group__action__extract'>
<template v-if="uiActionGroup.details && Array.isArray(uiActionGroup.details)">
<div v-for="(detail,index) in uiActionGroup.details" :key="index">
<span v-show="detail.visible" :style="{'pointer-events':detail.disabled?'none':'auto','color':detail.disabled?'#7b7979':'#2d8cf0'}" class='item' @click="doUIAction($event, detail)">
<span v-show="detail.visible" :class="{'app-form-group__action__item': true, 'is-disable': detail.disabled}" @click="doUIAction($event, detail)">
<template v-if="detail.isShowIcon">
<template v-if="detail.icon && !Object.is(detail.icon, '')">
<i :class="detail.icon" ></i>
......@@ -236,9 +236,9 @@ export default class AppFormGroup extends Vue {
get classes(): string[] {
return [
'app-form-group',
this.isShowCaption && this.collapseContant ? 'app-group-collapse-contant' : '',
this.isInfoGroupMode ? 'app-info-group-mode' : '',
Object.is(this.layoutType, 'FLEX') ? 'app-group-flex' : '',
this.isShowCaption && this.collapseContant ? 'app-group-collapse--collapse' : '',
this.isInfoGroupMode ? 'is-group' : '',
Object.is(this.layoutType, 'FLEX') ? 'is-flex' : '',
this.isShowCaption ? 'show-caption' : '',
];
}
......@@ -292,7 +292,4 @@ export default class AppFormGroup extends Vue {
this.$emit('managecontainerclick');
}
}
</script>
<style lang='less'>
@import './app-form-group.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -61,7 +61,4 @@ export default class AppFormGroup2 extends Vue {
@Prop({ default: 0 }) public titleBarCloseMode!: number | 0 | 1 | 2;
}
</script>
<style lang="less">
@import './app-form-group2.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -18,7 +18,7 @@
<template v-if="this.uiStyle !== 'STYLE2'">
<div
v-if="Object.is(this.labelPos,'BOTTOM') || Object.is(this.labelPos,'NONE') || !this.labelPos"
class="editor"
class="app-form-item__content"
:style="slotstyle"
>
<Tooltip v-if="gridError" :content="gridError" transfer transfer-class-name="grid-error" placement="top">
......@@ -37,24 +37,24 @@
>
<span v-if="required" style="color:red;">* </span>
<span v-if="!isEmptyCaption">
<el-tooltip v-if="isShowTip" placement="top" effect="light">
<i v-if="iconInfo && iconInfo.cssClass" :class="iconInfo.cssClass" style="margin-right: 4px;" />
<img v-else-if="iconInfo && iconInfo.imagePath" :src="iconInfo.imagePath" style="margin-right: 4px;" alt="">
<el-tooltip v-if="isShowTip" placement="top" effect="light" popper-class="app-form-item__tip">
<i v-if="iconInfo && iconInfo.cssClass" :class="iconInfo.cssClass"/>
<img v-else-if="iconInfo && iconInfo.imagePath" :src="iconInfo.imagePath" alt="">
<span v-html="caption"></span>
<template >
<span slot="content" v-html="caption" ></span>
</template>
</el-tooltip>
<template v-if="!isShowTip">
<i v-if="iconInfo && iconInfo.cssClass" :class="iconInfo.cssClass" style="margin-right: 4px;" />
<img v-else-if="iconInfo && iconInfo.imagePath" :src="iconInfo.imagePath" style="margin-right: 4px;" alt="">
<template v-if="!isShowTip" class="app-form-item__show-tip">
<i v-if="iconInfo && iconInfo.cssClass" :class="iconInfo.cssClass"/>
<img v-else-if="iconInfo && iconInfo.imagePath" :src="iconInfo.imagePath" alt="">
<span v-html="caption" ></span>
</template>
</span>
</span>
<div
v-if="viewStyle !== 'STYLE2' && ( Object.is(this.labelPos,'TOP') || Object.is(this.labelPos,'LEFT') || Object.is(this.labelPos,'RIGHT') )"
class="editor"
class="app-form-item__content"
:style="slotstyle"
>
<form-item :prop="name" :error="error" :rules="rules">
......@@ -64,14 +64,14 @@
<!-- studio版结构 -->
<div
v-if="viewStyle == 'STYLE2' && ( Object.is(this.labelPos,'TOP') || Object.is(this.labelPos,'LEFT') || Object.is(this.labelPos,'RIGHT') )"
class="editor-wrapper editor"
class="editor-wrapper app-form-item__content"
:style="slotstyle"
>
<form-item :ref="name" :prop="name" :error="error" :rules="rules">
<div class="editor-content">
<slot></slot>
</div>
<div v-if="itemRef && itemRef.validateState === 'error'" class="editor-error-tip">
<div v-if="itemRef && itemRef.validateState === 'error'" class="content__error-tip">
<Tooltip placement="left">
<Icon type="ios-alert-outline" />
<template slot="content">
......@@ -139,7 +139,7 @@ export default class AppFormItem extends Vue {
* @type {string}
* @memberof AppFormItem
*/
@Prop() public labelStyle?: string;
@Prop() public labelStyle?: any;
/**
* 标签位置
......@@ -279,19 +279,19 @@ export default class AppFormItem extends Vue {
let posClass = "";
switch (this.labelPos) {
case "TOP":
posClass = "label-top";
posClass = "label--top";
break;
case "LEFT":
posClass = "label-left";
posClass = "label--left";
break;
case "BOTTOM":
posClass = "label-bottom";
posClass = "label--bottom";
break;
case "RIGHT":
posClass = "label-right";
posClass = "label--right";
break;
case "NONE":
posClass = "label-none";
posClass = "label--none";
break;
}
return [ "app-form-item", this.itemClassName, posClass ];
......@@ -304,10 +304,11 @@ export default class AppFormItem extends Vue {
* @type {string}
* @memberof AppFormItem
*/
get labelclasses(): string {
return this.labelStyle
? this.labelStyle + " app-form-item-label"
: "app-form-item-label";
get labelclasses(): any {
const classes = this.labelStyle
? Object.assign(this.labelStyle,{'app-form-item__label':true})
:{ "app-form-item__label":true};
return classes
}
/**
......@@ -384,7 +385,4 @@ export default class AppFormItem extends Vue {
}
}
</script>
<style lang='less'>
@import "./app-form-item.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -16,7 +16,7 @@
slot="label" :class="labelclasses"
:title="isEmptyCaption ? '' : caption"
>{{isEmptyCaption ? '' : caption}}</span>
<div class="app-editor-contant">{{$slots.default}}</div>
<div class="form-item__contant">{{$slots.default}}</div>
<div
v-if="_formitem && _formitem.validateState && Object.is(_formitem.validateState, 'error')"
class="app-error-tip"
......@@ -237,7 +237,4 @@ export default class AppFormItem2 extends Vue {
}
}
}
</script>
<style lang="less">
@import "./app-form-item2.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -239,7 +239,4 @@ export default class AppFormPart extends Vue {
}
}
</script>
<style lang = "less">
@import './app-form-part.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -27,7 +27,4 @@ export default class AppForm extends Vue {
*/
@Prop() public name?: string;
}
</script>
<style lang = "less">
@import './app-form.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -97,7 +97,4 @@ export default class AppFormatData extends Vue {
}
}
</script>
<style lang="less">
@import './app-format-data.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="fullscren">
<div class="app-full-scren">
<span><Icon :type="fullScren == true ? 'ios-contract' : 'ios-expand'" size="15" @click="handleScreen"/></span>
<span class="title" @click="handleScreen">{{$t('components.scren.all')}}</span>
</div>
......@@ -82,18 +82,4 @@ export default class AppFullScren extends Vue{
}
</script>
<style lang='less'>
.fullscren{
display: flex;
flex-direction: row;
justify-content: space-between;
cursor:pointer;
}
.ivu-icon-ios-expand{
font-weight: bolder;
}
.ivu-icon-ios-contract{
font-weight: bolder;
}
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="ibiz-group-picker">
<div class="ibiz-group-container">
<div v-if="showTree" class="ibiz-group-tree">
<div class="app-group-picker">
<div class="app-group-picker__content">
<div v-if="showTree" class="app-group-picker__content__select-tree">
<ibiz-select-tree :NodesData="treeItems" v-model="treeSelectVal" :treeOnly="true" :defaultChecked="true" @select="treeSelect"></ibiz-select-tree>
</div>
<div class="ibiz-group-content">
<div class="app-group-picker__content__card">
<ibiz-group-card :data="cardItems" text="label" value="id" groupName="group" :multiple="multiple" :defaultSelect="cardSelctVal" @select="groupSelect"></ibiz-group-card>
</div>
</div>
<div class="ibiz-group-footer">
<div class="app-group-picker__footer">
<el-button size="small" type="primary" @click="onOK">{{$t('app.commonwords.ok')}}</el-button>
<el-button size="small" @click="onCancel">{{$t('app.commonwords.cancel')}}</el-button>
</div>
......@@ -284,33 +284,4 @@ export default class AppGroupPicker extends Vue {
this.$emit('close');
}
}
</script>
<style lang="less">
.ibiz-group-picker{
width: 100%;
height: calc(100% - 37px);
.ibiz-group-container {
display: flex;
height: calc(100% - 65px);
.ibiz-group-tree {
min-width: 200px;
border-right: 1px solid #ddd;
padding: 0 34px 0 10px;
overflow: auto;
height: 100%;
}
.ibiz-group-content {
flex-grow: 1;
padding: 0 10px;
overflow: auto;
height: 100%;
}
}
.ibiz-group-footer {
padding: 16px;
text-align: right;
border-top: 1px solid #ddd;
}
}
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="ibiz-group-select" @click.stop="open">
<div class="ibiz-group-content">
<span class="group-item-text" v-if="!multiple">
<div class="app-group-select" @click.stop="open">
<div class="app-group-select__content">
<span class="app-group-select__content__text" v-if="!multiple">
{{ selectName }}
</span>
<template v-else v-for="(select, index) of selects">
<div :key="index" class="ibiz-group-item">
<span class="group-item-multiple">{{ select.label }}</span>
<div :key="index" class="app-group-select__content__item">
<span class="item__label">{{ select.label }}</span>
<i v-if="!disabled" class="el-icon-circle-close" @click.stop="remove(select)"></i>
</div>
</template>
</div>
<div v-if="!disabled" class="ibiz-group-open">
<div v-if="!disabled" class="app-group-select__open">
<i v-if="!disabled && !multiple && selects.length > 0" class="el-icon-circle-close" @click.stop="remove(selects[0])"></i>
<i v-if="!noButton" class="el-icon-search" @click.stop="openView" style="color: #c0c4cc;"></i>
</div>
......@@ -371,8 +371,4 @@ export default class AppGroupSelect extends Vue {
}
}
</script>
<style lang="less">
@import './app-group-select.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -79,8 +79,4 @@ export default class AppHeaderMenus extends Vue {
}
</script>
<style lang='less'>
@import "./app-header-menus.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
import { Vue, Component, Prop, Emit } from 'vue-property-decorator';
import { Util } from 'ibiz-core';
import './app-header-right-menus.less';
/**
* 应用头部菜单
......
<template>
<div class='app-picture-preview'>
<ul class="">
<li v-for="(file,index) in files" :key="index" class="preview-file-list-item">
<div class='preview-file-list-img'>
<el-image :src="file.dynaImgUrl" class='' style=''>
<div slot='error' class='image-slot'>
<img src="@/assets/img/picture.png" style='width:100%;height:100%;'>
<ul class="app-picture-preview__content">
<li v-for="(file,index) in files" :key="index" class="app-picture-preview__content__item">
<div>
<el-image :src="file.dynaImgUrl">
<div slot='error' class='item__img'>
<img src="@/assets/img/picture.png">
</div>
</el-image>
<div class='preview-file-list-actions'>
<span class='action-preview'>
<div class='item__action'>
<span class='item__action__preview'>
<i class='el-icon-zoom-in' @click="onPreview(file)"></i>
</span>
<span class='action-download'>
<span class='item__action__download'>
<i class='el-icon-download' @click="onDownload(file)"></i>
</span>
</div>
......@@ -20,9 +20,9 @@
</li>
</ul>
<!-- 预览 -->
<modal v-model="dialogVisible" footer-hide width="auto" class-name='app-image-preview-model'>
<modal v-model="dialogVisible" footer-hide width="auto" class-name='app-picture-preview__model'>
<el-image :src="dialogImageUrl">
<div slot='error' class='image-slot'>
<div slot='error' class='model__img'>
<img src="@/assets/img/picture.png">
</div>
</el-image>
......@@ -298,7 +298,4 @@ export default class AppImagePreview extends Vue {
}
}
</script>
<style lang = "less">
@import './app-image-preview.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div :class="{ ['image-selector']: true, ['has-picture']: fileList.length > 0, ['disabled']: disabled }">
<div :class="{ ['app-image-select']: true, ['app-image-select--has-picture']: fileList.length > 0, ['is-disabled']: disabled }">
<el-upload
action="#"
ref="imgupload"
......@@ -12,27 +12,27 @@
:limit="1"
:file-list="fileList"
>
<div slot="file" class="image-wrapper" slot-scope="{ file }">
<div v-if="!svg" class="image-img">
<img class="el-upload-list__item-thumbnail" :src="dialogImageUrl" alt="" />
<div slot="file" class="app-image-select__content" slot-scope="{ file }">
<div v-if="!svg" class="content__img">
<img :src="dialogImageUrl" alt="" />
</div>
<div v-else v-html="svg" class="image-svg" />
<span class="el-upload-list__item-actions">
<span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)">
<div v-else v-html="svg" class="content__svg" />
<span class="content__action">
<span class="content__action__preview" @click="handlePictureCardPreview(file)">
<i class="el-icon-zoom-in"></i>
</span>
<span v-if="!disabled" class="el-upload-list__item-delete" @click="removeFile(file)">
<span v-if="!disabled" class="content__action__delete" @click="removeFile(file)">
<i class="el-icon-delete"></i>
</span>
</span>
</div>
<i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible" :modal-append-to-body="false">
<div v-if="!svg" class="image-img">
<el-dialog :visible.sync="dialogVisible" :modal-append-to-body="false" class="app-image-select__dialog-model">
<div v-if="!svg" class="dialog-model__image__img">
<img :src="dialogImageUrl" alt="" />
</div>
<div v-else v-html="svg" class="image-svg" />
<div v-else v-html="svg" class="dialog-model__image__svg" />
</el-dialog>
</div>
</template>
......@@ -187,7 +187,3 @@ export default class AppImageSelect extends Vue {
}
}
</script>
<style lang="less">
@import './app-image-select.less';
</style>
<template>
<div :class="{'app-picture-upload': true, 'single': !multiple}">
<ul class='el-upload-list el-upload-list--picture-card'>
<div :class="{'app-picture-upload': true, 'is-single': !multiple}">
<ul class='el-upload-content picture-upload__card'>
<!-- 绘制缩略图 Start -->
<li v-for="(file,index) in files" :key="index" class='el-upload-list__item is-success'>
<el-image :src="file.url" class='el-upload-list__item-thumbnail' style='min-height:100px;min-width:100px;'>
<div slot='error' class='image-slot'>
<li v-for="(file,index) in files" :key="index" class='el-upload-content__item is-success'>
<el-image :src="file.url" class='el-upload-content__item__thumbnail'>
<div slot='error' class='item__image'>
<i class='el-icon-picture-outline'></i>
</div>
</el-image>
<a class='el-upload-list__item-name'>
<a class='el-upload-content__item__caption'>
<i class='el-icon-document'></i> {{file.name}}
</a>
<i class='el-icon-close'></i>
<label class='el-upload-list__item-status-label'>
<label class='el-upload-content__item__status-label'>
<i class='el-icon-upload-success el-icon-check'></i>
</label>
<span class='el-upload-list__item-actions'>
<span class='el-upload-list__item-preview'>
<span class='el-upload-content__item__action'>
<span class='item__action__preview'>
<i class='el-icon-zoom-in' @click="onPreview(file)"></i>
</span>
<span class='el-upload-list__item-download'>
<span class='item__action__download'>
<i class='el-icon-download' @click="onDownload(file)"></i>
</span>
<span :style="{ 'display': disabled || readonly? 'none' : 'inline-block' }" class='el-upload-list__item-delete'>
<span :style="{ 'display': disabled || readonly? 'none' : 'inline-block' }" class='item__action__delete'>
<i class='el-icon-delete' @click="onRemove(file, files)"></i>
</span>
</span>
......@@ -32,7 +32,7 @@
<!-- 文件上传 -->
<el-upload
v-if="!readonly && (multiple || files.length === 0)"
:class="{'el-upload-disabled':disabled}"
:class="{'is-disabled':disabled}"
:limit="multiple ? limit: 1"
:disabled="disabled"
:action="uploadUrl"
......@@ -52,9 +52,9 @@
<i class="el-icon-plus"></i>
</el-upload>
<!-- 预览 -->
<modal v-model="dialogVisible" footer-hide class-name='app-image-upload-model'>
<modal v-model="dialogVisible" footer-hide class-name='app-picture-upload-model'>
<el-image :src="dialogImageUrl">
<div slot='error' class='image-slot'>
<div slot='error' class='upload-model__image'>
<i class='el-icon-picture-outline'></i>
</div>
</el-image>
......@@ -661,7 +661,4 @@ export default class AppImageUpload extends Vue {
this.$warning(`${this.$t('components.appfileupload.limitselect')} ${this.limit}`);
}
}
</script>
<style lang = "less">
@import './app-image-upload.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="app-inpu-ip">
<div class="app-input-ip">
<el-input
type="text"
size="small"
......@@ -250,7 +250,3 @@ export default class AppInputIp extends Vue {
}
}
</script>
<style lang='less'>
@import './app-input-ip.less';
</style>
<template>
<dropdown v-if="localList.length > 1" trigger='click' @on-click="selectLang">
<dropdown v-if="localList.length > 1" trigger='click' @on-click="selectLang" class="app-lang">
<span>
{{caption}}
<icon size='18' type='md-arrow-dropdown'></icon>
......@@ -67,7 +67,4 @@ export default class AppLang extends Vue {
}
}
</script>
<style lang="less">
@import './app-lang.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="app-list-box">
<template v-if="multiple" class="app-list-box-multiple">
<checkbox-group v-model="selectArray" @on-change="selectChange">
<template v-if="multiple">
<checkbox-group v-model="selectArray" @on-change="selectChange" class="app-list-box__checkbox">
<checkbox
v-for="(item, index) in items"
:key="index"
......@@ -12,8 +12,8 @@
</checkbox>
</checkbox-group>
</template>
<template v-else class="app-list-box-radio">
<el-radio-group v-model="selectArray[0]">
<template v-else>
<el-radio-group v-model="selectArray[0]" class="app-list-box__radio">
<el-radio
v-for="(item, index) in items"
:key="index"
......@@ -466,8 +466,4 @@ export default class AppListBox extends Vue {
this.$emit('formitemvaluechange', { name: this.name, value: _value });
}
}
</script>
<style lang="less">
@import './app-list-box.less';
</style>
</script>
\ No newline at end of file
<template>
<div class="el-loading-mask app-loading">
<div class="app-loading-icon">
<div class="icon-content">
<div class="app-loading-icon-item active-color"></div>
<div class="app-loading-icon-item"></div>
<div class="app-loading__icon">
<div class="app-loading__icon__content">
<div class="content__item is-active"></div>
<div class="content__item"></div>
</div>
<div class="icon-content">
<div class="app-loading-icon-item"></div>
<div class="app-loading-icon-item"></div>
<div class="app-loading__icon__content">
<div class="content__item"></div>
<div class="content__item"></div>
</div>
</div>
</div>
......
<template>
<div class="lockscren">
<div class="app-lock-scren">
<span><Icon type="md-lock" size="15" @click="handleLock"/></span>
<span class="title" @click="handleLock">{{$t('components.lockscren.lock')}}</span>
<span class="app-lock-scren__caption" @click="handleLock">{{$t('components.lockscren.lock')}}</span>
<el-dialog :title="$t('components.lockscren.title')"
:visible.sync="box"
width="30%"
......@@ -17,7 +17,7 @@
:placeholder="$t('components.lockscren.placeholder')"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<span slot="footer">
<el-button type="primary" @click="handleSetLock">{{$t('components.lockscren.confirmbuttontext')}}</el-button>
</span>
</el-dialog>
......@@ -90,26 +90,4 @@ export default class AppLockScren extends Vue{
}
}
</script>
<style lang='less'>
.lockscren{
cursor:pointer;
.title {
margin-left: 8px;
}
}
.el-dialog.lockscren-body{
height: auto;
.el-dialog__header{
height: auto;
}
.el-dialog__body{
height: auto;
display: flex;
align-items: center;
.el-form{
width: 100%;
}
}
}
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -483,8 +483,4 @@ export default class AppMapPosition extends Vue {
}
}
</script>
<style lang='less'>
@import './app-map-position.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
import { Vue, Component, Prop, Model } from 'vue-property-decorator';
import MavonEditor from 'mavon-editor';
import 'mavon-editor/dist/css/index.css'
import './app-markdown-editor.less';
@Component({
components: {
......
......@@ -22,8 +22,8 @@
>
<template v-for="(myTask, index) in myTasks">
<template v-if="index < taskShowCnt">
<el-row class="Row" :key="index" :draggable="false">
<el-col :span="3" class="column1" :draggable="false">
<el-row class="popover__content" :key="index" :draggable="false">
<el-col :span="3" class="popover__content__avatar" :draggable="false">
<el-avatar
icon="el-icon-s-check"
size="small"
......@@ -31,7 +31,7 @@
style="color: white; background-color: #409eff"
></el-avatar>
</el-col>
<el-col :span="21" class="column2" :draggable="false">
<el-col :span="21" class="popover__content__caption" :draggable="false">
<el-row :draggable="false">
<el-col :span="16" :draggable="false" style="width: 65%">
<div
......@@ -60,7 +60,7 @@
</template>
</template>
<template>
<div class="show-more" @click="showMore('taskShowCnt')">
<div class="popover__show-more" @click="showMore('taskShowCnt')">
<label v-if="taskShowCnt < myTasks.length">{{
this.$t('components.appmessagepopover.loadmore')
}}</label>
......@@ -276,8 +276,4 @@ export default class AppMessagePopover extends Vue {
this.showPopover = !this.showPopover;
}
}
</script>
<style lang='less'>
@import 'app-message-popover.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -175,7 +175,34 @@ export default class AppModelButton extends Vue {
*
* @memberof AppModelButton
*/
public classContent: string = '';
get classContent(): string{
let _classContent = ''
if (this.dynaClass) {
if (typeof this.dynaClass == 'string') {
_classContent += this.dynaClass + ' ';
} if(this.dynaClass instanceof Array){
for (const key in this.dynaClass) {
const element = this.dynaClass[key];
for (const [key, value] of Object.entries(element)) {
if (value == true) {
_classContent += `${key} `;
}
}
}
}else if (typeof this.dynaClass == 'object') {
for (const [key, value] of Object.entries(this.dynaClass)) {
if (value == true) {
_classContent += `${key} `;
}
}
}
}
const sysCss = this.modelJson.getPSSysCss();
if (sysCss?.cssName) {
_classContent += sysCss.cssName + ' ';
}
return _classContent;
};
/**
* 按钮样式
......@@ -277,22 +304,6 @@ export default class AppModelButton extends Vue {
if (this.modelJson.iconAlign) {
this.iconAlign = this.modelJson.iconAlign;
}
// 初始化类名 统一转成字符串传给下面原子组件
if (this.dynaClass) {
if (typeof this.dynaClass == 'string') {
this.classContent += this.dynaClass + ' ';
} else if (typeof this.dynaStyle == 'object') {
for (const [key, value] of Object.entries(this.dynaStyle)) {
if (value == true) {
this.classContent += `${key} `;
}
}
}
}
const sysCss = this.modelJson.getPSSysCss();
if (sysCss?.cssName) {
this.classContent += sysCss.cssName + ' ';
}
}
}
......@@ -327,8 +338,4 @@ export default class AppModelButton extends Vue {
this.$emit('onClick', event);
}
}
</script>
<style lang='less'>
@import './app-model-button.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="app-mpicker-importability">
<div style="position: relative; width: 100%">
<div>
<el-select
:value="curValue"
allow-create
......@@ -9,7 +9,6 @@
remote
:remote-method="onSearch"
size="small"
style="width: 100%"
@change="onSelect"
@remove-tag="onRemove"
:disabled="disabled || readonly"
......@@ -21,7 +20,7 @@
:value="item[deKeyField]"
></el-option>
</el-select>
<span style="position: absolute; right: 5px; color: #c0c4cc; top: 0; font-size: 13px">
<span class="app-mpicker-importability__open-icon">
<i class="el-icon-search" @click="openView"></i>
</span>
</div>
......@@ -400,7 +399,4 @@ export default class AppMpickerImportability extends Vue {
}
}
}
</script>
<style lang="less">
@import './app-mpicker-importability.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="app-mpicker">
<div style="position: relative;width: 100%;">
<el-select :value="curValue" multiple filterable remote :loading="loading" :remote-method="onSearch" size="small" style="width:100%;" @change="onSelect" @remove-tag="onRemove" :disabled="disabled || readonly">
<div class="app-mpicker-select-container">
<el-select :value="curValue" multiple filterable remote :loading="loading" :remote-method="onSearch" size="small" @change="onSelect" @remove-tag="onRemove" :disabled="disabled || readonly">
<template v-if="loading" slot="empty">
<li class="loading">
<li>
<i class="el-icon-loading"></i>
</li>
</template>
<el-option v-for="(item, index) in items" :key="index" :label="item[deMajorField]" :value="item[deKeyField]"></el-option>
</el-select>
<span style="position: absolute;right: 5px;color: #c0c4cc;top: 0;font-size: 13px;">
<span class="app-mpicker-open-icon">
<i class="el-icon-search" @click="openView"></i>
</span>
</div>
......@@ -429,7 +429,4 @@ export default class AppMpicker extends Vue {
}
}
</script>
<style lang="less">
@import './app-mpicker.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
import { LogUtil, Util } from 'ibiz-core';
import { Vue, Prop, Component } from 'vue-property-decorator';
import './app-nav-pos.less';
/**
* 导航占位
*
......@@ -93,7 +92,7 @@ export class AppNavPos extends Vue {
viewparam: JSON.stringify(this.navData.viewparams)
}
},
class: "viewcontainer2",
class: "view-container2",
on: {
viewdataschange: this.handleViewEvent.bind(this),
viewLoaded: this.handleViewEvent.bind(this),
......
<template>
<div class='editor-container'>
<div class='app-not-supported-editor'>
{{$t('app.nosupport.nosupport')}}
</div>
</template>
......@@ -10,7 +10,3 @@ export default class AppNotSupportedEditor extends Vue {
}
</script>
<style lang="less">
@import "./app-not-supported-editor.less";
</style>
\ No newline at end of file
......@@ -9,7 +9,7 @@
:precision="precision"
@on-change="(value) => {onValueChange(value, 0)}">
</input-number>
<div class="range-separator"> ~ </div>
<div class="app-number-range__separator"> ~ </div>
<input-number
:min="minValue + 1"
:active-change="false"
......@@ -118,8 +118,4 @@ export default class AppNumberRange extends Vue {
}
}
}
</script>
<style lang='less'>
@import './app-number-range.less';
</style>
</script>
\ No newline at end of file
......@@ -336,8 +336,4 @@ export default class AppOrgSelect extends Vue {
}
}
</script>
<style lang="less">
@import "./app-org-select.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="app-org-sector">
<dropdown @on-click="orgSelect" :transfer="true" :transfer-class-name="dropdownClass" >
<div class="orgsector">
<dropdown @on-click="orgSelect" :transfer="true" :transfer-class-name="dropdownClass+' app-org-sector__dropdown'" >
<div class="app-org-sector__dropdown__caption">
<span>{{selectedOrgName}}</span>
<icon size="18" type="md-arrow-dropdown" v-if="selectedOrgArray.length > 0"></icon>
</div>
<dropdown-menu
class="menu"
slot="list"
style="font-size: 15px !important;"
v-if="selectedOrgArray.length > 0"
>
<dropdown-item
:name="item.srforgsectorid"
style="font-size: 15px !important;"
v-for="(item, index) in selectedOrgArray"
:key="index"
>{{item.srforgsectorname}}</dropdown-item>
......@@ -233,8 +231,4 @@ export default class AppOrgSector extends Vue {
this.$store.commit("updateAppData", _appdata);
}
}
</script>
<style lang="less">
@import "./app-orgsector.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div :class="classes">
<div v-if="Object.is(labelPos,'NONE') || !labelPos" class="editor">
<div v-if="Object.is(labelPos,'NONE') || !labelPos" class="app-panel-field__editor">
<div :class="valueCheck == true ?'':'editorstyle'">
<slot ></slot>
<span :class="error ? 'errorstyle':''">{{error}}</span>
</div>
</div>
<div v-if="!Object.is(labelPos,'NONE') && !isEmptyCaption" class="app-panel-field-label">
<div v-if="!Object.is(labelPos,'NONE') && !isEmptyCaption" :class="dynaCationClass">
<span v-if="required" style="color:red;">* </span>
{{ caption }}
</div>
<div v-if="Object.is(labelPos,'BOTTOM') || Object.is(labelPos,'TOP') || Object.is(labelPos,'LEFT') || Object.is(labelPos,'RIGHT')" class="editor">
<div v-if="Object.is(labelPos,'BOTTOM') || Object.is(labelPos,'TOP') || Object.is(labelPos,'LEFT') || Object.is(labelPos,'RIGHT')" class="app-panel-field__editor">
<div :class="valueCheck == true ?'':'editorstyle'">
<slot ></slot>
<span :class="error ? 'errorstyle':''">{{error}}</span>
......@@ -93,6 +93,14 @@ export default class AppPanelField extends Vue {
*/
@Prop() public itemRules!: any;
/**
* 值规则
*
* @type {string}
* @memberof AppPanelField
*/
@Prop() public captionClass?: any;
/**
* 是否必填
*
......@@ -101,6 +109,18 @@ export default class AppPanelField extends Vue {
*/
@Prop({default: false}) public required!: boolean;
/**
* 动态标题类名
*
* @type {any[]}
* @memberof AppPanelField
*/
get dynaCationClass(){
const defaultClass = {'app-panel-field__label':true}
return this.captionClass?Object.assign(defaultClass,this.captionClass):defaultClass;
}
/**
* 值规则数组
*
......@@ -162,19 +182,19 @@ export default class AppPanelField extends Vue {
let posClass = "";
switch (this.labelPos) {
case "TOP":
posClass = "label-top";
posClass = "label__top";
break;
case "LEFT":
posClass = "label-left";
posClass = "label__left";
break;
case "BOTTOM":
posClass = "label-bottom";
posClass = "label__bottom";
break;
case "RIGHT":
posClass = "label-right";
posClass = "label__right";
break;
case "NONE":
posClass = "label-none";
posClass = "label__none";
break;
}
return [ "app-panel-field", posClass ];
......@@ -201,7 +221,4 @@ export default class AppPanelField extends Vue {
}
}
}
</script>
<style lang='less'>
@import "./app-panel-field.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="app-picker-importability">
<el-input class="text-value" @input="onInput" @change="onChange" :placeholder="placeholder" :value="curValue" size='small' :disabled="disabled" :readonly="!importability">
<el-input @input="onInput" @change="onChange" :placeholder="placeholder" :value="curValue" size='small' :disabled="disabled" :readonly="!importability">
<template slot="suffix">
<i v-if="curValue && !disabled" class='el-icon-circle-close' @click="onClear"></i>
<i class='el-icon-search' @click="openView"></i>
......@@ -291,7 +291,4 @@ export default class AppPickerImportability extends Vue {
}
}
</script>
<style lang="less">
@import './app-picker-importability.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -313,7 +313,7 @@ export default class AppPickerMicroservice extends Vue {
* @type {any[]}
* @memberof AppPickerMicroservice
*/
public popperClass: string = 'app-picker-microservice--popper';
public popperClass: string = 'app-picker-microservice__popper';
/**
* @description 唯一标识
......@@ -373,7 +373,7 @@ export default class AppPickerMicroservice extends Vue {
this.showValue = this.fillMap.id;
this.defaultProps.label = this.fillMap.label;
}
this.popperClass += ` app-picker-microservice--popper-${this.uuid}`;
this.popperClass += ` app-picker-microservice__popper-${this.uuid}`;
}
/**
......@@ -503,7 +503,7 @@ export default class AppPickerMicroservice extends Vue {
* @memberof AppPickerMicroservice
*/
togglePopper(show: boolean = false) {
const popper: any = document.querySelector(`.app-picker-microservice--popper-${this.uuid}`);
const popper: any = document.querySelector(`.app-picker-microservice__popper-${this.uuid}`);
if (popper) {
popper.style.display = show ? 'block' : 'none';
}
......@@ -651,7 +651,3 @@ export default class AppPickerMicroservice extends Vue {
}
}
</script>
<style lang="less">
@import './app-picker-microservice.less';
</style>
<template>
<div class="app-picker-select-view">
<Dropdown :visible="visible" trigger="custom" transfer-class-name="app-picker-select-view-transfer" transfer placement="bottom-start" style="left:0px;width: 100%" @on-clickoutside="() => {triggerMenu(false);}" >
<Input v-if="isSingleSelect" v-model="queryValue" class="tree-input" type="text" :placeholder="placeholder ? placeholder : $t('components.apppickerselectview.placeholder')" :disabled="disabled" :readonly="readonly" @on-change="OnInputChange" @on-focus="()=>{triggerMenu(true);}" >
<Dropdown :visible="visible" trigger="custom" transfer-class-name="app-picker-select-view__transfer" transfer placement="bottom-start" @on-clickoutside="() => {triggerMenu(false);}" >
<Input v-if="isSingleSelect" v-model="queryValue" class="app-picker-select-view__input" type="text" :placeholder="placeholder ? placeholder : $t('components.apppickerselectview.placeholder')" :disabled="disabled" :readonly="readonly" @on-change="OnInputChange" @on-focus="()=>{triggerMenu(true);}" >
<template v-slot:suffix>
<i v-if="queryValue && !disabled && !readonly" class='el-icon-circle-close' @click="onClear"></i>
<Icon :type="visible ? 'ios-arrow-up' : 'ios-arrow-down'" class="icon-arrow" @click="() => {triggerMenu();}"></Icon>
<icon v-if="linkview" type="ios-open-outline" @click="openLinkView"/>
</template>
</Input>
<el-select v-if="!isSingleSelect" popper-class="select-no-dropdown" :value="keySet" multiple filterable remote :remote-method="($event) => {this.queryValue = $event;}" size="small" style="width:100%;" @change="onSelectChange" @focus="() => {triggerMenu(true);}" :disabled="disabled || readonly">
<el-select v-if="!isSingleSelect" popper-class="app-picker-select-view__select" :value="keySet" multiple filterable remote :remote-method="($event) => {this.queryValue = $event;}" size="small" @change="onSelectChange" @focus="() => {triggerMenu(true);}" :disabled="disabled || readonly">
<el-option v-for="(item, index) in items" :key="index" :label="item.srfmajortext" :value="item[deKeyField]"></el-option>
</el-select>
<DropdownMenu slot="list">
......@@ -639,8 +639,4 @@ export default class AppPickerSelectView extends Vue {
}
}
</script>
<style lang='less'>
@import './app-picker-select-view.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -3,10 +3,9 @@
<a @click="openLinkView">{{ curvalue }}</a>
</div>
<div v-else-if="!Object.is(editorType, 'pickup-no-ac') && !Object.is(editorType, 'dropdown')" class="app-picker">
<div class="app-picker">
<el-autocomplete
ref="appAc"
class="text-value"
class="app-picker__ac"
:value-key="deMajorField"
:disabled="disabled || readonly"
v-model="curvalue"
......@@ -22,7 +21,7 @@
@focus="onAcFocus"
style="width: 100%"
:placeholder="placeholder"
:popper-class="`app-ac-${name}`"
popper-class="app-picker__ac__popper"
>
<template v-slot:default="{ item }">
<template v-if="item.tag">
......@@ -42,30 +41,28 @@
<icon v-if="linkview" type="ios-open-outline" @click="openLinkView" />
</template>
</el-autocomplete>
</div>
</div>
<div v-else-if="Object.is(editorType, 'pickup-no-ac')" class="app-picker">
<div class="app-picker">
<el-input
class="text-value"
:placeholder="placeholder"
:value="curvalue"
readonly
size="small"
:disabled="disabled"
@blur="onBlur"
>
<template slot="suffix">
<i v-if="curvalue && !disabled" class="el-icon-circle-close" @click="onClear"></i>
<i class="el-icon-search" @click="openView"></i>
<icon v-if="linkview" type="ios-open-outline" @click="openLinkView" />
</template>
</el-input>
</div>
<el-input
class="app-picker__input"
:placeholder="placeholder"
:value="curvalue"
readonly
size="small"
:disabled="disabled"
@blur="onBlur"
>
<template slot="suffix">
<i v-if="curvalue && !disabled" class="el-icon-circle-close" @click="onClear"></i>
<i class="el-icon-search" @click="openView"></i>
<icon v-if="linkview" type="ios-open-outline" @click="openLinkView" />
</template>
</el-input>
</div>
<div v-else-if="Object.is(editorType, 'dropdown')" class="app-picker">
<el-select
ref="appPicker"
class="app-picker__select"
remote
:remote-method="query => this.onSearch(query, null, true)"
:value="refvalue"
......@@ -75,7 +72,7 @@
:disabled="disabled || readonly"
style="width: 100%"
clearable
popper-class="app-picker-dropdown"
popper-class="app-picker__select__popper"
@clear="onClear"
@visible-change="onSelectOpen"
:loading="loading"
......@@ -83,7 +80,7 @@
:placeholder="placeholder"
>
<template v-if="loading" slot="empty">
<li class="loading">
<li>
<i class="el-icon-loading"></i>
</li>
</template>
......@@ -1116,7 +1113,4 @@ export default class AppPicker extends Vue {
}
}
</script>
<style lang="less">
@import './app-picker.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -3,11 +3,11 @@
<p slot="title">
{{$t('components.appportaldesign.customportal')}}
</p>
<div class="design-toolbar" slot="extra">
<div class="app-portal-design__btn" slot="extra">
<i-button @click="click('reset')">{{$t('components.appportaldesign.recover')}}</i-button>
<i-button @click="click('save')">{{$t('components.appportaldesign.save')}}</i-button>
</div>
<div class="design-container">
<div class="app-portal-design__container">
<app-dashboard-design :viewState="viewState" :context="context" :customModel="customModel" :viewparams="viewparams" :utilServiceName="utilServiceName" @save="onSaved"></app-dashboard-design>
</div>
</card>
......@@ -239,8 +239,4 @@ export default class AppPortalDesign extends Vue {
}
}
</script>
<style lang='less'>
@import "./app-portal-design.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -5,7 +5,6 @@ import 'jquery-ui-pack/jquery-ui.theme.css';
import 'pqgridf/pqgrid.min.css';
import 'pqgridf/pqgrid.ui.min.css';
import 'pqgridf/themes/steelblue/pqgrid.css';
import './app-pq-grid.less';
import { ModelTool, Util, AppServiceBase } from "ibiz-core";
import { Vue, Component, Prop, Watch } from "vue-property-decorator";
import {
......
......@@ -129,7 +129,3 @@ export default class AppProgress extends Vue {
}
}
</script>
<style lang="less">
@import "./app-progress.less";
</style>
......@@ -360,7 +360,3 @@ export default class AppQuickGroup extends Vue {
}
}
</script>
<style lang="less">
@import './app-quick-group.less';
</style>
......@@ -66,7 +66,3 @@ export default class AppQuickMenus extends Vue {
@Prop() public ctrlName!:String;
}
</script>
<style lang='less'>
@import "./app-quick-menus.less";
</style>
\ No newline at end of file
......@@ -76,14 +76,3 @@ export default class AppQuickSearch extends Vue {
}
}
</script>
<style lang="less">
.app-quick-search{
max-width: 400px;
margin-top:4px;
padding-left: 24px
}
</style>
......@@ -328,7 +328,4 @@ export default class AppRadioGroup extends Vue {
}
</script>
<style lang="less">
@import './app-radio-group.less';
</style>
</script>
\ No newline at end of file
<template>
<div class="app-range-date">
<span class="editor-span">{{$t('components.apprangdate.from')}}</span>
<span class="app-range-date__caption">{{$t('components.apprangdate.from')}}</span>
<template v-for="(item, index) in refFormItem">
<span v-if="index > 0" class="editor-space" :key="index">{{$t('components.apprangdate.daystart')}}</span>
<span v-if="index > 0" class="app-range-date__editor-separator" :key="index">{{$t('components.apprangdate.daystart')}}</span>
<date-picker
:key="index + '-onlydate'"
v-if="Object.is(editorType, 'DATEPICKEREX') || Object.is(editorType, 'DATEPICKEREX_NOTIME') && index == 0"
......@@ -54,7 +54,7 @@
:readonly="readonly"
@on-change="endOnValueChange"
></date-picker>
<span v-if="index > 0" :key="index + '-only'" class="editor-space">{{$t('components.apprangdate.dayend')}}</span>
<span v-if="index > 0" :key="index + '-only'" class="app-range-date__editor-separator">{{$t('components.apprangdate.dayend')}}</span>
</template>
</div>
</template>
......@@ -227,7 +227,3 @@ export default class AppRangDate extends Vue {
}
}
</script>
<style lang='less'>
@import "./app-range-date.less";
</style>
\ No newline at end of file
<template>
<div class="app-range-editor">
<template v-for="(item, index) in refFormItem">
<span v-if="index > 0" class="editor-space" :key="index+10">~</span>
<span v-if="index > 0" class="app-range-editor__separator" :key="index+10">~</span>
<date-picker
:key="index"
v-if="Object.is(editorType, 'DATEPICKEREX') || Object.is(editorType, 'DATEPICKEREX_NOTIME') || Object.is(editorType, 'DATEPICKER')"
......@@ -206,7 +206,3 @@ export default class AppRangeEditor extends Vue {
}
</script>
<style lang='less'>
@import './app-range-editor.less';
</style>
\ No newline at end of file
......@@ -223,8 +223,4 @@ export default class AppRate extends Vue {
}
}
}
</script>
<style lang="less">
@import './app-rate.less';
</style>
</script>
\ No newline at end of file
<template>
<div :class="['rawitem', contentType.toLowerCase()]">
<div :class="['app-rawitem', `app-rawtime--${contentType.toLowerCase()}`]">
<!-- 直接内容类型 -->
<template v-if="Object.is(contentType, 'RAW')">
<template v-if="Object.is(renderMode, 'TEXT')">
......@@ -174,8 +174,4 @@ export default class AppRawItem extends Vue {
this.cssStyle = this.rawItemDetail && this.rawItemDetail.cssStyle ? this.rawItemDetail.cssStyle : '';
}
}
</script>
<style lang='less'>
@import './app-rawitem.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div :class="[editorClass,disabled?'app-rich-text-editor-disabled':'']">
<div :class="[editorClass,disabled?'is-disabled':'']">
<textarea :id="id"></textarea>
</div>
</template>
......@@ -606,35 +606,4 @@ export default class AppRichTextEditor extends Vue {
}
}
}
</script>
<style lang="less">
.tox-statusbar__text-container {
display: none !important;
}
.app-rich-text-editor,.app-rich-text-editor-0,.app-rich-text-editor-100 {
width: 100%;
.tox-fullscreen {
height: 100% !important;
transform: translateX(100%);
}
.tox-blocker {
transform: translateX(100%);
}
}
.app-rich-text-editor-200 {
width: 100%;
.tox-fullscreen {
height: 100% !important;
transform: translateX(200%);
}
.tox-blocker {
transform: translateX(200%);
}
}
.tox-menu {
min-width: 300px !important;
}
.app-rich-text-editor-disabled{
opacity: 0.7;
}
</style>
</script>
\ No newline at end of file
......@@ -3,17 +3,17 @@
<div
v-if="containerModel.NORTH"
:style="containerModel.NORTH.style"
class="no-style overflow-auto app-scroll-container-header"
class="no-style overflow-auto app-scroll-container__header"
>
<template v-for="name of containerModel.NORTH.name">
<slot :name="name"></slot>
</template>
</div>
<div class="app-scroll-container-middle" :style="middleContainerStyle">
<div class="app-scroll-container__middle" :style="middleContainerStyle">
<div
v-if="containerModel.WEST"
:style="containerModel.WEST.style"
class="no-style overflow-auto app-scroll-container-left"
class="no-style overflow-auto app-scroll-container__left"
>
<template v-for="name of containerModel.WEST.name">
<slot :name="name"></slot>
......@@ -22,7 +22,7 @@
<div
v-if="containerModel.CENTER"
:style="containerModel.CENTER.style"
class="no-style overflow-auto app-scroll-container-center"
class="no-style overflow-auto app-scroll-container__center"
>
<template v-for="name of containerModel.CENTER.name">
<slot :name="name"></slot>
......@@ -31,7 +31,7 @@
<div
v-if="containerModel.EAST"
:style="containerModel.EAST.style"
class="no-style overflow-auto app-scroll-container-right"
class="no-style overflow-auto app-scroll-container__right"
>
<template v-for="name of containerModel.EAST.name">
<slot :name="name"></slot>
......@@ -41,7 +41,7 @@
<div
v-if="containerModel.SOUTH"
:style="containerModel.SOUTH.style"
class="no-style overflow-auto app-scroll-container-bottom"
class="no-style overflow-auto app-scroll-container__bottom"
>
<template v-for="name of containerModel.SOUTH.name">
<slot :name="name"></slot>
......@@ -127,8 +127,4 @@ export default class AppScrollContainer extends Vue {
}
}
}
</script>
<style lang="less">
@import './app-scroll-container.less';
</style>
</script>
\ No newline at end of file
......@@ -45,8 +45,4 @@ export default class AppSiderMenus extends Vue {
*/
@Prop({ default: [] }) public menus!: any;
}
</script>
<style lang='less'>
@import "./app-sider-menus.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
import Vue from 'vue';
import { Component, Prop } from 'vue-property-decorator';
import './app-simpleflex-container.less';
@Component({})
export class AppSimpleFlexContainer extends Vue {
......@@ -121,7 +120,7 @@ export class AppSimpleFlexContainer extends Vue {
{
panelItems.map((panelItem: any) => {
return (panelItem && panelItem.getPSPanelItems && panelItem.getPSPanelItems instanceof Function) ?
<div style={this.getDetailStyle(panelItem)} class="app-pos-container">
<div style={this.getDetailStyle(panelItem)} class="app-simpleflex-container__pos-container">
{
panelItem.getPSPanelItems() && panelItem.getPSPanelItems().map((item: any) => {
return <div class="app-simpleflex-container-item" style={this.getDetailStyle(item)}>
......@@ -133,7 +132,7 @@ export class AppSimpleFlexContainer extends Vue {
}
</div>
:
<div class="app-simpleflex-container-item">
<div class="app-simpleflex-container__item">
{this.renderCallBack(panelItem, null, this.index)}
</div>
})
......
<template>
<div>
<el-slider
v-model ="currentVal"
:disabled="disabled || readonly"
:step="step"
:min="min"
:max="max"
@change="change">
</el-slider >
</div>
<div class="app-slider">
<el-slider
v-model ="currentVal"
:disabled="disabled || readonly"
:step="step"
:min="min"
:max="max"
@change="change">
</el-slider >
</div>
</template>
<script lang='ts'>
......@@ -98,8 +98,4 @@ export default class AppSlider extends Vue {
}
</script>
<style lang='less'>
@import "./app-slider.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div :class="['app-sort-bar', isSort ? 'open-bar' : '',]">
<row v-if="sortModel && sortModel.length>0" class="page-sort-bar" :gutter="10" type="flex" justify="start" style="margin:0px;">
<div :class="['app-sort-bar', isSort ? 'app-sort-bar--visible' : 'app-sort-bar--hidden']">
<row v-if="sortModel && sortModel.length>0" class="app-sort-bar__content" :gutter="10" type="flex" justify="start">
<template v-for="(item, index) in sortModel">
<i-col v-show="isSort" :key="index" :class="getSortClass(item)">
<div >
<div @click="sortItemClick(item)">
<!-- <span class="sort-field-text" >{{$t('entities.'+ entityName +'.fields.' + item)}}</span> -->
<span class="sort-field-text">{{item}}</span>
<span class="caret-wrapper">
<Icon type="md-arrow-dropup" />
<Icon type="md-arrow-dropdown" />
</span>
</div>
</div>
</i-col>
<i-col v-show="isSort" :key="index" :class="getSortClass(item)">
<div @click="sortItemClick(item)" class="sort__item_content">
<span class="item__caption">{{item}}</span>
<span class="item__icon">
<Icon type="md-arrow-dropup" />
<Icon type="md-arrow-dropdown" />
</span>
</div>
</i-col>
</template>
<div class="issort" @click="handleSort">
</row>
<div class="is-sort" @click="handleSort">
<Icon v-if="isSort" type="ios-funnel-outline" />
<Icon v-else type="ios-funnel" />
{{ $t('components.appsortbar.title') }}
</div>
</row>
</div>
</div>
</template>
<script lang='ts'>
import { Component, Vue, Prop, Model, Watch } from "vue-property-decorator";
import { Component, Vue, Prop } from "vue-property-decorator";
@Component({})
export default class AppSortBar extends Vue {
......@@ -43,11 +39,11 @@ export default class AppSortBar extends Vue {
public getSortClass(name: any) {
if(this.sortField !== name || this.sortDir === ''){
return '';
return 'sort__item';
}else if(this.sortDir === 'asc'){
return 'sort-ascending'
return 'sort__item sort__item--ascending is-active'
}else if(this.sortDir === 'desc'){
return 'sort-descending'
return 'sort__item sort__item--descending is-active'
}
}
......@@ -59,8 +55,4 @@ export default class AppSortBar extends Vue {
this.isSort = !this.isSort;
}
}
</script>
<style lang="less">
@import './app-sort-bar.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -25,7 +25,7 @@
<span v-else-if="textFormat">
<span class="app-span-value-format" v-format="textFormat">{{text}}</span>
</span>
<span v-else style="white-space:pre-line">
<span v-else class="app-span--no-textFormat">
{{ text + '&nbsp;' + (unitName ? unitName : '') }}
</span>
</span>
......@@ -284,8 +284,4 @@ export default class AppSpan extends Vue {
}
}
}
</script>
<style lang='less'>
@import './app-span.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -96,8 +96,4 @@ export default class AppStepper extends Vue {
}
</script>
<style lang='less'>
@import "./app-stepper.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -397,6 +397,3 @@ export default class AppStudioAction extends Vue {
}
</script>
<style lang="less">
@import './app-studioaction.less';
</style>
......@@ -40,7 +40,3 @@ export default class AppSwitch extends Vue {
@Prop({default: false}) public readonly?: boolean;
}
</script>
<style lang="less">
@import './app-switch.less';
</style>
......@@ -2,7 +2,7 @@
<div class='app-theme'>
<poptip
:title="$t('components.apptheme.caption.theme')"
popper-class='app-app-theme'
popper-class='app-theme__popper'
placement='bottom-end'
:width="Object.is($i18n.locale, 'zh-CN') ? 180 : 250">
<a>
......@@ -148,8 +148,4 @@ export default class AppTheme extends Vue {
}
}
}
</script>
<style lang="less">
@import './app-theme.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -301,8 +301,4 @@ export default class AppTransfer extends Vue {
}
}
}
</script>
<style lang='less'>
@import "./app-transfer.less";
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div v-if="refviewname" class="app-tree-picker">
<Dropdown :visible="visible" trigger="custom" style="left:0px;width: 100%" @on-clickoutside="() => {triggerMenu(false);}" >
<Input v-model="inputValue" class="tree-input" type="text" :placeholder="placeholder ? placeholder : $t('components.apptreepicker.placeholder')" :disabled="disabled" :readonly="readonly" @on-change="OnInputChange" @on-focus="()=>{triggerMenu();}" >
<Dropdown :visible="visible" trigger="custom" @on-clickoutside="() => {triggerMenu(false);}" >
<Input v-model="inputValue" class="app-tree-picker__tree-input" type="text" :placeholder="placeholder ? placeholder : $t('components.apptreepicker.placeholder')" :disabled="disabled" :readonly="readonly" @on-change="OnInputChange" @on-focus="()=>{triggerMenu();}" >
<template v-slot:suffix>
<i v-if="inputValue && !disabled && !readonly" class='el-icon-circle-close' @click="onClear"></i>
<Icon :type="visible ? 'ios-arrow-up' : 'ios-arrow-down'" class="icon-arrow" @click="() => {triggerMenu();}"></Icon>
......@@ -334,8 +334,4 @@ export default class AppTreePicker extends Vue {
}
}
</script>
<style lang='less'>
@import './app-tree-picker.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="update-password">
<div class="password-item">
<div class="app-update-password">
<div class="app-update-password__item">
<label for>
{{$t('components.appupdatepassword.oldpwd')}}
<Input type="password" v-model="oldPwd" @on-blur="oldPwdVaild"/>
</label>
</div>
<div class="password-item">
<div class="app-update-password__item">
<label for>
{{$t('components.appupdatepassword.newpwd')}}
<Input type="password" v-model="newPwd" @on-blur="newPwdVaild"/>
</label>
</div>
<div class="password-item">
<div class="app-update-password__item">
<label for>
{{$t('components.appupdatepassword.confirmpwd')}}
<Input type="password" v-model="confirmPwd" :disabled="!this.newPwd" @on-blur="confirmVaild" />
</label>
</div>
<div class="password-item password-btn">
<div class="app-update-password__item app-update-password__btn">
<Button type="primary" long :disabled="!oldPwd || !newPwd || !confirmPwd || disUpdate" @click="updatePwd">{{$t('components.appupdatepassword.sure')}}</Button>
</div>
</div>
......@@ -129,8 +129,4 @@ export default class AppUpdatePassword extends Vue {
})
}
}
</script>
<style lang="less">
@import './app-update-password.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
......@@ -377,6 +377,3 @@ export default class AppUpicker extends Vue {
}
}
</script>
<style lang="less">
@import './app-upicker.less';
</style>
<template>
<div class="app-upload-file-info">
<a class="file-item" v-for="file in files" @click="() => onDownload(file)"><i class="el-icon-document"></i>{{file.name}}</a>
<a class="app-upload-file-info__item" v-for="file in files" @click="() => onDownload(file)"><i class="el-icon-document"></i>{{file.name}}</a>
</div>
</template>
......@@ -203,8 +203,4 @@ export default class AppUploadFileInfo extends Vue {
}
}
</script>
<style lang='less'>
@import './app-upload-file-info.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
<template>
<div class="app-header-user">
<dropdown transfer-class-name="user-dropdownMenu" @on-click="userSelect" :transfer="true">
<div class="user">
<dropdown transfer-class-name="app-header-user__dropdown-menu" @on-click="userSelect" :transfer="true">
<div class="app-header-user__caption">
<span>{{ user.name ? user.name : $t('components.appuser.name') }}</span>
&nbsp;&nbsp;<avatar :src="user.avatar" />
</div>
<dropdown-menu class="menu" slot="list" style="font-size: 15px !important">
<dropdown-item name="fullscren" style="font-size: 15px !important">
<dropdown-menu class="menu" slot="list">
<dropdown-item name="fullscren">
<app-full-scren />
</dropdown-item>
<dropdown-item name="lockscren" style="font-size: 15px !important">
<dropdown-item name="lockscren">
<app-lock-scren />
</dropdown-item>
<dropdown-item name="changetheme" style="font-size: 15px !important">
<dropdown-item name="changetheme" >
<app-custom-theme :viewStyle="this.viewStyle"></app-custom-theme>
</dropdown-item>
<dropdown-item v-if="enabledChangePassword" name="updatepwd" style="font-size: 15px !important">
<span><Icon type="ios-create-outline" style="margin-right: 8px" /></span>
<dropdown-item v-if="enabledChangePassword" name="updatepwd">
<span><Icon type="ios-create-outline" /></span>
<span>{{ $t('components.appuser.changepwd') }}</span>
</dropdown-item>
<dropdown-item name="logout" style="font-size: 15px !important">
<span><i aria-hidden="true" class="ivu-icon ivu-icon-md-power" style="margin-right: 8px"></i></span>
<dropdown-item name="logout">
<span><i aria-hidden="true" class="ivu-icon ivu-icon-md-power" ></i></span>
<span>{{ $t('components.appuser.logout') }}</span>
</dropdown-item>
</dropdown-menu>
......@@ -195,8 +195,4 @@ export default class AppUser extends Vue {
}
}
}
</script>
<style lang="less">
@import './app-user.less';
</style>
\ No newline at end of file
</script>
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册