Merge branch 'dev' of github.com:dataease/dataease into dev

This commit is contained in:
taojinlong 2022-05-26 18:07:12 +08:00
commit 70bed25162
8 changed files with 77 additions and 273 deletions

View File

@ -14,6 +14,7 @@
v-model="labels"
v-popover:popover
:style="styles"
:collapse-tags="showNumber"
class="el-tree-select-input"
:disabled="disabled"
popper-class="select-option"
@ -77,7 +78,9 @@ export default {
type: Object,
// {}
default() {
return {}
return {
width: '100%'
}
}
},
//
@ -119,8 +122,10 @@ export default {
}
},
// el-tree Function(h, { node, data, store }) {}
// eslint-disable-next-line vue/require-default-prop
treeRenderFun: Function,
// el-tree Function(h, { value, data, node }) {}
// eslint-disable-next-line vue/require-default-prop
filterNodeMethod: Function,
/*
文本框参数几乎支持el-select所有的API<br>
@ -215,7 +220,8 @@ export default {
ids: [], // id
visible: false, // popover v-model
width: 150,
showParent: false
showParent: false,
showNumber: false
}
},
computed: {
@ -241,6 +247,9 @@ export default {
this.ids = val === '' ? [] : [val]
}
}
},
labels: function() {
this.setShowNumber()
}
},
created() {
@ -549,6 +558,22 @@ export default {
*/
filterFun(val) {
this.$refs.tree.filter(val)
},
setShowNumber() {
this.showNumber = false
this.$nextTick(() => {
if (!this.selectParams.multiple || !this.$refs.select || !this.$refs.select.$refs.tags) {
return
}
const kids = this.$refs.select.$refs.tags.children[0].children
let contentWidth = 0
kids.forEach(kid => {
contentWidth += kid.offsetWidth
})
this.showNumber = contentWidth > ((this.$refs.select.$refs.tags.clientWidth - 35) * 0.9)
})
}
}
}

View File

@ -13,7 +13,6 @@
<div
ref="deContentContainer"
class="condition-content"
:style="titleStyle"
:class="element.options.attrs.title ? '' : 'condition-content-default'"
>
<div class="condition-content-container">
@ -174,6 +173,7 @@ export default {
.condition-content {
overflow: auto hidden;
letter-spacing: 0px !important;
width: 100%;
}
.condition-content-container {
position: relative;

View File

@ -5,7 +5,6 @@
ref="deSelectTree"
v-model="value"
popover-class="test-class-wrap"
:is-single="isSingle"
:data="datas"
:select-params="selectParams"
:tree-params="treeParams"
@ -45,9 +44,8 @@ export default {
},
data() {
return {
showNumber: false,
selectOptionWidth: 0,
show: true,
selectOptionWidth: 0,
datas: [],
value: this.isSingle ? '' : [],
selectParams: {
@ -135,14 +133,17 @@ export default {
},
'element.options.attrs.multiple': function(value, old) {
if (typeof old === 'undefined' || value === old) return
if (!this.inDraw) {
this.value = value ? [] : null
this.element.options.value = ''
}
this.show = false
this.$nextTick(() => {
this.show = true
this.$nextTick(() => {
this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.datas)
})
})
}
@ -212,25 +213,14 @@ export default {
this.element.options.manualModify = true
}
this.setCondition()
this.showNumber = false
this.$nextTick(() => {
if (!this.element.options.attrs.multiple || !this.$refs.deSelect || !this.$refs.deSelect.$refs.tags) {
return
}
const kids = this.$refs.deSelect.$refs.tags.children[0].children
let contentWidth = 0
kids.forEach(kid => {
contentWidth += kid.offsetWidth
})
this.showNumber = contentWidth > ((this.$refs.deSelectTree.$refs.tags.clientWidth - 30) * 0.9)
})
},
setCondition() {
const val = this.formatFilterValue()
const param = {
component: this.element,
value: this.formatFilterValue(),
value: val,
operator: this.operator,
isTree: true
}
@ -267,7 +257,8 @@ export default {
return results
// return this.value
}
return this.value.split(',')
const result = this.value.split(',').map(v => v.replaceAll(SEPARATOR, ','))
return result
},
fillValueDerfault() {
@ -286,14 +277,6 @@ export default {
return datas.filter(item => !!item)
},
setOptionWidth(event) {
//
this.$nextTick(() => {
// this.selectOptionWidth = event.srcElement.offsetWidth + 'px'
this.selectOptionWidth = event.srcElement.parentElement.parentElement.offsetWidth + 'px'
})
},
/* 下面是树的渲染方法 */
_filterFun(value, data, node) {
@ -308,9 +291,9 @@ export default {
_searchFun(value) {
console.log(value, '<--_searchFun')
//
this.$refs.treeSelect.filterFun(value)
this.$refs.deSelectTree.filterFun(value)
//
// this.$refs.treeSelect.treeDataUpdateFun(treeData);
// this.$refs.deSelectTree.treeDataUpdateFun(treeData);
},
// render
_renderFun(h, { node, data, store }) {

View File

@ -88,7 +88,11 @@ class TextSelectTreeServiceImpl extends WidgetService {
const param = {
component: element,
value: !value ? [] : Array.isArray(value) ? value : value.toString().split(','),
operator: element.options.attrs.multiple ? 'in' : 'eq'
operator: element.options.attrs.multiple ? 'in' : 'eq',
isTree: true
}
if (param.value && param.value.length) {
param.value = param.value.map(val => val.replaceAll('-de-', ','))
}
return param
}

View File

@ -27,8 +27,19 @@ export const valueValid = condition => {
export const formatCondition = obj => {
const { component, value, operator, isTree } = obj
const fieldId = component.options.attrs.fieldId
let fieldId = component.options.attrs.fieldId
const viewIds = component.options.attrs.viewIds
if (isTree && !component.options.attrs.multiple && value && value.length) {
// 单选树
const val = value[0]
if (val) {
const len = val.split(',').length
if (len) {
fieldId = fieldId.split(',').slice(0, len).join(',')
}
}
}
const condition = new Condition(component.id, fieldId, operator, value, viewIds, isTree)
return condition
}

View File

@ -1191,27 +1191,27 @@ export const TYPE_CONFIGS = [
'tableItemBgColor',
'tableFontColor',
'alpha'
],
'size-selector': [
'tablePageMode',
'tablePageSize',
'tableTitleFontSize',
'tableItemFontSize',
'tableTitleHeight',
'tableItemHeight',
'tableColumnMode'
],
'title-selector': [
'show',
'title',
'fontSize',
'color',
'hPosition',
'vPosition',
'isItalic',
'isBolder'
]
},
'size-selector': [
'tablePageMode',
'tablePageSize',
'tableTitleFontSize',
'tableItemFontSize',
'tableTitleHeight',
'tableItemHeight',
'tableColumnMode'
],
'title-selector': [
'show',
'title',
'fontSize',
'color',
'hPosition',
'vPosition',
'isItalic',
'isBolder'
]
}
},
{

View File

@ -1,150 +0,0 @@
<!--
* @Author: dawdler
* @Date: 2020-12-26 11:52:05
* @Description: demo
* @LastModifiedBy: dawdler
-->
<template>
<el-tree-select
ref="treeSelect"
v-model="values"
popover-class="test-class-wrap"
:styles="styles"
:select-params="selectParams"
:tree-params="treeParams"
:filter-node-method="_filterFun"
:tree-render-fun="_renderFun"
@searchFun="_searchFun"
/>
</template>
<script>
import ElTreeSelect from '@/components/ElTreeSelect'
export default {
name: 'MyTreeSelect',
components: { ElTreeSelect },
props: {
params: Object,
isSingle: {
type: Boolean,
default() {
return false
}
}
},
data() {
return {
styles: {
width: '300px'
},
// value
values: this.isSingle ? '' : [],
selectParams: {
clearable: true,
placeholder: '请输入内容'
},
treeParams: {
clickParent: false,
filterable: true,
//
leafOnly: false,
includeHalfChecked: false,
'check-strictly': false,
'default-expand-all': true,
'expand-on-click-node': false,
'render-content': this._renderFun,
data: [],
props: {
children: 'children',
label: 'name',
rootId: '0',
disabled: 'disabled',
parentId: 'parentId',
value: 'id'
},
...this.params
}
}
},
watch: {},
created() {},
mounted() {
//
const data = []
const { label, children, parentId, value, rootId } = this.treeParams.props
for (let i = 0; i < 5; i++) {
const rootNode = {
[label]: `节点${i}`,
[parentId]: rootId,
[value]: i,
[children]: []
}
for (let a = 0; a < 5; a++) {
const subId = `${rootNode[value]}_${a}`
const subNode = {
[label]: `子节点${subId}`,
[parentId]: rootNode[value],
[value]: subId,
[children]: []
}
for (let b = 0; b < 5; b++) {
const endId = `${subId}_${b}`
const endNode = {
[label]: `末级节点${endId}`,
[parentId]: subNode[value],
[value]: endId,
[children]: []
}
subNode[children].push(endNode)
}
rootNode[children].push(subNode)
}
data.push(rootNode)
}
const myNode = {
[label]: '测试超长节点啊啊啊测试超长节点啊啊啊测试超长节点啊啊啊测试超长节点啊啊啊测试超长节点啊啊啊测试超长节点啊啊啊',
[parentId]: rootId,
[value]: 1000,
[children]: []
}
data.push(myNode)
this.$nextTick(() => {
this.$refs.treeSelect.treeDataUpdateFun(data)
})
},
methods: {
_filterFun(value, data, node) {
if (!value) return true
return data.id.toString().indexOf(value.toString()) !== -1
},
//
_nodeClickFun(data, node, vm) {
console.log('this _nodeClickFun', this.values, data, node)
},
//
_searchFun(value) {
console.log(value, '<--_searchFun')
//
this.$refs.treeSelect.filterFun(value)
//
// this.$refs.treeSelect.treeDataUpdateFun(treeData);
},
// render
_renderFun(h, { node, data, store }) {
const { props, clickParent } = this.treeParams
return (
<span class={['custom-tree-node', !clickParent && data[props.children] && data[props.children].length ? 'disabled' : null]}>
<span>{node.label}</span>
</span>
)
}
}
}
</script>
<style lang="less">
.disabled {
cursor: no-drop;
}
.custom-tree-node {
width: calc(100% - 40px);
}
</style>

View File

@ -1,69 +0,0 @@
<!--
* @moduleName: 测试el-tree-select
* @Author: dawdler
* @Date: 2018-12-19 14:03:03
* @LastModifiedBy: dawdler
-->
<template>
<div id="app111">
<el-form label-width="120px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="单选">
<MyTree :is-single="true" :params="{ clickParent: true, showParent: true }" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="多选">
<MyTree :params="{ clickParent: true, showParent: true }" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="弹框关闭调试">
<el-select v-model="test" multiple placeholder="请选择" @change="_selectChange">
<el-option v-for="item in testData" :key="item" :label="item" :value="item" />
</el-select>
<div>
测试焦点触发
<svg>
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</svg>
</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</template>
<script>
import MyTree from './MyTree'
export default {
name: 'App111',
components: { MyTree },
data() {
return {
test: '',
testData: ['test1', 'test2']
}
},
created() {},
mounted() {},
methods: {
//
_selectChange(val) {
console.log(val, '<-select change')
}
}
}
</script>
<style lang="less">
#app111 {
display: flex;
justify-content: space-between;
width: 100%;
}
.el-select {
width: 300px;
}
</style>