This commit is contained in:
2026-01-13 21:45:34 +08:00
8 changed files with 217 additions and 28 deletions

View File

@@ -42,3 +42,12 @@ export function delChangeComment(id) {
method: 'delete' method: 'delete'
}) })
} }
// 远程模糊搜索耳号(下拉用)
export function searchEarNumbers(query) {
return request({
url: '/changeComment/changeComment/search_ear_numbers',
method: 'get',
params: { query }
})
}

View File

@@ -69,3 +69,12 @@ export function checkTagExists(tag, earType) {
params: { tag, earType } params: { tag, earType }
}); });
} }
// 远程模糊搜索耳号
export function searchEarNumbers(query) {
return request({
url: '/changeEar/changeEar/search_ear_numbers',
method: 'get',
params: { query }
})
}

View File

@@ -50,3 +50,12 @@ export function getSheepByManageTags(manageTags) {
method: 'get' method: 'get'
}); });
} }
// 远程模糊搜索耳号
export function searchEarNumbers(query) {
return request({
url: '/changeVariety/changeVariety/search_ear_numbers',
method: 'get',
params: { query }
})
}

View File

@@ -70,3 +70,11 @@ export function approveTransitionInfo(data) {
data data
}) })
} }
// 远程模糊搜索耳号
export function searchEarNumbers(query) {
return request({
url: '/produce/manage_sheep/transition_info/search_ear_numbers',
method: 'get',
params: { query }
})
}

View File

@@ -5,9 +5,16 @@
<el-date-picker v-model="daterangeEventDate" type="daterange" range-separator="-" start-placeholder="开始日期" <el-date-picker v-model="daterangeEventDate" type="daterange" range-separator="-" start-placeholder="开始日期"
end-placeholder="结束日期" value-format="YYYY-MM-DD" /> end-placeholder="结束日期" value-format="YYYY-MM-DD" />
</el-form-item> </el-form-item>
<el-form-item label="管理耳号" prop="manageTags"> <el-form-item label="管理耳号" prop="manageTagsList">
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号" clearable @keyup.enter="handleQuery" <el-select v-model="queryParams.manageTagsList" multiple filterable remote reserve-keyword
style="max-width: 160px;" /> placeholder="请输入耳号,支持多选" :remote-method="searchEarNumber" :loading="earLoading" allow-create
default-first-option style="width: 260px">
<el-option v-for="item in earOptions" :key="item" :label="item" :value="item" />
</el-select>
<el-button type="text" @click="clearEarNumbers"
v-if="queryParams.manageTagsList && queryParams.manageTagsList.length > 0" style="margin-left: 8px">
清空
</el-button>
</el-form-item> </el-form-item>
<el-form-item label="新备注" prop="newComment"> <el-form-item label="新备注" prop="newComment">
<el-input v-model="queryParams.newComment" placeholder="请输入新备注" clearable @keyup.enter="handleQuery" <el-input v-model="queryParams.newComment" placeholder="请输入新备注" clearable @keyup.enter="handleQuery"
@@ -27,7 +34,17 @@
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div v-if="queryParams.manageTagsList && queryParams.manageTagsList.length > 0" class="selected-ear-numbers">
<span style="margin-right: 10px; color: #606266;">已选择耳号</span>
<el-tag
v-for="tag in queryParams.manageTagsList"
:key="tag"
closable
@close="removeEarNumber(tag)"
style="margin-right: 8px;">
{{ tag }}
</el-tag>
</div>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" <el-button type="primary" plain icon="Plus" @click="handleAdd"
@@ -111,7 +128,7 @@
</template> </template>
<script setup name="ChangeComment"> <script setup name="ChangeComment">
import { listChangeComment, getChangeComment, delChangeComment, addChangeComment, updateChangeComment } from "@/api/produce/manage_sheep/changeComment" import { listChangeComment, getChangeComment, delChangeComment, addChangeComment, updateChangeComment ,searchEarNumbers} from "@/api/produce/manage_sheep/changeComment"
import { getSheepByManageTags } from "@/api/produce/manage_sheep/changeVariety" import { getSheepByManageTags } from "@/api/produce/manage_sheep/changeVariety"
import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management' import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management'
@@ -158,7 +175,8 @@ const data = reactive({
}) })
const { queryParams, form, rules } = toRefs(data) const { queryParams, form, rules } = toRefs(data)
const earOptions = ref([])
const earLoading = ref(false)
/** 查询改备注列表 */ /** 查询改备注列表 */
function getList() { function getList() {
loading.value = true loading.value = true
@@ -234,6 +252,7 @@ function resetQuery() {
daterangeCreateTime.value = [] daterangeCreateTime.value = []
daterangeEventDate.value = [] daterangeEventDate.value = []
queryParams.value.sheepfoldId = null queryParams.value.sheepfoldId = null
queryParams.value.manageTagsList = []
proxy.resetForm("queryRef") proxy.resetForm("queryRef")
handleQuery() handleQuery()
} }
@@ -318,9 +337,36 @@ function getSheepfoldOptions() {
sheepfoldOptions.value = res.rows sheepfoldOptions.value = res.rows
}) })
} }
/* 远程搜耳号 */
function searchEarNumber(query) {
if (!query) { earOptions.value = []; return }
earLoading.value = true
searchEarNumbers(query.trim()).then(res => {
earOptions.value = res.data || []
}).finally(() => earLoading.value = false)
}
/* 清空所有耳号 */
function clearEarNumbers() {
queryParams.value.manageTagsList = []
}
/* 删除单个耳号 */
function removeEarNumber(tag) {
const idx = queryParams.value.manageTagsList.indexOf(tag)
if (idx > -1) queryParams.value.manageTagsList.splice(idx, 1)
}
onMounted(() => { onMounted(() => {
getSheepfoldOptions(); getSheepfoldOptions();
getList(); getList();
}); });
</script> </script>
<style scoped>
.selected-ear-numbers{
margin-bottom: 16px;
padding: 10px;
background: #f5f7fa;
border-radius: 4px;
}
</style>

View File

@@ -5,9 +5,16 @@
<el-date-picker v-model="daterangeEventDate" type="daterange" range-separator="-" start-placeholder="开始日期" <el-date-picker v-model="daterangeEventDate" type="daterange" range-separator="-" start-placeholder="开始日期"
end-placeholder="结束日期" value-format="YYYY-MM-DD" /> end-placeholder="结束日期" value-format="YYYY-MM-DD" />
</el-form-item> </el-form-item>
<el-form-item label="耳号" prop="manageTag"> <el-form-item label="耳号" prop="manageTagsList">
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号或电子耳号" clearable @keyup.enter="handleQuery" <el-select v-model="queryParams.manageTagsList" multiple filterable remote reserve-keyword
style="max-width: 160px;" /> placeholder="请输入耳号,支持多选" :remote-method="searchEarNumber" :loading="earLoading" allow-create
default-first-option style="width: 260px">
<el-option v-for="item in earOptions" :key="item" :label="item" :value="item" />
</el-select>
<el-button type="text" @click="clearEarNumbers"
v-if="queryParams.manageTagsList && queryParams.manageTagsList.length > 0" style="margin-left: 8px">
清空
</el-button>
</el-form-item> </el-form-item>
<el-form-item label="新耳号" prop="newTag"> <el-form-item label="新耳号" prop="newTag">
<el-input v-model="queryParams.newTag" placeholder="请输入新耳号" clearable @keyup.enter="handleQuery" <el-input v-model="queryParams.newTag" placeholder="请输入新耳号" clearable @keyup.enter="handleQuery"
@@ -33,7 +40,13 @@
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div v-if="queryParams.manageTagsList && queryParams.manageTagsList.length > 0" class="selected-ear-numbers">
<span style="margin-right: 10px; color: #606266;">已选耳号</span>
<el-tag v-for="tag in queryParams.manageTagsList" :key="tag" closable @close="removeEarNumber(tag)"
style="margin-right: 8px;">
{{ tag }}
</el-tag>
</div>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" <el-button type="primary" plain icon="Plus" @click="handleAdd"
@@ -132,7 +145,7 @@
</template> </template>
<script setup name="ChangeEar"> <script setup name="ChangeEar">
import { listChangeEar, getChangeEar, delChangeEar, addChangeEar, updateChangeEar, getSheepByEarNumber, checkTagExists } from "@/api/produce/manage_sheep/changeEar" import { listChangeEar, getChangeEar, delChangeEar, addChangeEar, updateChangeEar, getSheepByEarNumber, checkTagExists,searchEarNumbers } from "@/api/produce/manage_sheep/changeEar"
import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management' import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management'
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
@@ -191,7 +204,8 @@ const data = reactive({
}) })
const { queryParams, form, rules } = toRefs(data) const { queryParams, form, rules } = toRefs(data)
const earOptions = ref([])
const earLoading = ref(false)
/** 查询修改电子耳号记录列表 */ /** 查询修改电子耳号记录列表 */
async function getList() { async function getList() {
loading.value = true; loading.value = true;
@@ -258,6 +272,7 @@ function resetQuery() {
queryParams.value.newTag = null queryParams.value.newTag = null
queryParams.value.oldTag = null queryParams.value.oldTag = null
queryParams.value.earType = null queryParams.value.earType = null
queryParams.value.manageTagsList = []
proxy.resetForm("queryRef") proxy.resetForm("queryRef")
@@ -408,9 +423,31 @@ function getSheepfoldOptions() {
sheepfoldOptions.value = res.rows sheepfoldOptions.value = res.rows
}) })
} }
function searchEarNumber(query) {
if (!query) { earOptions.value = []; return }
earLoading.value = true
searchEarNumbers(query.trim()).then(res => {
earOptions.value = res.data || []
}).finally(() => earLoading.value = false)
}
function clearEarNumbers() {
queryParams.value.manageTagsList = []
}
function removeEarNumber(tag) {
const idx = queryParams.value.manageTagsList.indexOf(tag)
if (idx > -1) queryParams.value.manageTagsList.splice(idx, 1)
}
onMounted(() => { onMounted(() => {
getSheepfoldOptions(); getSheepfoldOptions();
getList(); getList();
}); });
</script> </script>
<style scoped>
.selected-ear-numbers{
margin-bottom: 16px;
padding: 10px;
background: #f5f7fa;
border-radius: 4px;
}
</style>

View File

@@ -5,9 +5,16 @@
<el-date-picker v-model="daterangeEventDate" type="daterange" range-separator="-" start-placeholder="开始日期" <el-date-picker v-model="daterangeEventDate" type="daterange" range-separator="-" start-placeholder="开始日期"
end-placeholder="结束日期" value-format="YYYY-MM-DD" /> end-placeholder="结束日期" value-format="YYYY-MM-DD" />
</el-form-item> </el-form-item>
<el-form-item label="管理耳号" prop="manageTags"> <el-form-item label="管理耳号" prop="manageTagsList">
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号" clearable @keyup.enter="handleQuery" <el-select v-model="queryParams.manageTagsList" multiple filterable remote reserve-keyword
style="width: 150px;" /> placeholder="请输入耳号,支持多选" :remote-method="searchEarNumber" :loading="earLoading" allow-create
default-first-option style="width: 260px">
<el-option v-for="item in earOptions" :key="item" :label="item" :value="item" />
</el-select>
<el-button type="text" @click="clearEarNumbers"
v-if="queryParams.manageTagsList && queryParams.manageTagsList.length > 0" style="margin-left: 8px">
清空
</el-button>
</el-form-item> </el-form-item>
<el-form-item label="原品种" prop="varietyOld"> <el-form-item label="原品种" prop="varietyOld">
<el-select v-model="queryParams.varietyOld" placeholder="请选择原品种" clearable filterable> <el-select v-model="queryParams.varietyOld" placeholder="请选择原品种" clearable filterable>
@@ -29,7 +36,13 @@
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div v-if="queryParams.manageTagsList && queryParams.manageTagsList.length > 0" class="selected-ear-numbers">
<span style="margin-right: 10px; color: #606266;">已选耳号</span>
<el-tag v-for="tag in queryParams.manageTagsList" :key="tag" closable @close="removeEarNumber(tag)"
style="margin-right: 8px;">
{{ tag }}
</el-tag>
</div>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" <el-button type="primary" plain icon="Plus" @click="handleAdd"
@@ -119,7 +132,7 @@
</template> </template>
<script setup name="ChangeVariety"> <script setup name="ChangeVariety">
import { listChangeVariety, getChangeVariety, delChangeVariety, addChangeVariety, updateChangeVariety, getSheepByManageTags } from "@/api/produce/manage_sheep/changeVariety" import { listChangeVariety, getChangeVariety, delChangeVariety, addChangeVariety, updateChangeVariety, getSheepByManageTags,searchEarNumbers } from "@/api/produce/manage_sheep/changeVariety"
import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management' import { listSheepfold_management as listSheepfold } from '@/api/fileManagement/sheepfold_management'
import { listVariety } from '@/api/variety/variety' import { listVariety } from '@/api/variety/variety'
@@ -174,7 +187,8 @@ const data = reactive({
}) })
const { queryParams, form, rules } = toRefs(data) const { queryParams, form, rules } = toRefs(data)
const earOptions = ref([])
const earLoading = ref(false)
/** 查询改品种记录列表 */ /** 查询改品种记录列表 */
function getList() { function getList() {
loading.value = true loading.value = true
@@ -267,6 +281,7 @@ function resetQuery() {
daterangeCreateTime.value = [] daterangeCreateTime.value = []
queryParams.value.sheepfoldId = null queryParams.value.sheepfoldId = null
daterangeEventDate.value = [] daterangeEventDate.value = []
queryParams.value.manageTagsList = []
proxy.resetForm("queryRef") proxy.resetForm("queryRef")
handleQuery() handleQuery()
} }
@@ -354,10 +369,31 @@ function getSheepfoldOptions() {
sheepfoldOptions.value = res.rows sheepfoldOptions.value = res.rows
}) })
} }
function searchEarNumber(query) {
if (!query) { earOptions.value = []; return }
earLoading.value = true
searchEarNumbers(query.trim()).then(res => {
earOptions.value = res.data || []
}).finally(() => earLoading.value = false)
}
function clearEarNumbers() {
queryParams.value.manageTagsList = []
}
function removeEarNumber(tag) {
const idx = queryParams.value.manageTagsList.indexOf(tag)
if (idx > -1) queryParams.value.manageTagsList.splice(idx, 1)
}
onMounted(() => { onMounted(() => {
loadVarietyOptions(); loadVarietyOptions();
getSheepfoldOptions(); getSheepfoldOptions();
getList(); getList();
}); });
</script> </script>
<style scoped>
.selected-ear-numbers {
margin-bottom: 16px;
padding: 10px;
background: #f5f7fa;
border-radius: 4px;
}
</style>

View File

@@ -6,9 +6,16 @@
<el-date-picker v-model="transitionDateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-" <el-date-picker v-model="transitionDateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker> start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="管理耳号" prop="manageTags"> <el-form-item label="管理耳号" prop="manageTagsList">
<el-input v-model="queryParams.manageTags" placeholder="请输入管理耳号" clearable @keyup.enter="handleQuery" <el-select v-model="queryParams.manageTagsList" multiple filterable remote reserve-keyword
style="width: 150px;" /> placeholder="请输入耳号,支持多选" :remote-method="searchEarNumber" :loading="earLoading" allow-create
default-first-option style="width: 260px">
<el-option v-for="item in earOptions" :key="item" :label="item" :value="item" />
</el-select>
<el-button type="text" @click="clearEarNumbers"
v-if="queryParams.manageTagsList && queryParams.manageTagsList.length > 0" style="margin-left: 8px">
清空
</el-button>
</el-form-item> </el-form-item>
<el-form-item label="品种" prop="varietyId"> <el-form-item label="品种" prop="varietyId">
<el-select v-model="queryParams.varietyId" placeholder="请选择品种" style="min-width:150px" clearable> <el-select v-model="queryParams.varietyId" placeholder="请选择品种" style="min-width:150px" clearable>
@@ -42,7 +49,13 @@
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div v-if="queryParams.manageTagsList && queryParams.manageTagsList.length > 0" class="selected-ear-numbers">
<span style="margin-right: 10px; color: #606266;">已选耳号</span>
<el-tag v-for="tag in queryParams.manageTagsList" :key="tag" closable @close="removeEarNumber(tag)"
style="margin-right: 8px;">
{{ tag }}
</el-tag>
</div>
<!-- 按钮行 --> <!-- 按钮行 -->
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
@@ -222,7 +235,7 @@
</template> </template>
<script setup name="Transition_info"> <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,searchEarNumbers } from "@/api/produce/manage_sheep/transition_info"
import { checkSheepByManageTags, getSheepBySheepfoldId } from '@/api/produce/other/fixHoof' import { checkSheepByManageTags, getSheepBySheepfoldId } from '@/api/produce/other/fixHoof'
import request from '@/utils/request' import request from '@/utils/request'
@@ -298,7 +311,8 @@ const data = reactive({
} }
}) })
const { queryParams, form, rules } = toRefs(data) const { queryParams, form, rules } = toRefs(data)
const earOptions = ref([])
const earLoading = ref(false)
//获取转场记录列表 //获取转场记录列表
function getList() { function getList() {
loading.value = true loading.value = true
@@ -596,6 +610,7 @@ function handleQuery() {
function resetQuery() { function resetQuery() {
queryParams.value.transType = null; queryParams.value.transType = null;
transitionDateRange.value = []; transitionDateRange.value = [];
queryParams.value.manageTagsList = []
proxy.resetForm("queryRef") proxy.resetForm("queryRef")
handleQuery() handleQuery()
} }
@@ -721,7 +736,20 @@ function handleDelete(row) {
}) })
} }
function searchEarNumber(query) {
if (!query) { earOptions.value = []; return }
earLoading.value = true
searchEarNumbers(query.trim()).then(res => {
earOptions.value = res.data || []
}).finally(() => earLoading.value = false)
}
function clearEarNumbers() {
queryParams.value.manageTagsList = []
}
function removeEarNumber(tag) {
const idx = queryParams.value.manageTagsList.indexOf(tag)
if (idx > -1) queryParams.value.manageTagsList.splice(idx, 1)
}
onMounted(() => { onMounted(() => {
loadRanchOptions(); loadRanchOptions();
getVarietyOptions(); getVarietyOptions();
@@ -738,4 +766,11 @@ onMounted(() => {
border-radius: 12px; border-radius: 12px;
font-size: 12px; font-size: 12px;
} }
.selected-ear-numbers {
margin-bottom: 16px;
padding: 10px;
background: #f5f7fa;
border-radius: 4px;
}
</style> </style>