|
|
|
@ -222,28 +222,38 @@ |
|
|
|
<span class="enterprise-picker-title">选择企业</span> |
|
|
|
<van-icon name="cross" @click="showEnterprisePicker = false" /> |
|
|
|
</div> |
|
|
|
<van-search |
|
|
|
v-model="enterpriseSearchKeyword" |
|
|
|
placeholder="输入≥ 2 个字符检索企业,不要输入深圳,深圳市" |
|
|
|
shape="round" |
|
|
|
@update:model-value="onEnterpriseSearchInput" |
|
|
|
/> |
|
|
|
<div class="search-bar"> |
|
|
|
<van-search |
|
|
|
v-model="enterpriseSearchKeyword" |
|
|
|
placeholder="请输入企业名称/统一信用代码搜索" |
|
|
|
@search="handleEnterpriseSearch" |
|
|
|
@clear="clearEnterpriseSearch" |
|
|
|
/> |
|
|
|
<van-button class="search-btn" type="primary" @click="handleEnterpriseSearch">搜索</van-button> |
|
|
|
</div> |
|
|
|
<div class="enterprise-picker-body"> |
|
|
|
<div v-if="enterpriseSearching" class="enterprise-loading"> |
|
|
|
<van-loading size="18" /> 检索中... |
|
|
|
</div> |
|
|
|
<template v-else> |
|
|
|
<van-list |
|
|
|
v-model:loading="enterpriseLoading" |
|
|
|
:finished="enterpriseFinished" |
|
|
|
:finished-text="enterpriseFinishedText" |
|
|
|
:offset="50" |
|
|
|
@load="onEnterpriseLoad" |
|
|
|
> |
|
|
|
<div |
|
|
|
v-for="(item, idx) in enterpriseOptions" |
|
|
|
:key="idx" |
|
|
|
:key="item.enterpriseNumber || idx" |
|
|
|
class="enterprise-item" |
|
|
|
@click="onSelectEnterprise(item)" |
|
|
|
> |
|
|
|
<div class="enterprise-item-name">{{ item.enterpriseName }}</div> |
|
|
|
<div class="enterprise-item-number">{{ item.enterpriseNumber }}</div> |
|
|
|
</div> |
|
|
|
<van-empty v-if="enterpriseSearchKeyword.length >= 2 && !enterpriseOptions.length" description="未检索到匹配企业" image-size="80" /> |
|
|
|
</template> |
|
|
|
<van-empty |
|
|
|
v-if="!enterpriseLoading && !enterpriseOptions.length" |
|
|
|
:description="enterpriseEmptyText" |
|
|
|
image-size="80" |
|
|
|
/> |
|
|
|
</van-list> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</van-popup> |
|
|
|
@ -253,7 +263,8 @@ |
|
|
|
<script setup name="cpPlanEdit"> |
|
|
|
import { useRouter, useRoute } from 'vue-router'; |
|
|
|
import { showToast, showSuccessToast, showConfirmDialog } from 'vant'; |
|
|
|
import { addPlan, editPlan, getPlanDetail, getSubmitDeadline, getManualMatchDays, getMaxInnerUnitAcPersonNum, searchUnionByEnterpriseName, searchBureauUnitUsers } from '@/api/enforcement/plan'; |
|
|
|
import { addPlan, editPlan, getPlanDetail, getSubmitDeadline, getManualMatchDays, getMaxInnerUnitAcPersonNum, searchBureauUnitUsers } from '@/api/enforcement/plan'; |
|
|
|
import { queryEnterpriseListAndQrInfo } from '@/api/enforcement/index'; |
|
|
|
import { maskPhone } from '@/util/util'; |
|
|
|
const router = useRouter(); |
|
|
|
const route = useRoute(); |
|
|
|
@ -345,10 +356,16 @@ const maxPersonNum = ref(3); |
|
|
|
const enterpriseOptions = ref([]); |
|
|
|
const showEnterprisePicker = ref(false); |
|
|
|
const enterpriseSearchKeyword = ref(''); |
|
|
|
const enterpriseSearching = ref(false); |
|
|
|
let enterpriseSearchTimer = null; |
|
|
|
const enterpriseLoading = ref(false); |
|
|
|
const enterpriseFinished = ref(false); |
|
|
|
const enterprisePageNum = ref(1); |
|
|
|
const enterprisePageSize = 10; |
|
|
|
const enterpriseSearched = ref(false); |
|
|
|
let enterpriseSearchSeq = 0; |
|
|
|
|
|
|
|
const enterpriseEmptyText = computed(() => enterpriseSearched.value ? '未检索到匹配企业' : '请输入至少2个字搜索'); |
|
|
|
const enterpriseFinishedText = computed(() => enterpriseOptions.value.length > 0 ? '没有更多了' : ''); |
|
|
|
|
|
|
|
// 执法人员检索弹层状态 |
|
|
|
const showPersonPicker = ref(false); |
|
|
|
const personSearchKeyword = ref(''); |
|
|
|
@ -553,36 +570,88 @@ const onDateConfirm = ({ selectedValues }) => { |
|
|
|
const onOpenEnterprisePicker = () => { |
|
|
|
enterpriseSearchKeyword.value = ''; |
|
|
|
enterpriseOptions.value = []; |
|
|
|
enterprisePageNum.value = 1; |
|
|
|
enterpriseFinished.value = true; |
|
|
|
enterpriseLoading.value = false; |
|
|
|
enterpriseSearched.value = false; |
|
|
|
showEnterprisePicker.value = true; |
|
|
|
}; |
|
|
|
|
|
|
|
// 企业名称输入(防抖检索) |
|
|
|
const onEnterpriseSearchInput = (val) => { |
|
|
|
if (enterpriseSearchTimer) { |
|
|
|
clearTimeout(enterpriseSearchTimer); |
|
|
|
} |
|
|
|
const keyword = (val || '').trim(); |
|
|
|
// 企业检索(搜索按钮/回车) |
|
|
|
const handleEnterpriseSearch = () => { |
|
|
|
const keyword = (enterpriseSearchKeyword.value || '').trim(); |
|
|
|
if (keyword.length < 2) { |
|
|
|
showToast('请输入至少2个字搜索'); |
|
|
|
enterpriseOptions.value = []; |
|
|
|
enterpriseFinished.value = true; |
|
|
|
enterpriseSearched.value = false; |
|
|
|
return; |
|
|
|
} |
|
|
|
enterprisePageNum.value = 1; |
|
|
|
enterpriseFinished.value = false; |
|
|
|
enterpriseOptions.value = []; |
|
|
|
enterpriseLoading.value = true; |
|
|
|
enterpriseSearched.value = true; |
|
|
|
fetchEnterpriseList(keyword); |
|
|
|
}; |
|
|
|
|
|
|
|
// 清除企业搜索 |
|
|
|
const clearEnterpriseSearch = () => { |
|
|
|
enterpriseSearchKeyword.value = ''; |
|
|
|
enterpriseOptions.value = []; |
|
|
|
enterprisePageNum.value = 1; |
|
|
|
enterpriseFinished.value = true; |
|
|
|
enterpriseLoading.value = false; |
|
|
|
enterpriseSearched.value = false; |
|
|
|
}; |
|
|
|
|
|
|
|
// van-list 触底加载 |
|
|
|
const onEnterpriseLoad = () => { |
|
|
|
fetchEnterpriseList(enterpriseSearchKeyword.value.trim()); |
|
|
|
}; |
|
|
|
|
|
|
|
// 实际发起企业检索(分页追加) |
|
|
|
const fetchEnterpriseList = (keyword) => { |
|
|
|
if ((keyword || '').trim().length < 2) { |
|
|
|
enterpriseFinished.value = true; |
|
|
|
enterpriseLoading.value = false; |
|
|
|
return; |
|
|
|
} |
|
|
|
enterpriseSearchTimer = setTimeout(() => { |
|
|
|
const seq = ++enterpriseSearchSeq; |
|
|
|
enterpriseSearching.value = true; |
|
|
|
searchUnionByEnterpriseName(keyword, (res) => { |
|
|
|
const seq = ++enterpriseSearchSeq; |
|
|
|
enterpriseLoading.value = true; |
|
|
|
queryEnterpriseListAndQrInfo( |
|
|
|
{ |
|
|
|
pageNum: enterprisePageNum.value, |
|
|
|
pageSize: enterprisePageSize, |
|
|
|
searchValue: keyword, |
|
|
|
}, |
|
|
|
(res) => { |
|
|
|
if (seq !== enterpriseSearchSeq) return; |
|
|
|
enterpriseSearching.value = false; |
|
|
|
if (res && res.code === 200 && Array.isArray(res.data)) { |
|
|
|
enterpriseOptions.value = res.data; |
|
|
|
enterpriseLoading.value = false; |
|
|
|
if (res && res.code === 200 && Array.isArray(res.rows)) { |
|
|
|
const data = res.rows; |
|
|
|
if (enterprisePageNum.value === 1) { |
|
|
|
enterpriseOptions.value = data; |
|
|
|
} else { |
|
|
|
enterpriseOptions.value = [...enterpriseOptions.value, ...data]; |
|
|
|
} |
|
|
|
const total = res.total || 0; |
|
|
|
if (total <= enterprisePageSize * enterprisePageNum.value) { |
|
|
|
enterpriseFinished.value = true; |
|
|
|
} else { |
|
|
|
enterprisePageNum.value++; |
|
|
|
} |
|
|
|
} else { |
|
|
|
enterpriseOptions.value = []; |
|
|
|
if (enterprisePageNum.value === 1) enterpriseOptions.value = []; |
|
|
|
enterpriseFinished.value = true; |
|
|
|
} |
|
|
|
}, () => { |
|
|
|
}, |
|
|
|
() => { |
|
|
|
if (seq !== enterpriseSearchSeq) return; |
|
|
|
enterpriseSearching.value = false; |
|
|
|
enterpriseOptions.value = []; |
|
|
|
}); |
|
|
|
}, 350); |
|
|
|
enterpriseLoading.value = false; |
|
|
|
enterpriseFinished.value = true; |
|
|
|
} |
|
|
|
); |
|
|
|
}; |
|
|
|
|
|
|
|
// 选择某个企业 |
|
|
|
@ -993,6 +1062,23 @@ const doSubmit = () => { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.search-bar { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
margin: 0.3rem; |
|
|
|
|
|
|
|
:deep(.van-search) { |
|
|
|
padding-right: 0px; |
|
|
|
flex: 1; |
|
|
|
height: 34px; |
|
|
|
} |
|
|
|
|
|
|
|
.search-btn { |
|
|
|
flex: none; |
|
|
|
height: 34px; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.enterprise-picker-body { |
|
|
|
flex: 1; |
|
|
|
overflow-y: auto; |
|
|
|
|