|
@@ -3,29 +3,25 @@
|
|
|
<custom-header name="飞鸟管家"></custom-header>
|
|
<custom-header name="飞鸟管家"></custom-header>
|
|
|
<div class="edit-form">
|
|
<div class="edit-form">
|
|
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
|
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
|
|
|
- <el-form-item label="药肥名称" prop="name" required>
|
|
|
|
|
- <el-select v-model="form.name" placeholder="请选择" filterable clearable style="width: 100%">
|
|
|
|
|
- <el-option v-for="opt in nameOptions" :key="opt" :label="opt" :value="opt" />
|
|
|
|
|
|
|
+ <el-form-item label="药肥名称" prop="id" required>
|
|
|
|
|
+ <el-select v-model="form.id" placeholder="请选择" filterable clearable style="width: 100%">
|
|
|
|
|
+ <el-option v-for="opt in pesticideOptions" :key="opt.id" :label="opt.name" :value="opt.id" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="药肥品牌" prop="brand" required>
|
|
<el-form-item label="药肥品牌" prop="brand" required>
|
|
|
- <el-select v-model="form.brand" placeholder="请选择" filterable clearable style="width: 100%">
|
|
|
|
|
- <el-option v-for="opt in brandOptions" :key="opt" :label="opt" :value="opt" />
|
|
|
|
|
- </el-select>
|
|
|
|
|
|
|
+ <el-input class="has-border" v-model="form.brand" placeholder="请输入" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="药肥类型" required>
|
|
|
|
|
|
|
+ <el-form-item label="药肥类型" required prop="typeId">
|
|
|
<div class="row-3-selects">
|
|
<div class="row-3-selects">
|
|
|
- <el-select v-model="form.type1" placeholder="请选择" filterable clearable>
|
|
|
|
|
- <el-option v-for="opt in type1Options" :key="opt" :label="opt" :value="opt" />
|
|
|
|
|
- </el-select>
|
|
|
|
|
- <el-select v-model="form.type2" placeholder="请选择" filterable clearable>
|
|
|
|
|
- <el-option v-for="opt in type2Options" :key="opt" :label="opt" :value="opt" />
|
|
|
|
|
- </el-select>
|
|
|
|
|
- <el-select v-model="form.type3" placeholder="请选择" filterable clearable>
|
|
|
|
|
- <el-option v-for="opt in type3Options" :key="opt" :label="opt" :value="opt" />
|
|
|
|
|
- </el-select>
|
|
|
|
|
|
|
+ <el-cascader
|
|
|
|
|
+ v-model="form.typeId"
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ :options="typeOptions"
|
|
|
|
|
+ :props="cascaderProps"
|
|
|
|
|
+ :show-all-levels="false"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
@@ -68,6 +64,7 @@
|
|
|
<el-input v-model.number="form.waterMin" placeholder="请输入兑水量">
|
|
<el-input v-model.number="form.waterMin" placeholder="请输入兑水量">
|
|
|
<template #append>kg</template>
|
|
<template #append>kg</template>
|
|
|
</el-input>
|
|
</el-input>
|
|
|
|
|
+ <span>-</span>
|
|
|
<el-input v-model.number="form.waterMax" placeholder="请输入兑水量">
|
|
<el-input v-model.number="form.waterMax" placeholder="请输入兑水量">
|
|
|
<template #append>kg</template>
|
|
<template #append>kg</template>
|
|
|
</el-input>
|
|
</el-input>
|
|
@@ -97,7 +94,7 @@
|
|
|
import customHeader from "@/components/customHeader.vue";
|
|
import customHeader from "@/components/customHeader.vue";
|
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
import { useRouter, useRoute } from "vue-router";
|
|
import { useRouter, useRoute } from "vue-router";
|
|
|
-import { ref, reactive } from 'vue'
|
|
|
|
|
|
|
+import { ref, reactive, onMounted, onActivated } from 'vue'
|
|
|
|
|
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
const route = useRoute();
|
|
@@ -128,37 +125,136 @@ const openDelete = () => {
|
|
|
// 表单模型与选项
|
|
// 表单模型与选项
|
|
|
const formRef = ref()
|
|
const formRef = ref()
|
|
|
const form = reactive({
|
|
const form = reactive({
|
|
|
- name: '',
|
|
|
|
|
|
|
+ id: '',
|
|
|
|
|
+ typeId: null,
|
|
|
brand: '',
|
|
brand: '',
|
|
|
type1: '',
|
|
type1: '',
|
|
|
type2: '',
|
|
type2: '',
|
|
|
type3: '',
|
|
type3: '',
|
|
|
unit: '克',
|
|
unit: '克',
|
|
|
- method: '叶面施',
|
|
|
|
|
|
|
+ method: '1',
|
|
|
cost: null,
|
|
cost: null,
|
|
|
price: null,
|
|
price: null,
|
|
|
stock: null,
|
|
stock: null,
|
|
|
waterMin: null,
|
|
waterMin: null,
|
|
|
waterMax: null,
|
|
waterMax: null,
|
|
|
- crops: ['荔枝', '香蕉']
|
|
|
|
|
|
|
+ crops: []
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
const rules = {
|
|
const rules = {
|
|
|
- name: [{ required: true, message: '请选择药肥名称', trigger: 'change' }],
|
|
|
|
|
|
|
+ id: [{ required: true, message: '请选择药肥名称', trigger: 'change' }],
|
|
|
brand: [{ required: true, message: '请选择药肥品牌', trigger: 'change' }],
|
|
brand: [{ required: true, message: '请选择药肥品牌', trigger: 'change' }],
|
|
|
|
|
+ typeId: [{ required: true, message: '请选择药肥类型', trigger: 'change' }],
|
|
|
unit: [{ required: true, message: '请选择计量单位', trigger: 'change' }],
|
|
unit: [{ required: true, message: '请选择计量单位', trigger: 'change' }],
|
|
|
method: [{ required: true, message: '请选择施用方式', trigger: 'change' }],
|
|
method: [{ required: true, message: '请选择施用方式', trigger: 'change' }],
|
|
|
cost: [{ required: true, message: '请输入成本', trigger: 'blur' }],
|
|
cost: [{ required: true, message: '请输入成本', trigger: 'blur' }],
|
|
|
price: [{ required: true, message: '请输入报价', trigger: 'blur' }],
|
|
price: [{ required: true, message: '请输入报价', trigger: 'blur' }],
|
|
|
stock: [{ required: true, message: '请输入库存', trigger: 'blur' }]
|
|
stock: [{ required: true, message: '请输入库存', trigger: 'blur' }]
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-const nameOptions = ['乙烯利乙烯利']
|
|
|
|
|
-const brandOptions = ['国光']
|
|
|
|
|
-const type1Options = ['农药类', '调节', '肥料']
|
|
|
|
|
-const type2Options = ['一级', '二级', '三级']
|
|
|
|
|
-const type3Options = ['一级', '二级', '三级']
|
|
|
|
|
const cropOptions = ['荔枝', '香蕉', '龙眼', '芒果']
|
|
const cropOptions = ['荔枝', '香蕉', '龙眼', '芒果']
|
|
|
|
|
+
|
|
|
|
|
+// 单位转换映射
|
|
|
|
|
+const unitMap = {
|
|
|
|
|
+ 'kg': '千克',
|
|
|
|
|
+ 'g': '克',
|
|
|
|
|
+ 'ml': '毫升',
|
|
|
|
|
+ 'l': '升',
|
|
|
|
|
+ '千克': '千克',
|
|
|
|
|
+ '克': '克',
|
|
|
|
|
+ '毫升': '毫升',
|
|
|
|
|
+ '升': '升'
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// 施用方式转换映射
|
|
|
|
|
+const methodMap = {
|
|
|
|
|
+ '叶面施': '1',
|
|
|
|
|
+ '根部施': '2'
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const cascaderProps = {
|
|
|
|
|
+ checkStrictly: true,
|
|
|
|
|
+ emitPath: false,
|
|
|
|
|
+ value: 'id',
|
|
|
|
|
+ label: 'name',
|
|
|
|
|
+ children: 'children'
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+onMounted(() => {
|
|
|
|
|
+ fetchPesticideOptions()
|
|
|
|
|
+ fetchTypeOptions()
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+// 用途类型选项
|
|
|
|
|
+const typeOptions = ref([]);
|
|
|
|
|
+function fetchTypeOptions() {
|
|
|
|
|
+ if (typeOptions.value.length === 0) {
|
|
|
|
|
+ VE_API.z_farm_work_pesticide_fertilizer.typeList().then(res => {
|
|
|
|
|
+ if (res.code === 0) {
|
|
|
|
|
+ typeOptions.value = res.data || []
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+/**
|
|
|
|
|
+ * 获取药肥选项
|
|
|
|
|
+ */
|
|
|
|
|
+ const pesticideOptions = ref([]);
|
|
|
|
|
+ function fetchPesticideOptions() {
|
|
|
|
|
+ // 每次都重新获取药肥选项,确保数据是最新的
|
|
|
|
|
+ VE_API.z_farm_work_pesticide_fertilizer.selectOption().then(res => {
|
|
|
|
|
+ if (res.code === 0) {
|
|
|
|
|
+ pesticideOptions.value = res.data || [];
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(error => {
|
|
|
|
|
+ console.error('获取药肥选项失败:', error);
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// 获取详情数据
|
|
|
|
|
+const getDetail = () => {
|
|
|
|
|
+ const id = route.query.id;
|
|
|
|
|
+ if (!id || isAdd.value) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ VE_API.z_farm_work_pesticide_fertilizer.fertilizerDetail({ id }).then(({ data }) => {
|
|
|
|
|
+ if (data) {
|
|
|
|
|
+ // 赋值表单数据
|
|
|
|
|
+ form.id = data.id || '';
|
|
|
|
|
+ form.brand = data.brand || '';
|
|
|
|
|
+ form.typeId = data.typeId || null;
|
|
|
|
|
+
|
|
|
|
|
+ // 转换单位
|
|
|
|
|
+ form.unit = unitMap[data.unit] || data.unit || '克';
|
|
|
|
|
+
|
|
|
|
|
+ // 转换施用方式
|
|
|
|
|
+ if (data.usageModeList && data.usageModeList.length > 0) {
|
|
|
|
|
+ const firstMode = data.usageModeList[0];
|
|
|
|
|
+ form.method = methodMap[firstMode] || firstMode;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ form.cost = data.cost || null;
|
|
|
|
|
+ form.price = data.price || null;
|
|
|
|
|
+ form.stock = data.stock || null;
|
|
|
|
|
+ form.waterMin = data.unitWaterAmount || null;
|
|
|
|
|
+ form.waterMax = data.unitWaterAmountMax || null;
|
|
|
|
|
+
|
|
|
|
|
+ // 适用品种
|
|
|
|
|
+ if (data.speciesList && Array.isArray(data.speciesList) && data.speciesList.length > 0) {
|
|
|
|
|
+ form.crops = data.speciesList;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ form.crops = [];
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(() => {
|
|
|
|
|
+ ElMessage.error('获取详情失败');
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+onActivated(() => {
|
|
|
|
|
+ getDetail();
|
|
|
|
|
+});
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
<style lang="scss" scoped>
|
|
@@ -182,8 +278,9 @@ const cropOptions = ['荔枝', '香蕉', '龙眼', '芒果']
|
|
|
> .el-select { flex: 1; }
|
|
> .el-select { flex: 1; }
|
|
|
}
|
|
}
|
|
|
.water-row {
|
|
.water-row {
|
|
|
|
|
+ color: rgba(0, 0, 0, 0.1);
|
|
|
display: flex;
|
|
display: flex;
|
|
|
- gap: 12px;
|
|
|
|
|
|
|
+ gap: 2px;
|
|
|
> .el-input { flex: 1; }
|
|
> .el-input { flex: 1; }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -217,6 +314,15 @@ const cropOptions = ['荔枝', '香蕉', '龙眼', '芒果']
|
|
|
.el-input__wrapper {
|
|
.el-input__wrapper {
|
|
|
box-shadow: none;
|
|
box-shadow: none;
|
|
|
}
|
|
}
|
|
|
|
|
+ .el-input__inner {
|
|
|
|
|
+ color: #2199F8;
|
|
|
|
|
+ --el-input-placeholder-color: rgba(33, 153, 248, 0.43);
|
|
|
|
|
+ }
|
|
|
|
|
+ .has-border, .el-cascader {
|
|
|
|
|
+ .el-input__wrapper {
|
|
|
|
|
+ box-shadow: 0 0 0 1px rgba(33, 153, 248, 0.3) inset;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
.el-input-group__append {
|
|
.el-input-group__append {
|
|
|
padding: 0 10px;
|
|
padding: 0 10px;
|
|
|
background: none;
|
|
background: none;
|