@ -13,21 +13,136 @@
< header -content :auths ="auths_auth_mixin" >
< template # search >
< div style = "display: flex" >
< Select clearable v-model ="select.filter[2].value" placeholder="请选择类型" style="width: 140px;" @on-change="e => !e ? select.filter[2].value = '' : ''" >
< Option v-for ="item in Array.from(types)" :value="item[0]" > {{ item [ 1 ] }} < / Option >
< / Select >
< Select clearable v-model ="select.filter[1].value" placeholder="请选择范围" style="width: 140px;margin-left: 6px;" @on-change="e => !e ? select.filter[1].value = '' : ''" >
< Select clearable v-model ="select.filter[0].value" placeholder="请选择范围" style="width: 140px;margin-left: 6px;" >
< Option v-for ="item in Array.from(areas)" :value="item[0]" > {{ item [ 1 ] }} < / Option >
< / Select >
< Input clearable v -model = " select.filter [ 0 ] .value " placeholder = "关键词" style = "width: 140px;margin-left: 6px;" / >
< Button
style = "margin-left: 10px"
type = "primary"
@ click = "$refs['xyTable'].getTableData(true)"
> 查询 < / B u t t o n
>
< xy -selectors
style = "margin-left: 10px"
@ reset = "reset"
@ search = "$refs['xyTable'].getTableData(true)"
>
< template >
< div class = "select" >
< div
class = "select__item"
v - for = "(item, index) in select.filter"
: key = "`${item.value}-${index}`"
>
< p > 条件 { { index + 1 } } < / p >
< Select
v - model = "item.key"
style = "width: 100px"
placeholder = "搜索条目"
>
< Option
v - for = "item in form"
: key = "item.id"
: value = "item.field"
> { { item . name } } < / O p t i o n
>
< / Select >
< Select
v - model = "item.op"
style = "width: 100px; margin-left: 10px"
placeholder = "搜索条件"
>
< Option
v - for = "item in op"
: key = "item.value"
: value = "item.value"
> { { item . label } } < / O p t i o n
>
< / Select >
< template
v - if = "
item . op !== 'range' && ! columnArrTest ( item . key )
"
>
< Input
v - model = "item.value"
style = "width: 150px; margin-left: 10px"
placeholder = "请填写关键词"
/ >
< / template >
< template
v - else - if = "
item . op !== 'range' && columnArrTest ( item . key )
"
>
< Select
v - model = "item.value"
style = "width: 150px; margin-left: 10px"
placeholder = "请选择关键词"
>
< Option
v - for = "item in getColumnParams(item.key)"
: key = "item.id"
: value = "
getColumnField ( item . key ) . _relations
? item [
getColumnField ( item . key ) . _relations
. foreign _key
]
: item . value
"
> { {
item . key ||
item . value ||
item . name ||
item . no ||
item . mingcheng ||
item . id
} } < / O p t i o n
>
< / Select >
< / template >
< template v-else >
< Input
: value = "item.value.split(',')[0]"
style = "width: 150px; margin-left: 10px"
placeholder = "范围开始关键词"
@ input = "(e) => inputStartHandler(e, item)"
/ >
< span style = "margin-left: 10px" > 至 < / span >
< Input
: value = "item.value.split(',')[1]"
style = "width: 150px; margin-left: 10px"
placeholder = "范围结束关键词"
@ input = "(e) => inputEndHandler(e, item)"
/ >
< / template >
< el -button
v - if = "index !== 0"
size = "small"
type = "danger"
icon = "el-icon-delete"
circle
style = "margin-left: 10px"
@ click = "select.filter.splice(index, 1)"
> < / e l - b u t t o n >
< / div >
< / div >
< div class = "add-btn" >
< el -button
size = "small"
type = "primary"
icon = "el-icon-plus"
circle
@ click = "
select . filter . push ( { key : '' , op : '' , value : '' } )
"
> < / e l - b u t t o n >
< span > 新增一条 < / span >
< / div >
< / template >
< / x y - s e l e c t o r s >
< / div >
< / template >
< template # create >
@ -83,6 +198,7 @@
$refs [ 'dialog' ] . show ( ) ;
}
"
@ loaded = "adjustAlignment"
>
< template # callback = "{ row }" >
< Button
@ -127,13 +243,19 @@
: form - info = "form"
ref = "drawer"
> < / drawer >
< imports
: table - name = "customForm.tableName"
: form - info = "form"
ref = "imports"
@ refresh = "$refs['xyTable'].getTableData()"
> < / imports >
< callback ref = "callback" > < / callback >
< / div >
< / template >
< script >
import { index as fieldIndex , show as fieldShow } from "@/api/system/customFormField" ;
import { index as fieldIndex , show as fieldShow } from "@/api/system/customFormField" ;
import { authMixin } from "@/mixin/authMixin" ;
import { index , destroy , save } from "@/api/system/baseForm" ;
import { op } from "@/const/op" ;
@ -148,6 +270,7 @@ import dialoger from "@/views/component/dialog.vue";
import LxHeader from "@/components/LxHeader/index.vue" ;
import headerContent from "@/components/LxHeader/XyContent.vue" ;
import drawer from "@/views/component/drawer.vue" ;
import imports from "@/views/component/imports.vue" ;
import callback from "@/views/order/component/callback.vue" ;
import { deepCopy } from "@/utils" ;
export default {
@ -156,6 +279,7 @@ export default {
dialoger ,
headerContent ,
drawer ,
imports ,
callback ,
} ,
mixins : [ authMixin ] ,
@ -164,29 +288,21 @@ export default {
} ,
data ( ) {
return {
areas : new Map ( ) ,
firstAdjustTable : true ,
op ,
select : {
table _name : "" ,
filter : [
{
key : "name" ,
op : "like" ,
value : "" ,
} ,
{
key : "area" ,
op : "eq" ,
value : "" ,
} ,
{
key : "type" ,
op : "eq" ,
value : "" ,
}
] ,
} ,
types : new Map ( ) ,
areas : new Map ( ) ,
selectQuery : [ ] ,
form : [ ] ,
table : [ ] ,
@ -197,6 +313,16 @@ export default {
} ;
} ,
methods : {
async getArea ( ) {
const obj = ( await fieldShow ( { id : 4 } , false ) ) ? . select _item ;
if ( obj && typeof obj === "object" ) {
let keys = Object . keys ( obj ) ;
if ( keys . length > 0 ) {
this . areas = new Map ( keys . map ( ( key ) => [ /^\d*$/ . test ( obj [ key ] ) ? Number ( obj [ key ] ) : obj [ key ] , key ] ) ) ;
}
}
} ,
setTransferStatus ( status , row ) {
let copyRow = deepCopy ( row ) ;
@ -437,14 +563,13 @@ export default {
}
}
let alignLeft = [ ] ;
this . table . push (
Object . assign (
{
prop : i . field ,
label : i . name ,
width : i . width ,
align : alignLeft . find ( ( m ) => m === i . field ) ? "left" : "center" ,
align : "center" ,
fixed : i . is _fixed ,
} ,
linkOb
@ -458,25 +583,34 @@ export default {
} ) ;
} ,
async getArea ( ) {
const obj = ( await fieldShow ( { id : 4 } , false ) ) ? . select _item ;
if ( obj && typeof obj === "object" ) {
let keys = Object . keys ( obj ) ;
if ( keys . length > 0 ) {
this . areas = new Map ( keys . map ( ( key ) => [ /^\d*$/ . test ( obj [ key ] ) ? Number ( obj [ key ] ) : obj [ key ] , key ] ) ) ;
}
}
} ,
async getType ( ) {
const obj = ( await fieldShow ( { id : 1 } , false ) ) ? . select _item ;
if ( obj && typeof obj === "object" ) {
let keys = Object . keys ( obj ) ;
if ( keys . length > 0 ) {
this . types = new Map ( keys . map ( ( key ) => [ /^\d*$/ . test ( obj [ key ] ) ? Number ( obj [ key ] ) : obj [ key ] , key ] ) ) ;
}
adjustAlignment ( ) {
if ( this . firstAdjustTable ) {
const data = this . $refs [ 'xyTable' ] . getListData ( ) ;
if ( data . length === 0 ) return ;
this . form . filter ( i => i . list _show ) . forEach ( ( i ) => {
let lengthTemp ;
let temp = 0 ;
while ( ! lengthTemp || temp < data . length ) {
lengthTemp = data [ temp ] [ i . field ] ? . length ? ? 0 ;
temp ++ ;
}
for ( let j = 0 ; j < data . length ; j ++ ) {
if ( /^-?\d+\.\d+/ . test ( data [ j ] [ i . field ] ) ) {
this . table . find ( a => a . prop === i . field ) . align = 'right' ;
return
}
if ( Math . abs ( lengthTemp - ( data [ j ] [ i . field ] ? . length ) ? ? 0 ) > 4 ) {
this . table . find ( a => a . prop === i . field ) . align = 'left' ;
return
}
}
} )
this . $nextTick ( ( ) => {
this . $refs [ 'xyTable' ] . doLayout ( ) ;
this . firstAdjustTable = false ;
} )
}
} ,
}
} ,
computed : {
@ -513,9 +647,8 @@ export default {
} ,
} ,
created ( ) {
this . getType ( ) ;
this . getArea ( ) ;
this . getFormDetail ( ) ;
this . getArea ( ) ;
} ,
} ;
< / script >