|
@@ -0,0 +1,124 @@
|
|
|
|
+<template>
|
|
|
|
+ <div id="filter_bar" style="margin: 10px">
|
|
|
|
+ <el-row v-for="(l, rowIndex) in fields" :key="`row-${rowIndex}`">
|
|
|
|
+ <el-col :span="24">
|
|
|
|
+ <span>{{ l.label }}</span>
|
|
|
|
+ <span>:</span>
|
|
|
|
+ <template v-if="l.type === 'radio'">
|
|
|
|
+ <el-radio-group v-model="form[l.model]">
|
|
|
|
+ <el-radio :label="undefined">全部</el-radio>
|
|
|
|
+ <el-radio v-for="(i, index) in getList(rowIndex)" :key="`radio-${l.model}-${index}`" :label="i.value ? i.value : i.label">{{ i.label }}</el-radio>
|
|
|
|
+ </el-radio-group>
|
|
|
|
+ </template>
|
|
|
|
+ <template v-if="l.type === 'range'">
|
|
|
|
+ <el-select v-model="form[l.model]" size="mini" @change="toClearWrite">
|
|
|
|
+ <template v-for="(i, index) in l.list">
|
|
|
|
+ <el-option :key="`options-${index}`" :label="`${i.start}-${i.end}元`" :value="`${i.start}-${i.end}`"></el-option>
|
|
|
|
+ </template>
|
|
|
|
+ </el-select>
|
|
|
|
+ <el-input style="width: 100px" size="mini" v-model.number="form[`${l.model}@start`]" placeholder="最小金额" @input="toClearSelect"></el-input> -
|
|
|
|
+ <el-input style="width: 100px" size="mini" v-model.number="form[`${l.model}@end`]" placeholder="最大金额" @input="toClearSelect"></el-input>
|
|
|
|
+ </template>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="24">
|
|
|
|
+ <el-button type="primary" size="small" @click="search()">查询</el-button>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+/**
|
|
|
|
+ * fields:
|
|
|
|
+ * label:字段中文
|
|
|
|
+ * type:选择方式
|
|
|
|
+ * model:字段
|
|
|
|
+ * list:选择的选项,可以写死,可以请求:请求是以 ${model}List 形式命名传入组件,无需prop接收,直接使用$attrs即可;
|
|
|
|
+ */
|
|
|
|
+const _ = require('lodash');
|
|
|
|
+import { mapState, createNamespacedHelpers } from 'vuex';
|
|
|
|
+export default {
|
|
|
|
+ name: 'filter_bar',
|
|
|
|
+ props: {
|
|
|
|
+ form: {
|
|
|
|
+ type: Object,
|
|
|
|
+ default: () => {
|
|
|
|
+ return {};
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ model: {
|
|
|
|
+ prop: 'form',
|
|
|
|
+ event: 'change',
|
|
|
|
+ },
|
|
|
|
+ components: {},
|
|
|
|
+ data: function () {
|
|
|
|
+ return {
|
|
|
|
+ fields: [
|
|
|
|
+ { label: '专利类型', type: 'radio', model: 'type', list: [{ label: '发明' }, { label: '实用新型' }] },
|
|
|
|
+ { label: '交易类型', type: 'radio', model: 'sell_type', list: [{ label: '许可' }, { label: '转移' }, { label: '质押' }] },
|
|
|
|
+ {
|
|
|
|
+ label: '预算价格',
|
|
|
|
+ type: 'range',
|
|
|
|
+ model: 'sell_money',
|
|
|
|
+ list: [
|
|
|
|
+ { start: 1000, end: 2000 },
|
|
|
|
+ { start: 2000, end: 3000 },
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ };
|
|
|
|
+ },
|
|
|
|
+ created() {},
|
|
|
|
+ methods: {
|
|
|
|
+ getList(index) {
|
|
|
|
+ const field = this.fields[index];
|
|
|
|
+ let list = _.get(field, 'list');
|
|
|
|
+ if (list) return list;
|
|
|
|
+ const { model } = field;
|
|
|
|
+ list = _.get(this.$attrs, `${model}List`, []);
|
|
|
|
+ return list;
|
|
|
|
+ },
|
|
|
|
+ search() {
|
|
|
|
+ let data = _.cloneDeep(this.form);
|
|
|
|
+ let obj = {};
|
|
|
|
+ for (const key in data) {
|
|
|
|
+ if (data[key]) obj[key] = data[key];
|
|
|
|
+ }
|
|
|
|
+ if (obj.sell_money) {
|
|
|
|
+ const arr = obj.sell_money.split('-');
|
|
|
|
+ obj[`sell_money@start`] = parseInt(arr[0]);
|
|
|
|
+ obj[`sell_money@end`] = parseInt(arr[1]);
|
|
|
|
+ delete obj.sell_money;
|
|
|
|
+ }
|
|
|
|
+ if (obj['sell_money@start'] && obj['sell_money@end']) {
|
|
|
|
+ if (obj['sell_money@end'] < obj['sell_money@start']) {
|
|
|
|
+ this.$message.error('最大金额 小于 最小金额,请重新输入预算价格');
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ this.$emit('search', obj);
|
|
|
|
+ },
|
|
|
|
+ toClearWrite() {
|
|
|
|
+ delete this.form[`sell_money@start`];
|
|
|
|
+ delete this.form[`sell_money@end`];
|
|
|
|
+ },
|
|
|
|
+ toClearSelect() {
|
|
|
|
+ delete this.form[`sell_money`];
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ computed: {
|
|
|
|
+ ...mapState(['user']),
|
|
|
|
+ pageTitle() {
|
|
|
|
+ return `${this.$route.meta.title}`;
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ metaInfo() {
|
|
|
|
+ return { title: this.$route.meta.title };
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style lang="less" scoped></style>
|