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