Merge branch 'feature/add-city-filter-condition-constraint' into feature/ui

This commit is contained in:
geekgeekrun
2026-01-26 19:59:22 +08:00
5 changed files with 76 additions and 18 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 109 KiB

View File

@@ -16,7 +16,10 @@
justify-between
items-center
>
<city-chooser v-model="modelValue.cityList">
<city-chooser
v-model="modelValue.cityList"
gt-show-scene="any-combine-boss-recommend-filter"
>
<template #default="{ showDialog }">
<div flex justify-between items-center>
<div font-size-12px>

View File

@@ -73,14 +73,18 @@
</el-table-column>
<el-table-column :resizable="false" label="城市" prop="city">
<template #default="{ row }">
<city-chooser v-model="row.city" :multiple="false">
<city-chooser
v-model="row.city"
:multiple="false"
gt-show-scene="static-combine-boss-recommend-filter"
>
<template #default="{ showDialog }">
<div flex justify-between items-center>
<div font-size-12px lh-1.2em>
<template v-if="row.city">{{ row.city }}</template>
<template v-else><i color-gray>未选择城市</i></template>
</div>
<el-button size="small" @click="showDialog" pl4px pr4px>选择</el-button>
<el-button size="small" pl4px pr4px @click="showDialog">选择</el-button>
</div>
</template>
</city-chooser>

View File

@@ -16,7 +16,7 @@
>
<el-tabs v-model="activeTabName">
<el-tab-pane
:style="{ height: '300px', overflow: 'auto' }"
:style="{ height: '260px', overflow: 'auto' }"
label="热门城市"
name="热门城市"
>
@@ -95,19 +95,66 @@
<div
:style="{
display: 'flex',
alignItems: 'center',
alignItems: multiple ? 'end' : 'center',
justifyContent: 'space-between'
}"
>
<div>
<el-button
v-if="selectedCities?.length"
type="danger"
@click="handleClearSelectedCitiesInDialog"
>清空已选择的所有城市</el-button
>
<div flex flex-1 mr12px text-left flex-col>
<template v-if="selectedCities?.length">
<div
flex
flex-items-center
font-size-14px
flex-0
ws-nowrap
:class="{ mb10px: multiple }"
>
<el-button
v-if="multiple && selectedCities?.length"
type="danger"
size="small"
@click="handleClearSelectedCitiesInDialog"
>清空已选择的所有城市</el-button
>
<template v-if="!multiple">
<span ml6px font-size-13px class="color-#999">已选择:</span>
<el-tag
closable
@close="
() => {
selectedCities = null
gtagRenderer('remove_selected_cities_in_dialog_clicked', {
gtShowScene: props.gtShowScene,
multiple: Boolean(multiple)
})
}
"
>{{ selectedCities }}</el-tag
>
</template>
</div>
<div v-if="multiple" flex flex-1 flex-wrap gap-6px of-auto max-h-160px>
<span font-size-13px class="color-#999" flex items-center>已选择:</span>
<el-tag
v-for="(city, index) in selectedCities"
:key="city"
closable
@close="
() => {
;(selectedCities ?? []).splice(index, 1)
gtagRenderer('remove_selected_cities_in_dialog_clicked', {
gtShowScene: props.gtShowScene,
multiple: Boolean(multiple)
})
}
"
>
{{ city }}</el-tag
>
</div>
</template>
</div>
<div>
<div flex-0 ws-nowrap>
<el-button @click="handleCancelClicked">取消</el-button>
<el-button type="primary" @click="handleConfirmClicked">确定</el-button>
</div>
@@ -131,6 +178,9 @@ const props = defineProps({
multiple: {
type: Boolean,
default: true
},
gtShowScene: {
type: String
}
})
const emits = defineEmits(['update:modelValue'])
@@ -158,15 +208,16 @@ for (const group of cityGroup) {
function handleDialogOpen() {
activeTabName.value = '热门城市'
selectedCities.value = props.multiple ? [...(props.modelValue ?? [])] : props.modelValue
gtagRenderer('choose_city_dialog_open')
gtagRenderer('choose_city_dialog_open', { gtShowScene: props.gtShowScene })
}
function handleCancelClicked() {
gtagRenderer('choose_city_cancel_button_clicked')
gtagRenderer('choose_city_cancel_button_clicked', { gtShowScene: props.gtShowScene })
isDialogVisible.value = false
}
function handleConfirmClicked() {
gtagRenderer('choose_city_confirm_button_clicked', {
gtShowScene: props.gtShowScene,
value: Array.isArray(selectedCities.value)
? selectedCities.value.join(',')
: selectedCities.value
@@ -179,15 +230,15 @@ function handleConfirmClicked() {
}
function handleDialogClosed() {
selectedCities.value = props.multiple ? [] : null
gtagRenderer('choose_city_dialog_closed')
gtagRenderer('choose_city_dialog_closed', { gtShowScene: props.gtShowScene })
}
function handleClearSelectedCitiesInModelValue() {
emits('update:modelValue', (selectedCities.value = props.multiple ? [] : null))
gtagRenderer('clear_selected_cities_in_mv_clicked')
gtagRenderer('clear_selected_cities_in_mv_clicked', { gtShowScene: props.gtShowScene })
}
function handleClearSelectedCitiesInDialog() {
selectedCities.value = props.multiple ? [] : null
gtagRenderer('clear_selected_cities_in_dialog_clicked')
gtagRenderer('clear_selected_cities_in_dialog_clicked', { gtShowScene: props.gtShowScene })
}
</script>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 793 KiB

After

Width:  |  Height:  |  Size: 1.2 MiB