下拉列表column-select.vue组件内容:

<template>
    <div class="column-select-wrapper">
        <div v-show="!selectShow" class="column-text-container">
            {{modalLabel}}
        </div>
        <Select v-show="selectShow" label-in-value :value="initValue" @on-change="valCHange">
             <Option v-for="(item, index) in options" :key="index" :value="item[valueKey]">{{item[labelKey]}}</Option>
        </Select>
    </div>
</template>

<script type="text/ecmascript-6">
    /**
     * 表行select组件
     */
    export default {
        name: 'column-select',
        data() {
            return {
            }
        },
        props: {
            initValue: {
                type: [String, Number],
                default: ''
            },
            options: {
                type: Array,
                required: true
            },
            //0显示状态  1编辑状态
            status: {
                type: Number,
                default: 1
            },
            valueKey: {
                type: String,
                default: 'value'
            },
            labelKey: {
                type: String,
                default: 'label'
            }
        },
        computed: {
            selectShow() {
                return this.status === 1;
            },
            modelLabel() {
                let node = this.options.find((item) => {
                    return item[this.valueKey] === this.initValue;
                });
                if(node) {
                    return node[this.labelKey];
                } else {
                    return '';
                }
            }
        },
        methods: {
            valChange(selectOption) {
                if(selectOption) {
                    this.$emit('update', selectOption.value);
                }
            }
        }
    }
<script>

<style scoped lang="less">
    .column-select-wrapper {
        .column-text-container {
            height: .36rem;
            line-height: .36rem;
            width: 100%;
        }
        /deep/ .ivu-select {
            position: static;
        }
    }
</script>

调用column-select.vue文件的list.config.js文件内容(表格列表文件):

import columnSelect from './column-select';

export default (ctx) => {
    return {
            title: '序号',
            align: 'center',
            key: 'number'
        },{
            title: '列表',
            align: 'center',
            render(h, { row }) {
                return h(columnSelect, {
                    props: {
                        initValue: row.teamCode,
                        status: row.status,
                        options: ctx.list,
                        labelKey: 'teamName',
                        valueKey: 'teamCode'
                    },
                    on: {
                        update(teamCode) {
                            ctx.updateRow(row, 'teamCode', teamCOde);
                        }
                    }
                });
            }
        }
    ]
};

 

调用list.config.js文件的表格显示文件index.vue:

<template>
    <div class="list-container">
        <Table :columns="column" :data="listData" stripe />
    </div>
</template>

<script>
    import column from './list.config.js';
    export default {
        data() {
            return {
                teamTypeList: [{
                    teamCode: "1",
                    teamName: "aaa"
                },{
                    teamCode: "2",
                    teamName: "bbb"
                },{
                    teamCode: "3",
                    teamName: "ccc"
                },{
                    teamCode: "4",
                    teamName: "ddd"
                }],
                listData: [{
                    teamCode: '12',
                    teamName: 'qqq'
                }]
            }
        },
        methods: {
            //更新该行数据字段
            updateRow(row, key, value) {
                this.listData[row._index][key] = value;
            }
        }
    }
</script>

 

posted on 2018-10-23 11:24  minoz  阅读(2027)  评论(0编辑  收藏  举报