|
|
|
@ -66,6 +66,9 @@ |
|
|
|
|
|
|
|
<!-- 企业列表 --> |
|
|
|
<div class="enterprise-list"> |
|
|
|
<van-pull-refresh v-model="refreshing" @refresh="onRefresh"> |
|
|
|
<van-list v-model:loading="loading" :finished="finished" finished-text="" @load="onLoad" |
|
|
|
:offset="50"> |
|
|
|
<div v-for="(item, index) in enterpriseList" :key="index" class="enterprise-item" |
|
|
|
@click="selectEnterprise(item)"> |
|
|
|
<div class="item-qr"> |
|
|
|
@ -75,15 +78,18 @@ |
|
|
|
<div class="item-name">{{ item.enterpriseName }}</div> |
|
|
|
</div> |
|
|
|
<!-- 搜索不到企业时显示非深圳市注册企业提示 --> |
|
|
|
<div v-if="enterpriseList.length === 0 && !loading && searchKeyword" class="no-result-section"> |
|
|
|
<div v-if="enterpriseList.length === 0 && finished && !loading && searchKeyword" |
|
|
|
class="no-result-section"> |
|
|
|
<div class="no-result-card"> |
|
|
|
<div class="no-result-icon"> |
|
|
|
</div> |
|
|
|
<div class="no-result-title">非深圳市注册企业</div> |
|
|
|
<van-button class="no-result-btn" @click="handleOutOfCityEnterprise">市外注册企业信息录入 ></van-button> |
|
|
|
<van-button class="no-result-btn" |
|
|
|
@click="handleOutOfCityEnterprise">市外注册企业信息录入 ></van-button> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<van-loading v-if="loading" class="loading-more" /> |
|
|
|
</van-list> |
|
|
|
</van-pull-refresh> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</van-popup> |
|
|
|
@ -91,7 +97,7 @@ |
|
|
|
</template> |
|
|
|
|
|
|
|
<script setup name="ScanEntQRCode"> |
|
|
|
import { ref, reactive, computed, onMounted, onBeforeUnmount, nextTick } from 'vue'; |
|
|
|
import { ref, reactive, computed, onMounted, onBeforeUnmount } from 'vue'; |
|
|
|
import { useRouter, useRoute } from 'vue-router'; |
|
|
|
import { showFailToast, showSuccessToast, showToast, showConfirmDialog } from 'vant'; |
|
|
|
import { baseUrl, appEnv } from '@/config/env.js'; |
|
|
|
@ -332,6 +338,11 @@ const enterpriseList = ref([]); |
|
|
|
const loading = ref(false); |
|
|
|
const finished = ref(false); |
|
|
|
const error = ref(false); |
|
|
|
const refreshing = ref(false); |
|
|
|
|
|
|
|
// 分页参数 |
|
|
|
const pageNum = ref(1); |
|
|
|
const pageSize = ref(20); |
|
|
|
|
|
|
|
const reasonOptions = ref([]); |
|
|
|
|
|
|
|
@ -347,24 +358,22 @@ const showSearchPopup = () => { |
|
|
|
enterpriseList.value = []; |
|
|
|
finished.value = false; |
|
|
|
error.value = false; |
|
|
|
pageNum.value = 1; |
|
|
|
loading.value = true; |
|
|
|
|
|
|
|
if (reasonOptions.value.length === 0) { |
|
|
|
loadDict('no-scan-reason', (columns) => { |
|
|
|
reasonOptions.value = columns; |
|
|
|
const otherItem = filteredReasonOptions.value.find(item => item.text === '其他' || item.value === '其他'); |
|
|
|
selectedReason.value = otherItem ? otherItem.originalIndex : (filteredReasonOptions.value[0]?.originalIndex ?? 0); |
|
|
|
nextTick(() => { |
|
|
|
loadEnterprises(); |
|
|
|
}); |
|
|
|
fetchEnterprises(); |
|
|
|
}); |
|
|
|
} else { |
|
|
|
if (selectedReason.value === -1) { |
|
|
|
const otherItem = filteredReasonOptions.value.find(item => item.text === '其他' || item.value === '其他'); |
|
|
|
selectedReason.value = otherItem ? otherItem.originalIndex : (filteredReasonOptions.value[0]?.originalIndex ?? 0); |
|
|
|
} |
|
|
|
nextTick(() => { |
|
|
|
loadEnterprises(); |
|
|
|
}); |
|
|
|
fetchEnterprises(); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
@ -374,6 +383,8 @@ const closeSearchModal = () => { |
|
|
|
enterpriseList.value = []; |
|
|
|
finished.value = false; |
|
|
|
error.value = false; |
|
|
|
pageNum.value = 1; |
|
|
|
refreshing.value = false; |
|
|
|
}; |
|
|
|
|
|
|
|
const handleSearch = () => { |
|
|
|
@ -384,7 +395,9 @@ const handleSearch = () => { |
|
|
|
enterpriseList.value = []; |
|
|
|
finished.value = false; |
|
|
|
error.value = false; |
|
|
|
loadEnterprises(); |
|
|
|
pageNum.value = 1; |
|
|
|
loading.value = true; |
|
|
|
fetchEnterprises(); |
|
|
|
}; |
|
|
|
|
|
|
|
const clearSearch = () => { |
|
|
|
@ -392,15 +405,18 @@ const clearSearch = () => { |
|
|
|
enterpriseList.value = []; |
|
|
|
finished.value = false; |
|
|
|
error.value = false; |
|
|
|
loadEnterprises(); |
|
|
|
pageNum.value = 1; |
|
|
|
loading.value = true; |
|
|
|
fetchEnterprises(); |
|
|
|
}; |
|
|
|
|
|
|
|
const loadEnterprises = () => { |
|
|
|
const fetchEnterprises = () => { |
|
|
|
loading.value = true; |
|
|
|
error.value = false; |
|
|
|
|
|
|
|
const params = { |
|
|
|
pageSize: 20, |
|
|
|
pageNum: 1, |
|
|
|
pageSize: pageSize.value, |
|
|
|
pageNum: pageNum.value, |
|
|
|
orderByColumn: 'createTime', |
|
|
|
isAsc: 'desc', |
|
|
|
searchValue: searchKeyword.value.trim() || undefined |
|
|
|
@ -409,24 +425,47 @@ const loadEnterprises = () => { |
|
|
|
queryEnterpriseListAndQrInfo(params, (res) => { |
|
|
|
loading.value = false; |
|
|
|
if (res.code === 200) { |
|
|
|
// 接口返回结构直接是 { total, rows, code, msg },没有外层 data |
|
|
|
enterpriseList.value = res.rows || []; |
|
|
|
const rows = res.rows || []; |
|
|
|
const total = res.total || 0; |
|
|
|
|
|
|
|
if (refreshing.value) { |
|
|
|
enterpriseList.value = rows; |
|
|
|
refreshing.value = false; |
|
|
|
} else { |
|
|
|
enterpriseList.value = [...enterpriseList.value, ...rows]; |
|
|
|
} |
|
|
|
|
|
|
|
if (total <= pageSize.value * pageNum.value) { |
|
|
|
finished.value = true; |
|
|
|
} else { |
|
|
|
pageNum.value++; |
|
|
|
} |
|
|
|
} else { |
|
|
|
showFailToast(res.msg || '搜索企业失败'); |
|
|
|
error.value = true; |
|
|
|
finished.value = true; |
|
|
|
} |
|
|
|
}, (err) => { |
|
|
|
loading.value = false; |
|
|
|
error.value = true; |
|
|
|
finished.value = true; |
|
|
|
refreshing.value = false; |
|
|
|
console.error('搜索企业失败', err); |
|
|
|
showFailToast('搜索企业失败,请重试'); |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
const onLoad = () => { |
|
|
|
// 滚动加载,当前简单实现,如需分页可扩展 |
|
|
|
finished.value = true; |
|
|
|
if (refreshing.value) return; |
|
|
|
fetchEnterprises(); |
|
|
|
}; |
|
|
|
|
|
|
|
const onRefresh = () => { |
|
|
|
pageNum.value = 1; |
|
|
|
enterpriseList.value = []; |
|
|
|
finished.value = false; |
|
|
|
loading.value = true; |
|
|
|
fetchEnterprises(); |
|
|
|
}; |
|
|
|
|
|
|
|
const selectEnterprise = (item) => { |
|
|
|
|