提交 a5aa2470 作者: 宇宙超人

基地管理

上级 52cdf723
......@@ -10,6 +10,17 @@ enum Api {
getFarmBaseList = '/farmbase/getFarmBaseList',
}
/**
* 农场基地管理-通过id查询
* @param params
* @returns
*/
export function getFarmbaseInfoById(params: any = {}) {
return otherHttp.get({
url: '/farmbase/queryById',
params,
})
}
/**
* 删除基地
* @param id
* @returns
......@@ -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
* @return
......
......@@ -185,8 +185,18 @@ const rules = {
{ required: true, message: '请选择基地类型', trigger: 'change' }
],
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: [
{
......@@ -218,17 +228,26 @@ const rules = {
{ min: 2, max: 100, message: '种植作物长度在2-100个字符之间', trigger: 'blur' }
],
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:[
{required: true, message: '请上传身份证明', trigger: 'change',type:'array'}
identityProveUrl: [
{ required: true, message: '请上传身份证明', trigger: 'change', type: 'array' }
],
landProveUrl:[
{required: true, message: '请上传场地证明', trigger: 'change',type:'array'}
landProveUrl: [
{ required: true, message: '请上传场地证明', trigger: 'change', type: 'array' }
],
productionProveUrl:[
{required: true, message: '请上传生产证明', trigger: 'change',type:'array'}
productionProveUrl: [
{ required: true, message: '请上传生产证明', trigger: 'change', type: 'array' }
]
}
function handleChangeFarmType(e) {
......@@ -305,46 +324,123 @@ const deletePic = (event: any, key) => {
// 提交表单
const submitForm = async () => {
try {
// 先进行表单验证
const valid = await formRef.value.validate()
if (valid) {
if (!valid) {
return
}
loading.value = true
// 这里应该调用提交API
let paramData = { ...formData };
paramData.baseImages = paramData.baseImages.join(',');
paramData.identityProveUrl = paramData.identityProveUrl.join(',');
paramData.landProveUrl = paramData.landProveUrl.join(',');
paramData.productionProveUrl = paramData.productionProveUrl.join(',');
paramData.qualityCertificateUrl = paramData.qualityCertificateUrl.join(',');
paramData.otherMaterialUrl = paramData.otherMaterialUrl.join(',');
NongchangAPI.addFarmbase(paramData).then(res => {
loading.value = false
uni.showToast({ title: '提交成功', icon: 'success' })
// 准备提交数据
const submitData = { ...formData }
// 将数组字段转换为逗号分隔的字符串
const arrayFields = [
'baseImages',
'identityProveUrl',
'landProveUrl',
'productionProveUrl',
'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(() => {
uni.navigateBack()
}, 800)
}).catch(err => {
loading.value = false;
Message.toast(err.message)
}, 1500)
} catch (error) {
console.error('API调用失败:', error)
uni.showToast({
title: error.message || '提交失败,请重试',
icon: 'none',
duration: 2000
})
} finally {
loading.value = false
}
} catch (error) {
console.log('表单验证失败:', error)
uni.showToast({ title: '请完善表单信息', icon: 'none' })
loading.value = false
uni.showToast({
title: '请完善表单信息',
icon: 'none',
duration: 2000
})
}
}
const farmStore = useFarmStore()
onLoad(() => {
onLoad((pageOptions) => {
// 页面加载时的初始化操作
const farmInfo = farmStore.getFarm
if (farmInfo) {
formData.farmId = farmInfo.id
}
// 修复:修改页面上定义的 options 对象中的 farmType
options.farmType = dictStore.getDictList['farm_type'].map((item) => {
return {
value: item.value,
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>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论