部分bug修改,创建日期精确到几点几分,日期放最前面,转场优化

This commit is contained in:
zyh
2025-08-19 17:09:06 +08:00
parent da5a15167c
commit c44b2da619
11 changed files with 655 additions and 352 deletions

View File

@@ -2,14 +2,36 @@
<div class="app-container">
<!-- 查询表单 -->
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="创建时间" style="width: 308px">
<el-date-picker v-model="daterangeCreateTime" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
start-placeholder="开始日期" end-placeholder="结束日期" />
</el-form-item>
<el-form-item label="转场日期" style="width: 308px">
<el-date-picker v-model="transitionDateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-form-item>
<el-form-item label="管理耳号" prop="manageTags">
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号" clearable @keyup.enter="handleQuery" style="width: 150px;"/>
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号" clearable @keyup.enter="handleQuery"
style="width: 150px;" />
</el-form-item>
<el-form-item label="品种" prop="varietyId">
<el-select v-model="queryParams.varietyId" placeholder="请选择品种" style="min-width:150px" clearable>
<el-option v-for="item in varietyOptions" :key="item.id" :label="item.variety" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="事件类型" prop="eventType" style="width: 308px">
<el-select v-model="queryParams.eventType" placeholder="请选择事件类型" clearable style="min-width:150px">
<el-option label="转场转入" value="转场转入" />
<el-option label="转场转出" value="转场转出" />
</el-select>
</el-form-item>
<el-form-item label="转场类型" prop="transType" style="width: 308px">
<el-select v-model="queryParams.transType" placeholder="请选择转场类型" clearable style="min-width:150px">
<el-option label="内部调拨" :value="0" />
<el-option label="内部销售" :value="1" />
<el-option label="育肥调拨" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="转入牧场" prop="transTo">
<el-select v-model="queryParams.transTo" placeholder="请选择转入牧场" clearable style="min-width:150px">
<el-option v-for="ranch in ranchOptions" :key="ranch.id" :label="ranch.ranchName" :value="ranch.ranchName" />
@@ -25,10 +47,6 @@
<el-option v-for="dict in status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="创建时间" style="width: 308px">
<el-date-picker v-model="daterangeCreateTime" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
start-placeholder="开始日期" end-placeholder="结束日期" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -41,10 +59,10 @@
<el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['transition_info:transition_info:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
v-hasPermi="['transition_info:transition_info:edit']">修改</el-button>
</el-col>
</el-col> -->
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
v-hasPermi="['transition_info:transition_info:remove']">删除</el-button>
@@ -59,9 +77,21 @@
<!-- 列表 -->
<el-table v-loading="loading" :data="transition_infoList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="耳号" align="center" prop="manageTags" />
<el-table-column label="创建时间" align="center" prop="createTime" min-width="130" fixed>
<template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}') }}</span>
</template>
</el-table-column>
<el-table-column label="转场日期" align="center" prop="transitionDate" min-width="150">
<template #default="scope">
<span>{{ parseTime(scope.row.transitionDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="管理耳号" align="center" prop="manageTags" min-width="100" />
<el-table-column label="事件类型" align="center" prop="eventType" min-width="120" />
<el-table-column label="转场类型" align="center" prop="transTypeText" />
<el-table-column label="品种" align="center" prop="varietyName" />
<el-table-column label="转入牧场" align="center" prop="transTo" />
<el-table-column label="转入牧场" align="center" prop="transTo" min-width="120" />
<el-table-column label="当前牧场" align="center" prop="transFrom" />
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
@@ -69,18 +99,19 @@
</template>
</el-table-column>
<el-table-column label="技术员" align="center" prop="technician" />
<el-table-column label="状态" align="center" prop="statusText" />
<el-table-column label="备注" align="center" prop="comment" />
<el-table-column label="创建人" align="center" prop="createBy" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<el-table-column label="当前状态" align="center" prop="status" min-width="120">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
<span v-if="scope.row.status === 0">待审批</span>
<span v-else-if="scope.row.status === 1 || scope.row.status === 2">审批完成</span>
<span v-else>未知状态</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" min-width="180">
<el-table-column label="备注" align="center" prop="comment" />
<el-table-column label="创建人" align="center" prop="createBy" />
<el-table-column label="操作" align="center" min-width="180" fixed="right">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleApprove(scope.row)"
v-hasPermi="['transition_info:transition_info:approve']">审批</el-button>
v-hasPermi="['transition_info:transition_info:approve']" :disabled="scope.row.status !== 0">审批</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['transition_info:transition_info:remove']">删除</el-button>
</template>
@@ -94,33 +125,51 @@
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="transition_infoRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="管理耳号" prop="manageTags">
<el-select v-model="form.manageTags" placeholder="请输入或选择耳号" filterable multiple allow-create
@change="loadSheepInfo" :disabled="!isAdd" >
<el-option v-for="sheep in sheepOptions" :key="sheep.id" :label="sheep.manageTags"
:value="sheep.manageTags" />
</el-select>
<div style="display: flex; align-items: center; gap: 8px;">
<el-select v-model="form.manageTags" placeholder="请输入或选择耳号" filterable multiple allow-create
@change="loadSheepInfo" :disabled="!isAdd" style="flex:1;">
<el-option v-for="sheep in sheepOptions" :key="sheep.id" :label="sheep.manageTags"
:value="sheep.manageTags" />
</el-select>
<span v-if="form.manageTags?.length > 0" class="tag-count">
已选 {{ form.manageTags.length }}
</span>
</div>
</el-form-item>
<el-form-item label="转入牧场" prop="transTo">
<el-select v-model="form.transTo" placeholder="请选择转入牧场" clearable :disabled="!isAdd" >
<el-select v-model="form.transTo" placeholder="请选择转入牧场" clearable :disabled="!isAdd">
<el-option v-for="ranch in ranchOptions" :key="ranch.id" :label="ranch.ranchName"
:value="ranch.ranchName" />
</el-select>
</el-form-item>
<el-form-item label="当前牧场" prop="transFrom">
<el-select v-model="form.transFrom" placeholder="请选择当前牧场" clearable @change="handleRanchChange" :disabled="!isAdd" >
<el-select v-model="form.transFrom" placeholder="请选择当前牧场" clearable @change="handleRanchChange"
:disabled="!isAdd">
<el-option v-for="ranch in ranchOptions" :key="ranch.id" :label="ranch.ranchName"
:value="ranch.ranchName" />
</el-select>
</el-form-item>
<el-form-item label="事件类型" prop="eventType">
<el-select v-model="form.eventType" placeholder="请选择事件类型">
<el-option label="转场转入" value="转场转入" />
<el-option label="转场转出" value="转场转出" />
</el-select>
</el-form-item>
<el-form-item label="转场类型" prop="transType">
<el-select v-model="form.transType" placeholder="请选择转场类型">
<el-option v-for="dict in trans_type" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
<el-form-item label="转场日期" prop="transitionDate">
<el-date-picker v-model="form.transitionDate" value-format="YYYY-MM-DD" type="date" placeholder="请选择转场日期"
:disabled="!isAdd"></el-date-picker>
</el-form-item>
<el-form-item label="技术员" prop="technician">
<el-input v-model="form.technician" placeholder="请输入技术员" />
</el-form-item>
@@ -143,6 +192,9 @@
<el-form-item label="品种">
<el-input :value="approveForm.varietyName" disabled />
</el-form-item>
<el-form-item label="事件类型">
<el-input :value="approveForm.eventType" disabled />
</el-form-item>
<el-form-item label="转入牧场">
<el-input :value="approveForm.transTo" disabled />
</el-form-item>
@@ -161,6 +213,12 @@
<el-form-item label="状态">
<el-input :value="getStatusLabel(approveForm.status)" disabled />
</el-form-item>
<el-form-item label="接收羊舍" v-if="approveForm.eventType === '转场转入'">
<el-select v-model="approveForm.sheepfoldId" placeholder="请选择接收羊舍" clearable>
<el-option v-for="sheepfold in acceptSheepfold" :key="sheepfold.id" :label="sheepfold.sheepfoldName"
:value="sheepfold.id" />
</el-select>
</el-form-item>
</el-form>
<template #footer>
@@ -174,7 +232,7 @@
</template>
<script setup name="Transition_info">
import { listTransition_info, getTransition_info, delTransition_info, addTransition_info, getSheepByRanchId, updateTransition_info, listRanch,approveTransitionInfo } from "@/api/produce/manage_sheep/transition_info"
import { listTransition_info, getTransition_info, delTransition_info, addTransition_info, getSheepByRanchId, updateTransition_info, listRanch, approveTransitionInfo } from "@/api/produce/manage_sheep/transition_info"
import { checkSheepByManageTags, getSheepBySheepfoldId } from '@/api/produce/other/fixHoof'
import request from '@/utils/request'
@@ -191,15 +249,17 @@ const single = ref(true)
const multiple = ref(true)
const total = ref(0)
const title = ref('')
const transitionDateRange = ref([])
const daterangeCreateTime = ref([])
const approveDialog = ref(false)
const approveForm = ref({})
const displayManageTags = ref('')
const varietyOptions = ref([])
const ranchOptions = ref([]);
const sheepOptions = ref([]);
const isAdd = ref(true);
const isEdit = ref(false);
const ranchOptions = ref([])
const sheepOptions = ref([])
const isAdd = ref(true)
const isEdit = ref(false)
const acceptSheepfold = ref([])
const data = reactive({
form: {
@@ -207,22 +267,27 @@ const data = reactive({
manageTags: [],
transTo: null,
transFrom: null,
eventType: null,
transType: null,
transitionDate: null,
technician: null,
tagDetails: {}
tagDetails: {}
},
queryParams: {
pageNum: 1,
pageSize: 10,
manageTags: [],
varietyId: null,
eventType: null,
transType: null,
transTo: null,
transFrom: null,
status: null,
createTime: null
createTime: null,
transitionDate: null
},
rules: {
manageTags:[
manageTags: [
{ required: true, message: "请输入管理耳号", trigger: "blur" }
],
transTo: [
@@ -231,9 +296,15 @@ const data = reactive({
transFrom: [
{ required: false, message: "请选择当前牧场", trigger: "blur" }
],
eventType: [
{ required: true, message: '请选择事件类型', trigger: 'change' }
],
transType: [
{ required: true, message: "请选择转场类型", trigger: "change" }
],
transitionDate: [
{ required: true, message: "请选择转场日期", trigger: "change" }
],
technician: [
{ required: true, message: "请输入技术员", trigger: "blur" }
]
@@ -249,6 +320,13 @@ function getList() {
queryParams.value.params.beginCreateTime = daterangeCreateTime.value[0]
queryParams.value.params.endCreateTime = daterangeCreateTime.value[1]
}
if (queryParams.value.transType !== null) {
queryParams.value.params.transType = queryParams.value.transType;
}
if (transitionDateRange.value && transitionDateRange.value.length > 0) {
queryParams.value.params["beginTransitionDate"] = transitionDateRange.value[0];
queryParams.value.params["endTransitionDate"] = transitionDateRange.value[1];
}
listTransition_info(queryParams.value).then(res => {
transition_infoList.value = res.rows
total.value = res.total
@@ -264,12 +342,12 @@ function reset() {
transFrom: null,
transType: null,
technician: null,
createBy:null,
createBy: null,
tagDetails: {}
};
sheepOptions.value = [];
proxy.resetForm("transition_infoRef");
isAdd.value = true;
isAdd.value = true;
isEdit.value = false;
}
@@ -280,7 +358,7 @@ function loadRanchOptions() {
if (res.rows && Array.isArray(res.rows)) {
const mapped = res.rows.map((ranch) => ({
id: Number(ranch.id),
ranchName: ranch.ranch || '未知牧场',
ranchName: ranch.ranch || '未知牧场',
}));
ranchOptions.value = mapped;
} else {
@@ -302,6 +380,40 @@ function loadSheepOptions() {
});
}
// 加载牧场下的羊舍
// 修改加载转入牧场下的接收羊舍使用牧场ID而非名称
function loadSheepfoldsByRanch(ranchName) {
// 1. 根据转入牧场名称匹配牧场ID
const matchedRanch = ranchOptions.value.find(
ranch => ranch.ranchName === ranchName
);
if (!matchedRanch) {
proxy.$modal.msgWarning(`未找到牧场“${ranchName}”的信息`);
acceptSheepfold.value = [];
return;
}
const ranchId = matchedRanch.id; // 获取匹配的牧场ID
// 2. 使用牧场ID调用接口加载羊舍修正参数
request({
url: '/sheepfold_management/sheepfold_management/list',
method: 'get',
params: {
ranchId: ranchId, // 关键使用牧场ID而非名称
pageNum: 1,
pageSize: 999
}
}).then(res => {
acceptSheepfold.value = res.rows || [];
if (acceptSheepfold.value.length === 0) {
proxy.$modal.msgWarning(`转入牧场“${ranchName}”没有可用的接收羊舍`);
}
}).catch(error => {
console.error('加载接收羊舍失败:', error);
proxy.$modal.msgError('获取接收羊舍数据失败');
});
}
// 通过牧场 ID 查询牧场名称
async function getRanchNameByRanchId(ranchId) {
if (!ranchId) return '';
@@ -312,7 +424,7 @@ async function getRanchNameByRanchId(ranchId) {
const matchedRanch = ranchOptions.value.find(
(item) => item.id === Number(ranchId)
);
return matchedRanch ? matchedRanch.ranchName : '';
return matchedRanch ? matchedRanch.ranchName : '';
} catch (error) {
console.error('通过 ranchId 查询牧场名称失败:', error);
return '';
@@ -337,7 +449,7 @@ function handleRanchChange(ranchName) {
getSheepByRanchId(ranchIdNum)
.then((res) => {
if (res.code === 200) {
if (res.code === 200) {
if (res.data && res.data.length > 0) {
sheepOptions.value = res.data.map((sheep) => ({
id: sheep.id,
@@ -410,7 +522,7 @@ async function loadSheepInfo() {
// 导出
function handleExport() {
proxy.download(
'/produce/manage_sheep/transition_info/export',
'/produce/manage_sheep/transition_info/export',
{ ...queryParams.value },
`transition_info_${Date.now()}.xlsx`
);
@@ -418,11 +530,22 @@ function handleExport() {
// 审批
function handleApprove(row) {
approveForm.value = { ...row };
if (row.status !== 0) {
proxy.$modal.msgWarning("该记录已完成审批,无法重复操作");
return;
}
approveForm.value = { ...row };
approveDialog.value = true;
displayManageTags.value = Array.isArray(row.manageTags)
? row.manageTags.join(',')
: row.manageTags || '';
if (row.eventType === '转场转入') {
loadSheepfoldsByRanch(row.transTo);
} else {
acceptSheepfold.value = [];
}
approveDialog.value = true;
}
// 审批同意
@@ -431,12 +554,15 @@ function handleApproveAgree() {
proxy.$modal.msgError('转入牧场不能为空');
return;
}
approveForm.value.status = 1;
approveForm.value.status = 1;
if (approveForm.value.eventType === '转场转入' && !approveForm.value.sheepfoldId) {
proxy.$modal.msgError('请选择接收羊舍');
return;
}
approveTransitionInfo(approveForm.value).then(() => {
approveDialog.value = false;
proxy.$modal.msgSuccess('审批通过,已更新羊只所在牧场');
proxy.$modal.msgSuccess('通过请求,已更新羊只信息');
getList();
}).catch(error => {
proxy.$modal.msgError(`审批失败:${error.message}`);
@@ -448,8 +574,10 @@ function handleApproveReject() {
approveForm.value.status = 2;
updateTransition_info(approveForm.value).then(() => {
approveDialog.value = false;
proxy.$modal.msgSuccess('审批成功,状态已更新为驳回');
proxy.$modal.msgSuccess('驳回请求');
getList();
}).catch(error => {
proxy.$modal.msgError(`审批失败:${error.message}`);
});
}
@@ -488,6 +616,8 @@ function handleQuery() {
//重置
function resetQuery() {
daterangeCreateTime.value = []
queryParams.value.transType = null;
transitionDateRange.value = [];
proxy.resetForm("queryRef")
handleQuery()
}
@@ -503,7 +633,7 @@ function handleAdd() {
reset();
open.value = true;
title.value = "添加转场";
isAdd.value = true;
isAdd.value = true;
isEdit.value = false;
sheepOptions.value = [];
form.value.manageTags = [];
@@ -516,11 +646,11 @@ async function handleUpdate(row) {
getTransition_info(_id).then(response => {
form.value = {
...response.data,
manageTags: [response.data.manageTags]
manageTags: [response.data.manageTags]
};
open.value = true;
title.value = "修改转场";
isAdd.value = false;
isAdd.value = false;
isEdit.value = true;
}).catch(error => {
console.error('获取转场详情失败:', error);
@@ -536,7 +666,7 @@ async function submitForm() {
const allTags = form.value.manageTags;
let validTags = [];
if (isAdd.value) {
if (isAdd.value) {
if (!allTags || allTags.length === 0) {
proxy.$modal.msgError('请选择至少一个耳号');
return;
@@ -549,7 +679,7 @@ async function submitForm() {
proxy.$modal.msgError('所有耳号均无效,请重新输入');
return;
}
} else {
} else {
validTags = allTags;
}
@@ -559,10 +689,12 @@ async function submitForm() {
sheepId: form.value.tagDetails[tag].sheepId,
varietyId: form.value.tagDetails[tag].varietyId,
varietyName: form.value.tagDetails[tag].varietyName,
manageTags: tag,
manageTags: tag,
transTo: form.value.transTo,
transFrom: form.value.tagDetails[tag].ranchName,
transType: form.value.transType,
eventType: form.value.eventType,
transitionDate: form.value.transitionDate,
technician: form.value.technician,
comment: form.value.tagDetails[tag].comment,
status: 0,
@@ -571,6 +703,7 @@ async function submitForm() {
submitData = {
...form.value,
manageTags: validTags.join(','),
eventType: form.value.eventType,
};
}
@@ -602,7 +735,7 @@ function getVarietyOptions() {
//删除
function handleDelete(row) {
const _ids = row.id || ids.value
proxy.$modal.confirm('是否确认删除转场编号为"' + _ids + '"的数据项?')
proxy.$modal.confirm('是否确认删除这条记录数据')
.then(() => delTransition_info(_ids))
.then(() => {
getList()
@@ -617,4 +750,14 @@ onMounted(() => {
loadSheepOptions();
getList();
});
</script>
</script>
<style scoped>
.tag-count {
color: #606266;
background-color: #f5f7fa;
padding: 2px 8px;
border-radius: 12px;
font-size: 12px;
}
</style>