新增农户功能升级:身份证OCR/OSS上传、头像采集、同名村检测、Region热度排序及表单体验优化
- Region 表新增热度列,热门省份优先显示 - 区县下拉按地级市分组、已录区县优先、支持全省搜索 - 组选择内置一组至二十组 - 银行卡号独立行+粗体预览,开户行独立行 - 新增农户类型:农户/个体户/合作社/经营集体/公司 - 身份证正反面支持高拍仪/摄像头OCR与手机扫码上传,附件存本地/OSS - 新增农户头像采集组件(摄像头/本地上传),预留人脸识别收购扩展 - 同名村弹窗提醒(防选错乡镇) - 编辑窗体禁止遮罩/Esc误关,整体加宽适配高频操作 - 修复二维码局域网手机无法访问(监听0.0.0.0、局域网IP识别、Vite代理兜底)
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
const BASE = 'http://localhost:5246'
|
||||
let token = ''
|
||||
const h = (json = false) => ({
|
||||
Authorization: `Bearer ${token}`,
|
||||
...(json ? { 'Content-Type': 'application/json' } : {})
|
||||
})
|
||||
|
||||
const api = async (path, opts = {}) => {
|
||||
const res = await fetch(BASE + path, opts)
|
||||
if (!res.ok) {
|
||||
const text = await res.text()
|
||||
throw new Error(`${res.status} ${path} => ${text.slice(0, 200)}`)
|
||||
}
|
||||
return res.json()
|
||||
}
|
||||
|
||||
token = (await api('/api/auth/login', {
|
||||
method: 'POST',
|
||||
headers: h(true),
|
||||
body: JSON.stringify({ username: 'admin', password: '123456' })
|
||||
})).token
|
||||
|
||||
const enc = encodeURIComponent
|
||||
|
||||
console.log('== /farmers/all 新字段(含老数据 NULL 兼容) ==')
|
||||
const all = await api('/api/farmers/all?limit=6', { headers: h() })
|
||||
all.forEach((f) => console.log(`id=${f.id} ${f.name} | province=${f.province || ''} county=${f.county || ''} township=${f.township || ''} village=${f.village} groupName=${f.groupName || ''}`))
|
||||
|
||||
console.log('== 村列表(锦江区/春熙路街道) ==')
|
||||
console.log((await api(`/api/regions/villages?county=${enc('锦江区')}&township=${enc('春熙路街道')}`, { headers: h() })).join(', '))
|
||||
|
||||
console.log('== 组列表(锦江区/春熙路街道/水井坊村) ==')
|
||||
console.log((await api(`/api/regions/groups?county=${enc('锦江区')}&township=${enc('春熙路街道')}&village=${enc('水井坊村')}`, { headers: h() })).join(', '))
|
||||
|
||||
console.log('== 乡镇列表(锦江区, 公开数据+农户补充) ==')
|
||||
console.log((await api(`/api/regions/townships?county=${enc('锦江区')}`, { headers: h() })).join(', '))
|
||||
|
||||
console.log('== 列表按县筛选(平南县) ==')
|
||||
const list = await api(`/api/farmers?county=${enc('平南县')}&page=1&pageSize=10`, { headers: h() })
|
||||
console.log(`total=${list.total}`)
|
||||
list.items.forEach((f) => console.log(`${f.name} | ${f.province}/${f.county}/${f.township}/${f.village}/${f.groupName} | ${f.phone} | ${f.bankAccount}`))
|
||||
|
||||
console.log('== 关键字搜索“水井坊” ==')
|
||||
const search = await api(`/api/farmers?keyword=${enc('水井坊')}&page=1&pageSize=10`, { headers: h() })
|
||||
console.log(`total=${search.total}`)
|
||||
search.items.forEach((f) => console.log(`${f.name} | ${f.county}/${f.township}/${f.village}/${f.groupName}`))
|
||||
|
||||
console.log('== 全量列表分页(page=1,pageSize=3,验证NULL兼容) ==')
|
||||
const p = await api('/api/farmers?page=1&pageSize=3', { headers: h() })
|
||||
console.log(`total=${p.total}`)
|
||||
p.items.forEach((f) => console.log(`id=${f.id} ${f.name} | province=${f.province || ''} | phone=${f.phone}`))
|
||||
Reference in New Issue
Block a user