This commit is contained in:
piaobo 2025-07-21 19:28:34 +08:00
commit d6ae5f3654
4 changed files with 493 additions and 274 deletions

View File

@ -42,3 +42,4 @@ export function delFreshMilkTest(id) {
method: 'delete'
})
}

View File

@ -52,3 +52,12 @@ export function delSheep_grouping(id) {
method: 'delete'
})
}
// 根据耳号批量新增分组映射
export function addByEarTags(data) {
return request({
url: '/sheep_grouping/sheep_grouping/addByEarTags',
method: 'post',
data
})
}

View File

@ -1,6 +1,7 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<!-- 简化查询表单 -->
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
<el-form-item label="来源" prop="source">
<el-input
v-model="queryParams.source"
@ -17,110 +18,6 @@
placeholder="请选择检测日期">
</el-date-picker>
</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="酸度oT" prop="acidity">
<el-input
v-model="queryParams.acidity"
placeholder="请输入酸度oT"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="菌落总数CFU/ml_1" prop="bacterialColony1">
<el-input
v-model="queryParams.bacterialColony1"
placeholder="请输入菌落总数CFU/ml_1"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="菌落总数CFU/ml_2" prop="bacterialColony2">
<el-input
v-model="queryParams.bacterialColony2"
placeholder="请输入菌落总数CFU/ml_2"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="菌落总数CFU/ml_3" prop="bacterialColony3">
<el-input
v-model="queryParams.bacterialColony3"
placeholder="请输入菌落总数CFU/ml_3"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="菌落总数CFU/ml_4" prop="bacterialColony4">
<el-input
v-model="queryParams.bacterialColony4"
placeholder="请输入菌落总数CFU/ml_4"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="菌落总数CFU/ml_5" prop="bacterialColony5">
<el-input
v-model="queryParams.bacterialColony5"
placeholder="请输入菌落总数CFU/ml_5"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="大肠菌群CFU/ml" prop="coli">
<el-input
v-model="queryParams.coli"
placeholder="请输入大肠菌群CFU/ml"
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="commnet">
<el-input
v-model="queryParams.commnet"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
@ -166,31 +63,115 @@
v-hasPermi="['freshMilkTest:freshMilkTest:export']"
>导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="Operation"
@click="columnShowDialogVisible = true"
>列显示</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 表格显示使用列选择功能 -->
<el-table v-loading="loading" :data="freshMilkTestList" @selection-change="handleSelectionChange">
<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="source" />
<el-table-column label="检测日期" align="center" prop="datetime" width="180">
<el-table-column
label="来源"
align="center"
prop="source"
v-if="selectedColumns.includes('source')" />
<el-table-column
label="检测日期"
align="center"
prop="datetime"
width="180"
v-if="selectedColumns.includes('datetime')">
<template #default="scope">
<span>{{ parseTime(scope.row.datetime, '{y}-{m}-{d}') }}</span>
<span>{{ formatDate(scope.row.datetime) }}</span>
</template>
</el-table-column>
<el-table-column
label="脂肪g/100g"
align="center"
prop="fat"
v-if="selectedColumns.includes('fat')" />
<el-table-column
label="蛋白质g/100g"
align="center"
prop="protein"
v-if="selectedColumns.includes('protein')" />
<el-table-column
label="非脂g/100g"
align="center"
prop="nonFat"
v-if="selectedColumns.includes('nonFat')" />
<el-table-column
label="酸度oT"
align="center"
prop="acidity"
v-if="selectedColumns.includes('acidity')" />
<el-table-column
label="菌落总数1"
align="center"
prop="bacterialColony1"
v-if="selectedColumns.includes('bacterialColony1')" />
<el-table-column
label="菌落总数2"
align="center"
prop="bacterialColony2"
v-if="selectedColumns.includes('bacterialColony2')" />
<el-table-column
label="菌落总数3"
align="center"
prop="bacterialColony3"
v-if="selectedColumns.includes('bacterialColony3')" />
<el-table-column
label="菌落总数4"
align="center"
prop="bacterialColony4"
v-if="selectedColumns.includes('bacterialColony4')" />
<el-table-column
label="菌落总数5"
align="center"
prop="bacterialColony5"
v-if="selectedColumns.includes('bacterialColony5')" />
<el-table-column
label="大肠菌群(CFU/ml)"
align="center"
prop="coli"
v-if="selectedColumns.includes('coli')" />
<el-table-column
label="乳铁蛋白(mg/L)"
align="center"
prop="lactoferrin"
v-if="selectedColumns.includes('lactoferrin')" />
<el-table-column
label="免疫球蛋白(mg/L)"
align="center"
prop="ig"
v-if="selectedColumns.includes('ig')" />
<el-table-column
label="备注"
align="center"
prop="commnet"
v-if="selectedColumns.includes('commnet')" />
<el-table-column
label="创建人"
align="center"
prop="createBy"
v-if="selectedColumns.includes('createBy')" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
width="180"
v-if="selectedColumns.includes('createTime')">
<template #default="scope">
<span>{{ formatDateTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="脂肪g/100g" align="center" prop="fat" />
<el-table-column label="蛋白质g/100g" align="center" prop="protein" />
<el-table-column label="非脂g/100g" align="center" prop="nonFat" />
<el-table-column label="酸度oT" align="center" prop="acidity" />
<el-table-column label="菌落总数CFU/ml_1" align="center" prop="bacterialColony1" />
<el-table-column label="菌落总数CFU/ml_2" align="center" prop="bacterialColony2" />
<el-table-column label="菌落总数CFU/ml_3" align="center" prop="bacterialColony3" />
<el-table-column label="菌落总数CFU/ml_4" align="center" prop="bacterialColony4" />
<el-table-column label="菌落总数CFU/ml_5" align="center" prop="bacterialColony5" />
<el-table-column label="大肠菌群CFU/ml" align="center" prop="coli" />
<el-table-column label="乳铁蛋白" align="center" prop="lactoferrin" />
<el-table-column label="免疫球蛋白" align="center" prop="ig" />
<el-table-column label="备注" align="center" prop="commnet" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['freshMilkTest:freshMilkTest:edit']">修改</el-button>
@ -207,9 +188,9 @@
@pagination="getList"
/>
<!-- 添加或修改鲜奶生产成品检验记录对话框 -->
<!-- 新增/修改对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="freshMilkTestRef" :model="form" :rules="rules" label-width="80px">
<el-form ref="freshMilkTestRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="来源" prop="source">
<el-input v-model="form.source" placeholder="请输入来源" />
</el-form-item>
@ -218,7 +199,8 @@
v-model="form.datetime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择检测日期">
placeholder="请选择检测日期"
style="width: 100%">
</el-date-picker>
</el-form-item>
<el-form-item label="脂肪g/100g" prop="fat">
@ -233,32 +215,38 @@
<el-form-item label="酸度oT" prop="acidity">
<el-input v-model="form.acidity" placeholder="请输入酸度oT" />
</el-form-item>
<el-form-item label="菌落总数CFU/ml_1" prop="bacterialColony1">
<el-input v-model="form.bacterialColony1" placeholder="请输入菌落总数CFU/ml_1" />
<el-form-item label="菌落总数1" prop="bacterialColony1">
<el-input v-model="form.bacterialColony1" placeholder="请输入菌落总数1" />
</el-form-item>
<el-form-item label="菌落总数CFU/ml_2" prop="bacterialColony2">
<el-input v-model="form.bacterialColony2" placeholder="请输入菌落总数CFU/ml_2" />
<el-form-item label="菌落总数2" prop="bacterialColony2">
<el-input v-model="form.bacterialColony2" placeholder="请输入菌落总数2" />
</el-form-item>
<el-form-item label="菌落总数CFU/ml_3" prop="bacterialColony3">
<el-input v-model="form.bacterialColony3" placeholder="请输入菌落总数CFU/ml_3" />
<el-form-item label="菌落总数3" prop="bacterialColony3">
<el-input v-model="form.bacterialColony3" placeholder="请输入菌落总数3" />
</el-form-item>
<el-form-item label="菌落总数CFU/ml_4" prop="bacterialColony4">
<el-input v-model="form.bacterialColony4" placeholder="请输入菌落总数CFU/ml_4" />
<el-form-item label="菌落总数4" prop="bacterialColony4">
<el-input v-model="form.bacterialColony4" placeholder="请输入菌落总数4" />
</el-form-item>
<el-form-item label="菌落总数CFU/ml_5" prop="bacterialColony5">
<el-input v-model="form.bacterialColony5" placeholder="请输入菌落总数CFU/ml_5" />
<el-form-item label="菌落总数5" prop="bacterialColony5">
<el-input v-model="form.bacterialColony5" placeholder="请输入菌落总数5" />
</el-form-item>
<el-form-item label="大肠菌群CFU/ml" prop="coli">
<el-input v-model="form.coli" placeholder="请输入大肠菌群CFU/ml" />
<el-form-item label="大肠菌群(CFU/ml)" prop="coli">
<el-input v-model="form.coli" placeholder="请输入大肠菌群(CFU/ml)" />
</el-form-item>
<el-form-item label="乳铁蛋白" prop="lactoferrin">
<el-input v-model="form.lactoferrin" placeholder="请输入乳铁蛋白" />
<el-form-item label="乳铁蛋白(mg/L)" prop="lactoferrin">
<el-input v-model="form.lactoferrin" placeholder="请输入乳铁蛋白(mg/L)" />
</el-form-item>
<el-form-item label="免疫球蛋白" prop="ig">
<el-input v-model="form.ig" placeholder="请输入免疫球蛋白" />
<el-form-item label="免疫球蛋白(mg/L)" prop="ig">
<el-input v-model="form.ig" placeholder="请输入免疫球蛋白(mg/L)" />
</el-form-item>
<el-form-item label="备注" prop="commnet">
<el-input v-model="form.commnet" placeholder="请输入备注" />
<el-input v-model="form.commnet" placeholder="请输入备注" type="textarea" />
</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>
<template #footer>
@ -268,70 +256,164 @@
</div>
</template>
</el-dialog>
<!-- 列显示设置对话框 -->
<el-dialog title="列显示设置" v-model="columnShowDialogVisible" width="500px">
<el-checkbox-group v-model="selectedColumns">
<el-checkbox label="source">来源</el-checkbox>
<el-checkbox label="datetime">检测日期</el-checkbox>
<el-checkbox label="fat">脂肪g/100g</el-checkbox>
<el-checkbox label="protein">蛋白质g/100g</el-checkbox>
<el-checkbox label="nonFat">非脂g/100g</el-checkbox>
<el-checkbox label="acidity">酸度oT</el-checkbox>
<el-checkbox label="bacterialColony1">菌落总数1</el-checkbox>
<el-checkbox label="bacterialColony2">菌落总数2</el-checkbox>
<el-checkbox label="bacterialColony3">菌落总数3</el-checkbox>
<el-checkbox label="bacterialColony4">菌落总数4</el-checkbox>
<el-checkbox label="bacterialColony5">菌落总数5</el-checkbox>
<el-checkbox label="coli">大肠菌群(CFU/ml)</el-checkbox>
<el-checkbox label="lactoferrin">乳铁蛋白(mg/L)</el-checkbox>
<el-checkbox label="ig">免疫球蛋白(mg/L)</el-checkbox>
<el-checkbox label="commnet">备注</el-checkbox>
<el-checkbox label="createBy">创建人</el-checkbox>
<el-checkbox label="createTime">创建时间</el-checkbox>
</el-checkbox-group>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="columnShowDialogVisible = false"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="FreshMilkTest">
import { listFreshMilkTest, getFreshMilkTest, delFreshMilkTest, addFreshMilkTest, updateFreshMilkTest } from "@/api/dairyProducts/freshMilkTest/freshMilkTest.js"
<script setup>
import { ref, reactive, onMounted } from 'vue';
import { listFreshMilkTest, getFreshMilkTest, delFreshMilkTest, addFreshMilkTest, updateFreshMilkTest } from "@/api/dairyProducts/freshMilkTest/freshMilkTest.js";
import { ElMessage, ElMessageBox } from 'element-plus';
const { proxy } = getCurrentInstance()
const freshMilkTestList = ref([]);
const open = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
const columnShowDialogVisible = ref(false);
const freshMilkTestRef = ref(null);
const freshMilkTestList = ref([])
const open = ref(false)
const loading = ref(true)
const showSearch = ref(true)
const ids = ref([])
const single = ref(true)
const multiple = ref(true)
const total = ref(0)
const title = ref("")
//
const selectedColumns = ref([
'source', 'datetime', 'fat', 'protein', 'nonFat', 'acidity',
'bacterialColony1', 'bacterialColony2', 'bacterialColony3',
'bacterialColony4', 'bacterialColony5', 'coli', 'lactoferrin',
'ig', 'commnet', 'createBy', 'createTime'
]);
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
source: null,
datetime: null,
fat: null,
protein: null,
nonFat: null,
acidity: null,
bacterialColony1: null,
bacterialColony2: null,
bacterialColony3: null,
bacterialColony4: null,
bacterialColony5: null,
coli: null,
lactoferrin: null,
ig: null,
commnet: null,
},
rules: {
}
})
//
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
source: null,
datetime: null,
});
const { queryParams, form, rules } = toRefs(data)
//
const form = reactive({
id: null,
source: null,
datetime: null,
fat: null,
protein: null,
nonFat: null,
acidity: null,
bacterialColony1: null,
bacterialColony2: null,
bacterialColony3: null,
bacterialColony4: null,
bacterialColony5: null,
coli: null,
lactoferrin: null,
ig: null,
commnet: null,
createBy: null,
createTime: null
});
/** 查询鲜奶生产,成品检验记录列表 */
//
const rules = reactive({
source: [
{ required: true, message: "来源不能为空", trigger: "blur" }
],
datetime: [
{ required: true, message: "检测日期不能为空", trigger: "blur" }
]
});
/** 获取当前用户名 */
const getCurrentUsername = () => {
const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}')
return userInfo.userName || userInfo.username || userInfo.nickName || 'admin'
}
/** 查询列表 */
function getList() {
loading.value = true
listFreshMilkTest(queryParams.value).then(response => {
freshMilkTestList.value = response.rows
total.value = response.total
loading.value = false
})
loading.value = true;
listFreshMilkTest(queryParams).then(response => {
freshMilkTestList.value = response.rows || [];
total.value = response.total || 0;
loading.value = false;
}).catch(error => {
console.error("获取数据失败:", error);
loading.value = false;
ElMessage.error("获取数据失败");
});
}
//
function formatDate(dateString) {
if (!dateString) return '';
try {
const date = new Date(dateString);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
} catch (e) {
console.error("日期格式化错误:", e);
return dateString;
}
}
//
function formatDateTime(dateString) {
if (!dateString) return '';
try {
const date = new Date(dateString);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
} catch (e) {
console.error("日期时间格式化错误:", e);
return dateString;
}
}
//
function cancel() {
open.value = false
reset()
open.value = false;
resetForm();
}
//
function reset() {
form.value = {
function resetForm() {
Object.assign(form, {
id: null,
source: null,
datetime: null,
@ -350,85 +432,146 @@ function reset() {
commnet: null,
createBy: null,
createTime: null
});
if (freshMilkTestRef.value) {
freshMilkTestRef.value.resetFields();
}
proxy.resetForm("freshMilkTestRef")
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1
getList()
queryParams.pageNum = 1;
getList();
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef")
handleQuery()
Object.assign(queryParams, {
source: null,
datetime: null,
});
handleQuery();
}
//
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.id)
single.value = selection.length != 1
multiple.value = !selection.length
ids.value = selection.map(item => item.id);
single.value = selection.length !== 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
function handleAdd() {
reset()
open.value = true
title.value = "添加鲜奶生产,成品检验记录"
resetForm();
open.value = true;
title.value = "添加鲜奶检验记录";
//
form.createBy = getCurrentUsername();
form.createTime = new Date().toISOString().replace('T', ' ').substring(0, 19);
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset()
const _id = row.id || ids.value
getFreshMilkTest(_id).then(response => {
form.value = response.data
open.value = true
title.value = "修改鲜奶生产,成品检验记录"
})
resetForm();
const id = row.id || (ids.value.length ? ids.value[0] : null);
if (!id) {
ElMessage.error("请选择要修改的数据");
return;
}
getFreshMilkTest(id).then(response => {
Object.assign(form, response.data);
open.value = true;
title.value = "修改鲜奶检验记录";
}).catch(error => {
console.error("获取详情失败:", error);
ElMessage.error("获取详情失败");
});
}
/** 提交按钮 */
function submitForm() {
proxy.$refs["freshMilkTestRef"].validate(valid => {
freshMilkTestRef.value.validate(valid => {
if (valid) {
if (form.value.id != null) {
updateFreshMilkTest(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功")
open.value = false
getList()
})
const submitData = { ...form };
if (!submitData.id) {
submitData.createBy = getCurrentUsername();
submitData.createTime = new Date().toISOString().replace('T', ' ').substring(0, 19);
} else {
addFreshMilkTest(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功")
open.value = false
getList()
})
delete submitData.createBy;
delete submitData.createTime;
}
const request = submitData.id
? updateFreshMilkTest(submitData)
: addFreshMilkTest(submitData);
request.then(response => {
ElMessage.success(submitData.id ? "修改成功" : "新增成功");
open.value = false;
getList();
}).catch(error => {
console.error("操作失败:", error);
ElMessage.error("操作失败");
});
}
})
});
}
/** 删除按钮操作 */
function handleDelete(row) {
const _ids = row.id || ids.value
proxy.$modal.confirm('是否确认删除鲜奶生产,成品检验记录编号为"' + _ids + '"的数据项?').then(function() {
return delFreshMilkTest(_ids)
const deleteIds = row.id ? [row.id] : ids.value;
if (!deleteIds.length) {
ElMessage.error("请选择要删除的数据");
return;
}
ElMessageBox.confirm('是否确认删除选中的记录?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
getList()
proxy.$modal.msgSuccess("删除成功")
}).catch(() => {})
return delFreshMilkTest(deleteIds);
}).then(() => {
getList();
ElMessage.success("删除成功");
}).catch(error => {
console.error("删除失败:", error);
if (error !== 'cancel') {
ElMessage.error("删除失败");
}
});
}
/** 导出按钮操作 */
function handleExport() {
proxy.download('freshMilkTest/freshMilkTest/export', {
...queryParams.value
}, `freshMilkTest_${new Date().getTime()}.xlsx`)
const params = new URLSearchParams();
for (const key in queryParams) {
if (queryParams[key] !== null && queryParams[key] !== undefined) {
params.append(key, queryParams[key]);
}
}
const url = `/freshMilkTest/freshMilkTest/export?${params.toString()}`;
window.location.href = url;
}
getList()
//
onMounted(() => {
getList();
});
</script>
<style scoped>
.app-container {
padding: 20px;
}
.el-form-item {
margin-bottom: 15px;
}
.el-dialog__body {
padding: 15px 20px;
}
</style>

View File

@ -1,14 +1,14 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="羊只ID" prop="sheepId">
<!-- <el-form-item label="羊只ID" prop="sheepId">
<el-input
v-model="queryParams.sheepId"
placeholder="请输入羊只ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
</el-form-item> -->
<el-form-item label="耳号" prop="bsManageTags">
<el-input
v-model="queryParams.bsManageTags"
@ -82,9 +82,9 @@
<el-table v-loading="loading" :data="sheep_groupingList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="主键ID" align="center" prop="id" sortable/>
<el-table-column label="羊只ID" align="center" prop="sheep_id" sortable/>
<el-table-column label="分组ID" align="center" prop="group_id" sortable/>
<!-- <el-table-column label="主键ID" align="center" prop="id" sortable/> -->
<!-- <el-table-column label="羊只ID" align="center" prop="sheep_id" sortable/>
<el-table-column label="分组ID" align="center" prop="group_id" sortable/> -->
<el-table-column label="分组名称" align="center" prop="groupName" sortable>
<template #default="scope">
{{ getGroupName(scope.row.group_id) }}
@ -127,8 +127,11 @@
<!-- 添加或修改羊只分组关联对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="sheep_groupingRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="羊只ID" prop="sheepId">
<!-- <el-form-item label="羊只ID" prop="sheepId">
<el-input v-model="form.sheepId" placeholder="请输入羊只ID" />
</el-form-item> -->
<el-form-item label="耳号列表" prop="earTags">
<el-input type="textarea" :rows="4" v-model="form.earTags" :disabled="form.earTagsDisabled" placeholder="请输入耳号,多个耳号用逗号或换行分隔"/>
</el-form-item>
<el-form-item label="分组" prop="groupId">
<el-select v-model="form.groupId" placeholder="请选择分组" clearable>
@ -155,7 +158,7 @@
import { listSheep_grouping, getSheep_grouping, delSheep_grouping, addSheep_grouping, updateSheep_grouping } from "@/api/fileManagement/sheep_grouping"
import {listLeafGroup} from "@/api/fileManagement/group_management"
import {listSheep_grouping_join} from "@/api/fileManagement/sheep_grouping"
import { addByEarTags } from '@/api/fileManagement/sheep_grouping'
const { proxy } = getCurrentInstance()
@ -172,7 +175,11 @@ const leafGroupOptions = ref([])
const { sheep_gender } = proxy.useDict('sheep_gender')
const data = reactive({
form: {},
form: {
earTags: '',
groupId: null,
earTagsDisabled: false //
},
queryParams: {
pageNum: 1,
pageSize: 10,
@ -182,12 +189,12 @@ const data = reactive({
},
leafGroupOptions: [],
rules: {
sheepId: [
{ required: true, message: "羊只ID不能为空", trigger: "blur" }
earTags: [
{ required: true, message: "耳号不能为空", trigger: "blur" }
],
groupId: [
{ required: true, message: "分组ID不能为空", trigger: "change" }
]
{ required: true, message: "分组不能为空", trigger: "change" }
],
}
})
@ -205,22 +212,16 @@ const { queryParams, form, rules } = toRefs(data)
import { getSheep_file } from '@/api/fileManagement/sheep_file'
async function getList() {
loading.value = true
try {
// 1.
const params = {
...queryParams.value,
bsManageTags: queryParams.value.bsManageTags
? String(queryParams.value.bsManageTags)
.split(/[,\s]+/)
.map(s => s.trim())
.filter(Boolean)
: undefined
bsManageTags: queryParams.value.bsManageTags || undefined
}
console.log(params)
const { rows, total: t } = await listSheep_grouping_join(params)
console.log(rows)
sheep_groupingList.value = rows
total.value = t
} finally {
@ -266,6 +267,8 @@ function handleSelectionChange(selection) {
/** 新增按钮操作 */
function handleAdd() {
reset()
form.value.earTagsDisabled = false //
form.value.earTags = '' //
open.value = true
title.value = "添加羊只分组关联"
}
@ -273,35 +276,98 @@ function handleAdd() {
/** 修改按钮操作 */
function handleUpdate(row) {
reset()
const _id = row.id || ids.value
getSheep_grouping(_id).then(response => {
form.value = response.data
open.value = true
title.value = "修改羊只分组关联"
})
}
form.value = {...row,
earTags: row.bs_manage_tags,
groupId: row.group_id,
originalGroupId: row.group_id, //
earTagsDisabled: true
}
open.value = true
title.value = "修改羊只分组关联"
}
// /** */
// function submitForm() {
// proxy.$refs["sheep_groupingRef"].validate(valid => {
// if (valid) {
// if (form.value.id != null) {
// updateSheep_grouping(form.value).then(response => {
// proxy.$modal.msgSuccess("")
// open.value = false
// getList()
// })
// } else {
// addSheep_grouping(form.value).then(response => {
// proxy.$modal.msgSuccess("")
// open.value = false
// getList()
// })
// }
// }
// })
// }
/** 提交按钮 */
function submitForm() {
proxy.$refs["sheep_groupingRef"].validate(valid => {
if (valid) {
if (form.value.id != null) {
updateSheep_grouping(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功")
open.value = false
getList()
})
} else {
addSheep_grouping(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功")
open.value = false
getList()
})
if (!valid) return;
// 1.
if (form.value.id != null) {
//
if (form.value.groupId === form.value.originalGroupId) {
proxy.$modal.msgWarning("该羊已在此分组,无需修改");
return;
}
//
console.log(form.value)
const data = {
id: form.value.id,
sheepId:form.value.sheep_id,
groupId: form.value.groupId
};
updateSheep_grouping(data).then(() => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
return;
}
})
// 2.
const earTags = form.value.earTags
.split(/[,\n\s]+/)
.map(tag => tag.trim())
.filter(tag => tag);
const data = { earTags, groupId: form.value.groupId };
addByEarTags(data)
.then(res => {
if (res.data?.success) {
proxy.$modal.msgSuccess(`新增成功,共 ${res.data.inserted}`);
open.value = false;
getList();
} else {
const missing = res.data?.missing || [];
const already = res.data?.alreadyInGroup || [];
if (missing.length) {
proxy.$modal.alertError(`以下耳号不存在:${missing.join(", ")}`);
} else if (already.length) {
proxy.$modal.alertWarning(`以下耳号已在该分组:${already.join(", ")}`);
} else {
proxy.$modal.alertWarning("所有羊只已存在于该分组");
}
}
})
.catch(() => proxy.$modal.msgError("系统异常,请联系管理员"));
});
}
/** 删除按钮操作 */
function handleDelete(row) {
const _ids = row.id || ids.value