This commit is contained in:
wyt 2025-07-16 18:24:30 +08:00
commit 72fddd06e5
7 changed files with 279 additions and 226 deletions

View File

@ -34,7 +34,8 @@
"vue": "3.4.31", "vue": "3.4.31",
"vue-cropper": "1.1.1", "vue-cropper": "1.1.1",
"vue-router": "4.4.0", "vue-router": "4.4.0",
"vuedraggable": "4.1.0" "vuedraggable": "4.1.0",
"vuex": "^4.0.2"
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-vue": "5.0.5", "@vitejs/plugin-vue": "5.0.5",

View File

@ -0,0 +1,10 @@
import request from '@/utils/request';
// 新增羊只基本信息
export function addSheep(data) {
return request({
url: '/produce/sheep', // 确保这是正确的后端接口地址
method: 'post',
data: data
});
}

View File

@ -17,142 +17,6 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="冰点" prop="freeze">
<el-input
v-model="queryParams.freeze"
placeholder="请输入冰点"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="相对密度" prop="density">
<el-input
v-model="queryParams.density"
placeholder="请输入相对密度"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="脂肪g/100g" prop="fat">
<el-input
v-model="queryParams.fat"
placeholder="请输入脂肪g/100g"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="蛋白质g/100g" prop="protein">
<el-input
v-model="queryParams.protein"
placeholder="请输入蛋白质g/100g"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="非脂g/100g" prop="nonFat">
<el-input
v-model="queryParams.nonFat"
placeholder="请输入非脂g/100g"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="干物质mg/100g" prop="dryMatter">
<el-input
v-model="queryParams.dryMatter"
placeholder="请输入干物质mg/100g"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="杂物质mg/100g" prop="impurity">
<el-input
v-model="queryParams.impurity"
placeholder="请输入杂物质mg/100g"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="乳糖g/100g" prop="lactose">
<el-input
v-model="queryParams.lactose"
placeholder="请输入乳糖g/100g"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="酸度" prop="acidity">
<el-input
v-model="queryParams.acidity"
placeholder="请输入酸度"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="ph" prop="ph">
<el-input
v-model="queryParams.ph"
placeholder="请输入ph"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="菌落总数" prop="bacterialColony">
<el-input
v-model="queryParams.bacterialColony"
placeholder="请输入菌落总数"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="乳铁蛋白" prop="lactoferrin">
<el-input
v-model="queryParams.lactoferrin"
placeholder="请输入乳铁蛋白"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="免疫球蛋白" prop="ig">
<el-input
v-model="queryParams.ig"
placeholder="请输入免疫球蛋白"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="体细胞" prop="somaticCell">
<el-input
v-model="queryParams.somaticCell"
placeholder="请输入体细胞"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="尿素氮" prop="usea">
<el-input
v-model="queryParams.usea"
placeholder="请输入尿素氮"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="脂蛋比" prop="fatRatio">
<el-input
v-model="queryParams.fatRatio"
placeholder="请输入脂蛋比"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="备注" prop="comment">
<el-input
v-model="queryParams.comment"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@ -198,36 +62,49 @@
v-hasPermi="['rawMilkTest:rawMilkTest:export']" v-hasPermi="['rawMilkTest:rawMilkTest:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="Menu"
@click="showColumnSelector = true"
>字段显示</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="rawMilkTestList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="rawMilkTestList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="${comment}" align="center" prop="id" /> <el-table-column label="检测日期" align="center" prop="datetime" width="180" v-if="visibleColumns.datetime">
<el-table-column label="检测日期" align="center" prop="datetime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.datetime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.datetime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="来源" align="center" prop="source" /> <el-table-column label="来源" align="center" prop="source" v-if="visibleColumns.source" />
<el-table-column label="冰点" align="center" prop="freeze" /> <el-table-column label="冰点" align="center" prop="freeze" v-if="visibleColumns.freeze" />
<el-table-column label="相对密度" align="center" prop="density" /> <el-table-column label="相对密度" align="center" prop="density" v-if="visibleColumns.density" />
<el-table-column label="脂肪g/100g" align="center" prop="fat" /> <el-table-column label="脂肪g/100g" align="center" prop="fat" v-if="visibleColumns.fat" />
<el-table-column label="蛋白质g/100g" align="center" prop="protein" /> <el-table-column label="蛋白质g/100g" align="center" prop="protein" v-if="visibleColumns.protein" />
<el-table-column label="非脂g/100g" align="center" prop="nonFat" /> <el-table-column label="非脂g/100g" align="center" prop="nonFat" v-if="visibleColumns.nonFat" />
<el-table-column label="干物质mg/100g" align="center" prop="dryMatter" /> <el-table-column label="干物质mg/100g" align="center" prop="dryMatter" v-if="visibleColumns.dryMatter" />
<el-table-column label="杂物质mg/100g" align="center" prop="impurity" /> <el-table-column label="杂质度mg/100g" align="center" prop="impurityDegree" v-if="visibleColumns.impurityDegree" />
<el-table-column label="乳糖g/100g" align="center" prop="lactose" /> <el-table-column label="乳糖g/100g" align="center" prop="lactose" v-if="visibleColumns.lactose" />
<el-table-column label="灰度g/100g" align="center" prop="ashContent" /> <el-table-column label="灰度g/100g" align="center" prop="ashContent" v-if="visibleColumns.ashContent" />
<el-table-column label="酸度" align="center" prop="acidity" /> <el-table-column label="酸度" align="center" prop="acidity" v-if="visibleColumns.acidity" />
<el-table-column label="ph" align="center" prop="ph" /> <el-table-column label="ph" align="center" prop="ph" v-if="visibleColumns.ph" />
<el-table-column label="菌落总数" align="center" prop="bacterialColony" /> <el-table-column label="菌落总数" align="center" prop="bacterialColony" v-if="visibleColumns.bacterialColony" />
<el-table-column label="乳铁蛋白" align="center" prop="lactoferrin" /> <el-table-column label="乳铁蛋白" align="center" prop="lactoferrin" v-if="visibleColumns.lactoferrin" />
<el-table-column label="免疫球蛋白" align="center" prop="ig" /> <el-table-column label="免疫球蛋白" align="center" prop="ig" v-if="visibleColumns.ig" />
<el-table-column label="体细胞" align="center" prop="somaticCell" /> <el-table-column label="体细胞" align="center" prop="somaticCell" v-if="visibleColumns.somaticCell" />
<el-table-column label="尿素氮" align="center" prop="usea" /> <el-table-column label="尿素氮" align="center" prop="usea" v-if="visibleColumns.usea" />
<el-table-column label="脂蛋比" align="center" prop="fatRatio" /> <el-table-column label="脂蛋比" align="center" prop="fatRatio" v-if="visibleColumns.fatRatio" />
<el-table-column label="备注" align="center" prop="comment" /> <el-table-column label="备注" align="center" prop="comment" v-if="visibleColumns.comment" />
<el-table-column label="创建人" align="center" prop="createBy" v-if="visibleColumns.createBy" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180" v-if="visibleColumns.createTime">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['rawMilkTest:rawMilkTest:edit']">修改</el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['rawMilkTest:rawMilkTest:edit']">修改</el-button>
@ -246,7 +123,7 @@
<!-- 添加或修改生乳检验记录对话框 --> <!-- 添加或修改生乳检验记录对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body> <el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="rawMilkTestRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="rawMilkTestRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="检测日期" prop="datetime"> <el-form-item label="检测日期" prop="datetime">
<el-date-picker clearable <el-date-picker clearable
v-model="form.datetime" v-model="form.datetime"
@ -265,10 +142,18 @@
<el-input v-model="form.density" placeholder="请输入相对密度" /> <el-input v-model="form.density" placeholder="请输入相对密度" />
</el-form-item> </el-form-item>
<el-form-item label="脂肪g/100g" prop="fat"> <el-form-item label="脂肪g/100g" prop="fat">
<el-input v-model="form.fat" placeholder="请输入脂肪g/100g" /> <el-input
v-model="form.fat"
placeholder="请输入脂肪g/100g"
@input="calculateFatRatio"
/>
</el-form-item> </el-form-item>
<el-form-item label="蛋白质g/100g" prop="protein"> <el-form-item label="蛋白质g/100g" prop="protein">
<el-input v-model="form.protein" placeholder="请输入蛋白质g/100g" /> <el-input
v-model="form.protein"
placeholder="请输入蛋白质g/100g"
@input="calculateFatRatio"
/>
</el-form-item> </el-form-item>
<el-form-item label="非脂g/100g" prop="nonFat"> <el-form-item label="非脂g/100g" prop="nonFat">
<el-input v-model="form.nonFat" placeholder="请输入非脂g/100g" /> <el-input v-model="form.nonFat" placeholder="请输入非脂g/100g" />
@ -276,14 +161,14 @@
<el-form-item label="干物质mg/100g" prop="dryMatter"> <el-form-item label="干物质mg/100g" prop="dryMatter">
<el-input v-model="form.dryMatter" placeholder="请输入干物质mg/100g" /> <el-input v-model="form.dryMatter" placeholder="请输入干物质mg/100g" />
</el-form-item> </el-form-item>
<el-form-item label="杂质mg/100g" prop="impurity"> <el-form-item label="杂mg/100g" prop="impurityDegree">
<el-input v-model="form.impurity" placeholder="请输入杂质mg/100g" /> <el-input v-model="form.impurityDegree" placeholder="请输入杂质mg/100g" />
</el-form-item> </el-form-item>
<el-form-item label="乳糖g/100g" prop="lactose"> <el-form-item label="乳糖g/100g" prop="lactose">
<el-input v-model="form.lactose" placeholder="请输入乳糖g/100g" /> <el-input v-model="form.lactose" placeholder="请输入乳糖g/100g" />
</el-form-item> </el-form-item>
<el-form-item label="灰度g/100g"> <el-form-item label="灰度g/100g" prop="ashContent">
<editor v-model="form.ashContent" :min-height="192"/> <el-input v-model="form.ashContent" placeholder="请输入灰度g/100g" />
</el-form-item> </el-form-item>
<el-form-item label="酸度" prop="acidity"> <el-form-item label="酸度" prop="acidity">
<el-input v-model="form.acidity" placeholder="请输入酸度" /> <el-input v-model="form.acidity" placeholder="请输入酸度" />
@ -307,11 +192,21 @@
<el-input v-model="form.usea" placeholder="请输入尿素氮" /> <el-input v-model="form.usea" placeholder="请输入尿素氮" />
</el-form-item> </el-form-item>
<el-form-item label="脂蛋比" prop="fatRatio"> <el-form-item label="脂蛋比" prop="fatRatio">
<el-input v-model="form.fatRatio" placeholder="请输入脂蛋比" /> <el-input
v-model="form.fatRatio"
placeholder="自动计算"
readonly
/>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="comment"> <el-form-item label="备注" prop="comment">
<el-input v-model="form.comment" placeholder="请输入备注" /> <el-input v-model="form.comment" placeholder="请输入备注" />
</el-form-item> </el-form-item>
<el-form-item label="创建人" v-if="form.id">
<el-input v-model="form.createBy" disabled />
</el-form-item>
<el-form-item label="创建时间" v-if="form.id">
<el-input v-model="form.createTime" disabled />
</el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
@ -320,14 +215,39 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<!-- 字段选择对话框 -->
<el-dialog title="字段显示设置" v-model="showColumnSelector" width="600px" append-to-body>
<el-checkbox-group v-model="selectedColumns">
<el-row>
<el-col :span="8" v-for="column in allColumns" :key="column.prop">
<el-checkbox :label="column.prop">{{ column.label }}</el-checkbox>
</el-col>
</el-row>
</el-checkbox-group>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="applyColumnSelection"> </el-button>
<el-button @click="showColumnSelector = false"> </el-button>
</div>
</template>
</el-dialog>
</div> </div>
</template> </template>
<script setup name="RawMilkTest"> <script setup name="RawMilkTest">
import { listRawMilkTest, getRawMilkTest, delRawMilkTest, addRawMilkTest, updateRawMilkTest } from "@/api/dairyProducts/rawMilkTest/rawMilkTest.js" import { listRawMilkTest, getRawMilkTest, delRawMilkTest, addRawMilkTest, updateRawMilkTest } from "@/api/dairyProducts/rawMilkTest/rawMilkTest.js"
import { getCurrentInstance, ref, reactive, toRefs, onMounted } from 'vue'
import { parseTime } from '@/utils/ruoyi'
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
//
const getCurrentUsername = () => {
const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}')
return userInfo.userName || userInfo.username || userInfo.nickName || 'admin'
}
const rawMilkTestList = ref([]) const rawMilkTestList = ref([])
const open = ref(false) const open = ref(false)
const loading = ref(true) const loading = ref(true)
@ -337,6 +257,51 @@ const single = ref(true)
const multiple = ref(true) const multiple = ref(true)
const total = ref(0) const total = ref(0)
const title = ref("") const title = ref("")
const showColumnSelector = ref(false)
//
const allColumns = ref([
{ prop: 'datetime', label: '检测日期' },
{ prop: 'source', label: '来源' },
{ prop: 'freeze', label: '冰点' },
{ prop: 'density', label: '相对密度' },
{ prop: 'fat', label: '脂肪g/100g' },
{ prop: 'protein', label: '蛋白质g/100g' },
{ prop: 'nonFat', label: '非脂g/100g' },
{ prop: 'dryMatter', label: '干物质mg/100g' },
{ prop: 'impurityDegree', label: '杂质度mg/100g' },
{ prop: 'lactose', label: '乳糖g/100g' },
{ prop: 'ashContent', label: '灰度g/100g' },
{ prop: 'acidity', label: '酸度' },
{ prop: 'ph', label: 'ph' },
{ prop: 'bacterialColony', label: '菌落总数' },
{ prop: 'lactoferrin', label: '乳铁蛋白' },
{ prop: 'ig', label: '免疫球蛋白' },
{ prop: 'somaticCell', label: '体细胞' },
{ prop: 'usea', label: '尿素氮' },
{ prop: 'fatRatio', label: '脂蛋比' },
{ prop: 'comment', label: '备注' },
{ prop: 'createBy', label: '创建人' },
{ prop: 'createTime', label: '创建时间' }
])
//
const selectedColumns = ref([
'datetime', 'source', 'freeze', 'density', 'fat', 'protein', 'nonFat',
'dryMatter', 'impurityDegree', 'lactose', 'ashContent', 'acidity', 'ph',
'bacterialColony', 'lactoferrin', 'ig', 'somaticCell', 'usea', 'fatRatio',
'comment', 'createBy', 'createTime'
])
//
const visibleColumns = ref({})
//
const initVisibleColumns = () => {
allColumns.value.forEach(column => {
visibleColumns.value[column.prop] = selectedColumns.value.includes(column.prop)
})
}
const data = reactive({ const data = reactive({
form: {}, form: {},
@ -344,32 +309,43 @@ const data = reactive({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
datetime: null, datetime: null,
source: null, source: null
freeze: null,
density: null,
fat: null,
protein: null,
nonFat: null,
dryMatter: null,
impurity: null,
lactose: null,
ashContent: null,
acidity: null,
ph: null,
bacterialColony: null,
lactoferrin: null,
ig: null,
somaticCell: null,
usea: null,
fatRatio: null,
comment: null,
}, },
rules: { rules: {
datetime: [
{ required: true, message: "检测日期不能为空", trigger: "blur" }
],
source: [
{ required: true, message: "来源不能为空", trigger: "blur" }
],
//
} }
}) })
const { queryParams, form, rules } = toRefs(data) const { queryParams, form, rules } = toRefs(data)
//
const applyColumnSelection = () => {
initVisibleColumns()
showColumnSelector.value = false
}
//
const calculateFatRatio = () => {
try {
const fat = parseFloat(form.value.fat)
const protein = parseFloat(form.value.protein)
if (!isNaN(fat) && !isNaN(protein) && protein !== 0) {
form.value.fatRatio = (fat / protein).toFixed(4) // 4
} else {
form.value.fatRatio = ""
}
} catch (e) {
form.value.fatRatio = ""
}
}
/** 查询生乳检验记录列表 */ /** 查询生乳检验记录列表 */
function getList() { function getList() {
loading.value = true loading.value = true
@ -377,6 +353,8 @@ function getList() {
rawMilkTestList.value = response.rows rawMilkTestList.value = response.rows
total.value = response.total total.value = response.total
loading.value = false loading.value = false
}).catch(() => {
loading.value = false
}) })
} }
@ -398,7 +376,7 @@ function reset() {
protein: null, protein: null,
nonFat: null, nonFat: null,
dryMatter: null, dryMatter: null,
impurity: null, impurityDegree: null,
lactose: null, lactose: null,
ashContent: null, ashContent: null,
acidity: null, acidity: null,
@ -409,9 +387,7 @@ function reset() {
somaticCell: null, somaticCell: null,
usea: null, usea: null,
fatRatio: null, fatRatio: null,
comment: null, comment: null
createBy: null,
createTime: null
} }
proxy.resetForm("rawMilkTestRef") proxy.resetForm("rawMilkTestRef")
} }
@ -440,6 +416,20 @@ function handleAdd() {
reset() reset()
open.value = true open.value = true
title.value = "添加生乳检验记录" title.value = "添加生乳检验记录"
// YYYY-MM-DD HH:mm:ss
form.value.createBy = getCurrentUsername()
form.value.createTime = new Date().toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
}).replace(/\//g, '-')
//
form.value.fatRatio = ""
} }
/** 修改按钮操作 */ /** 修改按钮操作 */
@ -448,8 +438,12 @@ function handleUpdate(row) {
const _id = row.id || ids.value const _id = row.id || ids.value
getRawMilkTest(_id).then(response => { getRawMilkTest(_id).then(response => {
form.value = response.data form.value = response.data
//
calculateFatRatio()
open.value = true open.value = true
title.value = "修改生乳检验记录" title.value = "修改生乳检验记录"
}).catch(() => {
proxy.$modal.msgError("获取数据失败")
}) })
} }
@ -457,19 +451,31 @@ function handleUpdate(row) {
function submitForm() { function submitForm() {
proxy.$refs["rawMilkTestRef"].validate(valid => { proxy.$refs["rawMilkTestRef"].validate(valid => {
if (valid) { if (valid) {
if (form.value.id != null) { //
updateRawMilkTest(form.value).then(response => { if (form.value.id == null) {
proxy.$modal.msgSuccess("修改成功") form.value.createBy = getCurrentUsername()
open.value = false form.value.createTime = new Date().toLocaleString('zh-CN', {
getList() year: 'numeric',
}) month: '2-digit',
} else { day: '2-digit',
addRawMilkTest(form.value).then(response => { hour: '2-digit',
proxy.$modal.msgSuccess("新增成功") minute: '2-digit',
open.value = false second: '2-digit'
getList() }).replace(/\//g, '-')
})
} }
const savePromise = form.value.id
? updateRawMilkTest(form.value)
: addRawMilkTest(form.value)
savePromise.then(response => {
proxy.$modal.msgSuccess(form.value.id ? "修改成功" : "新增成功")
open.value = false
getList()
}).catch(error => {
console.error("保存失败:", error)
proxy.$modal.msgError("操作失败,请重试")
})
} }
}) })
} }
@ -482,7 +488,10 @@ function handleDelete(row) {
}).then(() => { }).then(() => {
getList() getList()
proxy.$modal.msgSuccess("删除成功") proxy.$modal.msgSuccess("删除成功")
}).catch(() => {}) }).catch(error => {
console.error("删除失败:", error)
proxy.$modal.msgError("删除失败")
})
} }
/** 导出按钮操作 */ /** 导出按钮操作 */
@ -492,5 +501,8 @@ function handleExport() {
}, `rawMilkTest_${new Date().getTime()}.xlsx`) }, `rawMilkTest_${new Date().getTime()}.xlsx`)
} }
getList() onMounted(() => {
initVisibleColumns()
getList()
})
</script> </script>

View File

@ -109,7 +109,7 @@
<script setup> <script setup>
import { ref } from 'vue'; import { ref } from 'vue';
import { addSheep } from '@/api/produce/manage_sheep/add_sheep/add_sheep'; import { addSheep } from '@/api/produce/manage_sheep/add_sheep/add_sheep';
import { listSheepfold_management as listSheepfold } from '@/api/sheepfold_management/sheepfold_management'; import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management';
const form = ref({ const form = ref({
earNumber: '', earNumber: '',
@ -143,21 +143,24 @@ const rules = {
}; };
// //
const submitForm = () => { const submitForm = () => {
formRef.value.validate((valid) => { formRef.value.validate((valid) => {
console.log('表单验证结果:', valid);
if (valid) { if (valid) {
addSheep(form.value) addSheep(form.value) // API addSheep @/api/sheep/sheep.js
.then(response => { .then(response => {
console.log('后端响应:', response);
if (response.code === 200) { if (response.code === 200) {
alert('新增成功'); alert('新增成功');
resetForm(); resetForm();
// list
} else { } else {
alert(response.msg || '新增失败'); alert(response.msg || '新增失败');
} }
}) })
.catch(error => {
console.error('新增失败:', error);
alert('新增失败,请稍后重试');
});
} else { } else {
alert('请填写所有必填字段'); alert('请填写所有必填字段');
} }

View File

@ -107,9 +107,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="转群原因" prop="reason"> <el-form-item label="转群原因" prop="reason">
<el-select v-model="form.reason" placeholder="请选择转群原因"> <el-select v-model="form.reason" placeholder="请选择转群原因" clearable>
<el-option v-for="dict in trans_group_reason" :key="dict.value" :label="dict.label" <el-option v-for="dict in trans_group_reason" :key="dict.value" :label="dict.label" :value="dict.value" />
:value="dict.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="技术员" prop="technician"> <el-form-item label="技术员" prop="technician">
@ -134,15 +133,16 @@
<el-form-item label="羊只id"> <el-form-item label="羊只id">
<el-input v-model="approveForm.sheepId" disabled /> <el-input v-model="approveForm.sheepId" disabled />
</el-form-item> </el-form-item>
<el-form-item label="转入羊舍">
<el-input v-model="approveForm.foldTo" disabled />
</el-form-item>
<el-form-item label="转出羊舍"> <el-form-item label="转出羊舍">
<el-input v-model="approveForm.foldFrom" disabled /> <el-input :value="sheepfoldNameMap[approveForm.foldFrom] || approveForm.foldFrom" disabled />
</el-form-item>
<el-form-item label="转入羊舍">
<el-input :value="sheepfoldNameMap[approveForm.foldTo] || approveForm.foldTo" disabled />
</el-form-item> </el-form-item>
<el-form-item label="转群原因"> <el-form-item label="转群原因">
<el-select v-model="approveForm.reason" disabled> <el-select v-model="approveForm.reason" disabled>
<el-option v-for="dict in trans_group_reason" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option :label="trans_group_reason.find(d => d.value == approveForm.reason)?.label || ''"
:value="approveForm.reason" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="技术员"> <el-form-item label="技术员">
@ -163,7 +163,8 @@
<script setup name="Trans_group"> <script setup name="Trans_group">
import { listTrans_group, getTrans_group, delTrans_group, addTrans_group, updateTrans_group } from "@/api/produce/manage_sheep/trans_group/trans_group" import { listTrans_group, getTrans_group, delTrans_group, addTrans_group, updateTrans_group } from "@/api/produce/manage_sheep/trans_group/trans_group"
import { listSheepfold_management as listSheepfold } from '@/api/sheepfold_management/sheepfold_management'; import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management';
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const { trans_group_reason, status } = proxy.useDict('trans_group_reason', 'status') const { trans_group_reason, status } = proxy.useDict('trans_group_reason', 'status')
@ -284,9 +285,12 @@ function handleUpdate(row) {
reset() reset()
const _id = row.id || ids.value const _id = row.id || ids.value
getTrans_group(_id).then(response => { getTrans_group(_id).then(response => {
form.value = response.data const data = response.data
data.foldFrom = Number(data.foldFrom)
data.foldTo = Number(data.foldTo)
data.reason = String(data.reason)
form.value = data
open.value = true open.value = true
title.value = "修改转群记录"
}) })
} }
@ -329,7 +333,6 @@ function handleExport() {
}, `trans_group_${new Date().getTime()}.xlsx`); }, `trans_group_${new Date().getTime()}.xlsx`);
} }
getList()
// //
const approveDialog = ref(false); const approveDialog = ref(false);
@ -337,7 +340,6 @@ const approveForm = ref({});
// //
function handleApprove(row) { function handleApprove(row) {
//
approveForm.value = { ...row }; approveForm.value = { ...row };
approveDialog.value = true; approveDialog.value = true;
} }
@ -366,7 +368,7 @@ function handleApproveReject() {
}); });
} }
// //
const sheepfoldOptions = ref([]); const sheepfoldOptions = ref([]);
function getSheepfoldOptions() { function getSheepfoldOptions() {
@ -376,7 +378,32 @@ function getSheepfoldOptions() {
} }
onMounted(() => { onMounted(() => {
getList();
getSheepfoldOptions(); getSheepfoldOptions();
}); });
const sheepfoldNameMap = ref({})
function loadSheepfoldMap() {
listSheepfold({ pageNum: 1, pageSize: 9999 }).then(res => {
sheepfoldNameMap.value = res.rows.reduce((acc, item) => {
acc[item.id] = item.sheepfoldName
return acc
}, {})
})
}
onMounted(() => {
nextTick(() => {
if (trans_group_reason.value && trans_group_reason.value.length) {
trans_group_reason.value.forEach(item => {
item.value = Number(item.value)
})
}
loadSheepfoldMap()
})
})
getList()
</script> </script>

View File

@ -94,7 +94,7 @@
<script setup name="castrate"> <script setup name="castrate">
import { listCastrate, getCastrate, delCastrate, addCastrate, updateCastrate } from "@/api/produce/other/castrate/castrate" import { listCastrate, getCastrate, delCastrate, addCastrate, updateCastrate } from "@/api/produce/other/castrate/castrate"
import { listSheepfold_management as listSheepfold } from '@/api/sheepfold_management/sheepfold_management'; import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management';
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()

View File

@ -94,7 +94,7 @@
<script setup name="FixHoof"> <script setup name="FixHoof">
import { listFixHoof, getFixHoof, delFixHoof, addFixHoof, updateFixHoof } from "@/api/produce/other/fixHoof/fixHoof" import { listFixHoof, getFixHoof, delFixHoof, addFixHoof, updateFixHoof } from "@/api/produce/other/fixHoof/fixHoof"
import { listSheepfold_management as listSheepfold } from '@/api/sheepfold_management/sheepfold_management'; import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management';
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()