基地管理对接接口

master
贾肃 4 months ago
parent e21e44f141
commit 05c71a1d1b
  1. 50
      src/api/basicData/breedingBaseApi.js
  2. 34
      src/components/baseSelection/index.vue
  3. 70
      src/views/basicData/breedingBase/breedingBaseForm.vue
  4. 108
      src/views/basicData/breedingBase/index.vue

@ -0,0 +1,50 @@
import request from '@/utils/request'
// 查询基地列表分页
export function selBreedingBasePage(query) {
return request({
url: '/baseNurseryInfo/queryByPage',
method: 'get',
params: query
})
}
// 查询所有基地
export function selAllBreedingBase(query) {
return request({
url: '/baseNurseryInfo/selectByPage',
method: 'post',
params: query
})
}
// 通过id查询基地
export function breedingQueryById(query) {
return request({
url: '/baseNurseryInfo/queryById',
method: 'get',
params: query
})
}
// 新增基地
export function addBreedingBase(data) {
return request({
url: '/baseNurseryInfo/add',
method: 'post',
data: data
})
}
// 修改基地信息
export function editBreedingBase(data) {
return request({
url: '/baseNurseryInfo/edit',
method: 'put',
data: data
})
}
// 通过id删除基地
export function breedingBaseDeleteById(params) {
return request({
url: '/baseNurseryInfo/queryByPage',
method: 'get',
params: params
})
}

@ -1,19 +1,13 @@
<script setup> <script setup>
import useSettingsStore from "@/store/modules/settings.js"; import useSettingsStore from "@/store/modules/settings.js";
import {selAllBreedingBase} from "@/api/basicData/breedingBaseApi.js";
const baseList = ref([ const loading = ref(false)
{baseId: 1, baseName: '广西农投基地'}, const baseList = ref([])
{baseId: 2, baseName: '广西农垦基地'},
{baseId: 4, baseName: '基地3'},
{baseId: 3, baseName: '基地4'},
{baseId: 5, baseName: '种植资源圃1'},
{baseId: 6, baseName: '种植资源圃2'},
])
const route = useRoute(); const route = useRoute();
onMounted(()=>{ onMounted(()=>{
if (route.query.baseId){ if (route.query.id){
baseList.value.forEach(item => { baseList.value.forEach(item => {
if (item.baseId === Number(route.query.baseId)){ if (item.id === Number(route.query.id)){
clickBase(item) clickBase(item)
} }
}) })
@ -29,15 +23,27 @@ const clickBase = (item) => {
currentBase.value = item currentBase.value = item
emit('clickBase', item) emit('clickBase', item)
} }
const selBaseList = () => {
loading.value = true
selAllBreedingBase({}).then(res =>{
console.log(res);
baseList.value = res.data
}).finally(()=>{
loading.value = false
})
}
onMounted(()=>{
selBaseList()
})
</script> </script>
<template> <template>
<div class="base-box" :style="{height:maxHeight+'px'}"> <div class="base-box" :style="{height:maxHeight+'px'}" v-loading="loading">
<title-divider title="育种基地/资源圃"></title-divider> <title-divider title="育种基地/资源圃"></title-divider>
<div class="base-list"> <div class="base-list">
<div class="base-item" v-for="item in baseList" @click="clickBase(item)"> <div class="base-item" v-for="item in baseList" @click="clickBase(item)">
<i-local-two theme="filled" size="22" :fill="currentBase.baseId !== item.baseId ? '#6c6c6c' : theme"/> <i-local-two theme="filled" size="22" :fill="currentBase.id !== item.id ? '#6c6c6c' : theme"/>
<div class="base-name" :class="{'base-active':currentBase.baseId === item.baseId}">{{item.baseName}}</div> <div class="base-name" :class="{'base-active':currentBase.id === item.id}">{{item.baseName}}</div>
</div> </div>
</div> </div>
</div> </div>

@ -1,15 +1,17 @@
<script setup> <script setup>
import LeftDrawer from "@/components/LeftDrawer/index.vue"; import LeftDrawer from "@/components/LeftDrawer/index.vue";
import {deepClone} from "@/utils/index.js"; import {deepClone} from "@/utils/index.js";
import useSettingsStore from "@/store/modules/settings.js"; import {codeToText, provinceAndCityData} from "element-china-area-data";
import {pcTextArr} from "element-china-area-data"; import {addBreedingBase, breedingQueryById, editBreedingBase} from "@/api/basicData/breedingBaseApi.js";
let {proxy} = getCurrentInstance(); let {proxy} = getCurrentInstance();
const props = defineProps({}) const props = defineProps({})
const settingsStore = useSettingsStore()
const selectOptions = reactive({ const selectOptions = reactive({
pcTextArr:pcTextArr, provincesOptions:provinceAndCityData.map((item) => {
return {
value:Number(item.value),
label: item.label
}
}),
baseTypeOptions:[ baseTypeOptions:[
{ label: '智能育种基地', value: 1}, { label: '智能育种基地', value: 1},
{ label: '种质资源圃', value: 2} { label: '种质资源圃', value: 2}
@ -19,6 +21,7 @@ let emit = defineEmits(['beforeSubmit', 'submitSuccess']);
const loading = ref(false) const loading = ref(false)
// //
const showDrawer = ref(false) const showDrawer = ref(false)
const selLoading = ref(false)
// 1 2 3 // 1 2 3
const formStatus = ref(1) const formStatus = ref(1)
// //
@ -35,23 +38,35 @@ const toAdd = (params = {}) => {
} }
const toUpdate = (row) => { const toUpdate = (row) => {
formStatus.value = 2 formStatus.value = 2
geyById(row)
}
const geyById = (row) => {
showDrawer.value = true showDrawer.value = true
selLoading.value = true
breedingQueryById({id:row.id}).then(res =>{
resetForm(res.data)
}).finally(()=>{
selLoading.value = false
})
} }
const toView = (row) => { const toView = (row) => {
formStatus.value = 3 formStatus.value = 3
showDrawer.value = true geyById(row)
} }
const formRef = ref(null) const formRef = ref(null)
const saveMassif = () => { const saveBreedingBase = () => {
formRef.value.validate(valid => { formRef.value.validate(valid => {
if (valid){ if (valid){
emit('beforeSubmit', formData.value) emit('beforeSubmit', formData.value)
loading.value = true loading.value = true
setTimeout(() => { let api = formData.value.id ? editBreedingBase : addBreedingBase
loading.value = false api(formData.value).then(res =>{
proxy.$modal.msgSuccess(formData.value.id ?'修改成功':"保存成功");
emit('submitSuccess', formData.value) emit('submitSuccess', formData.value)
showDrawer.value = false showDrawer.value = false
}, 2000) }).finally(()=>{
loading.value = false
})
} }
}) })
} }
@ -88,6 +103,9 @@ const rules = ref({
{ validator: validateLatitude, trigger: 'change' } { validator: validateLatitude, trigger: 'change' }
] ]
}) })
const changeArea = (value) =>{
formData.value.administrativeDivisionName = codeToText[value.toString()]
}
</script> </script>
<template> <template>
@ -99,7 +117,7 @@ const rules = ref({
<div v-if="formStatus === 3">/</div> <div v-if="formStatus === 3">/</div>
</div> </div>
<div class="form"> <div class="form">
<el-form :model="formData" :rules="rules" ref="formRef"> <el-form :model="formData" :rules="rules" ref="formRef" v-loading="selLoading">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="基地/资源圃名称" prop="baseName"> <el-form-item label="基地/资源圃名称" prop="baseName">
@ -116,23 +134,23 @@ const rules = ref({
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="所属省份" prop="areaCode"> <el-form-item label="所属省份" prop="administrativeDivisionId">
<el-select v-model="formData.areaCode" filterable clearable v-if="formStatus!==3"> <el-select v-model="formData.administrativeDivisionId" filterable clearable v-if="formStatus!==3" @change="changeArea">
<el-option v-for="item in selectOptions.pcTextArr" :label="item.label" :value="item.value"></el-option> <el-option v-for="item in selectOptions.provincesOptions" :label="item.label" :value="item.value"></el-option>
</el-select> </el-select>
<div v-else>{{formData.areaCode}}</div> <div v-else>{{formData.administrativeDivisionName}}</div>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="地理位置" prop="location"> <el-form-item label="地理位置" prop="position">
<el-input placeholder="请输入地理位置" v-if="formStatus!==3" v-model="formData.location"></el-input> <el-input placeholder="请输入地理位置" v-if="formStatus!==3" v-model="formData.position"></el-input>
<div v-else>{{formData.location}}</div> <div v-else>{{formData.position}}</div>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="占地面积(亩)" prop="baseType"> <el-form-item label="占地面积(亩)" prop="area">
<el-input placeholder="请输入占地面积(亩)" v-if="formStatus!==3" v-model="formData.baseName"></el-input> <el-input-number precision="2" :controls="false" placeholder="请输入占地面积(亩)" v-if="formStatus!==3" v-model="formData.area"></el-input-number>
<div v-else>{{formData.location}}</div> <div v-else>{{formData.area}}</div>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -149,16 +167,16 @@ const rules = ref({
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="备注" prop="name"> <el-form-item label="备注" prop="intro">
<el-input type="textarea" rows="5" placeholder="请输入备注" v-if="formStatus!==3"></el-input> <el-input type="textarea" rows="5" placeholder="请输入备注" v-if="formStatus!==3" v-model="formData.intro"></el-input>
<div v-else>{{formData.location}}</div> <div v-else>{{formData.intro}}</div>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
</div> </div>
<template #footer> <template #footer>
<el-button v-if="formStatus!==3" type="primary" :loading="loading" @click="saveMassif"></el-button> <el-button v-if="formStatus!==3" type="primary" :loading="loading" @click="saveBreedingBase"></el-button>
<el-button @click="showDrawer = false">取消</el-button> <el-button @click="showDrawer = false">取消</el-button>
</template> </template>
</left-drawer> </left-drawer>

@ -9,7 +9,7 @@
<el-col :span="6"> <el-col :span="6">
<el-form-item label="基地名称"> <el-form-item label="基地名称">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.baseName"
placeholder="请输入基地名称" placeholder="请输入基地名称"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
@ -25,8 +25,8 @@
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="所属省份"> <el-form-item label="所属省份">
<el-select v-model="queryParams.areaCode" filterable clearable> <el-select v-model="queryParams.administrativeDivisionId" filterable clearable>
<el-option v-for="item in data.pcTextArr" :label="item.label" :value="item.value"></el-option> <el-option v-for="item in data.provincesOptions" :label="item.label" :value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -46,14 +46,19 @@
<el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column label="基地/资源圃名称" align="center" key="userId" prop="userId" v-if="columns[0].visible" /> <el-table-column label="基地/资源圃名称" align="center" key="baseName" prop="baseName" v-if="columns[0].visible" />
<el-table-column label="基地类型" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" /> <el-table-column label="基地类型" align="center" key="baseType" prop="baseType" v-if="columns[1].visible" :show-overflow-tooltip="true" >
<el-table-column label="所属省份" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" /> <template #default="scope">
<el-table-column label="地理位置" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" /> <el-tag v-if="scope.row.baseType === 1" type="success"></el-tag>
<el-table-column label="战地面积(亩)" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" /> <el-tag v-else-if="scope.row.baseType === 2" type="success">种质资源圃</el-tag>
<el-table-column label="基地坐标(经度)" align="center" key="phonenumber" prop="phonenumber" v-if="columns[5].visible" width="120" /> </template>
<el-table-column label="基地坐标(纬度)" align="center" key="status" v-if="columns[6].visible"></el-table-column> </el-table-column>
<el-table-column label="创建人" align="center" prop="createTime" v-if="columns[7].visible" width="160"></el-table-column> <el-table-column label="所属省份" align="center" key="administrativeDivisionName" prop="administrativeDivisionName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
<el-table-column label="地理位置" align="center" key="position" prop="dept.position" v-if="columns[3].visible" :show-overflow-tooltip="true" />
<el-table-column label="战地面积(亩)" align="center" key="area" prop="area" v-if="columns[4].visible" width="120" />
<el-table-column label="基地坐标(经度)" align="center" key="longitude" prop="longitude" v-if="columns[5].visible" width="120" />
<el-table-column label="基地坐标(纬度)" align="center" key="latitude" prop="latitude" v-if="columns[6].visible"></el-table-column>
<el-table-column label="创建人" align="center" prop="createUserName" v-if="columns[7].visible" width="160"></el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[8].visible" width="160"> <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[8].visible" width="160">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
@ -62,13 +67,13 @@
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-tooltip content="详情" placement="top"> <el-tooltip content="详情" placement="top">
<el-button link type="primary" icon="View" @click="handleUpdate(scope.row)"></el-button> <el-button link type="primary" @click="handleView(scope.row)"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="修改" placement="top" v-if="scope.row.userId !== 1"> <el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:user:edit']"></el-button> <el-button link type="primary" @click="handleUpdate(scope.row)"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top" v-if="scope.row.userId !== 1"> <el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="delBreedingBase(scope.row)" v-hasPermi="['system:user:remove']"></el-button> <el-button link type="primary" @click="delBreedingBase(scope.row)"></el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
@ -91,31 +96,26 @@
</el-col> </el-col>
</el-row> </el-row>
<breeding-base-form ref="breedingBaseFormRef" /> <breeding-base-form ref="breedingBaseFormRef" @submit-success="submitSuccess"/>
</div> </div>
</template> </template>
<script setup name="User"> <script setup name="User">
import { changeUserStatus, listUser, resetUserPwd, delUser, getUser, updateUser, addUser, deptTreeSelect } from "@/api/system/user"; import {pcTextArr, provinceAndCityData} from "element-china-area-data";
import {pcTextArr} from "element-china-area-data";
import BreedingBaseForm from "@/views/basicData/breedingBase/breedingBaseForm.vue"; import BreedingBaseForm from "@/views/basicData/breedingBase/breedingBaseForm.vue";
import {ElMessageBox} from "element-plus"; import {ElMessage, ElMessageBox} from "element-plus";
import {breedingBaseDeleteById, selBreedingBasePage} from "@/api/basicData/breedingBaseApi.js";
// //
const breedingBaseFormRef = ref(null) const breedingBaseFormRef = ref(null)
const router = useRouter(); const router = useRouter();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
const currentBase = ref({})
const tableList = ref([]); const tableList = ref([]);
const open = ref(false);
const loading = ref(false); const loading = ref(false);
const showSearch = ref(true); const showSearch = ref(true);
const ids = ref([]); const ids = ref([]);
const single = ref(true); const single = ref(true);
const multiple = ref(true); const multiple = ref(true);
const total = ref(0); const total = ref(0);
const title = ref("");
const dateRange = ref([]);
// //
const columns = ref([ const columns = ref([
{ key: 0, label: `基地/资源圃名称`, visible: true }, { key: 0, label: `基地/资源圃名称`, visible: true },
@ -136,12 +136,16 @@ const data = reactive({
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
userName: undefined, baseName: undefined,
plantingSeason: 2023, baseType: undefined,
status: undefined, administrativeDivisionId: undefined
deptId: undefined
}, },
pcTextArr:pcTextArr, provincesOptions:provinceAndCityData.map((item) => {
return {
value:Number(item.value),
label: item.label
}
}),
baseTypeOptions:[ baseTypeOptions:[
{ label: '智能育种基地', value: 1}, { label: '智能育种基地', value: 1},
{ label: '种质资源圃', value: 2} { label: '种质资源圃', value: 2}
@ -158,22 +162,26 @@ const delBreedingBase = (item) => {
customClass: 'message-box' customClass: 'message-box'
} }
).then(() => { ).then(() => {
ElMessage.success(`${item.label || '地块'}删除成功`) breedingBaseDeleteById(item.id).then(res => {
ElMessage.success(`${item.baseName}删除成功`)
getList()
})
}) })
} }
// //
const submitSuccess = (value) =>{ const submitSuccess = (value) =>{
getList()
} }
const { queryParams, form,} = toRefs(data); const { queryParams, form,} = toRefs(data);
/** 查询用户列表 */ /** 查询列表 */
function getList() { function getList() {
loading.value = true; loading.value = true;
listUser(proxy.addDateRange(queryParams.value, dateRange.value)).then(res => { selBreedingBasePage(queryParams.value).then(res => {
loading.value = false;
tableList.value = res.rows; tableList.value = res.rows;
total.value = res.total; total.value = res.total;
}).finally(()=>{
loading.value = false;
}); });
}; };
/** 搜索按钮操作 */ /** 搜索按钮操作 */
@ -183,22 +191,9 @@ function handleQuery() {
}; };
/** 重置按钮操作 */ /** 重置按钮操作 */
function resetQuery() { function resetQuery() {
dateRange.value = [];
proxy.resetForm("queryRef"); proxy.resetForm("queryRef");
queryParams.value.deptId = undefined;
proxy.$refs.deptTreeRef.setCurrentKey(null);
handleQuery(); handleQuery();
}; };
/** 删除按钮操作 */
function handleDelete(row) {
const userIds = row.userId || ids.value;
proxy.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function () {
return delUser(userIds);
}).then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
}).catch(() => {});
};
/** 导出按钮操作 */ /** 导出按钮操作 */
function handleExport() { function handleExport() {
proxy.download("system/user/export", { proxy.download("system/user/export", {
@ -207,24 +202,23 @@ function handleExport() {
}; };
/** 选择条数 */ /** 选择条数 */
function handleSelectionChange(selection) { function handleSelectionChange(selection) {
ids.value = selection.map(item => item.userId); 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 handleUpdate(row) { function handleUpdate(row) {
reset(); breedingBaseFormRef.value.toUpdate(row)
const userId = row.userId || ids.value;
getUser(userId).then(response => {
form.value = response.data;
open.value = true;
title.value = "修改用户";
form.password = "";
});
}; };
const handleView = (row) => {
breedingBaseFormRef.value.toView(row)
}
const toAdd = () => { const toAdd = () => {
breedingBaseFormRef.value.toAdd() breedingBaseFormRef.value.toAdd()
} }
onMounted(()=>{
getList()
})
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.base-title{ .base-title{

Loading…
Cancel
Save