新增羊只,转群,修蹄,去势页面品种功能的完善
This commit is contained in:
@@ -1,13 +1,16 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!-- 顶部按钮 -->
|
||||
<el-button type="warning" icon="Upload" @click="handleExportForm">导出</el-button>
|
||||
<el-button type="primary" plain icon="Plus" @click="handleImport"
|
||||
v-hasPermi="['produce:add_sheep:import']">导入</el-button>
|
||||
|
||||
<!-- 新增/编辑表单 -->
|
||||
<el-form :model="form" ref="formRef" label-position="left" label-width="100px" style="margin-top:15px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="10">
|
||||
<el-form-item label="耳号" prop="earNumber">
|
||||
<el-input v-model="form.earNumber" placeholder="请输入羊只id" />
|
||||
<el-input v-model="form.earNumber" placeholder="请输入耳号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="10">
|
||||
@@ -18,6 +21,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="10">
|
||||
<el-form-item label="父号" prop="father">
|
||||
@@ -30,9 +34,10 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="10">
|
||||
<el-form-item label="出生体重" prop="bornWeight">
|
||||
<el-form-item label="出生体重(kg)" prop="bornWeight">
|
||||
<el-input v-model="form.bornWeight" placeholder="请输入出生体重" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -42,14 +47,15 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="10">
|
||||
<el-form-item label="性别" prop="gender">
|
||||
<el-select v-model="form.gender" placeholder="请选择性别">
|
||||
<el-option label="公" value="1" />
|
||||
<el-option label="母" value="0" />
|
||||
<el-option label="阉羊" value="2" />
|
||||
<el-option label="兼性" value="3" />
|
||||
<el-option label="公" :value="1" />
|
||||
<el-option label="母" :value="0" />
|
||||
<el-option label="阉羊" :value="2" />
|
||||
<el-option label="兼性" :value="3" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -59,10 +65,18 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="10">
|
||||
<el-form-item label="品种" prop="varietyId">
|
||||
<el-input v-model="form.varietyId" placeholder="请输入品种" />
|
||||
<el-select v-model="form.varietyId" placeholder="请选择品种" clearable>
|
||||
<el-option
|
||||
v-for="item in varietyOptions"
|
||||
:key="item.id"
|
||||
:label="item.variety"
|
||||
:value="Number(item.id)"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="10">
|
||||
@@ -71,6 +85,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="10">
|
||||
<el-form-item label="技术员" prop="technician">
|
||||
@@ -78,6 +93,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="16">
|
||||
<el-form-item label="备注" prop="comment">
|
||||
@@ -93,10 +109,20 @@
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<!-- 导入弹窗 -->
|
||||
<el-dialog title="导入羊只信息" v-model="importOpen" width="400px" append-to-body>
|
||||
<el-upload ref="uploadRef" :limit="1" accept=".xlsx,.xls" :action="importUrl" :headers="headers"
|
||||
:auto-upload="false" :on-success="handleImportSuccess" :on-error="handleImportError" drag>
|
||||
<i class="el-icon-upload"></i>
|
||||
<el-upload
|
||||
ref="uploadRef"
|
||||
:limit="1"
|
||||
accept=".xlsx,.xls"
|
||||
:action="importUrl"
|
||||
:headers="headers"
|
||||
:auto-upload="false"
|
||||
:on-success="handleImportSuccess"
|
||||
:on-error="handleImportError"
|
||||
drag
|
||||
>
|
||||
<i class="el-icon-upload" />
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
</el-upload>
|
||||
<template #footer>
|
||||
@@ -107,10 +133,15 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue';
|
||||
import { addSheep } from '@/api/produce/manage_sheep/add_sheep/add_sheep';
|
||||
import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management';
|
||||
import { ref, onMounted } from 'vue'
|
||||
import request from '@/utils/request'
|
||||
import { addSheep, exportSheepForm } from '@/api/produce/manage_sheep/add_sheep/add_sheep'
|
||||
import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import { getCurrentInstance } from 'vue'
|
||||
|
||||
const { proxy } = getCurrentInstance()
|
||||
/* -------------------- 表单 -------------------- */
|
||||
const form = ref({
|
||||
earNumber: '',
|
||||
sheepfold: '',
|
||||
@@ -123,50 +154,57 @@ const form = ref({
|
||||
varietyId: '',
|
||||
joinDate: '',
|
||||
comment: '',
|
||||
technician: '',
|
||||
});
|
||||
|
||||
const formRef = ref(null);
|
||||
technician: ''
|
||||
})
|
||||
const formRef = ref(null)
|
||||
|
||||
const rules = {
|
||||
earNumber: [{ required: true, message: '请输入耳号', trigger: 'blur' }],
|
||||
sheepfold: [{ required: true, message: '请输入羊舍', trigger: 'change' }],
|
||||
father: [{ message: '请输入父号', trigger: 'blur' }],
|
||||
mother: [{ message: '请输入母号', trigger: 'blur' }],
|
||||
sheepfold: [{ required: true, message: '请选择羊舍', trigger: 'change' }],
|
||||
bornWeight: [{ required: true, message: '请输入出生体重', trigger: 'blur' }],
|
||||
birthday: [{ required: true, message: '请选择出生日期', trigger: 'change' }],
|
||||
gender: [{ required: true, message: '请选择性别', trigger: 'change' }],
|
||||
parity: [{ message: '请输入胎次', trigger: 'blur' }],
|
||||
varietyId: [{ required: true, message: '请输入品种', trigger: 'blur' }],
|
||||
joinDate: [{ message: '请选择入群日期', trigger: 'change' }],
|
||||
technician: [{ message: '请输入技术员', trigger: 'blur' }],
|
||||
};
|
||||
varietyId: [{ required: true, message: '请选择品种', trigger: 'change' }]
|
||||
}
|
||||
|
||||
/* -------------------- 下拉数据 -------------------- */
|
||||
const sheepfoldOptions = ref([])
|
||||
const varietyOptions = ref([])
|
||||
|
||||
//表单验证 提交表单数据
|
||||
const submitForm = () => {
|
||||
formRef.value.validate((valid) => {
|
||||
if (valid) {
|
||||
addSheep(form.value) // 调用 API 方法,addSheep 应已在 @/api/sheep/sheep.js 中定义
|
||||
.then(response => {
|
||||
if (response.code === 200) {
|
||||
alert('新增成功');
|
||||
resetForm();
|
||||
// 可以在这里添加刷新列表的逻辑,例如调用 list 方法
|
||||
} else {
|
||||
alert(response.msg || '新增失败');
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('新增失败:', error);
|
||||
alert('新增失败,请稍后重试');
|
||||
});
|
||||
} else {
|
||||
alert('请填写所有必填字段');
|
||||
}
|
||||
});
|
||||
};
|
||||
const resetForm = () => {
|
||||
function getSheepfoldOptions() {
|
||||
listSheepfold({ pageNum: 1, pageSize: 9999 }).then(res => {
|
||||
sheepfoldOptions.value = res.rows || []
|
||||
})
|
||||
}
|
||||
|
||||
function getVarietyOptions() {
|
||||
request({
|
||||
url: '/base/variety/list',
|
||||
method: 'get',
|
||||
params: { pageNum: 1, pageSize: 9999 }
|
||||
}).then(res => {
|
||||
varietyOptions.value = res.rows || []
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------- 功能方法 -------------------- */
|
||||
function submitForm() {
|
||||
formRef.value.validate(valid => {
|
||||
if (!valid) return
|
||||
addSheep(form.value).then(res => {
|
||||
if (res.code === 200) {
|
||||
proxy.$modal.msgSuccess('新增成功')
|
||||
resetForm()
|
||||
} else {
|
||||
proxy.$modal.msgError(res.msg || '新增失败') // 这里显示“耳号已存在”等后端报错
|
||||
}
|
||||
}).catch(() => {
|
||||
proxy.$modal.msgError('请求异常,请稍后重试')
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function resetForm() {
|
||||
form.value = {
|
||||
earNumber: '',
|
||||
sheepfold: '',
|
||||
@@ -179,63 +217,66 @@ const resetForm = () => {
|
||||
varietyId: '',
|
||||
joinDate: '',
|
||||
comment: '',
|
||||
technician: '',
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
//导出
|
||||
import { exportSheepForm } from '@/api/produce/manage_sheep/add_sheep/add_sheep';
|
||||
technician: ''
|
||||
}
|
||||
}
|
||||
|
||||
function handleExportForm() {
|
||||
// 把当前表单数据直接传后端
|
||||
exportSheepForm(form.value).then(res => {
|
||||
// 使用 Ruoyi 自带的下载方法
|
||||
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
|
||||
const fileName = `羊只信息_${new Date().getTime()}.xlsx`;
|
||||
const link = document.createElement('a');
|
||||
link.href = URL.createObjectURL(blob);
|
||||
link.download = fileName;
|
||||
link.click();
|
||||
});
|
||||
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
|
||||
const link = document.createElement('a')
|
||||
link.href = URL.createObjectURL(blob)
|
||||
link.download = `羊只信息_${Date.now()}.xlsx`
|
||||
link.click()
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------- 导入 -------------------- */
|
||||
const uploadRef = ref(null)
|
||||
const importOpen = ref(false)
|
||||
const importUrl = ref(import.meta.env.VITE_APP_BASE_API + '/produce/manage_sheep/add_sheep/importData')
|
||||
const headers = ref({ Authorization: 'Bearer ' + getToken() })
|
||||
|
||||
//导入
|
||||
import { getToken } from '@/utils/auth';
|
||||
|
||||
const uploadRef = ref();
|
||||
const importOpen = ref(false);
|
||||
const importUrl = ref(import.meta.env.VITE_APP_BASE_API + '/produce/manage_sheep/add_sheep/importData');
|
||||
const headers = ref({ Authorization: 'Bearer ' + getToken() });
|
||||
|
||||
function handleImport() { importOpen.value = true; }
|
||||
function handleImport() {
|
||||
importOpen.value = true
|
||||
}
|
||||
function downloadTemplate() {
|
||||
proxy.download('/produce/manage_sheep/add_sheep/importTemplate', {}, `羊只模板_${Date.now()}.xlsx`);
|
||||
request({ url: '/produce/manage_sheep/add_sheep/importTemplate', method: 'get', responseType: 'blob' }).then(res => {
|
||||
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
|
||||
const link = document.createElement('a')
|
||||
link.href = URL.createObjectURL(blob)
|
||||
link.download = `羊只模板_${Date.now()}.xlsx`
|
||||
link.click()
|
||||
})
|
||||
}
|
||||
function submitUpload() { uploadRef.value?.submit(); }
|
||||
function submitUpload() {
|
||||
uploadRef.value?.submit()
|
||||
}
|
||||
|
||||
// 上传成功回调
|
||||
function handleImportSuccess(res) {
|
||||
proxy.$modal.msgSuccess(res.msg || '导入成功');
|
||||
importOpen.value = false;
|
||||
uploadRef.value?.clearFiles();
|
||||
if (res.code === 200) {
|
||||
proxy.$modal.msgSuccess(res.msg || '导入成功')
|
||||
importOpen.value = false
|
||||
uploadRef.value?.clearFiles()
|
||||
} else {
|
||||
// 业务失败
|
||||
proxy.$modal.msgError('导入失败:' + (res.msg || '未知原因'))
|
||||
}
|
||||
}
|
||||
|
||||
// 上传失败(网络/服务器异常)
|
||||
function handleImportError(err) {
|
||||
proxy.$modal.msgError(JSON.parse(err.message)?.msg || '导入失败');
|
||||
const msg = JSON.parse(err.message || '{}')?.msg || '网络异常'
|
||||
proxy.$modal.msgError('导入失败:' + msg)
|
||||
}
|
||||
|
||||
|
||||
/**获取羊舍数据 */
|
||||
const sheepfoldOptions = ref([]);
|
||||
function getSheepfoldOptions() {
|
||||
listSheepfold({ pageNum: 1, pageSize: 9999 }).then(res => {
|
||||
sheepfoldOptions.value = res.rows;
|
||||
});
|
||||
}
|
||||
/* -------------------- 初始化 -------------------- */
|
||||
onMounted(() => {
|
||||
getSheepfoldOptions();
|
||||
});
|
||||
|
||||
|
||||
getSheepfoldOptions()
|
||||
getVarietyOptions()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
Reference in New Issue
Block a user