parent
d327299fa5
commit
4c9e833d7a
12 changed files with 273 additions and 50 deletions
File diff suppressed because one or more lines are too long
@ -0,0 +1,146 @@ |
||||
<template> |
||||
<el-dialog ref="wf-dialog" |
||||
custom-class="wf-dialog" |
||||
:visible.sync="visible" |
||||
title="表单搜索条件" |
||||
width="60%" |
||||
append-to-body |
||||
v-dialogdrag> |
||||
<avue-form v-model="form" |
||||
:option="option" |
||||
@submit="handleSubmit"></avue-form> |
||||
</el-dialog> |
||||
</template> |
||||
|
||||
<script> |
||||
export default { |
||||
name: 'wf-search', |
||||
props: { |
||||
value: Array, |
||||
default: () => { |
||||
return [] |
||||
} |
||||
}, |
||||
watch: { |
||||
value: { |
||||
handler(val) { |
||||
if (val) { |
||||
const arr = [] |
||||
this.deepClone(val).split(',').forEach(s => { |
||||
const row = s.split(":") |
||||
arr.push({ |
||||
column: row[0], |
||||
condition: row[1], |
||||
value: row[2] |
||||
}) |
||||
}) |
||||
this.form.search = arr |
||||
} |
||||
}, |
||||
immediate: true |
||||
} |
||||
}, |
||||
data() { |
||||
return { |
||||
visible: false, |
||||
form: {}, |
||||
option: { |
||||
border: true, |
||||
submitText: '确定', |
||||
column: [ |
||||
{ |
||||
label: '', |
||||
labelWidth: 0, |
||||
span: 24, |
||||
prop: 'search', |
||||
type: 'dynamic', |
||||
children: { |
||||
align: 'center', |
||||
column: [ |
||||
{ |
||||
label: '字段', |
||||
prop: 'column' |
||||
}, |
||||
{ |
||||
label: '条件', |
||||
prop: 'condition', |
||||
type: 'select', |
||||
dicData: [{ |
||||
label: '等于', |
||||
value: 'equal' |
||||
}, { |
||||
label: '不等于', |
||||
value: 'notEqual' |
||||
}, { |
||||
label: '包含', |
||||
value: 'like' |
||||
}, { |
||||
label: '存在', |
||||
value: 'exists' |
||||
}, { |
||||
label: '不存在', |
||||
value: 'notExists' |
||||
}, { |
||||
label: '大于', |
||||
value: 'greaterThan' |
||||
}, { |
||||
label: '小于', |
||||
value: 'lessThan' |
||||
}, { |
||||
label: '大于等于', |
||||
value: 'greaterThanOrEqual' |
||||
}, { |
||||
label: '小于等于', |
||||
value: 'lessThanOrEqual' |
||||
}], |
||||
placeholder: '条件,存在/不存在无需填值', |
||||
change: ({value, row}) => { |
||||
if (['exists', 'notExists'].includes(value)) row.value = '' |
||||
} |
||||
}, |
||||
{ |
||||
label: '值', |
||||
prop: 'value' |
||||
} |
||||
] |
||||
} |
||||
} |
||||
] |
||||
} |
||||
} |
||||
}, |
||||
methods: { |
||||
handleSubmit(form, done) { |
||||
const { search } = form |
||||
if (search && search.length > 0) { |
||||
const arr = [] |
||||
search.forEach(s => { |
||||
const { column, condition, value } = s |
||||
if (column && (['exists', 'notExists'].includes(condition) || (condition && value))) arr.push(`${column}:${condition}:${value}`) |
||||
}) |
||||
this.$emit('input', arr.join(",")) |
||||
} |
||||
this.visible = false |
||||
done() |
||||
} |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style lang="scss"> |
||||
.wf-dialog { |
||||
display: flex; |
||||
flex-direction: column; |
||||
margin: 0 !important; |
||||
position: absolute; |
||||
top: 40%; |
||||
left: 50%; |
||||
transform: translate(-50%, -40%); |
||||
max-height: calc(100% - 30px); |
||||
max-width: calc(100% - 30px); |
||||
.el-dialog__body { |
||||
flex: 1; |
||||
overflow: auto; |
||||
} |
||||
} |
||||
</style> |
||||
Loading…
Reference in new issue