Просмотр исходного кода

修复首次回车查询刷新页面bug

cfort 2 лет назад
Родитель
Сommit
c473c6abcd

+ 16 - 17
src/business/platform/data/components/search-form/index.vue

@@ -8,6 +8,7 @@
         label-position="left"
         class="ibps-crud-search-form"
         size="mini"
+        @submit.native.prevent
         @keyup.enter.native.stop="handleEnter"
     >
         <template v-for="(item, index) in forms">
@@ -101,9 +102,9 @@
                     @keyup.enter.native.stop="handleEnter"
                 />
                 <!--
-         :placeholder="item.placeholder"
-         :picker-options="item.pickerOptions || {}"
-         -->
+                    :placeholder="item.placeholder"
+                    :picker-options="item.pickerOptions || {}"
+                -->
                 <el-date-picker
                     v-else-if="item.fieldType === 'monthrange' "
                     v-model="params[item.modelValue]"
@@ -205,7 +206,6 @@
                     :label-type="getLinkLabelType(item.field_options)"
                     :label-key="getLinkLabelKey(item.field_options)"
                 />
-
                 <!-- 地址-->
                 <ibps-address
                     v-else-if="item.fieldType === 'address'"
@@ -329,9 +329,9 @@ export default {
 
     },
     methods: {
-    /**
-     * 处理回车
-     */
+        /**
+         * 处理回车
+         */
         handleEnter () {
             this.$emit('search')
         },
@@ -342,8 +342,8 @@ export default {
             return this.fuzzyOps
         },
         /**
-     * 获取参数
-     */
+         * 获取参数
+         */
         getSearcFormData () {
             const { params, nameParams, datePrefix, format } = this
             const formattedForm = {}
@@ -362,8 +362,8 @@ export default {
             return formattedForm
         },
         /**
-     *重置表单
-     */
+         *重置表单
+        */
         resetSearchForm () {
             const { params, datePrefix } = this
             Object.keys(params).forEach(v => {
@@ -438,8 +438,8 @@ export default {
             return year + '-' + month
         },
         /**
-     * 获取的远程数据【下拉框】
-     */
+         * 获取的远程数据【下拉框】
+         */
         getRemoteData ({ fetch, dataKey, resultField, resultHandler }) {
             fetch().then(response => {
                 let result = response
@@ -481,8 +481,7 @@ export default {
 }
 </script>
 <style>
-  .el-form-item__label{
-    font-size: 12px !important;
-  }
-
+    .el-form-item__label{
+        font-size: 12px !important;
+    }
 </style>

+ 259 - 258
src/components/ibps-card-list/components/search-form/index.vue

@@ -1,100 +1,101 @@
 <template>
-  <el-form
-    v-if="forms"
-    ref="form"
-    :model="params"
-    width="30%"
-    :inline="inline"
-    :label-width="labelWidth ? (labelWidth + 'px') : ''"
-    class="ibps-crud-search-form"
-    @keyup.enter.native.stop="handleEnter"
-  >
-    <el-form-item
-      v-for="(item, index) in forms"
-      :key="index"
-      :prop="item.fieldType != 'daterange' ? item.prop : (datePrefix + index)"
-
-      :rules="item.rules || []"
-      :label-width="item.labelWidth ? (item.labelWidth + 'px') : ''"
-      class="search-form-item"
-      @submit.native.prevent
-    >
-      <template slot="label">
-        {{ item.label }}
-      </template>
-      <!-- 文本框-->
-      <el-input
-        v-if="item.fieldType === 'input' || item.fieldType === undefined"
-        v-model="params[item.modelValue]"
-        :size="item.size ? item.size : size"
-        :readonly="item.readonly"
-        :disabled="item.disabled"
-        :placeholder="item.placeholder?item.placeholder:'请输入'"
-        :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
-        clearable
-        @keyup.enter.native.stop="handleEnter"
-      />
-      <!-- 下拉框-->
-      <el-select
-        v-else-if="item.fieldType === 'select'"
-        v-model="params[item.modelValue]"
-        :size="item.size ? item.size : size"
-        :disabled="item.disabled"
-        :placeholder="item.placeholder?item.placeholder:'请选择'"
-        :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
-        clearable
-        @keyup.enter.native.stop="handleEnter"
-      >
-        <el-option
-          v-for="(option, optionIndex) in item.options"
-          :key="optionIndex + '_local'"
-          :value="(typeof option === 'object') ? option[item.valueKey || 'value'] : option"
-          :label="(typeof option === 'object') ? option[item.labelKey || 'label'] : option"
-        />
-        <el-option
-          v-for="(op, opIndex) in selectOptions[selectOptionPrefix + index]"
-          :key="opIndex + '_remote'"
-          :value="(typeof op === 'object') ? op[item.valueKey || 'value'] : op"
-          :label="(typeof op === 'object') ? op[item.labelKey || 'label'] : op"
-        />
-      </el-select>
-      <!-- 日期-->
-      <el-date-picker
-        v-else-if="item.fieldType === 'date'"
-        v-model="params[item.modelValue]"
-        :placeholder="item.placeholder"
-        :size="item.size ? item.size : size"
-        :disabled="item.disabled"
-        :readonly="item.readonly"
-        :editable="item.editable"
-        :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
-        :picker-options="item.pickerOptions || {}"
-        :type="item.dateType||'date'"
-        @keyup.enter.native.stop="handleEnter"
-      />
-      <!-- 日期范围-->
-      <el-date-picker
-        v-else-if="item.fieldType === 'daterange'"
-        v-model="params[item.modelValue]"
-        :size="item.size ? item.size : size"
-        :disabled="item.disabled"
-        :readonly="item.readonly"
-        :editable="item.editable"
-        :placeholder="item.placeholder?item.placeholder:'请选择'"
-        :start-placeholder="item.startPlaceholder?item.startPlaceholder:'请选择'"
-        :end-placeholder="item.endPlaceholder?item.endPlaceholder:'请选择'"
-        :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
-        :picker-options="item.pickerOptions || {}"
-        type="daterange"
-        @change="date => changeDate(date, item.prop[0], item.prop[1])"
+    <el-form
+        v-if="forms"
+        ref="form"
+        :model="params"
+        width="30%"
+        :inline="inline"
+        :label-width="labelWidth ? (labelWidth + 'px') : ''"
+        class="ibps-crud-search-form"
+        @submit.native.prevent
         @keyup.enter.native.stop="handleEnter"
-      />
-      <!-- 自定义slot-->
-      <template v-else-if="item.fieldType === 'slot'">
-        <slot :name="item.slotName" :item="item" />
-      </template>
-    </el-form-item>
-  </el-form>
+    >
+        <el-form-item
+            v-for="(item, index) in forms"
+            :key="index"
+            :prop="item.fieldType != 'daterange' ? item.prop : (datePrefix + index)"
+            :rules="item.rules || []"
+            :label-width="item.labelWidth ? (item.labelWidth + 'px') : ''"
+            class="search-form-item"
+            @submit.native.prevent
+        >
+            <template slot="label">
+                {{ item.label }}
+            </template>
+            <!-- 文本框-->
+            <el-input
+                v-if="item.fieldType === 'input' || item.fieldType === undefined"
+                v-model="params[item.modelValue]"
+                :size="item.size ? item.size : size"
+                :readonly="item.readonly"
+                :disabled="item.disabled"
+                :placeholder="item.placeholder?item.placeholder:'请输入'"
+                :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
+                clearable
+                @keyup.enter.native.stop="handleEnter"
+            />
+            <!-- 下拉框-->
+            <el-select
+                v-else-if="item.fieldType === 'select'"
+                v-model="params[item.modelValue]"
+                :size="item.size ? item.size : size"
+                :disabled="item.disabled"
+                :placeholder="item.placeholder?item.placeholder:'请选择'"
+                :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
+                clearable
+                @keyup.enter.native.stop="handleEnter"
+            >
+                <el-option
+                    v-for="(option, optionIndex) in item.options"
+                    :key="optionIndex + '_local'"
+                    :value="(typeof option === 'object') ? option[item.valueKey || 'value'] : option"
+                    :label="(typeof option === 'object') ? option[item.labelKey || 'label'] : option"
+                />
+                <el-option
+                    v-for="(op, opIndex) in selectOptions[selectOptionPrefix + index]"
+                    :key="opIndex + '_remote'"
+                    :value="(typeof op === 'object') ? op[item.valueKey || 'value'] : op"
+                    :label="(typeof op === 'object') ? op[item.labelKey || 'label'] : op"
+                />
+            </el-select>
+            <!-- 日期-->
+            <el-date-picker
+                v-else-if="item.fieldType === 'date'"
+                v-model="params[item.modelValue]"
+                :placeholder="item.placeholder"
+                :size="item.size ? item.size : size"
+                :disabled="item.disabled"
+                :readonly="item.readonly"
+                :editable="item.editable"
+                :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
+                :picker-options="item.pickerOptions || {}"
+                :type="item.dateType||'date'"
+                @keyup.enter.native.stop="handleEnter"
+            />
+            <!-- 日期范围-->
+            <el-date-picker
+                v-else-if="item.fieldType === 'daterange'"
+                v-model="params[item.modelValue]"
+                :size="item.size ? item.size : size"
+                :disabled="item.disabled"
+                :readonly="item.readonly"
+                :editable="item.editable"
+                :placeholder="item.placeholder?item.placeholder:'请选择'"
+                :start-placeholder="item.startPlaceholder?item.startPlaceholder:'请选择'"
+                :end-placeholder="item.endPlaceholder?item.endPlaceholder:'请选择'"
+                :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
+                :picker-options="item.pickerOptions || {}"
+                type="daterange"
+                unlink-panels
+                @change="date => changeDate(date, item.prop[0], item.prop[1])"
+                @keyup.enter.native.stop="handleEnter"
+            />
+            <!-- 自定义slot-->
+            <template v-else-if="item.fieldType === 'slot'">
+                <slot :name="item.slotName" :item="item" />
+            </template>
+        </el-form-item>
+    </el-form>
 </template>
 
 <script>
@@ -102,179 +103,179 @@ import { formProps } from './props.js'
 import request from '@/utils/request'
 
 export default {
-  name: 'ibps-search-form',
-  props: formProps,
-  data() {
-    const { forms, fuzzy } = this.$props
-    const datePrefix = 'daterange-prefix'
-    const selectOptionPrefix = 'select-option-prefix'
-    const dataObj = {
-      selectOptions: {}
-    }
-    const params = {}
-    const nameParams = {}
-    const format = {}
-    const fuzzyOps = {}
-
-    forms.forEach((v, i) => {
-      const propType = typeof v.prop
-      if (propType === 'string') {
-        v.modelValue = v.prop
-        params[v.prop] = v.value || ''
-        if (v.name) {
-          nameParams[v.prop] = v.name
+    name: 'ibps-search-form',
+    props: formProps,
+    data () {
+        const { forms, fuzzy } = this.$props
+        const datePrefix = 'daterange-prefix'
+        const selectOptionPrefix = 'select-option-prefix'
+        const dataObj = {
+            selectOptions: {}
         }
+        const params = {}
+        const nameParams = {}
+        const format = {}
+        const fuzzyOps = {}
 
-        fuzzyOps[v.prop] = v.fuzzy ? v.fuzzy : fuzzy
-        if (v.format) {
-          format[v.prop] = v.format
-        }
-      } else if (propType === 'object' && Object.prototype.toString.call(v.prop) === '[object Array]') {
-        v.prop.forEach((vv, j) => {
-          params[vv] = vv.value || ''
-          if (v.name) {
-            nameParams[vv] = v.name[j]
-          }
-          if (v.format) {
-            format[vv] = v.format
-          }
-          fuzzyOps[vv] = v.fuzzy ? v.fuzzy : fuzzy
+        forms.forEach((v, i) => {
+            const propType = typeof v.prop
+            if (propType === 'string') {
+                v.modelValue = v.prop
+                params[v.prop] = v.value || ''
+                if (v.name) {
+                    nameParams[v.prop] = v.name
+                }
+
+                fuzzyOps[v.prop] = v.fuzzy ? v.fuzzy : fuzzy
+                if (v.format) {
+                    format[v.prop] = v.format
+                }
+            } else if (propType === 'object' && Object.prototype.toString.call(v.prop) === '[object Array]') {
+                v.prop.forEach((vv, j) => {
+                    params[vv] = vv.value || ''
+                    if (v.name) {
+                        nameParams[vv] = v.name[j]
+                    }
+                    if (v.format) {
+                        format[vv] = v.format
+                    }
+                    fuzzyOps[vv] = v.fuzzy ? v.fuzzy : fuzzy
+                })
+            }
+            if (v.fieldType === 'daterange') {
+                params[datePrefix + i] = ''
+                v.modelValue = datePrefix + i
+            } else if (v.fieldType === 'select' && (v.selectFetch || v.selectUrl)) {
+                const dataKey = selectOptionPrefix + i
+                dataObj.selectOptions[dataKey] = []
+                if (!v.selectMethod) {
+                    v.selectMethod = 'get'
+                }
+                this.getRemoteData({
+                    fetch: v.selectFetch ? v.selectFetch : () => {
+                        const p = v.selectMethod.toLowerCase() === 'get'
+                            ? { params: v.selectParams } : v.selectParams
+                        return request({
+                            url: v.selectUrl,
+                            method: v.selectMethod,
+                            p
+                        })
+                    },
+                    dataKey,
+                    resultField: v.resultField || 'data',
+                    resultHandler: v.resultHandler
+                })
+            }
         })
-      }
-      if (v.fieldType === 'daterange') {
-        params[datePrefix + i] = ''
-        v.modelValue = datePrefix + i
-      } else if (v.fieldType === 'select' && (v.selectFetch || v.selectUrl)) {
-        const dataKey = selectOptionPrefix + i
-        dataObj.selectOptions[dataKey] = []
-        if (!v.selectMethod) {
-          v.selectMethod = 'get'
+        return {
+            params,
+            nameParams,
+            datePrefix,
+            selectOptionPrefix,
+            ...dataObj,
+            format,
+            fuzzyOps
         }
-        this.getRemoteData({
-          fetch: v.selectFetch ? v.selectFetch : () => {
-            const p = v.selectMethod.toLowerCase() === 'get'
-              ? { params: v.selectParams } : v.selectParams
-            return request({
-              url: v.selectUrl,
-              method: v.selectMethod,
-              p
-            })
-          },
-          dataKey,
-          resultField: v.resultField || 'data',
-          resultHandler: v.resultHandler
-        })
-      }
-    })
-    return {
-      params,
-      nameParams,
-      datePrefix,
-      selectOptionPrefix,
-      ...dataObj,
-      format,
-      fuzzyOps
-    }
-  },
-  computed: {
-    itemStyle() {
-      const { itemWidth } = this
-      if (itemWidth) {
-        return `width: ${itemWidth}px;`
-      }
-      return ''
-    }
-  },
-  methods: {
-    /**
-     * 处理回车
-     */
-    handleEnter() {
-      this.$emit('search')
-    },
-    isArray(value) {
-      return typeof value === 'object' && Object.prototype.toString.call(value) === '[object Array]'
-    },
-    getParamFuzzy() {
-      return this.fuzzyOps
     },
-    /**
-     * 获取参数
-     */
-    getParams(callback) {
-      this.$refs['form'].validate(valid => {
-        if (valid) {
-          const { params, nameParams, datePrefix, format } = this
-          const formattedForm = {}
-          Object.keys(params).forEach(v => {
-            if (v.indexOf(datePrefix) === -1) {
-              const val = format[v] ? format[v](params[v], v) : params[v]
-              if (this.$utils.isNotEmpty(val)) {
-                let key = v
-                if (nameParams[v]) {
-                  key = nameParams[v]
-                }
-                formattedForm[key] = val
-              }
+    computed: {
+        itemStyle () {
+            const { itemWidth } = this
+            if (itemWidth) {
+                return `width: ${itemWidth}px;`
             }
-          })
-          if (callback) callback(null, formattedForm)
-        } else {
-          if (callback) callback(new Error())
+            return ''
         }
-      })
-    },
-    /**
-     *重置表单
-     */
-    resetSearchForm() {
-      this.$refs['form'].resetFields()
     },
-    changeDate(date, startDate, endDate) {
-      let dates
-      if (date === null) {
-        this.params[startDate] = ''
-        this.params[endDate] = ''
-        return
-      }
-      if (typeof date === 'string') {
-        dates = date.split(' - ')
-      } else if (date && date.hasOwnProperty('length')) {
-        const firstDate = date[0]
-        const secondDate = date[1]
-        dates = [
-          `${firstDate.getFullYear()}-${('0' + (firstDate.getMonth() + 1)).substr(-2)}-${('0' + firstDate.getDate()).substr(-2)}`,
-          `${secondDate.getFullYear()}-${('0' + (secondDate.getMonth() + 1)).substr(-2)}-${('0' + secondDate.getDate()).substr(-2)}`
-        ]
-      }
-      this.params[startDate] = dates[0]
-      this.params[endDate] = dates[1]
-    },
-    /**
-     * 获取的远程数据【下拉框】
-     */
-    getRemoteData({ fetch, dataKey, resultField, resultHandler }) {
-      fetch().then(response => {
-        let result = response
-        if (typeof response === 'object' && !this.isArray(response)) {
-          if (resultField.indexOf('.') !== -1) {
-            resultField.split('.').forEach(vv => {
-              result = result[vv]
+    methods: {
+        /**
+         * 处理回车
+         */
+        handleEnter () {
+            this.$emit('search')
+        },
+        isArray (value) {
+            return typeof value === 'object' && Object.prototype.toString.call(value) === '[object Array]'
+        },
+        getParamFuzzy () {
+            return this.fuzzyOps
+        },
+        /**
+         * 获取参数
+         */
+        getParams (callback) {
+            this.$refs['form'].validate(valid => {
+                if (valid) {
+                    const { params, nameParams, datePrefix, format } = this
+                    const formattedForm = {}
+                    Object.keys(params).forEach(v => {
+                        if (v.indexOf(datePrefix) === -1) {
+                            const val = format[v] ? format[v](params[v], v) : params[v]
+                            if (this.$utils.isNotEmpty(val)) {
+                                let key = v
+                                if (nameParams[v]) {
+                                    key = nameParams[v]
+                                }
+                                formattedForm[key] = val
+                            }
+                        }
+                    })
+                    if (callback) callback(null, formattedForm)
+                } else {
+                    if (callback) callback(new Error())
+                }
+            })
+        },
+        /**
+         *重置表单
+        */
+        resetSearchForm () {
+            this.$refs['form'].resetFields()
+        },
+        changeDate (date, startDate, endDate) {
+            let dates
+            if (date === null) {
+                this.params[startDate] = ''
+                this.params[endDate] = ''
+                return
+            }
+            if (typeof date === 'string') {
+                dates = date.split(' - ')
+            } else if (date && date.hasOwnProperty('length')) {
+                const firstDate = date[0]
+                const secondDate = date[1]
+                dates = [
+                    `${firstDate.getFullYear()}-${('0' + (firstDate.getMonth() + 1)).substr(-2)}-${('0' + firstDate.getDate()).substr(-2)}`,
+                    `${secondDate.getFullYear()}-${('0' + (secondDate.getMonth() + 1)).substr(-2)}-${('0' + secondDate.getDate()).substr(-2)}`
+                ]
+            }
+            this.params[startDate] = dates[0]
+            this.params[endDate] = dates[1]
+        },
+        /**
+         * 获取的远程数据【下拉框】
+         */
+        getRemoteData ({ fetch, dataKey, resultField, resultHandler }) {
+            fetch().then(response => {
+                let result = response
+                if (typeof response === 'object' && !this.isArray(response)) {
+                    if (resultField.indexOf('.') !== -1) {
+                        resultField.split('.').forEach(vv => {
+                            result = result[vv]
+                        })
+                    } else {
+                        result = response[resultField]
+                    }
+                }
+                if (!result || !(result instanceof Array)) {
+                    throw new Error(`The result of key:${resultField} is not Array.`)// 接口返回的字段:${resultField} 不是一个数组
+                }
+                if (this.resultHandler) {
+                    this.selectOptions[dataKey] = result.map(this.resultHandler)
+                } else {
+                    this.selectOptions[dataKey] = result
+                }
             })
-          } else {
-            result = response[resultField]
-          }
-        }
-        if (!result || !(result instanceof Array)) {
-          throw new Error(`The result of key:${resultField} is not Array.`)// 接口返回的字段:${resultField} 不是一个数组
-        }
-        if (this.resultHandler) {
-          this.selectOptions[dataKey] = result.map(this.resultHandler)
-        } else {
-          this.selectOptions[dataKey] = result
         }
-      })
     }
-  }
 }
 </script>

+ 263 - 262
src/components/ibps-crud/components/search-form/index.vue

@@ -1,105 +1,106 @@
 <template>
-  <el-form
-    v-if="forms"
-    ref="form"
-    :model="params"
-    width="25%"
-    :inline="inline"
-    :label-width="labelWidth ? (labelWidth + 'px') : ''"
-    class="ibps-crud-search-form"
-    @keyup.enter.native.stop="handleEnter"
-  >
-    <el-form-item
-      v-for="(item, index) in forms"
-      :key="index"
-      :prop="item.fieldType != 'daterange' ? item.prop : (datePrefix + index)"
-      :rules="item.rules || []"
-      :label-width="item.labelWidth ? (item.labelWidth + 'px') : ''"
-      class="search-form-item"
-      @submit.native.prevent
-    >
-      <template slot="label">
-        {{ item.label }}
-      </template>
-      <!-- 文本框-->
-      <el-input
-        v-if="item.fieldType === 'input' || item.fieldType === undefined"
-        v-model="params[item.modelValue]"
-        :size="item.size ? item.size : size"
-        :readonly="item.readonly"
-        :disabled="item.disabled"
-        :placeholder="item.placeholder?item.placeholder:'请输入'"
-        :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
-        clearable
-        @keyup.enter.native.stop="handleEnter"
-      />
-      <!-- 下拉框-->
-      <el-select
-        v-else-if="item.fieldType === 'select'"
-        v-model="params[item.modelValue]"
-        :size="item.size ? item.size : size"
-        :disabled="item.disabled"
-        :placeholder="item.placeholder?item.placeholder:'请选择'"
-        :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
-        clearable
-        @keyup.enter.native.stop="handleEnter"
-      >
-        <el-option
-          v-for="(option, optionIndex) in item.options"
-          :key="optionIndex + '_local'"
-          :value="(typeof option === 'object') ? option[item.valueKey || 'value'] : option"
-          :label="(typeof option === 'object') ? option[item.labelKey || 'label'] : option"
-        />
-        <el-option
-          v-for="(op, opIndex) in selectOptions[selectOptionPrefix + index]"
-          :key="opIndex + '_remote'"
-          :value="(typeof op === 'object') ? op[item.valueKey || 'value'] : op"
-          :label="(typeof op === 'object') ? op[item.labelKey || 'label'] : op"
-        />
-      </el-select>
-      <!-- 日期-->
-      <el-date-picker
-        v-else-if="item.fieldType === 'date'"
-        v-model="params[item.modelValue]"
-        :placeholder="item.placeholder"
-        :size="item.size ? item.size : size"
-        :disabled="item.disabled"
-        :readonly="item.readonly"
-        :editable="item.editable"
-        :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
-        :picker-options="item.pickerOptions || {}"
-        :type="item.dateType||'date'"
-        @keyup.enter.native.stop="handleEnter"
-      />
-      <!-- 日期范围-->
-      <el-date-picker
-        v-else-if="item.fieldType === 'daterange'"
-        v-model="params[item.modelValue]"
-        :size="item.size ? item.size : size"
-        :disabled="item.disabled"
-        :readonly="item.readonly"
-        :editable="item.editable"
-        :placeholder="item.placeholder?item.placeholder:'请选择'"
-        :start-placeholder="item.startPlaceholder?item.startPlaceholder:'请选择'"
-        :end-placeholder="item.endPlaceholder?item.endPlaceholder:'请选择'"
-        :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
-        :picker-options="item.pickerOptions || {}"
-        type="daterange"
-        unlink-panels
-        @change="date => changeDate(date, item.prop[0], item.prop[1])"
+    <el-form
+        v-if="forms"
+        ref="form"
+        :model="params"
+        width="25%"
+        :inline="inline"
+        :label-width="labelWidth ? (labelWidth + 'px') : ''"
+        class="ibps-crud-search-form"
+        @submit.native.prevent
         @keyup.enter.native.stop="handleEnter"
-      />
-      <!-- 自定义slot-->
-      <template v-else-if="item.fieldType === 'slot'">
-        <slot :name="item.slotName" :item="item" />
-      </template>
-    </el-form-item>
+    >
+        <el-form-item
+            v-for="(item, index) in forms"
+            :key="index"
+            :prop="item.fieldType != 'daterange' ? item.prop : (datePrefix + index)"
+            :rules="item.rules || []"
+            :label-width="item.labelWidth ? (item.labelWidth + 'px') : ''"
+            class="search-form-item"
+            @submit.native.prevent
+        >
+            <template slot="label">
+                {{ item.label }}
+            </template>
+            <!-- 文本框-->
+            <el-input
+                v-if="item.fieldType === 'input' || item.fieldType === undefined"
+                v-model="params[item.modelValue]"
+                :size="item.size ? item.size : size"
+                :readonly="item.readonly"
+                :disabled="item.disabled"
+                :placeholder="item.placeholder?item.placeholder:'请输入'"
+                :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
+                clearable
+                @keyup.enter.native.stop="handleEnter"
+            />
+            <!-- 下拉框-->
+            <el-select
+                v-else-if="item.fieldType === 'select'"
+                v-model="params[item.modelValue]"
+                :size="item.size ? item.size : size"
+                :disabled="item.disabled"
+                :placeholder="item.placeholder?item.placeholder:'请选择'"
+                :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
+                clearable
+                @keyup.enter.native.stop="handleEnter"
+            >
+                <el-option
+                    v-for="(option, optionIndex) in item.options"
+                    :key="optionIndex + '_local'"
+                    :value="(typeof option === 'object') ? option[item.valueKey || 'value'] : option"
+                    :label="(typeof option === 'object') ? option[item.labelKey || 'label'] : option"
+                />
+                <el-option
+                    v-for="(op, opIndex) in selectOptions[selectOptionPrefix + index]"
+                    :key="opIndex + '_remote'"
+                    :value="(typeof op === 'object') ? op[item.valueKey || 'value'] : op"
+                    :label="(typeof op === 'object') ? op[item.labelKey || 'label'] : op"
+                />
+            </el-select>
+            <!-- 日期-->
+            <el-date-picker
+                v-else-if="item.fieldType === 'date'"
+                v-model="params[item.modelValue]"
+                :placeholder="item.placeholder"
+                :size="item.size ? item.size : size"
+                :disabled="item.disabled"
+                :readonly="item.readonly"
+                :editable="item.editable"
+                :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
+                :picker-options="item.pickerOptions || {}"
+                :type="item.dateType||'date'"
+                @keyup.enter.native.stop="handleEnter"
+            />
+            <!-- 日期范围-->
+            <el-date-picker
+                v-else-if="item.fieldType === 'daterange'"
+                v-model="params[item.modelValue]"
+                :size="item.size ? item.size : size"
+                :disabled="item.disabled"
+                :readonly="item.readonly"
+                :editable="item.editable"
+                :placeholder="item.placeholder?item.placeholder:'请选择'"
+                :start-placeholder="item.startPlaceholder?item.startPlaceholder:'请选择'"
+                :end-placeholder="item.endPlaceholder?item.endPlaceholder:'请选择'"
+                :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
+                :picker-options="item.pickerOptions || {}"
+                type="daterange"
+                unlink-panels
+                @change="date => changeDate(date, item.prop[0], item.prop[1])"
+                @keyup.enter.native.stop="handleEnter"
+            />
+            <!-- 自定义slot-->
+            <template v-else-if="item.fieldType === 'slot'">
+                <slot :name="item.slotName" :item="item" />
+            </template>
+        </el-form-item>
         <el-form-item>
-          <template>
-              <slot name="jbd-buttons" />
-         </template>
-      </el-form-item>
-  </el-form>
+            <template>
+                <slot name="jbd-buttons" />
+            </template>
+        </el-form-item>
+    </el-form>
 </template>
 
 <script>
@@ -107,179 +108,179 @@ import { formProps } from './props.js'
 import request from '@/utils/request'
 
 export default {
-  name: 'ibps-search-form',
-  props: formProps,
-  data() {
-    const { forms, fuzzy } = this.$props
-    const datePrefix = 'daterange-prefix'
-    const selectOptionPrefix = 'select-option-prefix'
-    const dataObj = {
-      selectOptions: {}
-    }
-    const params = {}
-    const nameParams = {}
-    const format = {}
-    const fuzzyOps = {}
-
-    forms.forEach((v, i) => {
-      const propType = typeof v.prop
-      if (propType === 'string') {
-        v.modelValue = v.prop
-        params[v.prop] = v.value || ''
-        if (v.name) {
-          nameParams[v.prop] = v.name
+    name: 'ibps-search-form',
+    props: formProps,
+    data () {
+        const { forms, fuzzy } = this.$props
+        const datePrefix = 'daterange-prefix'
+        const selectOptionPrefix = 'select-option-prefix'
+        const dataObj = {
+            selectOptions: {}
         }
+        const params = {}
+        const nameParams = {}
+        const format = {}
+        const fuzzyOps = {}
 
-        fuzzyOps[v.prop] = v.fuzzy ? v.fuzzy : fuzzy
-        if (v.format) {
-          format[v.prop] = v.format
-        }
-      } else if (propType === 'object' && Object.prototype.toString.call(v.prop) === '[object Array]') {
-        v.prop.forEach((vv, j) => {
-          params[vv] = vv.value || ''
-          if (v.name) {
-            nameParams[vv] = v.name[j]
-          }
-          if (v.format) {
-            format[vv] = v.format
-          }
-          fuzzyOps[vv] = v.fuzzy ? v.fuzzy : fuzzy
+        forms.forEach((v, i) => {
+            const propType = typeof v.prop
+            if (propType === 'string') {
+                v.modelValue = v.prop
+                params[v.prop] = v.value || ''
+                if (v.name) {
+                    nameParams[v.prop] = v.name
+                }
+
+                fuzzyOps[v.prop] = v.fuzzy ? v.fuzzy : fuzzy
+                if (v.format) {
+                    format[v.prop] = v.format
+                }
+            } else if (propType === 'object' && Object.prototype.toString.call(v.prop) === '[object Array]') {
+                v.prop.forEach((vv, j) => {
+                    params[vv] = vv.value || ''
+                    if (v.name) {
+                        nameParams[vv] = v.name[j]
+                    }
+                    if (v.format) {
+                        format[vv] = v.format
+                    }
+                    fuzzyOps[vv] = v.fuzzy ? v.fuzzy : fuzzy
+                })
+            }
+            if (v.fieldType === 'daterange') {
+                params[datePrefix + i] = ''
+                v.modelValue = datePrefix + i
+            } else if (v.fieldType === 'select' && (v.selectFetch || v.selectUrl)) {
+                const dataKey = selectOptionPrefix + i
+                dataObj.selectOptions[dataKey] = []
+                if (!v.selectMethod) {
+                    v.selectMethod = 'get'
+                }
+                this.getRemoteData({
+                    fetch: v.selectFetch ? v.selectFetch : () => {
+                        const p = v.selectMethod.toLowerCase() === 'get'
+                            ? { params: v.selectParams } : v.selectParams
+                        return request({
+                            url: v.selectUrl,
+                            method: v.selectMethod,
+                            p
+                        })
+                    },
+                    dataKey,
+                    resultField: v.resultField || 'data',
+                    resultHandler: v.resultHandler
+                })
+            }
         })
-      }
-      if (v.fieldType === 'daterange') {
-        params[datePrefix + i] = ''
-        v.modelValue = datePrefix + i
-      } else if (v.fieldType === 'select' && (v.selectFetch || v.selectUrl)) {
-        const dataKey = selectOptionPrefix + i
-        dataObj.selectOptions[dataKey] = []
-        if (!v.selectMethod) {
-          v.selectMethod = 'get'
+        return {
+            params,
+            nameParams,
+            datePrefix,
+            selectOptionPrefix,
+            ...dataObj,
+            format,
+            fuzzyOps
         }
-        this.getRemoteData({
-          fetch: v.selectFetch ? v.selectFetch : () => {
-            const p = v.selectMethod.toLowerCase() === 'get'
-              ? { params: v.selectParams } : v.selectParams
-            return request({
-              url: v.selectUrl,
-              method: v.selectMethod,
-              p
-            })
-          },
-          dataKey,
-          resultField: v.resultField || 'data',
-          resultHandler: v.resultHandler
-        })
-      }
-    })
-    return {
-      params,
-      nameParams,
-      datePrefix,
-      selectOptionPrefix,
-      ...dataObj,
-      format,
-      fuzzyOps
-    }
-  },
-  computed: {
-    itemStyle() {
-      const { itemWidth } = this
-      if (itemWidth) {
-        return `width: ${itemWidth}px;`
-      }
-      return ''
-    }
-  },
-  methods: {
-    /**
-     * 处理回车
-     */
-    handleEnter() {
-      this.$emit('search')
-    },
-    isArray(value) {
-      return typeof value === 'object' && Object.prototype.toString.call(value) === '[object Array]'
-    },
-    getParamFuzzy() {
-      return this.fuzzyOps
     },
-    /**
-     * 获取参数
-     */
-    getParams(callback) {
-      this.$refs['form'].validate(valid => {
-        if (valid) {
-          const { params, nameParams, datePrefix, format } = this
-          const formattedForm = {}
-          Object.keys(params).forEach(v => {
-            if (v.indexOf(datePrefix) === -1) {
-              const val = format[v] ? format[v](params[v], v) : params[v]
-              if (this.$utils.isNotEmpty(val)) {
-                let key = v
-                if (nameParams[v]) {
-                  key = nameParams[v]
-                }
-                formattedForm[key] = val
-              }
+    computed: {
+        itemStyle () {
+            const { itemWidth } = this
+            if (itemWidth) {
+                return `width: ${itemWidth}px;`
             }
-          })
-          if (callback) callback(null, formattedForm)
-        } else {
-          if (callback) callback(new Error())
+            return ''
         }
-      })
-    },
-    /**
-     *重置表单
-     */
-    resetSearchForm() {
-      this.$refs['form'].resetFields()
     },
-    changeDate(date, startDate, endDate) {
-      let dates
-      if (date === null) {
-        this.params[startDate] = ''
-        this.params[endDate] = ''
-        return
-      }
-      if (typeof date === 'string') {
-        dates = date.split(' - ')
-      } else if (date && date.hasOwnProperty('length')) {
-        const firstDate = date[0]
-        const secondDate = date[1]
-        dates = [
-          `${firstDate.getFullYear()}-${('0' + (firstDate.getMonth() + 1)).substr(-2)}-${('0' + firstDate.getDate()).substr(-2)}`,
-          `${secondDate.getFullYear()}-${('0' + (secondDate.getMonth() + 1)).substr(-2)}-${('0' + secondDate.getDate()).substr(-2)}`
-        ]
-      }
-      this.params[startDate] = dates[0]
-      this.params[endDate] = dates[1]
-    },
-    /**
-     * 获取的远程数据【下拉框】
-     */
-    getRemoteData({ fetch, dataKey, resultField, resultHandler }) {
-      fetch().then(response => {
-        let result = response
-        if (typeof response === 'object' && !this.isArray(response)) {
-          if (resultField.indexOf('.') !== -1) {
-            resultField.split('.').forEach(vv => {
-              result = result[vv]
+    methods: {
+        /**
+         * 处理回车
+         */
+        handleEnter () {
+            this.$emit('search')
+        },
+        isArray (value) {
+            return typeof value === 'object' && Object.prototype.toString.call(value) === '[object Array]'
+        },
+        getParamFuzzy () {
+            return this.fuzzyOps
+        },
+        /**
+         * 获取参数
+         */
+        getParams (callback) {
+            this.$refs['form'].validate(valid => {
+                if (valid) {
+                    const { params, nameParams, datePrefix, format } = this
+                    const formattedForm = {}
+                    Object.keys(params).forEach(v => {
+                        if (v.indexOf(datePrefix) === -1) {
+                            const val = format[v] ? format[v](params[v], v) : params[v]
+                            if (this.$utils.isNotEmpty(val)) {
+                                let key = v
+                                if (nameParams[v]) {
+                                    key = nameParams[v]
+                                }
+                                formattedForm[key] = val
+                            }
+                        }
+                    })
+                    if (callback) callback(null, formattedForm)
+                } else {
+                    if (callback) callback(new Error())
+                }
+            })
+        },
+        /**
+         *重置表单
+        */
+        resetSearchForm () {
+            this.$refs['form'].resetFields()
+        },
+        changeDate (date, startDate, endDate) {
+            let dates
+            if (date === null) {
+                this.params[startDate] = ''
+                this.params[endDate] = ''
+                return
+            }
+            if (typeof date === 'string') {
+                dates = date.split(' - ')
+            } else if (date && date.hasOwnProperty('length')) {
+                const firstDate = date[0]
+                const secondDate = date[1]
+                dates = [
+                    `${firstDate.getFullYear()}-${('0' + (firstDate.getMonth() + 1)).substr(-2)}-${('0' + firstDate.getDate()).substr(-2)}`,
+                    `${secondDate.getFullYear()}-${('0' + (secondDate.getMonth() + 1)).substr(-2)}-${('0' + secondDate.getDate()).substr(-2)}`
+                ]
+            }
+            this.params[startDate] = dates[0]
+            this.params[endDate] = dates[1]
+        },
+        /**
+         * 获取的远程数据【下拉框】
+         */
+        getRemoteData ({ fetch, dataKey, resultField, resultHandler }) {
+            fetch().then(response => {
+                let result = response
+                if (typeof response === 'object' && !this.isArray(response)) {
+                    if (resultField.indexOf('.') !== -1) {
+                        resultField.split('.').forEach(vv => {
+                            result = result[vv]
+                        })
+                    } else {
+                        result = response[resultField]
+                    }
+                }
+                if (!result || !(result instanceof Array)) {
+                    throw new Error(`The result of key:${resultField} is not Array.`)// 接口返回的字段:${resultField} 不是一个数组
+                }
+                if (this.resultHandler) {
+                    this.selectOptions[dataKey] = result.map(this.resultHandler)
+                } else {
+                    this.selectOptions[dataKey] = result
+                }
             })
-          } else {
-            result = response[resultField]
-          }
-        }
-        if (!result || !(result instanceof Array)) {
-          throw new Error(`The result of key:${resultField} is not Array.`)// 接口返回的字段:${resultField} 不是一个数组
-        }
-        if (this.resultHandler) {
-          this.selectOptions[dataKey] = result.map(this.resultHandler)
-        } else {
-          this.selectOptions[dataKey] = result
         }
-      })
     }
-  }
 }
 </script>