Browse Source

Merge branch 'zhangtao' of zhangtao/restructure into develop

develop
zhangtao 2 years ago
parent
commit
02a2d4488e
2 changed files with 74 additions and 2 deletions
  1. +53
    -0
      src/components/AreaCascader/index.vue
  2. +21
    -2
      src/components/Search/index.vue

+ 53
- 0
src/components/AreaCascader/index.vue View File

<template>
<n-cascader v-bind="getProps" @update:value="handleUpdate" />
</template>

<script>
import { NCascader } from 'naive-ui'
import { computed } from 'vue'
export default {
name: 'AreaCascader',
props: {
...NCascader.props,
showCheckbox: {
type: Boolean,
default: true
},
field: {
type: Array,
default: () => {
return ['province', 'city', 'distance']
}
}
},
emits: ['selectd'],
setup(props, { emit }) {
const getProps = computed(() => {
return {
...props
}
})
function handleUpdate(value, option, pathValues) {
const field = props.field
const valueField = props.valueField
const filedJson = {}
field.forEach((item, index) => {
filedJson[item] = pathValues?.[index]?.[valueField] || ''
})
emit('selectd', filedJson)
}
function clearValue() {
handleUpdate(null, null, [])
}

return {
getProps,
handleUpdate,
clearValue
}
}
}

</script>
<style scoped lang='scss'>
</style>

+ 21
- 2
src/components/Search/index.vue View File

<n-form-item v-if="['select'].includes(item.type) " :label="item.label"> <n-form-item v-if="['select'].includes(item.type) " :label="item.label">
<n-select v-model:value="getFormOptions.form[item.key]" v-bind="item.props" /> <n-select v-model:value="getFormOptions.form[item.key]" v-bind="item.props" />
</n-form-item> </n-form-item>
<n-form-item v-if="['cascader'].includes(item.type) " :label="item.label">
<AreaCascader :ref="el=>{itemRefs[item.refIndex] = el}" v-model:value="getFormOptions.form[item.key]" v-bind="item.props" @selectd="handleSelect" />
</n-form-item>
<n-form-item v-if="['date'].includes(item.type) " :label="item.label"> <n-form-item v-if="['date'].includes(item.type) " :label="item.label">
<n-date-picker v-model="getFormOptions.form[item.key]" v-bind="item.props" /> <n-date-picker v-model="getFormOptions.form[item.key]" v-bind="item.props" />
</n-form-item> </n-form-item>
<script> <script>
import { computed, reactive, ref, unref, toRaw } from 'vue' import { computed, reactive, ref, unref, toRaw } from 'vue'
import { NForm } from 'naive-ui' import { NForm } from 'naive-ui'
import AreaCascader from '@/components/AreaCascader/index.vue'
export default { export default {
name: 'SearchPage', name: 'SearchPage',
components: { AreaCascader },
props: { props: {
...NForm.props, ...NForm.props,
info: { info: {
setup(props, { emit }) { setup(props, { emit }) {
const showItemNum = ref(3) const showItemNum = ref(3)
const len = ref(props.info.length - 1) const len = ref(props.info.length - 1)
const itemRefs = ref([])
const showButton = ref(!!(showItemNum.value < len.value)) const showButton = ref(!!(showItemNum.value < len.value))
/* 获取传递的props */ /* 获取传递的props */
const data = reactive({ const data = reactive({
/* 初始化搜索表单信息 */ /* 初始化搜索表单信息 */
function initForm() { function initForm() {
data.info.forEach((item) => { data.info.forEach((item) => {
form.value[item.key] = null
if (item.key) form.value[item.key] = ''
})
itemRefs.value.forEach((item) => {
item.clearValue()
}) })
} }

function handleSelect(data) {
form.value = {
...form.value,
...data
}
}
const getFormOptions = computed(() => { const getFormOptions = computed(() => {
return { return {
form: unref(form), form: unref(form),
getFormOptions, getFormOptions,
handleSearch, handleSearch,
handleReset, handleReset,
handleSelect,
itemRefs,
showMoreItem showMoreItem
} }
} }
.n-select{ .n-select{
width: 200px; width: 200px;
} }
.n-cascader{
width: 200px;
}
transition: all 10s; transition: all 10s;
} }
.form__button{ .form__button{

Loading…
Cancel
Save