From 0d518fcfe85697544ec0d9e8991d832f13ab33f4 Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Tue, 17 May 2022 20:21:10 +0800
Subject: [PATCH] 首页更新,新增采收页面
---
src/views/wel/index.vue | 501 +++++++++++++++++++++++++++++++++-----
src/main.js | 2
src/views/wel/recovery.vue | 249 +++++++++++++++++++
package.json | 1
src/views/farmplant/farmplant.vue | 25 +
5 files changed, 707 insertions(+), 71 deletions(-)
diff --git a/package.json b/package.json
index 871c1c2..5d876a0 100644
--- a/package.json
+++ b/package.json
@@ -23,6 +23,7 @@
"ol": "^6.5.0",
"olcs": "^2.12.0",
"js-md5": "^0.7.3",
+ "echarts": "^5.0.2",
"mockjs": "^1.0.1-beta3",
"node-gyp": "^5.0.6",
"nprogress": "^0.2.0",
diff --git a/src/main.js b/src/main.js
index fd7a7ab..204273e 100644
--- a/src/main.js
+++ b/src/main.js
@@ -27,6 +27,8 @@
import tenantPackage from './views/system/tenantpackage';
import Map from './components/map/main';
+import * as echarts from 'echarts';
+Vue.prototype.$echarts = echarts;
Vue.component('Map', Map);
// 注册全局crud驱动
diff --git a/src/views/farmplant/farmplant.vue b/src/views/farmplant/farmplant.vue
index 270f566..0d42e43 100644
--- a/src/views/farmplant/farmplant.vue
+++ b/src/views/farmplant/farmplant.vue
@@ -174,7 +174,7 @@
label: "种植标准",
prop: "plant",
search:true,
- searchSpan:3,
+ searchSpan:4,
labelWidth:110,
type: "select",
dicData:[
@@ -208,7 +208,7 @@
label: "种植方式",
prop: "plantingWay",
search:true,
- searchSpan:3,
+ searchSpan:4,
type: "select",
labelWidth:110,
dicData:[
@@ -234,7 +234,7 @@
label: "作业方式",
prop: "jobWay",
search:true,
- searchSpan:3,
+ searchSpan:4,
labelWidth:110,
type: "select",
dicData:[
@@ -366,6 +366,25 @@
// ],
// display:false,
// },
+ {
+ label: "种植状态",
+ prop: "status",
+ search:true,
+ searchSpan:4,
+ labelWidth:110,
+ type: "select",
+ dicData:[
+ {
+ label:"种植中",
+ value:"1"
+ },
+ {
+ label:"已结束",
+ value:"2"
+ },
+ ],
+ display:false,
+ },
],
},
data: [],
diff --git a/src/views/wel/index.vue b/src/views/wel/index.vue
index ee6a6c3..9a71724 100644
--- a/src/views/wel/index.vue
+++ b/src/views/wel/index.vue
@@ -1,101 +1,466 @@
<template>
<div class="home">
- <div class="left">
- <div class="farm-info">
- 农场概览
- </div>
- <div class="farm-variety">
- 当前种养品种
+ <div class="left">
+ <div class="farm-info">
+ <div class="farm-title">农场概览</div>
+ <div class="statis">
+ <div class="echarts-statis">
+ <div id="alarmTypeProEcharts"></div>
+ <div class="alarmTypeTotal">
+ <div class="numAlarmType">
+ <span>{{ alarmTypeTotal }}</span>
+ </div>
+ <div class="textAlarmType"><span>地块使用率</span></div>
+ </div>
+ </div>
+ <div class="avue-statis">
+ <avue-data-display :option="option"></avue-data-display>
+ </div>
</div>
</div>
- <div class="right">
- <div class="production">生成管理</div>
- <div class="statistics">生成统计</div>
- <div class="repertory">农资库存</div>
+ <div class="farm-variety">
+ <div class="title">当前种养品种</div>
+ <div class="content">
+ <div class="farm" v-for="(item, index) in farmPlanList" :key="index">
+ <div class="farm-img"><img :src="item.url" class="img"/></div>
+ <div class="cai">{{item.strainName}}</div>
+ <div class="area">种植面积:371.13亩</div>
+ <div class="btn">
+ <el-button plain size="small" @click="recovery(item)">采收</el-button>
+ <el-button plain size="small">结束</el-button>
+ </div>
+ </div>
+ </div>
</div>
-
+ </div>
+ <div class="right">
+ <div class="production">
+ <div class="title">生产管理</div>
+ <div class="btn">
+ <div class="production-button">
+ <div class="button">
+ <img src="" class="img" />
+ <div class="text">圈地</div>
+ </div>
+ <div class="button">
+ <img src="" class="img" />
+ <div class="text">添加种养品种</div>
+ </div>
+ </div>
+ <div class="production-button">
+ <div class="button">
+ <img src="" class="img" />
+ <div class="text">农事操作</div>
+ </div>
+ <div class="button">
+ <img src="" class="img" />
+ <div class="text">农资入库</div>
+ </div>
+ </div>
+ <div class="production-button">
+ <div class="button">
+ <img src="" class="img" />
+ <div class="text">销售农产品</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="statistics">
+ <div class="title">生产统计</div>
+ </div>
+ <div class="repertory">
+ <div class="title">农资库存</div>
+ </div>
+ </div>
+ <!-- 弹窗, 新增 / 修改 -->
+ <recovery v-if="recoveryVisible" ref="recovery"></recovery>
</div>
</template>
<script>
- import {mapGetters} from "vuex";
-
- export default {
- name: "wel",
- data() {
- return {
+import { mapGetters } from "vuex";
+import { getList } from "@/api/farmplant/farmplant";
+import recovery from "./recovery.vue";
+export default {
+ components: {
+ recovery,
+ },
+ name: "wel",
+ data() {
+ return {
+ farmPlanList: [],
+ recoveryVisible: false,
+ option: {
+ span: 8,
+ data: [
+ {
+ click: function (item) {
+ alert(JSON.stringify(item));
+ },
+ count: 100,
+ decimals: 2,
+ title: "地块总面积",
+ },
+ {
+ click: function (item) {
+ alert(JSON.stringify(item));
+ },
+ count: "3,000",
+ decimals: 2,
+ title: "当前种养面积",
+ },
+ {
+ click: function (item) {
+ alert(JSON.stringify(item));
+ },
+ count: "40,000",
+ title: "当前种养品种",
+ },
+ ],
+ },
+ };
+ },
+ computed: {
+ ...mapGetters(["userInfo"]),
+ },
+ created() {
+ //地块使用率统计
+ // this.getAlarmTypeProEcharts();
+ this.onLoad();
+ },
+ methods: {
+ handleChange(val) {
+ window.console.log(val);
+ },
+ //获取种植中的种养品
+ onLoad() {
+ var params = {
+ status: 1,
};
+ getList(1, 10, Object.assign(params)).then((res) => {
+ const data = res.data.data;
+ this.farmPlanList = data.records;
+ });
},
- computed: {
- ...mapGetters(["userInfo"]),
+ //采收
+ recovery(data){
+ this.recoveryVisible = true;
+ this.$nextTick(() => {
+ this.$refs.recovery.init(data);
+ });
},
- methods: {
- handleChange(val) {
- window.console.log(val);
- }
+ //预警类型占比统计
+ getAlarmTypeProEcharts(data) {
+ // selAlarmDayAveragePro(data).then((res) => {
+ // var that = this;
+ // //计算总和
+ // var data = [];
+ // var startDate = this.dateTime[0];
+ // var endDate = this.dateTime[1];
+ // data.push(
+ // { value: res.data.data[0], name: "一键求助" },
+ // { value: res.data.data[1], name: "违禁品" },
+ // { value: res.data.data[2], name: "红色健康码" },
+ // { value: res.data.data[3], name: "体温异常" }
+ // );
+ // let echarts = require("echarts");
+ // let myChart = echarts.init(
+ // document.getElementById("alarmTypeProEcharts")
+ // );
+ // myChart.on("click", function (params) {
+ // var data = [];
+ // if (params.name == "一键求助") {
+ // data.push({
+ // startTime: startDate,
+ // endTime: endDate,
+ // waringType: "紧急求救",
+ // });
+ // window.parent.handleStartAlarm(data);
+ // }
+ // if (params.name == "违禁品") {
+ // data.push({
+ // startTime: startDate,
+ // endTime: endDate,
+ // decisioDiagramResult: "contraband",
+ // });
+ // window.parent.handleStartParcelKind(data);
+ // }
+ // if (params.name == "红色健康码") {
+ // data.push({
+ // startTime: startDate,
+ // endTime: endDate,
+ // type: 3,
+ // });
+ // window.parent.handleStartHealthcode(data);
+ // }
+ // if (params.name == "体温异常") {
+ // data.push({
+ // startTime: startDate,
+ // endTime: endDate,
+ // status: 1,
+ // });
+ // window.parent.handleStartAnimalHeat(data);
+ // }
+ // });
+ // var colors = ["#FF9836", "#3fa1ff", "#F34A4A", "#8058A5"];
+ // let option = {
+ // color: colors,
+ // title: {
+ // textStyle: {
+ // fontWeight: "normal",
+ // fontSize: 16,
+ // color: "#000",
+ // },
+ // left: "1%",
+ // top: 25,
+ // textAlign: "left",
+ // text: "预警类型占比",
+ // },
+ // tooltip: {
+ // trigger: "item",
+ // },
+ // grid: {
+ // left: "1%",
+ // right: "10%",
+ // bottom: "5%",
+ // top: "25%",
+ // containLabel: true,
+ // },
+ // series: [
+ // {
+ // type: "pie",
+ // radius: ["43%", "60%"],
+ // center: ["45%", "53%"],
+ // avoidLabelOverlap: false,
+ // label: {
+ // show: false,
+ // position: "center",
+ // },
+ // labelLine: {
+ // show: false,
+ // },
+ // data: data,
+ // },
+ // ],
+ // };
+ // myChart.setOption(option);
+ // //建议加上以下这一行代码,不加的效果图如下(当浏览器窗口缩小的时候)。超过了div的界限(红色边框)
+ // window.addEventListener("resize", function () {
+ // myChart.resize();
+ // });
+ // });
},
- };
+ },
+};
</script>
<style lang="scss" scope>
- .el-font-size {
- font-size: 14px;
- }
+.el-font-size {
+ font-size: 14px;
+}
- .home{
- width: 100%;
+.home {
+ width: 100%;
+ // height: 100%;
+ display: flex;
+ flex-direction: row;
+
+ .left {
+ margin-left: 1%;
+ width: 75%;
height: 100%;
- display: flex;
- flex-direction: row;
- .left{
- margin-left: 1%;
- width: 71%;
- height: 100%;
-
+ .farm-info {
+ width: 100%;
+ height: 30%;
+ background-color: #fff;
+ border-radius: 5px;
- .farm-info{
- width: 100%;
- height: 30%;
- background-color:#fff ;
- border-radius: 5px;
+ .farm-title {
+ padding-top: 20px;
+ height: 30px;
+ line-height: 30px;
+ font-size: 24px;
+ font-weight: 550;
+ text-align: center;
}
- .farm-variety{
- margin-top: 15px;
+ .statis {
width: 100%;
- height: 65%;
- background-color:#fff ;
- border-radius: 5px;
+ display: flex;
+
+ .echarts-statis {
+ width: 25%;
+ height: 170px;
+ line-height: 170px;
+ margin: 0 auto;
+ }
+
+ .avue-statis {
+ width: 75%;
+ height: 170px;
+ padding-top: 50px;
+ text-align: center;
+ }
}
}
- .right{
- width: 26%;
- height: 100%;
- margin-left: 1%;
+ .farm-variety {
+ margin-top: 15px;
+ width: 100%;
+ min-height: 600px;
+ background-color: #fff;
+ border-radius: 5px;
- .production{
- width: 100%;
- height: 30%;
- background-color:#fff ;
- border-radius: 5px;
+ .title {
+ padding-top: 20px;
+ height: 30px;
+ line-height: 30px;
+ font-size: 24px;
+ font-weight: 550;
+ text-align: center;
}
- .statistics{
- margin-top: 15px;
- width: 100%;
- height: 20%;
- background-color:#fff ;
- border-radius: 5px;
- }
- .repertory{
- margin-top: 15px;
- width: 100%;
- height: 20%;
- background-color:#fff ;
- border-radius: 5px;
+
+ .content {
+ width: 96%;
+ margin: 0 auto;
+ margin-top: 20px;
+ display: flex;
+ flex-direction: row;
+
+ .farm {
+ width: 150px;
+ height: 180px;
+ background-color: rgb(240, 230, 230);
+ border-radius: 5px;
+ margin-left: 20px;
+
+ .farm-img {
+ width: 100px;
+ height: 86px;
+ margin: 0 auto;
+ text-align: center;
+
+ .img{
+ width: 50px;
+ height: 50px;
+ border-radius: 100px;
+ margin-top: 20px;
+ }
+ }
+
+ .cai {
+ text-align: center;
+ font-size: 16px;
+ }
+
+ .area {
+ text-align: center;
+ font-size: 14px;
+ margin-top: 5px;
+ }
+
+ .btn {
+ text-align: center;
+ margin-top: 8px;
+ }
+ }
}
}
}
+
+ .right {
+ width: 22%;
+ height: 100%;
+ margin-left: 1%;
+
+ .production {
+ width: 100%;
+ height: 30%;
+ background-color: #fff;
+ border-radius: 5px;
+
+ .title {
+ padding-top: 20px;
+ height: 30px;
+ line-height: 30px;
+ font-size: 24px;
+ font-weight: 550;
+ text-align: center;
+ }
+
+ .btn {
+ padding-top: 20px;
+ height: 200px;
+
+ .production-button {
+ display: flex;
+ padding-top: 12px;
+ height: 50px;
+
+ .button {
+ margin-left: 20px;
+ display: flex;
+ flex-direction: row;
+ width: 150px;
+ height: 50px;
+ line-height: 50px;
+ align-content: center;
+ justify-content: center;
+ background-color: aqua;
+ border-radius: 3px;
+ cursor: pointer;
+
+ .img {
+ width: 20px;
+ height: 20px;
+ background-color: antiquewhite;
+ }
+
+ .text {
+ font-size: 14px;
+ margin-left: 5px;
+ letter-spacing: 1px;
+ }
+ }
+ }
+ }
+ }
+
+ .statistics {
+ margin-top: 15px;
+ width: 100%;
+ background-color: #fff;
+ border-radius: 5px;
+ min-height: 250px;
+
+ .title {
+ padding-top: 20px;
+ height: 30px;
+ line-height: 30px;
+ font-size: 24px;
+ font-weight: 550;
+ text-align: center;
+ }
+ }
+
+ .repertory {
+ margin-top: 15px;
+ width: 100%;
+ min-height: 80;
+ background-color: #fff;
+ border-radius: 5px;
+
+ .title {
+ padding-top: 20px;
+ height: 30px;
+ line-height: 30px;
+ font-size: 24px;
+ font-weight: 550;
+ text-align: center;
+ }
+ }
+ }
+}
</style>
diff --git a/src/views/wel/recovery.vue b/src/views/wel/recovery.vue
new file mode 100644
index 0000000..81e742a
--- /dev/null
+++ b/src/views/wel/recovery.vue
@@ -0,0 +1,249 @@
+<template>
+ <el-dialog
+ :title="title"
+ :modal-append-to-body="false"
+ :append-to-body="true"
+ :close-on-click-modal="false"
+ width="60%"
+ :visible.sync="visible"
+ >
+ <avue-form ref="form" v-model="form" :option="option" @submit="submit">
+ </avue-form>
+ </el-dialog>
+</template>
+
+<script>
+
+import { mapState } from "vuex";
+import { getLandList } from "@/api/land/land";
+import { getUserList } from "@/api/system/user";
+export default {
+ data() {
+ return {
+ title:"采收/捕捞",
+ form: {},
+ option: {
+ emptyBtn: false,
+ submitText: "保存",
+ gutter: 30,
+ column: [
+ {
+ label: "采收品种",
+ prop: "farmName",
+ span: 12,
+ labelWidth: 145,
+ rules: [
+ {
+ required: true,
+ message: "请输入采收品种",
+ trigger: "blur",
+ },
+ ],
+ },
+ {
+ label: "采收地块",
+ span: 12,
+ labelWidth: 145,
+ width: 110,
+ prop: "landId",
+ type:"tree",
+ dicData: [],
+ props: {
+ label: "landName",
+ value: "id"
+ },
+ rules: [
+ {
+ required: true,
+ message: "请选择采收地块",
+ trigger: "click",
+ },
+ ],
+ },
+ {
+ label: "采收重量",
+ prop: "farmArea",
+ span: 12,
+ labelWidth: 145,
+ width: 110,
+ rules: [
+ {
+ required: true,
+ message: "请输入采收重量",
+ trigger: "click",
+ },
+ ],
+ },
+ {
+ label: "作业方式",
+ prop: "jobWay",
+ span: 12,
+ labelWidth: 145,
+ width: 110,
+ type: "select",
+ value:"0",
+ dicData:[
+ {
+ label:"人工",
+ value:"0"
+ },
+ {
+ label:"机械",
+ value:"1"
+ },
+ ],
+ rules: [
+ {
+ required: true,
+ message: "请选择作业方式",
+ trigger: "click",
+ },
+ ],
+ },
+ {
+ label: "采收时间",
+ prop: "time",
+ span: 12,
+ labelWidth: 145,
+ width: 110,
+ type: "datetime",
+ format: "yyyy-MM-dd HH:mm",
+ valueFormat: "yyyy-MM-dd HH:mm",
+ rules: [
+ {
+ required: true,
+ message: "请选择采收时间",
+ trigger: "click",
+ },
+ ],
+ },
+ {
+ label: "采收产品",
+ prop: "farmArea",
+ span: 12,
+ labelWidth: 145,
+ width: 110,
+ rules: [
+ {
+ required: true,
+ message: "请输入采收产品",
+ trigger: "click",
+ },
+ ],
+ },
+ {
+ label: "操作人",
+ prop: "operator",
+ type: "tree",
+ dicData: [],
+ props: {
+ label: "realName",
+ value: "id",
+ },
+ span: 12,
+ labelWidth: 145,
+ width: 110,
+ rules: [
+ {
+ required: true,
+ message: "请输入操作人",
+ trigger: "click",
+ },
+ ],
+ },
+ {
+ label: "产品等级",
+ prop: "leave",
+ span: 12,
+ labelWidth: 145,
+ width: 110,
+ value:"0",
+ type: "select",
+ dicData:[
+ {
+ label:"一等品",
+ value:"0"
+ },
+ {
+ label:"二等品",
+ value:"1"
+ },
+ {
+ label:"三等品",
+ value:"2"
+ },
+ {
+ label:"四等品",
+ value:"3"
+ },
+ {
+ label:"五等品",
+ value:"4"
+ },
+ ],
+ rules: [
+ {
+ required: true,
+ message: "请输入产品等级",
+ trigger: "click",
+ },
+ ],
+ },
+ {
+ label: "备注",
+ prop: "farmArea",
+ span: 24,
+ type:"textarea",
+ labelWidth: 145,
+ width: 110,
+ rules: [
+ {
+ required: false,
+ message: "请输入备注",
+ trigger: "click",
+ },
+ ],
+ },
+ ],
+ },
+ visible: false,
+ };
+ },
+ computed: {
+ ...mapState({
+ userInfo: (state) => state.user.userInfo,
+ }),
+ },
+ methods: {
+ //初始化
+ init(data) {
+ this.visible = true;
+ var that = this;
+ //获取农地数据
+ getLandList(this.userInfo.user_id).then((res) => {
+ if (res.data.code == 200) {
+ var landIdcolumn = that.findObject(that.option.column, "landId");
+ that.landList = res.data.data;
+ landIdcolumn.dicData = res.data.data;
+ }
+ });
+ //获取操作人
+ const user = {
+ tenantId: this.userInfo.tenant_id,
+ };
+ getUserList(user).then((res) => {
+ if (res.data.code == 200) {
+ var operatorcolumn = that.findObject(that.option.column, "operator");
+ operatorcolumn.dicData = res.data.data;
+ }
+ });
+ },
+ // 表单提交
+ dataFormSubmit() {
+ this.dataForm["userId"] = this.userInfo.id;
+ this.$refs["dataForm"].validate((valid) => {
+ });
+ },
+ },
+};
+</script>
--
Gitblit v1.9.3