提交 a5aa2470 作者: 宇宙超人

基地管理

上级 52cdf723
...@@ -10,6 +10,17 @@ enum Api { ...@@ -10,6 +10,17 @@ enum Api {
getFarmBaseList = '/farmbase/getFarmBaseList', getFarmBaseList = '/farmbase/getFarmBaseList',
} }
/** /**
* 农场基地管理-通过id查询
* @param params
* @returns
*/
export function getFarmbaseInfoById(params: any = {}) {
return otherHttp.get({
url: '/farmbase/queryById',
params,
})
}
/**
* 删除基地 * 删除基地
* @param id * @param id
* @returns * @returns
...@@ -31,6 +42,17 @@ export function addFarmbase(params = {}) { ...@@ -31,6 +42,17 @@ export function addFarmbase(params = {}) {
}) })
} }
/** /**
* 编辑基地
* @param params
* @returns
*/
export function editFarmbase(params = {}) {
return otherHttp.post({
url: '/farmbase/edit',
params,
})
}
/**
* 基地列表 * 基地列表
* @param {any} params * @param {any} params
* @return * @return
......
...@@ -185,8 +185,18 @@ const rules = { ...@@ -185,8 +185,18 @@ const rules = {
{ required: true, message: '请选择基地类型', trigger: 'change' } { required: true, message: '请选择基地类型', trigger: 'change' }
], ],
scale: [ scale: [
{ required: true, message: '请输入规模', trigger: 'blur' }, {
{ pattern: /^[1-9]\d*$/, message: '规模必须为正整数', trigger: 'blur' } validator: (rule: any, value: any, callback: any) => {
if (!value || value === '') {
callback(new Error('请输入规模'))
} else if (!/^[1-9]\d*$/.test(value.toString())) {
callback(new Error('规模必须为正整数'))
} else {
callback()
}
},
trigger: ['blur', 'change']
}
], ],
province: [ province: [
{ {
...@@ -218,17 +228,26 @@ const rules = { ...@@ -218,17 +228,26 @@ const rules = {
{ min: 2, max: 100, message: '种植作物长度在2-100个字符之间', trigger: 'blur' } { min: 2, max: 100, message: '种植作物长度在2-100个字符之间', trigger: 'blur' }
], ],
operationYears: [ operationYears: [
{ required: true, message: '请输入经营年限', trigger: 'blur' }, {
{ pattern: /^[1-9]\d*$/, message: '经营年限必须为正整数', trigger: 'blur' } validator: (rule: any, value: any, callback: any) => {
if (value && !/^[1-9]\d*$/.test(value.toString())) {
callback(new Error('经营年限必须为正整数'))
} else {
callback()
}
},
message: '经营年限必须为正整数',
trigger: ['blur', 'change']
}
], ],
identityProveUrl:[ identityProveUrl: [
{required: true, message: '请上传身份证明', trigger: 'change',type:'array'} { required: true, message: '请上传身份证明', trigger: 'change', type: 'array' }
], ],
landProveUrl:[ landProveUrl: [
{required: true, message: '请上传场地证明', trigger: 'change',type:'array'} { required: true, message: '请上传场地证明', trigger: 'change', type: 'array' }
], ],
productionProveUrl:[ productionProveUrl: [
{required: true, message: '请上传生产证明', trigger: 'change',type:'array'} { required: true, message: '请上传生产证明', trigger: 'change', type: 'array' }
] ]
} }
function handleChangeFarmType(e) { function handleChangeFarmType(e) {
...@@ -305,46 +324,123 @@ const deletePic = (event: any, key) => { ...@@ -305,46 +324,123 @@ const deletePic = (event: any, key) => {
// 提交表单 // 提交表单
const submitForm = async () => { const submitForm = async () => {
try { try {
// 先进行表单验证
const valid = await formRef.value.validate() const valid = await formRef.value.validate()
if (valid) { if (!valid) {
return
}
loading.value = true loading.value = true
// 这里应该调用提交API
let paramData = { ...formData }; // 准备提交数据
paramData.baseImages = paramData.baseImages.join(','); const submitData = { ...formData }
paramData.identityProveUrl = paramData.identityProveUrl.join(',');
paramData.landProveUrl = paramData.landProveUrl.join(','); // 将数组字段转换为逗号分隔的字符串
paramData.productionProveUrl = paramData.productionProveUrl.join(','); const arrayFields = [
paramData.qualityCertificateUrl = paramData.qualityCertificateUrl.join(','); 'baseImages',
paramData.otherMaterialUrl = paramData.otherMaterialUrl.join(','); 'identityProveUrl',
NongchangAPI.addFarmbase(paramData).then(res => { 'landProveUrl',
loading.value = false 'productionProveUrl',
uni.showToast({ title: '提交成功', icon: 'success' }) 'qualityCertificateUrl',
'otherMaterialUrl'
]
arrayFields.forEach(field => {
if (Array.isArray(submitData[field])) {
submitData[field] = submitData[field].filter(item => item?.trim()).join(',')
}
})
// 根据是否有ID决定调用编辑还是新增接口
const apiCall = submitData.id ? NongchangAPI.editFarmbase : NongchangAPI.addFarmbase
try {
await apiCall(submitData)
uni.showToast({
title: '提交成功',
icon: 'success',
duration: 1500
})
// 延迟返回上一页
setTimeout(() => { setTimeout(() => {
uni.navigateBack() uni.navigateBack()
}, 800) }, 1500)
}).catch(err => {
loading.value = false; } catch (error) {
Message.toast(err.message) console.error('API调用失败:', error)
uni.showToast({
title: error.message || '提交失败,请重试',
icon: 'none',
duration: 2000
}) })
} finally {
loading.value = false
} }
} catch (error) { } catch (error) {
console.log('表单验证失败:', error) console.log('表单验证失败:', error)
uni.showToast({ title: '请完善表单信息', icon: 'none' }) loading.value = false
uni.showToast({
title: '请完善表单信息',
icon: 'none',
duration: 2000
})
} }
} }
const farmStore = useFarmStore() const farmStore = useFarmStore()
onLoad(() => { onLoad((pageOptions) => {
// 页面加载时的初始化操作 // 页面加载时的初始化操作
const farmInfo = farmStore.getFarm const farmInfo = farmStore.getFarm
if (farmInfo) { if (farmInfo) {
formData.farmId = farmInfo.id formData.farmId = farmInfo.id
} }
// 修复:修改页面上定义的 options 对象中的 farmType
options.farmType = dictStore.getDictList['farm_type'].map((item) => { options.farmType = dictStore.getDictList['farm_type'].map((item) => {
return { return {
value: item.value, value: item.value,
text: item.text, text: item.text,
} }
}) })
if (pageOptions.id) {
NongchangAPI.getFarmbaseInfoById({ id: pageOptions.id }).then(res => {
if (res) {
// 将 res 中的数据赋值到 formData 中,key 保持一致
Object.keys(res).forEach(key => {
if (key in formData) {
// 如果是数组类型的字段且返回的是字符串,需要转换为数组
if (['baseImages', 'identityProveUrl', 'landProveUrl', 'productionProveUrl', 'qualityCertificateUrl', 'otherMaterialUrl'].includes(key) &&
typeof res[key] === 'string') {
formData[key] = res[key].split(',').filter(item => item.trim() !== '')
} else {
formData[key] = res[key]
}
}
})
formData.id = res.id
formData.province = res.provinceName + res.cityName + res.districtName
// 根据 res.baseType 的值从 options.farmType 中查找对应的文本
if (res.baseType && options.farmType.length > 0) {
const foundItem = options.farmType.find((item: any) => item.value === res.baseType)
if (foundItem) {
formData.baseTypeText = foundItem.text
}
}
// 数据赋值完成后,延迟触发表单验证更新
setTimeout(() => {
if (formRef.value) {
// 逐个验证可能存在问题的字段
formRef.value.validateField('scale')
formRef.value.validateField('operationYears')
// 重新验证整个表单
formRef.value.validate()
}
}, 200)
}
})
}
}) })
</script> </script>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论