mirror of
https://github.com/PanJiaChen/vue-element-admin.git
synced 2025-08-10 12:01:57 +08:00
Styling fixes (#909)
* changed hover styling of card * improved styling of menu cards * other minor styling improvements in cards layout * Fields always have same size * style fix active-inactive text in yes-no-field * moved popover to own component * refactored labelPopover * added info icon to label * truncated placeholder * bugfix - added missing method back in * set resizable in textareas to false * style fix for context info * fixes due to merge form develop * reverted padding for context info box
This commit is contained in:
parent
831efe72e4
commit
82dec26729
@ -23,7 +23,7 @@
|
|||||||
:value-format="formatSend"
|
:value-format="formatSend"
|
||||||
:type="typePicker"
|
:type="typePicker"
|
||||||
range-separator="-"
|
range-separator="-"
|
||||||
:placeholder="metadata.help"
|
:placeholder="metadata.placeholder"
|
||||||
:start-placeholder="$t('components.dateStartPlaceholder')"
|
:start-placeholder="$t('components.dateStartPlaceholder')"
|
||||||
:end-placeholder="$t('components.dateEndPlaceholder')"
|
:end-placeholder="$t('components.dateEndPlaceholder')"
|
||||||
unlink-panels
|
unlink-panels
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<el-cascader
|
<el-cascader
|
||||||
:ref="metadata.columnName"
|
:ref="metadata.columnName"
|
||||||
:v-model="[value]"
|
:v-model="[value]"
|
||||||
:placeholder="metadata.help"
|
:placeholder="metadata.placeholder"
|
||||||
:options="options"
|
:options="options"
|
||||||
:readonly="Boolean(metadata.readonly)"
|
:readonly="Boolean(metadata.readonly)"
|
||||||
:disabled="isDisabled"
|
:disabled="isDisabled"
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
type="number"
|
type="number"
|
||||||
:min="minValue"
|
:min="minValue"
|
||||||
:max="maxValue"
|
:max="maxValue"
|
||||||
:placeholder="metadata.help"
|
:placeholder="metadata.placeholder"
|
||||||
:disabled="isDisabled"
|
:disabled="isDisabled"
|
||||||
:precision="precision"
|
:precision="precision"
|
||||||
:controls="isShowControls"
|
:controls="isShowControls"
|
||||||
@ -49,7 +49,7 @@
|
|||||||
key="number-displayed-blur"
|
key="number-displayed-blur"
|
||||||
:ref="metadata.columnName"
|
:ref="metadata.columnName"
|
||||||
v-model="displayedValue"
|
v-model="displayedValue"
|
||||||
:placeholder="metadata.help"
|
:placeholder="metadata.placeholder"
|
||||||
:disabled="isDisabled"
|
:disabled="isDisabled"
|
||||||
:class="cssClassStyle"
|
:class="cssClassStyle"
|
||||||
readonly
|
readonly
|
||||||
|
48
src/components/ADempiere/Field/FieldOptions/LabelField.vue
Normal file
48
src/components/ADempiere/Field/FieldOptions/LabelField.vue
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<template>
|
||||||
|
<div :style="labelStyle">
|
||||||
|
<span>
|
||||||
|
{{ label }}
|
||||||
|
</span>
|
||||||
|
<span v-if="isMandatory" :style="'color: #f34b4b'">*</span>
|
||||||
|
<i class="el-icon-info" :style="iconStyle" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
isMandatory: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
isMobile: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
labelStyle() {
|
||||||
|
let displayStyle
|
||||||
|
this.isMobile ? displayStyle = 'display: flex;width: auto;' : 'display: block;'
|
||||||
|
return displayStyle + ' margin-left: 3px;'
|
||||||
|
},
|
||||||
|
iconStyle() {
|
||||||
|
if (this.isMobile) {
|
||||||
|
return 'margin-left: 5px; margin-top: 7px;'
|
||||||
|
}
|
||||||
|
return 'margin-left: -5px; padding-bottom: 6px;'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
.el-icon-info {
|
||||||
|
font-size: 11px;
|
||||||
|
color: #008fd3;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,50 @@
|
|||||||
|
<template>
|
||||||
|
<div :style="textStyle">
|
||||||
|
<i v-if="!option.svg" :class="option.icon" style="font-weight: bolder;" />
|
||||||
|
<svg-icon v-else :icon-class="option.icon" :style="iconWrapperStyle" />
|
||||||
|
<span>
|
||||||
|
<b class="label">
|
||||||
|
{{ option.name }}
|
||||||
|
</b>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
option: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
},
|
||||||
|
isMobile: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
iconWrapperStyle() {
|
||||||
|
if (this.isMobile) {
|
||||||
|
return { 'margin-right': '6px' }
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
'margin-left': '5px',
|
||||||
|
'margin-right': '13px'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
textStyle() {
|
||||||
|
if (!this.isMobile) {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
return { 'font-size': '130%', 'margin': '7px' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style >
|
||||||
|
.svg-icon-wrapper {
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: 13px;
|
||||||
|
}
|
||||||
|
</style>
|
@ -32,7 +32,7 @@
|
|||||||
<el-form-item :label="$t('field.container.description')">
|
<el-form-item :label="$t('field.container.description')">
|
||||||
{{ fieldAttributes.description }}
|
{{ fieldAttributes.description }}
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('field.container.help')">
|
<el-form-item :label="$t('field.container.help')" style="word-break: normal">
|
||||||
{{ fieldAttributes.help }}
|
{{ fieldAttributes.help }}
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
@ -28,14 +28,7 @@
|
|||||||
@command="handleCommand"
|
@command="handleCommand"
|
||||||
@click="false"
|
@click="false"
|
||||||
>
|
>
|
||||||
<div style="display: flex;width: auto;">
|
<label-field :is-mandatory="metadata.required && isEmptyValue(valueField)" :label="metadata.name" :is-mobile="true" />
|
||||||
<span :style="metadata.required && isEmptyValue(valueField) ? 'border: aqua; color: #f34b4b' : 'border: aqua;'">
|
|
||||||
<span key="is-field-name">
|
|
||||||
<!-- label or name of field in mobile -->
|
|
||||||
{{ metadata.name }}
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<el-dropdown-menu slot="dropdown">
|
<el-dropdown-menu slot="dropdown">
|
||||||
<template
|
<template
|
||||||
v-for="(option, key) in optionsList"
|
v-for="(option, key) in optionsList"
|
||||||
@ -46,29 +39,7 @@
|
|||||||
:command="option"
|
:command="option"
|
||||||
divided
|
divided
|
||||||
>
|
>
|
||||||
<div class="contents">
|
<label-popover-option :option="option" :is-mobile="true" />
|
||||||
<div
|
|
||||||
v-if="option.svg"
|
|
||||||
key="icon-svg-mobile"
|
|
||||||
style="margin-right: 5%"
|
|
||||||
>
|
|
||||||
<svg-icon :icon-class="option.icon" style="margin-right: 5px;" />
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
v-else
|
|
||||||
key="icon-mobile"
|
|
||||||
style="margin-right: 5%;padding-top: 3%;"
|
|
||||||
>
|
|
||||||
<i :class="option.icon" style="font-weight: bolder;" />
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<span class="contents">
|
|
||||||
<b class="label">
|
|
||||||
{{ option.name }}
|
|
||||||
</b>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-dropdown-item>
|
</el-dropdown-item>
|
||||||
</template>
|
</template>
|
||||||
</el-dropdown-menu>
|
</el-dropdown-menu>
|
||||||
@ -88,14 +59,7 @@
|
|||||||
>
|
>
|
||||||
<el-submenu index="menu">
|
<el-submenu index="menu">
|
||||||
<template slot="title">
|
<template slot="title">
|
||||||
<div style="display: block;">
|
<label-field :is-mandatory="metadata.required && isEmptyValue(valueField)" :label="metadata.name" />
|
||||||
<span :style="metadata.required && isEmptyValue(valueField) ? 'border: aqua; color: #f34b4b' : 'border: aqua;'">
|
|
||||||
<span key="is-field-name">
|
|
||||||
<!-- label or name of field in desktop -->
|
|
||||||
{{ metadata.name }}
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
<el-menu-item
|
<el-menu-item
|
||||||
v-for="(option, key) in optionsList"
|
v-for="(option, key) in optionsList"
|
||||||
@ -115,29 +79,7 @@
|
|||||||
:field-value="valueField"
|
:field-value="valueField"
|
||||||
/>
|
/>
|
||||||
<el-button slot="reference" type="text" style="color: #606266;">
|
<el-button slot="reference" type="text" style="color: #606266;">
|
||||||
<div class="contents">
|
<label-popover-option :option="option" />
|
||||||
<div
|
|
||||||
v-if="option.svg"
|
|
||||||
key="icon-svg-desktop"
|
|
||||||
style="margin-right: 5%;; padding-left: 2%;"
|
|
||||||
>
|
|
||||||
<svg-icon :icon-class="option.icon" style="margin-right: 5px;" />
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
v-else
|
|
||||||
key="icon-desktop"
|
|
||||||
style="margin-right: 5%;padding-top: 3%;"
|
|
||||||
>
|
|
||||||
<i :class="option.icon" style="font-weight: bolder;" />
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<span class="contents">
|
|
||||||
<b class="label">
|
|
||||||
{{ option.name }}
|
|
||||||
</b>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
@ -158,10 +100,16 @@ import {
|
|||||||
documentStatusOptionItem, translateOptionItem,
|
documentStatusOptionItem, translateOptionItem,
|
||||||
zoomInOptionItem, calculatorOptionItem
|
zoomInOptionItem, calculatorOptionItem
|
||||||
} from '@/components/ADempiere/Field/FieldOptions/fieldOptionsList.js'
|
} from '@/components/ADempiere/Field/FieldOptions/fieldOptionsList.js'
|
||||||
|
import LabelField from './LabelField.vue'
|
||||||
|
import LabelPopoverOption from './LabelPopoverOption.vue'
|
||||||
import { recursiveTreeSearch } from '@/utils/ADempiere/valueUtils.js'
|
import { recursiveTreeSearch } from '@/utils/ADempiere/valueUtils.js'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'FieldOptions',
|
name: 'FieldOptions',
|
||||||
|
components: {
|
||||||
|
LabelField,
|
||||||
|
LabelPopoverOption
|
||||||
|
},
|
||||||
|
|
||||||
props: {
|
props: {
|
||||||
metadata: {
|
metadata: {
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
:ref="metadata.columnName"
|
:ref="metadata.columnName"
|
||||||
v-model="value"
|
v-model="value"
|
||||||
:filterable="!isMobile"
|
:filterable="!isMobile"
|
||||||
:placeholder="metadata.help"
|
:placeholder="metadata.placeholder"
|
||||||
:loading="isLoading"
|
:loading="isLoading"
|
||||||
value-key="id"
|
value-key="id"
|
||||||
:class="cssClassStyle"
|
:class="cssClassStyle"
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
multiple
|
multiple
|
||||||
filterable
|
filterable
|
||||||
allow-create
|
allow-create
|
||||||
:placeholder="metadata.help"
|
:placeholder="metadata.placeholder"
|
||||||
:class="'custom-field-select custom-field-select-multiple ' + metadata.cssClassName"
|
:class="'custom-field-select custom-field-select-multiple ' + metadata.cssClassName"
|
||||||
@change="preHandleChange"
|
@change="preHandleChange"
|
||||||
>
|
>
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
:rows="rows"
|
:rows="rows"
|
||||||
:class="cssClassStyle"
|
:class="cssClassStyle"
|
||||||
:type="typeTextBox"
|
:type="typeTextBox"
|
||||||
:placeholder="metadata.help"
|
:placeholder="metadata.placeholder"
|
||||||
:readonly="Boolean(metadata.readonly)"
|
:readonly="Boolean(metadata.readonly)"
|
||||||
:disabled="isDisabled"
|
:disabled="isDisabled"
|
||||||
:maxlength="maxLength"
|
:maxlength="maxLength"
|
||||||
@ -110,8 +110,11 @@ export default {
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style>
|
||||||
.custom-field-text {
|
.custom-field-text {
|
||||||
max-height: 34px;
|
max-height: 34px;
|
||||||
}
|
}
|
||||||
|
.el-textarea__inner {
|
||||||
|
resize: none !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -19,8 +19,7 @@
|
|||||||
<el-switch
|
<el-switch
|
||||||
:ref="metadata.columnName"
|
:ref="metadata.columnName"
|
||||||
v-model="value"
|
v-model="value"
|
||||||
:inactive-text="$t('components.switchInactiveText')"
|
:active-text="value ? $t('components.switchActiveText') : $t('components.switchInactiveText')"
|
||||||
:active-text="$t('components.switchActiveText')"
|
|
||||||
:class="cssClassStyle"
|
:class="cssClassStyle"
|
||||||
:true-value="true"
|
:true-value="true"
|
||||||
:false-value="false"
|
:false-value="false"
|
||||||
@ -66,6 +65,7 @@ export default {
|
|||||||
return convertStringToBoolean(value)
|
return convertStringToBoolean(value)
|
||||||
},
|
},
|
||||||
preHandleChange(value) {
|
preHandleChange(value) {
|
||||||
|
this.metadata.value = value
|
||||||
this.handleFieldChange({ value })
|
this.handleFieldChange({ value })
|
||||||
if (!this.metadata.inTable && !this.metadata.isAdvancedQuery) {
|
if (!this.metadata.inTable && !this.metadata.isAdvancedQuery) {
|
||||||
this.isReadOnlyForm(this.value)
|
this.isReadOnlyForm(this.value)
|
||||||
|
@ -24,11 +24,11 @@
|
|||||||
<el-col
|
<el-col
|
||||||
v-if="isDisplayed"
|
v-if="isDisplayed"
|
||||||
key="is-panel-template"
|
key="is-panel-template"
|
||||||
:xs="sizeFieldResponsive.xs"
|
:xs="24"
|
||||||
:sm="sizeFieldResponsive.sm"
|
:sm="12"
|
||||||
:md="sizeFieldResponsive.md"
|
:md="8"
|
||||||
:lg="sizeFieldResponsive.lg"
|
:lg="8"
|
||||||
:xl="sizeFieldResponsive.xl"
|
:xl="8"
|
||||||
:class="classField"
|
:class="classField"
|
||||||
>
|
>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@ -160,7 +160,6 @@ export default {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
return field
|
return field
|
||||||
// return () => import(`@/components/ADempiere/Field/${this.field.componentPath}`)
|
|
||||||
},
|
},
|
||||||
fieldAttributes() {
|
fieldAttributes() {
|
||||||
return {
|
return {
|
||||||
@ -173,7 +172,8 @@ export default {
|
|||||||
readonly: this.isReadOnly,
|
readonly: this.isReadOnly,
|
||||||
displayed: this.isDisplayed,
|
displayed: this.isDisplayed,
|
||||||
disabled: !this.field.isActive,
|
disabled: !this.field.isActive,
|
||||||
isSelectCreated: this.isSelectCreated
|
isSelectCreated: this.isSelectCreated,
|
||||||
|
placeholder: this.field.help ? this.field.help.slice(0, 40) + '...' : ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
isDisplayed() {
|
isDisplayed() {
|
||||||
@ -269,75 +269,6 @@ export default {
|
|||||||
}
|
}
|
||||||
return ''
|
return ''
|
||||||
},
|
},
|
||||||
sizeFieldResponsive() {
|
|
||||||
if (!this.isDisplayed) {
|
|
||||||
return DEFAULT_SIZE
|
|
||||||
}
|
|
||||||
|
|
||||||
let sizeField = {}
|
|
||||||
if (this.field.size) {
|
|
||||||
// set field size property
|
|
||||||
sizeField = this.field.size
|
|
||||||
}
|
|
||||||
if (this.isEmptyValue(sizeField)) {
|
|
||||||
// set default size
|
|
||||||
sizeField = DEFAULT_SIZE
|
|
||||||
}
|
|
||||||
|
|
||||||
const newSizes = {}
|
|
||||||
|
|
||||||
// in table set max width, used by browser result and tab children of window
|
|
||||||
if (this.inTable) {
|
|
||||||
newSizes.xs = 24
|
|
||||||
newSizes.sm = 24
|
|
||||||
newSizes.md = 24
|
|
||||||
newSizes.lg = 24
|
|
||||||
newSizes.xl = 24
|
|
||||||
return newSizes
|
|
||||||
}
|
|
||||||
if (this.isAdvancedQuery) {
|
|
||||||
newSizes.xs = 24
|
|
||||||
newSizes.sm = 24
|
|
||||||
newSizes.md = 12
|
|
||||||
newSizes.lg = 12
|
|
||||||
newSizes.xl = 12
|
|
||||||
return newSizes
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.isPanelWindow) {
|
|
||||||
// TODO: Add FieldYesNo and name.length > 12 || 14
|
|
||||||
if (this.field.componentPath === 'FieldTextLong') {
|
|
||||||
return sizeField
|
|
||||||
}
|
|
||||||
// two columns if is mobile or desktop and show record navigation
|
|
||||||
if (this.getWidth <= 768 || (this.getWidth >= 768 && this.field.isShowedRecordNavigation)) {
|
|
||||||
newSizes.xs = 12
|
|
||||||
newSizes.sm = 12
|
|
||||||
newSizes.md = 12
|
|
||||||
newSizes.lg = 12
|
|
||||||
newSizes.xl = 12
|
|
||||||
return newSizes
|
|
||||||
} else if (this.inGroup && this.getWidth >= 992) {
|
|
||||||
newSizes.xs = sizeField.xs
|
|
||||||
newSizes.sm = sizeField.sm * 2
|
|
||||||
if (this.getWidth <= 1199) {
|
|
||||||
newSizes.md = sizeField.md
|
|
||||||
} else {
|
|
||||||
newSizes.md = sizeField.md * 2
|
|
||||||
}
|
|
||||||
if (this.field.groupAssigned !== '') {
|
|
||||||
newSizes.lg = sizeField.lg * 2
|
|
||||||
newSizes.xl = sizeField.xl * 2
|
|
||||||
} else {
|
|
||||||
newSizes.lg = sizeField.lg
|
|
||||||
newSizes.xl = sizeField.xl
|
|
||||||
}
|
|
||||||
return newSizes
|
|
||||||
}
|
|
||||||
return sizeField
|
|
||||||
}
|
|
||||||
return sizeField
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
metadataField(value) {
|
metadataField(value) {
|
||||||
@ -382,6 +313,7 @@ export default {
|
|||||||
.el-form-item {
|
.el-form-item {
|
||||||
margin-bottom: 10px !important;
|
margin-bottom: 10px !important;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
|
// this.field.isShowedRecordNavigation
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -425,4 +357,10 @@ export default {
|
|||||||
.pre-formatted {
|
.pre-formatted {
|
||||||
white-space: pre;
|
white-space: pre;
|
||||||
}
|
}
|
||||||
|
.el-submenu__title {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.el-submenu .el-submenu__icon-arrow {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user