elementUI自定义查看详情组件

elementUI没有查看详情组件,每次都要自己写详情比较不方便

详情组件效果图,可以放弹出框,放页面当中

 声明seeData 要展示的顺序及类型

类型type的为selectList,将自动渲染成对应的数据。对于复杂的内容可以使用slot插槽来展示,span可以自定义一行展示的列数

 seeData:[
                   {
                title:"备案订单编号",
                key: "order_sn",
              }, {
                title:"鉴品名称",
                key: "treasure_name",
              },{
                title:"鉴定人姓名",
                key: "user_name",
              },{
                title:"鉴定人电话",
                key: "user_phone",
              },{
                title:"鉴定地址",
                key: "address_detail",
              },{
                title:"订单金额",
                key: "order_price",
              },{
                title:"使用优惠券",
                key: "coupon_id",
              },{
                title:"加急服务",
                key: "is_urgent",
                type: "select",
                selectList: [
                  { value: 0, label: "普通" },
                  { value: 1, label: "加急" },
                ]
              },{
                title:"鉴品描述",
                key: "treasure_description",
              },{
                title:"鉴品图片",
                slot: "img",
              },
   ]

 如下图独占一行span==24

 

接口返回的数据 赋值为 formValues

注意:seeform的key对应formValues对象的值,就可以了

 引用see组件,对于复杂的内容使用插槽来展示。

自己 import  see 组件

<see :list="seeData"  :formData.sync="formValues">
          <template v-slot:img>
              <div>
              <div v-viewer>
                <img :src="item" v-for="(item , i) in formValues.img_list.split(',')" :key="i"
                alt="" style="height:50px">
                </div>
              </div>
          
          </template>
       </see>

see组件 

span参数可以展示一行展示多少列,默认为一行两列对应数据,如果span为24时一行展示一列对应数据

<template>
    <div>
        <el-row>
            <el-col :span="item.span" v-for="(item,i) in seeList" :key="i" class="col">
                <div class="title">  {{item.title}}  </div>
                <div class="val">  
                    <template v-if="item.slot">
                        <slot :name="item.slot"></slot>
                    </template>
                    <template v-else>
                        {{item.value}}
                    </template>
                </div>
            </el-col>      
        </el-row>
    </div>
</template>

<script>
/**
 * @overview 自动渲染
 * @author <woods> [<2213127617@qq.com>]
 * @param {Array} list - 显示的名称
 * @param {Object} formData - 显示的值
 */
export default {
    props:{
        formData: {
            type: Object,
            default: () => {
                return {}
            }
        },
        list: {
            type: Array,
            default: () => []
        },
    },
    created(){
        console.log(this.formData)
    },
    computed:{
        seeList(){
            return this.list.reduce((acc, item, index) => {
                
                acc.push({
                    ...item,
                    span:item.span ? item.span : 12,
                    value:item.selectList ?  this.getSelectLabel(this.formData[item.key],item.selectList) : this.formData[item.key] ,
                     
                });
                return acc;
            }, []);
        }
    },
    data(){
        return {
             
        }
    },
    methods:{
        getSelectLabel(value,selectList){
         var list=   selectList.filter(item => item.value==value)
         return list.length>0 ? list[0].label : "列表无选项"
        }
    }
}
</script>

<style scoped lang="less">
.col{
    border: 1px solid #e6e9f0;
    height:55px;
    line-height: 55px;
    display: flex;
    
    div{
        padding-left:20px;
    }
    .title{
        min-width: 150px;
        background-color: #f5f5f5;
        color: #1F2E4D;
    }
    .val{
        flex: 1;
        border-left: 1px solid #e6e9f0;
        color: #3D4966;
    }
}
</style>

elementUI自定义查看详情组件

2.1版本

因为查看图片太常用了,所以升级了一下seeform组件。一般都是数组里有多个图片链接,或者单独的字符串图片链接。所以我做了个判断,还加了点击图片放大预览所有图片

*增加了type属性 如果是图片字段的话就type=“image”

<template>
    <div>
        <el-row>
            <el-col :span="item.span" v-for="(item,i) in seeList" :key="i" class="col">
                <div class="title">  {{item.title}}  </div>
                <div class="val">  
                    <template v-if="item.slot">
                        <slot :name="item.slot"></slot>
                    </template>
                    <template v-else> 
                        
                        <template v-if="item.type=='image'">
                            <el-image  style="height: 54px"  :src="valueChange(item.value)[0]" 
                                :preview-src-list="valueChange(item.value)">
                            </el-image>
                        </template>
                        <span v-else>{{item.value}}</span>
                    </template>
                </div>
            </el-col>      
        </el-row>
    </div>
</template>

<script>
/**
 * @overview 自动渲染
 * @author <woods> [<2213127617@qq.com>]
 * @param {Array} list - 显示的名称
 * @param {String} formData - 显示的值
 */
export default {
    props:{
        formData: {
            type: Object,
            default: () => {
                return {}
            }
        },
        list: {
            type: Array,
            default: () => []
        },
    },
    data(){
        return {
        }      
    },
    created(){
        console.log(this.formData)
    },
    computed:{
        seeList(){
            return this.list.reduce((acc, item, index) => {
                
                acc.push({
                    ...item,
                    span:item.span ? item.span : 12,
                    value:item.selectList ?  this.getSelectLabel(this.formData[item.key],item.selectList) : this.formData[item.key] ,
                    type:item.type ? item.type : "text",
                });
                return acc;
            }, []);
        }
    },
     
    methods:{
        getSelectLabel(value,selectList){
            var list=   selectList.filter(item => item.value==value)
            return list.length>0 ? list[0].label : "列表无选项"
        },
        valueChange(val){
            if (Array.isArray(val)){
                return val
            }else{
                return val.split(",")
            }             
        }
    }
}
</script>

<style scoped lang="less">
.col{
    border: 1px solid #e6e9f0;
    height:55px;
    line-height: 55px;
    display: flex;
    
    >div{
        padding-left:20px;
    }
    .title{
        min-width: 150px;
        background-color: #f5f5f5;
        color: #1F2E4D;
    }
    .val{
        flex: 1;
        border-left: 1px solid #e6e9f0;
        color: #3D4966;
    }
}
</style>

数据主要是这修改了

{
                title:"鉴品图片",
                type: "image",
                 key: "img",
              },
   ]

seeData:[
                   {
                title:"备案订单编号",
                key: "order_sn",
              }, {
                title:"鉴品名称",
                key: "treasure_name",
              },{
                title:"鉴定人姓名",
                key: "user_name",
              },{
                title:"鉴定人电话",
                key: "user_phone",
              },{
                title:"鉴定地址",
                key: "address_detail",
              },{
                title:"订单金额",
                key: "order_price",
              },{
                title:"使用优惠券",
                key: "coupon_id",
              },{
                title:"加急服务",
                key: "is_urgent",
                type: "select",
                selectList: [
                  { value: 0, label: "普通" },
                  { value: 1, label: "加急" },
                ]
              },{
                title:"鉴品描述",
                key: "treasure_description",
              },{
                title:"鉴品图片",
                type: "image",
                 key: "img",
              },
   ]

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三线码工

码字不易,有钱打赏,没打钱点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值