IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 动态form筛选配置 -> 正文阅读

[JavaScript知识库]动态form筛选配置

?调用

<search-com :searchList="searchList" :model="model"></search-com>

1. searchList:筛选数组

* type ? ? ? ? //筛选类型:Input,Select,DatePicker,MonthPicker

* params ? ? ? //传递的参数;

* label ? ? ? ?//筛选标题

* class ? ? ? ?//样式

* placeholder ?//placeholder

* api ? ? ? ? ?//接口中转proxy

* url ? ? ? ? ?//请求url

* list ? ? ? ? //api和url为空时,Select类型选择器传入的筛选数据

* itemkey ? ? ?//Select类型选择器的选中值;若为空,表示返回的数组

* itemlabel ? ?//Select类型选择器的展示值;若为空,表示返回的数组

searchCom.vue

<template>
  <div>
    <div v-for="(data,index) in searchList" :key="index">
      <el-form>
        <el-form-item :label="data.label?data.label:''">
          <component :is="'Tp' + data.type" :data="data" :model="model"></component>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>
<script>
import components from "./components.js";
import moment from 'moment';
export default {
  name: 'searchCom',
  components: { ...components },
  props: {
    searchList: {
      type: Array,
      required: true
    },
    model: Object
  },
  created() {
  }
}
</script>

components.js

import Tpinput from './components/input';
import TpselectWithConfig from './components/select';
import TpselectWithRemote from './components/selectAsyc';
import TpareaDate from './components/datePicker';
import TpMonthPicker from './components/monthPicker';
import TpTabs from './components/tabs';

export default {
    Tpinput, TpselectWithConfig, TpselectWithRemote, TpareaDate, TpMonthPicker,TpTabs
}

components

api

static async getcommon(type, url, params) {
        if (type == 'post') {
            return this.proxyPost(url, params)
        } else if (type == 'get') {
            return this.proxyGet(url, params)
        }
    }

selectAsyc>index.js

<template>
  <div>
    <el-select v-model="model[data.param]" filterable :placeholder="data.placeholder||'请选择'" :multiple="data.multiple" :remote="data.hasremote?true:false"
      :remote-method="remoteMethod" :loading="loading" v-if="data.itemkey&&data.itemlabel">
      <el-option v-for="(item,index) in selectList" :key="index" :label="item[data.itemlabel]" :value="item[data.itemkey]">
      </el-option>
    </el-select>
    <el-select v-model="model[data.param]" filterable :placeholder="data.placeholder||'请选择'" :multiple="data.multiple" :remote="data.hasremote?true:false"
      :remote-method="remoteMethod" :loading="loading" v-else>
      <el-option v-for="(item,index) in selectList" :key="index" :label="item" :value="item">
      </el-option>
    </el-select>
  </div>
</template>
<script>
import api from "../../api/api";
export default {
  props: {
    data: {
      type: Object,
      required: true
    },
    model: Object
  },
  data() {
    return {
      loading: false,
      selectList: [],
    }
  },
  async created() {
    if (!this.data.hasremote) {
      await this.getSelectList()
    }
  },
  methods: {
    async getSelectList() {
      try {
        let res = await api.getcommon(this.data.api.apitype, this.data.api.apipath, this.data.api.apiparam ? this.data.api.apiparam : null)
        if (res.code == 1) {
          this.selectList = res.data
        } else {
          this.selectList = []
        }
      } catch (err) {
        console.log(err)
      }
    },
    async remoteMethod(query) {
      if (query !== '') {
        let obj = {}
        obj[this.data.param] = query
        this.loading = true;
        const result = await api.getcommon(this.data.api.apitype, this.data.api.apipath, this.data.api.apiparam ? this.data.api.apiparam : null)
        this.loading = false;
        const { code, data } = result;
        if (code === '1') {
          this.selectList = data;
        }
      } else {
        this.selectList = [];
      }
    }
  }
}
</script>

input>index.vue

<template>
  <div>
    <el-input v-model="model[data.param]" :placeholder="data.placeholder||'请输入'+data.label" class="w150"></el-input>
  </div>
</template>
<script>
export default {
}
</script>
<script>
export default {
  props: {
    data: {
      type: Object,
      required: true
    },
    model: Object
  },
}
</script>

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:02:48  更:2022-09-04 01:07:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:45:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码