干奶录入查询修改

This commit is contained in:
ll
2026-02-02 00:03:45 +08:00
parent 5d9c7b56c8
commit a748ca994e
2 changed files with 179 additions and 188 deletions

View File

@@ -25,6 +25,24 @@ export function getSheepIdByManageTags(manageTags) {
}) })
} }
// 远程搜索耳号列表
export function searchEarNumbers(query) {
return request({
url: '/drymilk/drymilk/searchEarNumbers',
method: 'get',
params: { query }
})
}
// 远程搜索技术员列表 (新增)
export function searchTechnicians(query) {
return request({
url: '/drymilk/drymilk/searchTechnicians',
method: 'get',
params: { query }
})
}
// 新增干奶记录 // 新增干奶记录
export function addDrymilk(data) { export function addDrymilk(data) {
return request({ return request({
@@ -49,20 +67,4 @@ export function delDrymilk(id) {
url: '/drymilk/drymilk/' + id, url: '/drymilk/drymilk/' + id,
method: 'delete' method: 'delete'
}) })
} }
// 查询羊舍列表下拉框
export function listSheepfoldOptions() {
return request({
url: '/drymilk/drymilk/sheepfoldList',
method: 'get'
})
}
// 查询技术员列表下拉框
export function listTechnicianOptions() {
return request({
url: '/drymilk/drymilk/technicianList',
method: 'get'
})
}

View File

@@ -1,14 +1,28 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px"> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
<el-form-item label="耳号" prop="manageTags">
<el-input <el-form-item label="耳号" prop="manageTagsList">
v-model="queryParams.manageTags" <el-select
placeholder="请输入耳号(空格隔开多个)" v-model="queryParams.manageTagsList"
multiple
filterable
remote
reserve-keyword
placeholder="请输入耳号搜索"
:remote-method="searchEarNumber"
:loading="earNumberLoading"
style="width: 240px"
clearable clearable
style="width: 220px" @change="handleQuery"
@keyup.enter="handleQuery" >
/> <el-option
v-for="item in earNumberOptions"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="干奶日期" style="width: 308px"> <el-form-item label="干奶日期" style="width: 308px">
@@ -22,13 +36,27 @@
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="技术员" prop="tecahnician"> <el-form-item label="技术员" prop="technicianList">
<el-input <el-select
v-model="queryParams.tecahnician" v-model="queryParams.technicianList"
placeholder="请输入技术员" multiple
filterable
remote
reserve-keyword
placeholder="请输入技术员搜索"
:remote-method="searchTechnician"
:loading="technicianLoading"
style="width: 200px"
clearable clearable
@keyup.enter="handleQuery" @change="handleQuery"
/> >
<el-option
v-for="item in technicianOptions"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="封闭剂" prop="status"> <el-form-item label="封闭剂" prop="status">
@@ -46,42 +74,16 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['drymilk:drymilk:add']">新增</el-button>
type="primary"
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['drymilk:drymilk:add']"
>新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['drymilk:drymilk:edit']">修改</el-button>
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['drymilk:drymilk:edit']"
>修改</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['drymilk:drymilk:remove']">删除</el-button>
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['drymilk:drymilk:remove']"
>删除</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['drymilk:drymilk:export']">导出</el-button>
type="warning"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['drymilk:drymilk:export']"
>导出</el-button>
</el-col> </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>
@@ -96,21 +98,12 @@
<el-table-column label="耳号" align="center" prop="manageTags" min-width="120" /> <el-table-column label="耳号" align="center" prop="manageTags" min-width="120" />
<el-table-column label="品种" align="center" prop="variety" /> <el-table-column label="品种" align="center" prop="variety" />
<el-table-column label="事件类型" align="center" prop="eventType" /> <el-table-column label="事件类型" align="center" prop="eventType" />
<el-table-column label="乳头封闭剂" align="center" prop="status"> <el-table-column label="乳头封闭剂" align="center" prop="status">
<template #default="scope"> <template #default="scope">
<el-tag v-if="scope.row.status === 1" type="success"></el-tag> <el-tag v-if="scope.row.status === 1" type="success"></el-tag>
<el-tag v-else type="info"></el-tag> <el-tag v-else type="info"></el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="是否在群" align="center" prop="isInHerd">
<template #default="scope">
<el-tag v-if="scope.row.isInHerd == '1'"></el-tag>
<el-tag v-else type="danger"></el-tag>
</template>
</el-table-column>
<el-table-column label="转入羊舍" align="center" prop="sheepfoldName" /> <el-table-column label="转入羊舍" align="center" prop="sheepfoldName" />
<el-table-column label="技术员" align="center" prop="tecahnician" /> <el-table-column label="技术员" align="center" prop="tecahnician" />
<el-table-column label="备注" align="center" prop="comment" show-overflow-tooltip /> <el-table-column label="备注" align="center" prop="comment" show-overflow-tooltip />
@@ -132,7 +125,6 @@
<el-dialog :title="title" v-model="open" width="600px" append-to-body> <el-dialog :title="title" v-model="open" width="600px" append-to-body>
<el-form ref="drymilkRef" :model="form" :rules="rules" label-width="100px"> <el-form ref="drymilkRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="耳号" prop="manageTags"> <el-form-item label="耳号" prop="manageTags">
<el-input <el-input
v-if="!form.id" v-if="!form.id"
@@ -143,14 +135,9 @@
/> />
<el-input v-else v-model="form.manageTags" placeholder="请输入耳号" disabled /> <el-input v-else v-model="form.manageTags" placeholder="请输入耳号" disabled />
</el-form-item> </el-form-item>
<el-form-item label="干奶日期" prop="datetime"> <el-form-item label="干奶日期" prop="datetime">
<el-date-picker clearable <el-date-picker clearable v-model="form.datetime" type="date" value-format="YYYY-MM-DD" placeholder="请选择干奶日期"></el-date-picker>
v-model="form.datetime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择干奶日期">
</el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="乳头封闭剂" prop="status"> <el-form-item label="乳头封闭剂" prop="status">
@@ -161,36 +148,17 @@
</el-form-item> </el-form-item>
<el-form-item label="转入羊舍" prop="sheepfold"> <el-form-item label="转入羊舍" prop="sheepfold">
<el-select <el-select v-model="form.sheepfold" filterable placeholder="请输入关键字选择" style="width: 100%">
v-model="form.sheepfold" <el-option v-for="item in sheepfoldOptions" :key="item.id" :label="item.name" :value="item.id"></el-option>
filterable
placeholder="请输入关键字选择"
style="width: 100%">
<el-option
v-for="item in sheepfoldOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="技术员" prop="tecahnician"> <el-form-item label="技术员" prop="tecahnician">
<el-select <el-select v-model="form.tecahnician" filterable allow-create default-first-option placeholder="请输入或选择技术员">
v-model="form.tecahnician" <el-option v-for="user in userOptions" :key="user.userName" :label="user.nickName" :value="user.nickName"></el-option>
filterable
allow-create
default-first-option
placeholder="请输入或选择技术员">
<el-option
v-for="user in userOptions"
:key="user.userName"
:label="user.nickName"
:value="user.nickName">
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="comment"> <el-form-item label="备注" prop="comment">
<el-input v-model="form.comment" type="textarea" placeholder="请输入备注" /> <el-input v-model="form.comment" type="textarea" placeholder="请输入备注" />
</el-form-item> </el-form-item>
@@ -206,9 +174,10 @@
</template> </template>
<script setup name="Drymilk"> <script setup name="Drymilk">
import { listDrymilk, getDrymilk, delDrymilk, addDrymilk, updateDrymilk } from "@/api/drymilk/drymilk" import { listDrymilk, getDrymilk, delDrymilk, addDrymilk, updateDrymilk, searchEarNumbers, searchTechnicians } from "@/api/drymilk/drymilk"
import { listUser } from "@/api/system/user"; // 引入用户查询API import { listUser } from "@/api/system/user";
import axios from 'axios'; // 如果没有封装好的羊舍API这里示意通常应有 api/base/sheepfold.js import axios from 'axios';
import { getToken } from "@/utils/auth";
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
@@ -225,94 +194,117 @@ const dateRange = ref([])
const sheepfoldOptions = ref([]) const sheepfoldOptions = ref([])
const userOptions = ref([]) const userOptions = ref([])
// 耳号搜索变量
const earNumberLoading = ref(false)
const earNumberOptions = ref([])
// 技术员搜索变量
const technicianLoading = ref(false)
const technicianOptions = ref([])
const data = reactive({ const data = reactive({
form: {}, form: {},
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
manageTags: null, manageTags: null,
manageTagsList: [],
technicianList: [], // 技术员多选列表
tecahnician: null, // 兼容旧字段
variety: null, variety: null,
status: null, status: null,
tecahnician: null,
}, },
rules: { rules: {
manageTags: [ manageTags: [{ required: true, message: "耳号不能为空", trigger: "blur" }],
{ required: true, message: "耳号不能为空", trigger: "blur" } datetime: [{ required: true, message: "干奶日期不能为空", trigger: "blur" }],
], status: [{ required: true, message: "请选择是否使用乳头封闭剂", trigger: "change" }]
datetime: [
{ required: true, message: "干奶日期不能为空", trigger: "blur" }
],
status: [
{ required: true, message: "请选择是否使用乳头封闭剂", trigger: "change" }
]
} }
}) })
const { queryParams, form, rules } = toRefs(data) const { queryParams, form, rules } = toRefs(data)
/** 远程搜索耳号 */
function searchEarNumber(query) {
if (query) {
earNumberLoading.value = true;
searchEarNumbers(query).then(res => {
earNumberLoading.value = false;
const list = res.data || res.msg || res;
earNumberOptions.value = Array.isArray(list) ? list : [];
}).catch(err => {
earNumberLoading.value = false;
earNumberOptions.value = [];
});
} else {
earNumberOptions.value = [];
}
}
/** 远程搜索技术员 */
function searchTechnician(query) {
if (query) {
technicianLoading.value = true;
searchTechnicians(query).then(res => {
technicianLoading.value = false;
const list = res.data || res.msg || res;
technicianOptions.value = Array.isArray(list) ? list : [];
}).catch(err => {
technicianLoading.value = false;
technicianOptions.value = [];
});
} else {
technicianOptions.value = [];
}
}
/** 查询干奶记录列表 */ /** 查询干奶记录列表 */
function getList() { function getList() {
loading.value = true loading.value = true
// 添加时间范围参数 const params = proxy.addDateRange(queryParams.value, dateRange.value);
// 正确:直接获取返回结果
queryParams.value = proxy.addDateRange(queryParams.value, dateRange.value); // 处理技术员多选:转字符串传给后端
listDrymilk(queryParams.value).then(response => { if (queryParams.value.technicianList && queryParams.value.technicianList.length > 0) {
drymilkList.value = response.rows params.tecahnician = queryParams.value.technicianList.join(',');
total.value = response.total } else {
loading.value = false params.tecahnician = null;
}) }
.catch(() => {
// 降级处理,如果 proxy.addDateRange 不可用 // 处理耳号多选:转字符串传给后端
let params = {...queryParams.value}; if (queryParams.value.manageTagsList && queryParams.value.manageTagsList.length > 0) {
if (dateRange.value && dateRange.value.length === 2) { params.manageTags = queryParams.value.manageTagsList.join(',');
params.params = { } else {
beginTime: dateRange.value[0], params.manageTags = null;
endTime: dateRange.value[1] }
};
} listDrymilk(params).then(response => {
listDrymilk(params).then(response => { drymilkList.value = response.rows
drymilkList.value = response.rows total.value = response.total
total.value = response.total loading.value = false
loading.value = false }).catch(() => {
}) loading.value = false;
}); });
} }
/** 获取羊舍列表 */
function getSheepfoldList() { function getSheepfoldList() {
// 假设路径请根据实际项目api调整 const url = '/drymilk/drymilk/sheepfoldList';
proxy.$http ? proxy.$http.get('/drymilk/drymilk/sheepfoldList').then(res => { const req = proxy.$request ? proxy.$request : axios.create({ baseURL: import.meta.env.VITE_APP_BASE_API, headers: { 'Authorization': 'Bearer ' + getToken() } });
sheepfoldOptions.value = res.data || res; req.get(url).then(res => { sheepfoldOptions.value = res.data || res.rows || []; });
}) : axios.get(import.meta.env.VITE_APP_BASE_API + '/drymilk/drymilk/sheepfoldList', {
headers: { 'Authorization': 'Bearer ' + getToken() }
}).then(res => {
sheepfoldOptions.value = res.data.data || res.data;
});
} }
/** 获取用户列表(技术员) */
function getUserList() { function getUserList() {
listUser({ pageNum: 1, pageSize: 1000 }).then(response => { listUser({ pageNum: 1, pageSize: 1000 }).then(response => { userOptions.value = response.rows; });
userOptions.value = response.rows;
});
} }
// 辅助函数获取token如果没有引入请自行处理
import { getToken } from "@/utils/auth";
// 取消按钮
function cancel() { function cancel() {
open.value = false open.value = false
reset() reset()
} }
// 表单重置
function reset() { function reset() {
form.value = { form.value = {
id: null, id: null,
manageTags: null, manageTags: null,
datetime: new Date().toISOString().split('T')[0], // 默认今天 datetime: new Date().toISOString().split('T')[0],
status: 0, // 默认否 status: 0,
sheepfold: null, sheepfold: null,
tecahnician: null, tecahnician: null,
comment: null comment: null
@@ -320,36 +312,35 @@ function reset() {
proxy.resetForm("drymilkRef") proxy.resetForm("drymilkRef")
} }
/** 搜索按钮操作 */ function resetQuery() {
dateRange.value = []
queryParams.value.manageTagsList = []
queryParams.value.technicianList = []
earNumberOptions.value = []
technicianOptions.value = []
proxy.resetForm("queryRef")
handleQuery()
}
function handleQuery() { function handleQuery() {
queryParams.value.pageNum = 1 queryParams.value.pageNum = 1
getList() getList()
} }
/** 重置按钮操作 */
function resetQuery() {
dateRange.value = []
proxy.resetForm("queryRef")
handleQuery()
}
// 多选框选中数据
function handleSelectionChange(selection) { function handleSelectionChange(selection) {
ids.value = selection.map(item => item.id) ids.value = selection.map(item => item.id)
single.value = selection.length != 1 single.value = selection.length != 1
multiple.value = !selection.length multiple.value = !selection.length
} }
/** 新增按钮操作 */
function handleAdd() { function handleAdd() {
reset() reset()
getSheepfoldList(); // 加载下拉数据 getSheepfoldList();
getUserList(); // 加载下拉数据 getUserList();
open.value = true open.value = true
title.value = "添加干奶记录" title.value = "添加干奶记录"
} }
/** 修改按钮操作 */
function handleUpdate(row) { function handleUpdate(row) {
reset() reset()
getSheepfoldList(); getSheepfoldList();
@@ -362,7 +353,6 @@ function handleUpdate(row) {
}) })
} }
/** 提交按钮 */
function submitForm() { function submitForm() {
proxy.$refs["drymilkRef"].validate(valid => { proxy.$refs["drymilkRef"].validate(valid => {
if (valid) { if (valid) {
@@ -374,12 +364,11 @@ function submitForm() {
}) })
} else { } else {
addDrymilk(form.value).then(response => { addDrymilk(form.value).then(response => {
// 如果返回warn说明部分成功部分失败 if(response.code === 200 || response.code === undefined) {
if(response.code === 200) { proxy.$modal.msgSuccess(response.msg || "新增成功")
proxy.$modal.msgSuccess(response.msg || "新增成功") } else {
} else { proxy.$modal.msgWarning(response.msg)
proxy.$modal.msgWarning(response.msg) }
}
open.value = false open.value = false
getList() getList()
}) })
@@ -388,7 +377,6 @@ function submitForm() {
}) })
} }
/** 删除按钮操作 */
function handleDelete(row) { function handleDelete(row) {
const _ids = row.id || ids.value const _ids = row.id || ids.value
proxy.$modal.confirm('是否确认删除干奶记录编号为"' + _ids + '"的数据项?').then(function() { proxy.$modal.confirm('是否确认删除干奶记录编号为"' + _ids + '"的数据项?').then(function() {
@@ -399,18 +387,19 @@ function handleDelete(row) {
}).catch(() => {}) }).catch(() => {})
} }
/** 导出按钮操作 */
function handleExport() { function handleExport() {
// 处理导出时的日期范围 let params = proxy.addDateRange(queryParams.value, dateRange.value);
let params = {...queryParams.value}; if (params.manageTagsList && params.manageTagsList.length > 0) {
if (dateRange.value && dateRange.value.length === 2) { params.manageTags = params.manageTagsList.join(',');
params.params = { }
beginTime: dateRange.value[0], if (params.technicianList && params.technicianList.length > 0) {
endTime: dateRange.value[1] params.tecahnician = params.technicianList.join(',');
}; }
}
proxy.download('drymilk/drymilk/export', params, `drymilk_${new Date().getTime()}.xlsx`) proxy.download('drymilk/drymilk/export', params, `drymilk_${new Date().getTime()}.xlsx`)
} }
// 初始化
getList() getList()
getSheepfoldList()
getUserList()
</script> </script>