1 changed files with 499 additions and 0 deletions
@ -0,0 +1,499 @@ |
|||||
|
<script> |
||||
|
import { |
||||
|
removeQueryHeaderDetail, |
||||
|
saveOrUpdateBatch, saveQueryHeaderDetail, |
||||
|
searchUserSettingList, |
||||
|
searchUserSettingRecording, |
||||
|
searchUserSettingRecordList, updateQueryHeaderDetail |
||||
|
} from "../../api/sift/queryUserSetting"; |
||||
|
|
||||
|
const saveHeader = { |
||||
|
menuId:null, |
||||
|
userId:null, |
||||
|
itemNo:null, |
||||
|
itemDesc:null, |
||||
|
caseSensitiveFlag:null, |
||||
|
} |
||||
|
export default { |
||||
|
name: "filterSearch", |
||||
|
props:{ |
||||
|
visible:{ |
||||
|
type:Boolean, |
||||
|
default:false |
||||
|
}, |
||||
|
title:{ |
||||
|
type:String, |
||||
|
default:'筛选条件' |
||||
|
} |
||||
|
}, |
||||
|
data(){ |
||||
|
return{ |
||||
|
loadingTableList:false, |
||||
|
showSettingTableList:[], |
||||
|
tableList:[],// 参数 |
||||
|
copyTableList:[],// 临时参数 |
||||
|
selectList:[],// 历史 |
||||
|
selectValue:null,// 历史 |
||||
|
showSetting:false,// 是否显示设置 |
||||
|
caseInsensitive:'N',//是否区分大小写 |
||||
|
control:0,//控制弹框 |
||||
|
selectVisible:false,//历史选择弹框 |
||||
|
saveHeader:{ |
||||
|
...saveHeader |
||||
|
}, |
||||
|
rules:{ |
||||
|
itemDesc: [ |
||||
|
{ required: true, message: '请输入描述', trigger: ['blur','change'] } |
||||
|
], |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
methods:{ |
||||
|
getTableList(){ |
||||
|
let params = { |
||||
|
menuId:this.$route.meta.menuId, |
||||
|
userId:this.$store.state.user.id |
||||
|
} |
||||
|
this.tableList = [] |
||||
|
this.copyTableList = [] |
||||
|
this.loadingTableList = true |
||||
|
searchUserSettingList(params).then(({data})=>{ |
||||
|
this.loadingTableList = false |
||||
|
if (data && data.code === 0){ |
||||
|
this.tableList = data.rows |
||||
|
this.copyTableList = JSON.parse(JSON.stringify(this.tableList.filter(e => e.visible === 'Y'))) |
||||
|
this.changeSelectTable(this.selectValue) |
||||
|
}else { |
||||
|
this.$message.warning(data.msg) |
||||
|
} |
||||
|
}).catch((error)=>{ |
||||
|
this.loadingTableList = false |
||||
|
this.$message.error(error) |
||||
|
}) |
||||
|
}, |
||||
|
getSelectList(){ |
||||
|
let params = { |
||||
|
menuId:this.$route.meta.menuId, |
||||
|
userId:this.$store.state.user.id |
||||
|
} |
||||
|
this.selectList = [] |
||||
|
searchUserSettingRecordList(params).then(({data})=>{ |
||||
|
if (data && data.code === 0){ |
||||
|
this.selectList = data.rows |
||||
|
console.log(this.selectList) |
||||
|
}else { |
||||
|
this.$message.warning(data.msg) |
||||
|
} |
||||
|
}).catch((error)=>{ |
||||
|
this.$message.error(error) |
||||
|
}) |
||||
|
}, |
||||
|
closeFilterTable(){ |
||||
|
this.$emit("update:visible",false) |
||||
|
}, |
||||
|
handleSetting(){ |
||||
|
if (this.showSetting){ |
||||
|
saveOrUpdateBatch(this.tableList).then(({data})=>{ |
||||
|
if (data && data.code === 0){ |
||||
|
this.getTableList() |
||||
|
this.showSetting = false |
||||
|
this.$message.success(data.msg) |
||||
|
}else { |
||||
|
this.$message.warning(data.msg) |
||||
|
} |
||||
|
}).catch((error)=>{ |
||||
|
this.$message.error(error) |
||||
|
}) |
||||
|
}else { |
||||
|
this.showSetting = true; |
||||
|
} |
||||
|
}, |
||||
|
selectRow(selection,row){ |
||||
|
if (row.visible === 'Y'){ |
||||
|
row.visible = 'N' |
||||
|
}else { |
||||
|
row.visible = 'Y' |
||||
|
} |
||||
|
}, |
||||
|
clearTableList(){ |
||||
|
if (this.showSetting){ |
||||
|
this.tableList = this.tableList.map(row=>{ |
||||
|
row.sortBy = ''; |
||||
|
row.symbol = ''; |
||||
|
row.formula = ''; |
||||
|
return row; |
||||
|
}) |
||||
|
}else { |
||||
|
this.selectValue = null; |
||||
|
this.caseInsensitive = 'N'; |
||||
|
this.copyTableList = this.copyTableList.map(row=>{ |
||||
|
row.sortBy = ''; |
||||
|
row.symbol = ''; |
||||
|
row.formula = ''; |
||||
|
return row; |
||||
|
}) |
||||
|
} |
||||
|
}, |
||||
|
cancelSetting(){ |
||||
|
this.tableList = JSON.parse(JSON.stringify(this.showSettingTableList)) |
||||
|
this.showSetting = false; |
||||
|
}, |
||||
|
searchTable(){ |
||||
|
let params = { |
||||
|
menuId:this.$route.meta.menuId, |
||||
|
userId:this.$store.state.user.id, |
||||
|
caseSensitiveFlag:this.caseInsensitive, |
||||
|
querySavedDetailList:this.copyTableList, |
||||
|
} |
||||
|
this.$emit("search",params); |
||||
|
}, |
||||
|
changeSelectTable(val){ |
||||
|
if (val && this.control !== val){ |
||||
|
let params = { |
||||
|
menuId:this.$route.meta.menuId, |
||||
|
userId:this.$store.state.user.id, |
||||
|
itemNo:val |
||||
|
} |
||||
|
this.selectList.forEach(item=>{ |
||||
|
if (item.itemNo === val){ |
||||
|
this.caseInsensitive = item.caseSensitiveFlag |
||||
|
} |
||||
|
}) |
||||
|
searchUserSettingRecording(params).then(({data})=>{ |
||||
|
if (data && data.code === 0){ |
||||
|
let rows = data.rows |
||||
|
rows.forEach((row)=>{ |
||||
|
if (this.showSetting){ |
||||
|
for (let i = 0; i < this.tableList.length; i++) { |
||||
|
let sift = this.tableList[i] |
||||
|
if (sift.menuId === row.menuId && sift.userId === row.userId && sift.fieldName === row.fieldName){ |
||||
|
sift.symbol = row.symbol |
||||
|
sift.formula = row.formula |
||||
|
sift.sortBy = row.sortBy |
||||
|
break |
||||
|
} |
||||
|
} |
||||
|
}else { |
||||
|
for (let i = 0; i < this.copyTableList.length; i++) { |
||||
|
let sift = this.copyTableList[i] |
||||
|
if (sift.menuId === row.menuId && sift.userId === row.userId && sift.fieldName === row.fieldName){ |
||||
|
sift.symbol = row.symbol |
||||
|
sift.formula = row.formula |
||||
|
sift.sortBy = row.sortBy |
||||
|
break |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
}) |
||||
|
}else { |
||||
|
this.$message.warning(data.msg) |
||||
|
} |
||||
|
}).catch((error)=>{ |
||||
|
this.$message.error(error) |
||||
|
}) |
||||
|
}else { |
||||
|
this.caseInsensitive = 'N' |
||||
|
this.copyTableList = this.tableList.filter(e => e.visible === 'Y') |
||||
|
} |
||||
|
}, |
||||
|
moveSetting(index,direction){ |
||||
|
let arr = [...this.tableList] |
||||
|
let temp = arr[index+direction] |
||||
|
console.log(temp) |
||||
|
arr[index+direction] = arr[index] |
||||
|
arr[index] = temp |
||||
|
this.tableList = arr |
||||
|
}, |
||||
|
clickRemoveRecord(itemNo){ |
||||
|
let params = { |
||||
|
menuId:this.$route.meta.menuId, |
||||
|
userId:this.$store.state.user.id, |
||||
|
itemNo:itemNo |
||||
|
} |
||||
|
this.control = itemNo; |
||||
|
this.$nextTick(()=>{ |
||||
|
this.$refs.record.visible = true; |
||||
|
this.selectValue = ''; |
||||
|
}) |
||||
|
removeQueryHeaderDetail(params).then(({data})=>{ |
||||
|
if (data && data.code === 0){ |
||||
|
this.getSelectList() |
||||
|
this.$message.success(data.msg) |
||||
|
}else { |
||||
|
this.$message.warning(data.msg) |
||||
|
} |
||||
|
}).catch(error=>{ |
||||
|
this.$message.error(error) |
||||
|
}) |
||||
|
}, |
||||
|
visibleRecordChange(val){ |
||||
|
if (val === false){ |
||||
|
this.control = 0; |
||||
|
} |
||||
|
}, |
||||
|
updateHeaderRecord(){ |
||||
|
let desc = ""; |
||||
|
this.selectList.forEach(item=>{ |
||||
|
if (item.itemNo === this.selectValue){ |
||||
|
desc = item.itemDesc; |
||||
|
return |
||||
|
} |
||||
|
}) |
||||
|
const list = this.copyTableList.map((item)=>{ |
||||
|
item.itemNo = this.selectValue; |
||||
|
item.itemDesc = desc; |
||||
|
return item; |
||||
|
}) |
||||
|
let params = { |
||||
|
menuId:this.$route.meta.menuId, |
||||
|
userId:this.$store.state.user.id, |
||||
|
itemNo:this.selectValue, |
||||
|
caseSensitiveFlag:this.caseInsensitive, |
||||
|
dtsName:'ADOQResult', |
||||
|
querySavedDetailList:list, |
||||
|
} |
||||
|
updateQueryHeaderDetail(params).then(({data})=>{ |
||||
|
if (data && data.code === 0){ |
||||
|
this.$message.success(data.msg) |
||||
|
}else { |
||||
|
this.$message.warning(data.msg) |
||||
|
} |
||||
|
}).catch((error)=>{ |
||||
|
this.$message.error(error) |
||||
|
}) |
||||
|
}, |
||||
|
saveHeaderRecord(){ |
||||
|
this.$refs.saveForm.validate((valid,obj) => { |
||||
|
if (valid){ |
||||
|
let params = { |
||||
|
...this.saveHeader, |
||||
|
menuId:this.$route.meta.menuId, |
||||
|
userId:this.$store.state.user.id, |
||||
|
itemNo:this.selectValue, |
||||
|
caseSensitiveFlag:this.caseInsensitive, |
||||
|
dtsName:'ADOQResult', |
||||
|
querySavedDetailList:this.copyTableList, |
||||
|
} |
||||
|
saveQueryHeaderDetail(params).then(({data})=>{ |
||||
|
if (data && data.code === 0){ |
||||
|
this.getSelectList(); |
||||
|
this.selectVisible = false |
||||
|
this.$message.success(data.msg) |
||||
|
}else { |
||||
|
this.$message.warning(data.msg) |
||||
|
} |
||||
|
}).catch((error)=>{ |
||||
|
this.$message.error(error) |
||||
|
}) |
||||
|
}else { |
||||
|
Object.keys(obj).forEach(key=>{ |
||||
|
this.$message.warning(obj[key][0].message) |
||||
|
}) |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
handleSave(){ |
||||
|
if (!this.selectValue){ |
||||
|
this.selectVisible = true; |
||||
|
}else if (this.selectValue === 1){ |
||||
|
this.$message.warning('无法修改上一次查询') |
||||
|
}else { |
||||
|
this.updateHeaderRecord(); |
||||
|
} |
||||
|
}, |
||||
|
closeSaveHeader(){ |
||||
|
this.saveHeader = { |
||||
|
...saveHeader |
||||
|
} |
||||
|
this.$refs.saveForm.resetFields(); |
||||
|
}, |
||||
|
openFilterTable(){ |
||||
|
if (this.$route.meta && this.$route.meta.menuId){ |
||||
|
this.getTableList() |
||||
|
this.getSelectList() |
||||
|
} |
||||
|
}, |
||||
|
beforeCloseFilterTable(done){ |
||||
|
if (!this.showSetting){ |
||||
|
done() |
||||
|
}else { |
||||
|
this.$confirm('当前有设置未保存,是否确认关闭?').then(() => { |
||||
|
this.cancelSetting(); |
||||
|
done() |
||||
|
}).catch(() => { |
||||
|
|
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
watch:{ |
||||
|
showSetting(newVal,oldVal){ |
||||
|
if (newVal === true){ |
||||
|
this.showSettingTableList = JSON.parse(JSON.stringify(this.tableList)) |
||||
|
}else { |
||||
|
this.showSettingTableList = [] |
||||
|
} |
||||
|
}, |
||||
|
tableList(newVal,oldVal){ |
||||
|
this.$nextTick(()=>{ |
||||
|
this.tableList.forEach(row=>{ |
||||
|
this.$refs.settingTable.toggleRowSelection(row,row.visible === 'Y') |
||||
|
}) |
||||
|
}) |
||||
|
} |
||||
|
}, |
||||
|
created() { |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<template> |
||||
|
<div> |
||||
|
<el-dialog :title="title" v-drag :visible.sync="visible" width="750px" :before-close="beforeCloseFilterTable" @open="openFilterTable" @close="closeFilterTable" append-to-body> |
||||
|
<div> |
||||
|
<el-select ref="record" v-model="selectValue" @visible-change="visibleRecordChange" style="width: 30%" @change="changeSelectTable" clearable filterable placeholder="请选择"> |
||||
|
<el-option |
||||
|
v-for="item in selectList" |
||||
|
:key="item.itemNo" |
||||
|
:label="item.itemDesc" |
||||
|
:value="item.itemNo"> |
||||
|
<span style="float: left">{{ item.itemDesc }}</span> |
||||
|
<span style="float:right;" v-if="item.itemNo > 1"> |
||||
|
<el-button @click="clickRemoveRecord(item.itemNo)" style="padding: 2px" plain circle size="mini" icon="el-icon-close"></el-button> |
||||
|
</span> |
||||
|
</el-option> |
||||
|
</el-select> |
||||
|
<div style="float: right;margin-right: 15%;width: 200px" > |
||||
|
<span style="float:right;"> |
||||
|
<el-button type="primary" plain @click="handleSave">保存</el-button> |
||||
|
</span> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div style="display: flex;gap: 5px"> |
||||
|
<div style="width: 85%;height: 400px" v-loading="loadingTableList" element-loading-text="加载中"> |
||||
|
<el-table :data="tableList" @select="selectRow" ref="settingTable" border height="100%" v-show="showSetting"> |
||||
|
<el-table-column |
||||
|
type="selection" |
||||
|
width="40" align="center"> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="操作" align="left" header-align="center" width="65" > |
||||
|
<template slot-scope="{row,$index}"> |
||||
|
<el-link style="cursor:pointer;" @click="moveSetting($index,-1)" v-if="$index !== 0">上移</el-link> |
||||
|
<el-link style="cursor:pointer;" @click="moveSetting($index,1)" v-if="$index !== tableList.length-1">下移</el-link> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="属性名称" align="left" header-align="center" show-overflow-tooltip width="120" prop="fieldCaption"></el-table-column> |
||||
|
<el-table-column label="条件" align="center" width="240"> |
||||
|
<template slot-scope="{row,$index}"> |
||||
|
<el-input v-model="row.formula" clearable> |
||||
|
<el-select slot="prepend" clearable v-model="row.symbol" style="width: 100px;cursor:pointer;"> |
||||
|
<el-option value="eq" label="等于"></el-option> |
||||
|
<el-option value="gt" label="大于"></el-option> |
||||
|
<el-option value="ge" label="大于等于"></el-option> |
||||
|
<el-option value="lt" label="小于"></el-option> |
||||
|
<el-option value="le" label="小于等于"></el-option> |
||||
|
<el-option value="between" label="之间"></el-option> |
||||
|
<el-option value="in" label="或者"></el-option> |
||||
|
<el-option value="ne" label="不等于"></el-option> |
||||
|
<el-option value="like" label="LIKE"></el-option> |
||||
|
</el-select> |
||||
|
</el-input> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="排序" align="center" prop="sortBy" show-overflow-tooltip width="80"> |
||||
|
<template slot-scope="{row,$index}"> |
||||
|
<el-select v-model="row.sortBy" clearable style="width: 100%"> |
||||
|
<el-option value="asc" label="升序"></el-option> |
||||
|
<el-option value="desc" label="降序"></el-option> |
||||
|
</el-select> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="次序" align="center" prop="orderSeq" width="60"> |
||||
|
<template slot-scope="{row,$index}"> |
||||
|
<el-input-number v-model="row.orderSeq" clearable style="width: 100%;" :controls="false"></el-input-number> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="数据库字段" align="center" prop="originalField" show-overflow-tooltip width="120"></el-table-column> |
||||
|
</el-table> |
||||
|
|
||||
|
<el-table :data="copyTableList" border height="100%" v-show="!showSetting"> |
||||
|
<el-table-column label="属性名称" align="left" header-align="center" show-overflow-tooltip width="120" prop="fieldCaption"></el-table-column> |
||||
|
<el-table-column label="条件" align="center" header-align="center" width="240"> |
||||
|
<template slot-scope="{row,$index}"> |
||||
|
<el-input v-model="row.formula" clearable> |
||||
|
<el-select slot="prepend" clearable v-model="row.symbol" style="width: 80px;cursor:pointer;"> |
||||
|
<el-option value="eq" label="等于"></el-option> |
||||
|
<el-option value="gt" label="大于"></el-option> |
||||
|
<el-option value="ge" label="大于等于"></el-option> |
||||
|
<el-option value="lt" label="小于"></el-option> |
||||
|
<el-option value="le" label="小于等于"></el-option> |
||||
|
<el-option value="between" label="之间"></el-option> |
||||
|
<el-option value="in" label="或者"></el-option> |
||||
|
<el-option value="ne" label="不等于"></el-option> |
||||
|
<el-option value="like" label="LIKE"></el-option> |
||||
|
</el-select> |
||||
|
</el-input> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="排序" align="center" prop="sortBy" show-overflow-tooltip width="80"> |
||||
|
<template slot-scope="{row,$index}"> |
||||
|
<el-select v-model="row.sortBy" clearable style="width: 100%"> |
||||
|
<el-option value="asc" label="升序"></el-option> |
||||
|
<el-option value="desc" label="降序"></el-option> |
||||
|
</el-select> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="次序" align="center" prop="orderSeq" width="60"> |
||||
|
<template slot-scope="{row,$index}"> |
||||
|
<el-input-number v-model="row.orderSeq" clearable style="width: 100%;" :controls="false"></el-input-number> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="数据库字段" align="left" header-align="center" prop="originalField" show-overflow-tooltip width="120"></el-table-column> |
||||
|
</el-table> |
||||
|
</div> |
||||
|
<div style="width: 15%;"> |
||||
|
<div style="margin-bottom: 10px" v-if="!showSetting"> |
||||
|
<el-button type="primary" plain style="width: 80px;padding: 10px 25px" @click="searchTable">查询</el-button> |
||||
|
</div> |
||||
|
<div style="margin: 10px 0;" :style="{marginTop: !showSetting ? '10px' : '0'}"> |
||||
|
<el-button type="primary" style="width: 80px;padding: 10px 25px" @click="getTableList">刷新</el-button> |
||||
|
</div> |
||||
|
<div style="margin: 10px 0;" > |
||||
|
<el-button type="primary" style="width: 80px;padding: 10px 25px" @click="clearTableList">清除</el-button> |
||||
|
</div> |
||||
|
<div style="margin: 10px 0;"> |
||||
|
<el-button type="primary" style="width: 80px;padding: 10px 25px;" @click="handleSetting">{{ !showSetting?"设置":"保存" }}</el-button> |
||||
|
</div> |
||||
|
<div style="margin: 10px 0;" v-if="showSetting"> |
||||
|
<el-button type="primary" style="width: 80px;padding: 10px 25px" @click="cancelSetting">取消</el-button> |
||||
|
</div> |
||||
|
<div v-if="!showSetting"> |
||||
|
<el-checkbox v-model="caseInsensitive" :true-label="'Y'" :false-label="'N'">不区分大小写</el-checkbox> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div slot="footer"></div> |
||||
|
</el-dialog> |
||||
|
|
||||
|
<el-dialog title="条件名称" v-drag @close="closeSaveHeader" :visible.sync="selectVisible" width="300px" append-to-body> |
||||
|
<el-form label-position="top" ref="saveForm" :rules="rules" :model="saveHeader"> |
||||
|
<el-form-item label="描述" prop="itemDesc" :show-message="false"> |
||||
|
<el-input v-model="saveHeader.itemDesc"></el-input> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<div slot="footer" class="dialog-footer"> |
||||
|
<el-button type="primary" @click="saveHeaderRecord">确定</el-button> |
||||
|
<el-button @click="selectVisible = false">取消</el-button> |
||||
|
</div> |
||||
|
</el-dialog> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<style scoped> |
||||
|
/deep/ .el-table .cell{ |
||||
|
height: auto; |
||||
|
} |
||||
|
</style> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue