|
@@ -0,0 +1,293 @@
|
|
|
+<template>
|
|
|
+ <span class="select-component" style="display:inline-flex;width: 100%;">
|
|
|
+ <el-select
|
|
|
+ v-model="value"
|
|
|
+ size="small"
|
|
|
+ :placeholder="configuration.placeholder"
|
|
|
+ style="border-right: none;width: 100%"
|
|
|
+ :disabled="disabled?disabled:false"
|
|
|
+ :multiple="configuration.multiple?configuration.multiple:false"
|
|
|
+ :clearable="configuration.clearable?configuration.clearable:false"
|
|
|
+ :collapse-tags="configuration.collapseTags?configuration.collapseTags:false"
|
|
|
+ filterable
|
|
|
+ remote
|
|
|
+ @change="changeName"
|
|
|
+ :remote-method="remoteMethod"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in configuration.dicData.length !== 0?dicData.length !== 0?dicData:configuration.dicData:dicData"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.cname"
|
|
|
+ :value="item.id"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ <el-button slot="append" icon="el-icon-search" size="mini" @click="dialogVisible = true"
|
|
|
+ :disabled="disabled?disabled:false"></el-button>
|
|
|
+ <el-dialog
|
|
|
+ v-dialogdrag
|
|
|
+ title="导入费用"
|
|
|
+ :fullscreen="dialogFull"
|
|
|
+ :visible.sync="dialogVisible"
|
|
|
+ class="el-dialogDeep"
|
|
|
+ append-to-body
|
|
|
+ width="70%">
|
|
|
+ <template slot="title">
|
|
|
+ <span class="el-dialog__title">
|
|
|
+ <span style="display:inline-block;background-color: #3478f5;width:3px;height:20px;margin-right:5px; float: left;margin-top:2px"></span>
|
|
|
+ 导入费用
|
|
|
+ </span>
|
|
|
+ <div style="float: right" class="avue-crud__dialog__menu" @click="dialogFull? dialogFull=false: dialogFull=true">
|
|
|
+ <i class="el-icon-full-screen"></i>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <el-row style="height: 0">
|
|
|
+ <el-col :span="5">
|
|
|
+ <div class="box">
|
|
|
+ <el-scrollbar>
|
|
|
+ <basic-container>
|
|
|
+ <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick"/>
|
|
|
+ </basic-container>
|
|
|
+ </el-scrollbar>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="19">
|
|
|
+ <basic-container>
|
|
|
+ <avue-crud :option="option"
|
|
|
+ :data="dataList"
|
|
|
+ ref="crud"
|
|
|
+ v-model="form"
|
|
|
+ :page.sync="page"
|
|
|
+ :before-close="beforeClose"
|
|
|
+ @search-change="searchChange"
|
|
|
+ @search-reset="searchReset"
|
|
|
+ @refresh-change="refreshChange"
|
|
|
+ @selection-change="selectionChange"
|
|
|
+ @on-load="onLoad"
|
|
|
+ @tree-load="treeLoad">
|
|
|
+ </avue-crud>
|
|
|
+ </basic-container>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="dialogVisible = false">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="confirmSelection"
|
|
|
+ :disabled="configuration.multipleChoices === true?false:selection.length === 1?false:true">确 定</el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
+ </span>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+ import option from "./config/feeList.json";
|
|
|
+ import { getDeptLazyTree, customerList } from "@/api/basicData/basicFeesDesc";
|
|
|
+
|
|
|
+ export default {
|
|
|
+ name: "costBreakdown",
|
|
|
+ props: {
|
|
|
+ disabled: Boolean,
|
|
|
+ value: String,
|
|
|
+ configuration: Object,
|
|
|
+ },
|
|
|
+ model: {
|
|
|
+ prop: 'value',
|
|
|
+ event: 'returnBack'
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ dialogFull: false,
|
|
|
+ form: {},
|
|
|
+ dicData: [],
|
|
|
+ dialogVisible: false,
|
|
|
+ value: '',
|
|
|
+ option: option,
|
|
|
+ parentId: 0,
|
|
|
+ dataList: [],
|
|
|
+ selection: [],
|
|
|
+ treeOption: {
|
|
|
+ nodeKey: 'id',
|
|
|
+ lazy: true,
|
|
|
+ treeLoad: function (node, resolve) {
|
|
|
+ const parentId = (node.level === 0) ? 0 : node.data.id;
|
|
|
+ getDeptLazyTree(parentId).then(res => {
|
|
|
+ resolve(res.data.data.map(item => {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ leaf: !item.hasChildren
|
|
|
+ }
|
|
|
+ }))
|
|
|
+ });
|
|
|
+ },
|
|
|
+ addBtn: false,
|
|
|
+ menu: false,
|
|
|
+ size: 'small',
|
|
|
+ props: {
|
|
|
+ labelText: '标题',
|
|
|
+ label: 'title',
|
|
|
+ value: 'value',
|
|
|
+ children: 'children'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ page: {
|
|
|
+ pageSize: 10,
|
|
|
+ pagerCount: 5,
|
|
|
+ total: 0,
|
|
|
+ },
|
|
|
+ // 远程模糊查找loading
|
|
|
+ loading: false,
|
|
|
+ queryParams: {
|
|
|
+ size: 10,
|
|
|
+ current: 1
|
|
|
+ },
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ // this.option.searchShow = this.configuration.searchShow ? this.configuration.searchShow : false
|
|
|
+ this.remoteMethod()
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ changeName(){
|
|
|
+ this.$emit('returnBack', this.value)
|
|
|
+ },
|
|
|
+ //刷新触发
|
|
|
+ refreshChange() {
|
|
|
+ this.page = {
|
|
|
+ pageSize: 10,
|
|
|
+ pagerCount: 5,
|
|
|
+ total: 0,
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //确认导出触发
|
|
|
+ confirmSelection() {
|
|
|
+ this.dicData = []
|
|
|
+ if (this.configuration.multipleChoices === true) {
|
|
|
+ let value = []
|
|
|
+ for (let item in this.selection) {
|
|
|
+ this.dicData.push({id: this.selection[item].id, cname: this.selection[item].cname})
|
|
|
+ value.push(this.selection[item].id)
|
|
|
+ }
|
|
|
+ this.value = value
|
|
|
+ } else {
|
|
|
+ this.dicData.push({id: this.selection[0].id, cname: this.selection[0].cname})
|
|
|
+ this.value = this.selection[0].id
|
|
|
+ }
|
|
|
+ this.selection = []
|
|
|
+ this.$emit('returnBack', this.value)
|
|
|
+ this.dialogVisible = false
|
|
|
+ this.$emit('receiveList',this.dicData)
|
|
|
+ },
|
|
|
+ //选中触发
|
|
|
+ selectionChange(selection) {
|
|
|
+ this.selection = selection
|
|
|
+ },
|
|
|
+ nodeClick(data) {
|
|
|
+ this.treeDeptId = data.id;
|
|
|
+ this.page.currentPage = 1;
|
|
|
+ this.onLoad(this.page);
|
|
|
+ },
|
|
|
+ //查询全部
|
|
|
+ initData() {
|
|
|
+ customerList().then(res => {
|
|
|
+ const column = this.findObject(this.option.column, "parentId");
|
|
|
+ column.dicData = res.data.data.records;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //新增子项触发
|
|
|
+ handleAdd(row) {
|
|
|
+ this.parentId = row.id;
|
|
|
+ const column = this.findObject(this.option.column, "parentId");
|
|
|
+ column.value = row.id;
|
|
|
+ column.addDisabled = true;
|
|
|
+ this.$refs.crud.rowAdd();
|
|
|
+ },
|
|
|
+ //点击新增时触发
|
|
|
+ beforeClose(done) {
|
|
|
+ this.parentId = "";
|
|
|
+ const column = this.findObject(this.option.column, "parentId");
|
|
|
+ column.value = "";
|
|
|
+ column.addDisabled = false;
|
|
|
+ done();
|
|
|
+ },
|
|
|
+ //点击搜索按钮触发
|
|
|
+ searchChange(params, done) {
|
|
|
+ this.page.currentPage = 1;
|
|
|
+ this.onLoad(this.page, params);
|
|
|
+ done()
|
|
|
+ },
|
|
|
+ //搜索重置按钮触发
|
|
|
+ searchReset() {
|
|
|
+ this.treeDeptId = '';
|
|
|
+ this.onLoad(this.page);
|
|
|
+ },
|
|
|
+ onLoad(page, params = {parentId: 0}) {
|
|
|
+ let queryParams = Object.assign({}, params, {
|
|
|
+ size: page.pageSize,
|
|
|
+ current: page.currentPage,
|
|
|
+ feesTypeId: this.treeDeptId
|
|
|
+ })
|
|
|
+ customerList(queryParams).then(res => {
|
|
|
+ this.dataList = res.data.data.records
|
|
|
+ this.page.total = res.data.data.total
|
|
|
+ if (this.page.total) {
|
|
|
+ this.option.height = window.innerHeight - 500;
|
|
|
+ } else {
|
|
|
+ this.option.height = window.innerHeight - 200;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ //树桩列点击展开触发
|
|
|
+ treeLoad(tree, treeNode, resolve) {
|
|
|
+ const parentId = tree.id;
|
|
|
+ customerList({parentId: parentId}).then(res => {
|
|
|
+ resolve(res.data.data.records);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 远程模糊查找
|
|
|
+ remoteMethod(query) {
|
|
|
+ if (query) {
|
|
|
+ this.loading = true;
|
|
|
+ this.queryParams = {
|
|
|
+ size: 10,
|
|
|
+ current: 1,
|
|
|
+ cname: query
|
|
|
+ }
|
|
|
+ customerList(this.queryParams).then(res => {
|
|
|
+ this.dicData = res.data.data.records
|
|
|
+ this.loading = false;
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ this.loading = true
|
|
|
+ this.queryParams = {
|
|
|
+ size: 10,
|
|
|
+ current: 1
|
|
|
+ }
|
|
|
+ customerList(this.queryParams).then(res => {
|
|
|
+ this.dicData = []
|
|
|
+ this.configuration.dicData = this.configuration.dicData.concat(res.data.data.records)
|
|
|
+ // this.configuration.dicData = res.data.data.records
|
|
|
+ this.removeRepeat()
|
|
|
+ this.loading = false;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 去重
|
|
|
+ removeRepeat() {
|
|
|
+ let obj = []
|
|
|
+ this.configuration.dicData = this.configuration.dicData.reduce((current,next) => {
|
|
|
+ obj[next.id] ? '': obj[next.id] = true && current.push(next)
|
|
|
+ return current
|
|
|
+ }, [])
|
|
|
+ },
|
|
|
+ }
|
|
|
+ };
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped lang="scss">
|
|
|
+ .el-dialogDeep {
|
|
|
+ ::v-deep .el-dialog {
|
|
|
+ .el-dialog__body, .el-dialog__footer {
|
|
|
+ padding-bottom: 0 !important;
|
|
|
+ padding-top: 0 !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+</style>
|