智慧农业大数据平台
shuishen
2022-07-12 4169400bf2641fcbc8a7ca1426db732116d55a23
Merge branch 'master' of http://192.168.0.105:10010/r/zhny-dsjdp
5 files modified
547 ■■■■■ changed files
src/api/farm/farmingrecord.js 37 ●●●●● patch | view | raw | blame | history
src/components/date-select/index.vue 122 ●●●●● patch | view | raw | blame | history
src/router/axios.js 2 ●●● patch | view | raw | blame | history
src/views/home/index.vue 4 ●●●● patch | view | raw | blame | history
src/views/manage/index.vue 382 ●●●●● patch | view | raw | blame | history
src/api/farm/farmingrecord.js
@@ -115,6 +115,24 @@
        }
    })
}
export const statisticsStockMonth = (params) => {
    return request({
        url: '/farmProductStock/statisticsStockMonth',
        method: 'get',
        params: {
            ...params
        }
    })
}
export const productsSupervise = (params) => {
    return request({
        url: '/farmProductStock/productsSupervise',
        method: 'get',
        params: {
            ...params
        }
    })
}
export const pageCount = (params) => {
    return request({
@@ -129,6 +147,15 @@
export const pageCountNz = (params) => {
    return request({
        url: '/stock/stock/page',
        method: 'get',
        params: {
            ...params
        }
    })
}
export const pageCountNzCrk = (params) => {
    return request({
        url: '/stockrecord/stockrecord/page',
        method: 'get',
        params: {
            ...params
@@ -191,3 +218,13 @@
        }
    })
}
export const getSweepRecordStatistics = (params) => {
    return request({
        url: '/sweepRecord/getSweepRecordStatistics',
        method: 'get',
        params: {
            ...params
        }
    })
}
src/components/date-select/index.vue
@@ -13,66 +13,104 @@
        </div>
        <el-date-picker
            class="emit-el-date-picker"
            size="small"
            v-model="currentDate"
            :type="dateType"
            :placeholder="datePlaceHolder"
                class="emit-el-date-picker"
                size="small"
                v-model="currentDate"
                @change="selectChange"
                :type="dateType"
                :placeholder="datePlaceHolder"
        ></el-date-picker>
    </div>
</template>
<script>
export default {
    name: 'DateSelect',
    data () {
        return {
            dateType: 'month',
            datePlaceHolder: '选择月',
            currentDate: ''
        }
    },
    export default {
        name: 'DateSelect',
    methods: {
        select (e) {
            console.log(e.target.dataset.holder)
            this.dateType = e.target.dataset.type
            this.datePlaceHolder = e.target.dataset.holder
        props: ['type'],
        data () {
            return {
                dateType: 'month',
                datePlaceHolder: '选择月',
                currentDate: ''
            }
        },
        methods: {
            select (e) {
                console.log(e.target.dataset.holder)
                this.dateType = e.target.dataset.type
                this.datePlaceHolder = e.target.dataset.holder
            },
            selectChange (e) {
                const currentTime = this.gettime(e)
                if (this.type == 'taskSelect') {
                    this.$parent.getTaskTime(currentTime)
                } else if (this.type == 'ncptrSelect') {
                    this.$parent.getNcptrTime(currentTime)
                } else if (this.type == 'nztrSelect') {
                    this.$parent.getNztrTime(currentTime)
                } else if (this.type == 'cltjSelect') {
                    this.$parent.getCltjTime(currentTime)
                } else if (this.type == 'symSelect') {
                    this.$parent.getSymTime(currentTime)
                }
            },
            gettime (data) {
                let dateValue = data.getFullYear()
                if (this.dateType == 'date') {
                    dateValue += '-'
                    dateValue += this.checkTime(data.getMonth() + 1)
                    dateValue += '-'
                    dateValue += this.checkTime(data.getDate())
                } else if (this.dateType == 'month') {
                    dateValue += '-'
                    dateValue += this.checkTime(data.getMonth() + 1)
                }
                return dateValue
            },
            checkTime (i) {
                if (i < 10) {
                    i = '0' + i
                }
                return i
            }
        }
    }
}
</script>
<style scoped lang="scss">
.time-select {
    margin-top: 20px;
    padding: 0 4px;
    display: flex;
    align-items: center;
    height: 34px;
    .date-box {
        margin-right: 20px;
    .time-select {
        margin-top: 20px;
        padding: 0 4px;
        display: flex;
        box-sizing: border-box;
        align-items: center;
        height: 100%;
        background: rgba(33, 186, 196, 0.1);
        color: #a9d1d7;
        height: 34px;
        & > div {
        .date-box {
            margin-right: 20px;
            display: flex;
            box-sizing: border-box;
            align-items: center;
            justify-content: center;
            width: 50px;
            height: 100%;
            cursor: pointer;
        }
            background: rgba(33, 186, 196, 0.1);
            color: #a9d1d7;
        .on {
            background: rgba(33, 186, 196, 0.5);
            border: 1px solid #66dde9;
            & > div {
                display: flex;
                align-items: center;
                justify-content: center;
                width: 50px;
                height: 100%;
                cursor: pointer;
            }
            .on {
                background: rgba(33, 186, 196, 0.5);
                border: 1px solid #66dde9;
            }
        }
    }
}
</style>
src/router/axios.js
@@ -12,7 +12,7 @@
//   console.log(window.location);
//   console.log(url);
// }, 3000);
 window.$apiUrls = 'http://182.106.212.58:8013/api'
window.$apiUrls = 'http://182.106.212.58:8013/api'
// window.$apiUrls = 'http://localhost:89'
const service = axios.create({
    //   baseURL: 'http://192.168.0.107:83',
src/views/home/index.vue
@@ -65,7 +65,7 @@
                            <div class="state">在使用</div>
                            <div class="text">
                                <div class="num">{{ landsnum.toFixed(2) }}</div>
                                <div class="num">{{ landsnum.toFixed(0) }}</div>
                                <div class="unit">亩</div>
                            </div>
                        </div>
@@ -75,7 +75,7 @@
                            <div class="state">空闲中</div>
                            <div class="text">
                                <div class="num">{{ landwnum }}</div>
                                <div class="num">{{ landwnum.toFixed(0) }}</div>
                                <div class="unit">亩</div>
                            </div>
                        </div>
src/views/manage/index.vue
@@ -74,32 +74,32 @@
                    <time-box
                            :imgUrl="'/img/icon/current.png'"
                            :title="'溯源次数'"
                            :currentNum="34"
                            :currentNum="sweepList['todayNum']"
                            :subTitle="'昨日溯源次数对比'"
                            :contrast="28"
                            :upDown="'up'"
                            :contrast="sweepList['yesterdayNum']"
                            :upDown="sweepList['todayNum'] > sweepList['yesterdayNum'] ? 'up' : 'down'"
                    ></time-box>
                    <time-box
                            :imgUrl="'/img/icon/week.png'"
                            :title="'溯源次数'"
                            :currentNum="61"
                            :currentNum="sweepList['thisWeekNum']"
                            :subTitle="'上周溯源次数对比'"
                            :contrast="36"
                            :upDown="'up'"
                            :contrast="sweepList['lastWeekNum']"
                            :upDown="sweepList['thisWeekNum'] > sweepList['lastWeekNum'] ? 'up' : 'down'"
                    ></time-box>
                    <time-box
                            :imgUrl="'/img/icon/month.png'"
                            :title="'溯源次数'"
                            :currentNum="88"
                            :currentNum="sweepList['thisMonthNum']"
                            :subTitle="'上月溯源次数对比'"
                            :contrast="96"
                            :upDown="'down'"
                            :contrast="sweepList['lastMonthNum']"
                            :upDown="sweepList['thisMonthNum'] > sweepList['lastMonthNum'] ? 'up' : 'down'"
                    ></time-box>
                </div>
                <div class="task-box">
                    <div class="title">任务总数</div>
                    <date-select></date-select>
                    <date-select :type="'taskSelect'"></date-select>
                    <div class="echarts-box" id="TaskNumEcharts"></div>
                </div>
@@ -118,9 +118,10 @@
                            </div>
                        </div>
                    </div>
                    <date-select></date-select>
                    <date-select :type="'ncptrSelect'" v-if="nzOrNcp == 'ncp'"></date-select>
                    <date-select :type="'nztrSelect'" v-if="nzOrNcp == 'nz'"></date-select>
                    <div v-if="nzOrNcp == 'ncp'" class="lists-box">
                        <div v-for="(item,index) in ncptr" :key="index" >
                        <div v-for="(item,index) in ncptr" :key="index">
                            <div>{{index + 1}}</div>
                            <div>{{item.strainName}}</div>
                            <div>{{item.area}}亩</div>
@@ -132,29 +133,29 @@
                        <!--                        </div>-->
                    </div>
                    <div v-if="nzOrNcp == 'nz'" class="lists-box">
                        <div v-for="(item,index) in nztr" :key="index" >
                        <div v-for="(item,index) in nztr" :key="index">
                            <div>{{index + 1}}</div>
                            <div>{{item.agrname}}</div>
                            <div>{{item.cnum}}公斤</div>
                        </div>
<!--                        <div>-->
<!--                            <div>2</div>-->
<!--                            <div>复合肥料</div>-->
<!--                            <div>68公斤</div>-->
<!--                        </div>-->
                        <!--                        <div>-->
                        <!--                            <div>2</div>-->
                        <!--                            <div>复合肥料</div>-->
                        <!--                            <div>68公斤</div>-->
                        <!--                        </div>-->
                    </div>
                </div>
                <div class="trp-ncp">
                    <div class="title-box">
                        <div>
                            <div class="item" :class="{on: trpOrNcp == 'trp'}">
                                <div @click="trpOrNcp = 'trp'" class="title">投入品监管</div>
                                <div @click="trpOrNcpChange('trp')" class="title">投入品监管</div>
                                <span></span>
                            </div>
                        </div>
                        <div>
                            <div class="item" :class="{on: trpOrNcp == 'ncp'}">
                                <div @click="trpOrNcp = 'ncp'" class="title">农产品监管</div>
                                <div @click="trpOrNcpChange('ncp')" class="title">农产品监管</div>
                                <span></span>
                            </div>
                        </div>
@@ -165,28 +166,29 @@
                        </div>
                    </div>
                    <div v-if="trpOrNcp == 'trp'" class="echarts-box" id="TrpEcharts"></div>
                    <div v-if="trpOrNcp == 'ncp'" class="echarts-box" id="NcpEcharts"></div>
                    <div class="echarts-box" id="TrpEcharts"></div>
                    <!--                    <div v-show="trpOrNcp == 'ncp'" class="echarts-box" id="NcpEcharts"></div>-->
                </div>
            </div>
            <div class="b">
                <div class="cl-sy">
                    <div class="title-box">
                        <div>
                            <div class="item on">
                                <div class="title">产量统计</div>
                            <div class="item" :class="{on : cltjOrsym == 'cltj'}">
                                <div @click="cltjOrsym='cltj'" class="title">产量统计</div>
                                <span></span>
                            </div>
                        </div>
                        <div>
                            <div class="item">
                                <div class="title">溯源查询趋势图</div>
                            <div class="item" :class="{on : cltjOrsym == 'sym'}">
                                <div @click="cltjOrsym='sym'" class="title">溯源查询趋势图</div>
                                <span></span>
                            </div>
                        </div>
                        <div class="date">
                            <date-select></date-select>
                            <date-select :type="'cltjSelect'" v-if="cltjOrsym == 'cltj'"></date-select>
                            <date-select :type="'symSelect'" v-if="cltjOrsym == 'sym'"></date-select>
                        </div>
                    </div>
@@ -195,14 +197,14 @@
                <div class="ns-nz">
                    <div class="title-box">
                        <div>
                            <div class="item on">
                                <div class="title">农事记录</div>
                            <div class="item" :class="{on : nsjlOrnz == 'nsjl'}">
                                <div @click="nsjlOrnz='nsjl'" class="title">农事记录</div>
                                <span></span>
                            </div>
                        </div>
                        <div>
                            <div class="item">
                                <div class="title">农资出入库记录</div>
                            <div class="item" :class="{on : nsjlOrnz == 'nzcr'}">
                                <div @click="nsjlOrnz='nzcr'" class="title">农资出入库记录</div>
                                <span></span>
                            </div>
                        </div>
@@ -213,17 +215,32 @@
                        </div>
                    </div>
                    <div class="lists-box">
                        <div  v-for="(item,index) in farminList" :key="index">
                    <div v-if="nsjlOrnz == 'nsjl'" class="lists-box">
                        <div v-for="(item,index) in farminList" :key="index">
                            <div class="t-border"></div>
                            <div class="t-item">
                                <div>{{item.typeName}}</div>
                                <div>{{item.time}}</div>
                            </div>
                            <div class="b-item">
                                <div>水稻</div>
                                <div>管理员</div>
                                <div>{{item.strainName}}</div>
                                <div>{{item.realName}}</div>
                                <div>{{item.landName}}</div>
                            </div>
                            <div class="b-border"></div>
                        </div>
                    </div>
                    <div v-if="nsjlOrnz == 'nzcr'" class="lists-box">
                        <div v-for="(item,index) in stockrecordList" :key="index">
                            <div class="t-border"></div>
                            <div class="t-item">
                                <div>{{item.agrname}}</div>
                                <div>{{item.time1}}</div>
                            </div>
                            <div class="b-item">
                                <div>{{item.spn}}</div>
                                <div>{{item.type1}}</div>
                                <div>{{item.czr}}</div>
                            </div>
                            <div class="b-border"></div>
                        </div>
@@ -237,7 +254,21 @@
<script>
    import { selectXCount } from '@/api/land/land'
    // eslint-disable-next-line no-unused-vars
    import { page, getStockCount, pagePalnt, statisticsStockAndYield, pageCount, pageCountNz, selectMarketCirculate, countTaskNum, farmingRecords } from '@/api/farm/farmingrecord'
    import {
        page,
        getStockCount,
        pagePalnt,
        statisticsStockAndYield,
        pageCount,
        pageCountNz,
        selectMarketCirculate,
        countTaskNum,
        farmingRecords,
        statisticsStockMonth,
        productsSupervise,
        pageCountNzCrk,
        getSweepRecordStatistics
    } from '@/api/farm/farmingrecord'
    export default {
        data () {
@@ -255,6 +286,8 @@
                stockNCP: 0,
                // 加工产品数量统计
                stockJG: 0,
                // 产量按月统计
                yieldMonth: [],
                // 年产量统计
                yieldTj: 0,
                // 农产品年产量统计
@@ -272,8 +305,16 @@
                taskNum: [],
                // 农事记录
                farminList: [],
                // 农资出入库记录
                stockrecordList: [],
                // 农产品监管
                NcpJg: [],
                // 溯源次数
                sweepList: {},
                nzOrNcp: 'ncp',
                trpOrNcp: 'trp'
                trpOrNcp: 'trp',
                nsjlOrnz: 'nsjl',
                cltjOrsym: 'cltj'
            }
        },
        created () {
@@ -282,31 +323,54 @@
            this.page()
            // 年产量与库存数量
            this.statisticsStockAndYield()
            // 按月统计产量
            this.statisticsStockMonth('2022-07')
            // 农产品投入
            this.pageCount()
            this.pageCount('2022-07')
            // 农资投入
            this.pageCountNz()
            this.pageCountNz('2022-07')
            // 统计市场流通/去年流通量/本月流通量
            this.selectMarketCirculate()
            // 统计任务总数
            this.countTaskNum()
            this.countTaskNum('2022-07')
            // 农事操作
            this.farmingRecords()
            // 农产品监管
            this.productsSupervise()
            // 农资出入库记录
            this.pageCountNzCrk()
            // 溯源次数统计
            this.getSweepRecordStatistics()
        },
        mounted () {
            // this.initNcpBar('NcpEcharts')
            this.initClSyBar('ClSyEcharts')
        },
        methods: {
            // 任务总数时间查询
            getTaskTime (e) {
                this.countTaskNum(e)
            },
            // 农产品投入时间查询
            getNcptrTime (e) {
                this.pageCount(e)
            },
            // 农资投入时间查询
            getNztrTime (e) {
                this.pageCountNz(e)
            },
            // 产量统计时间查询
            getCltjTime (e) {
                this.statisticsStockMonth(e)
            },
            // 溯源码时间查询
            getSymTime (e) {
            },
            initBar (dom) {
                const that = this
                const chartDom = document.getElementById(dom)
                const myChart = this.$echarts.init(chartDom)
               var x = []
               var y = []
                var y = []
                for (let i = 0; i < that.taskNum.length; i++) {
                    x.push(that.taskNum[i].y)
                    y.push(that.taskNum[i].count)
                }
@@ -320,7 +384,7 @@
                    },
                    xAxis: {
                        type: 'category',
                        data: x,
                        data: ['已完成', '未完成', '超期完成'],
                        axisLine: {
                            lineStyle: {
                                color: 'rgba(153,153,153,.4)'
@@ -335,7 +399,6 @@
                        }
                    },
                    yAxis: {
                        max: 50,
                        name: '(次)',
                        nameTextStyle: {
                            color: 'rgba(255,255,255,.4)'
@@ -516,94 +579,47 @@
                const that = this
                const chartDom = document.getElementById(dom)
                const myChart = this.$echarts.init(chartDom)
                myChart.clear()
                var data = that.NcpJg
                var dj = ['一等品', '二等品', '三等品', '四等品', '五等品']
                var echartData = []
                var sum = 0
                for (var i = 0; i < 5; i++) {
                    sum += Number(data[i])
                    echartData.push({
                        name: dj[i],
                        value: data[i]
                    })
                }
                const option = {
                    grid: {
                        top: '14%',
                        left: '2%',
                        right: '2%',
                        bottom: '2%',
                        containLabel: true
                    tooltip: {
                        trigger: 'item'
                    },
                    xAxis: {
                        type: 'category',
                        data: [
                            '有机肥料',
                            '复合肥料'
                        ],
                        axisLine: {
                            lineStyle: {
                                color: 'rgba(153,153,153,.4)'
                            }
                        },
                        axisTick: {
                            show: false
                        },
                        axisLabel: {
                            color: 'rgba(255,255,255,.4)',
                            rotate: 0
                        }
                    },
                    yAxis: {
                        max: 600,
                        name: '(公斤)',
                        nameTextStyle: {
                            color: 'rgba(255,255,255,.4)'
                        },
                        axisLine: {
                            lineStyle: {
                                color: '#657CA8'
                            }
                        },
                        axisTick: {
                            show: false
                        },
                        splitLine: {
                            show: true,
                            lineStyle: {
                                color: 'rgba(62,81,97, .5)',
                                type: 'dashed'
                            }
                        },
                        axisLabel: {
                            color: 'rgba(255,255,255,.4)'
                        }
                    legend: {
                        top: '5%',
                        padding: [50, 100, 0, 0],
                        orient: 'vertical',
                        left: 'right'
                    },
                    series: [
                        {
                            type: 'bar',
                            barWidth: 32,
                            data: [500, 60],
                            name: '品质',
                            type: 'pie',
                            radius: ['40%', '70%'],
                            avoidLabelOverlap: false,
                            label: {
                                show: true,
                                position: 'top',
                                textStyle: {
                                    color: 'rgba(255,255,255,.4)'
                                normal: {
                                    show: true,
                                    formatter: '产品总数\n\n' + sum,
                                    position: 'center',
                                    lineHight: 30
                                }
                            },
                            itemStyle: {
                                normal: {
                                    color:
                                        new that.$echarts.graphic.LinearGradient(
                                            // 前四个参数用于配置渐变色的起止位置,这四个参数依次对应 右下左上 四个方位。也就是从右边开始顺时针方向。
                                            // 通过修改前4个参数,可以实现不同的渐变方向
                                            /* 第五个参数则是一个数组,用于配置颜色的渐变过程。
                                              每项为一个对象,包含offset和color两个参数
                                            */
                                            0, 0, 0, 1, [{ // 代表渐变色从正上方开始
                                                offset: 0, // offset范围是0~1,用于表示位置,0是指0%处的颜色
                                                color: '#24A5DF'
                                            }, // 柱图渐变色
                                                {
                                                    offset: 1, // 指100%处的颜色
                                                    color: '#01E2D2'
                                                }
                                            ]
                                        )
                                }
                            }
                            labelLine: {
                                show: false
                            },
                            data: echartData
                        }
                    ]
                }
@@ -615,27 +631,14 @@
                const chartDom = document.getElementById(dom)
                const myChart = this.$echarts.init(chartDom)
                var data = [
                    '01',
                    '02',
                    '03',
                    '04',
                    '05',
                    '06',
                    '07',
                    '08',
                    '09',
                    '10',
                    '11',
                    '12'
                ]
                var data = []
                var data1 = [
                    '180',
                    '320',
                    '400',
                    '200',
                    '110',
                    '180',
                    '0',
                    '0',
                    '0',
                    '0',
                    '0',
                    '0',
                    '0',
                    '0',
                    '0',
@@ -643,20 +646,12 @@
                    '0',
                    '0'
                ]
                var data2 = [
                    '0',
                    '0',
                    '0',
                    '260',
                    '0',
                    '230',
                    '0',
                    '0',
                    '0',
                    '0',
                    '0',
                    '0'
                ]
                var data2 = []
                var ncp = this.yieldMonth
                for (let i = 0; i < ncp.length; i++) {
                    data.push(ncp[i].time)
                    data2.push(ncp[i].num)
                }
                const option = {
                    grid: {
@@ -802,22 +797,44 @@
                    this.yieldTj = res.data.data.ncpNcl + res.data.data.jgNcl
                })
            },
            // 农产品投入
            pageCount () {
            // 按月统计产量
            statisticsStockMonth (e) {
                var params = {}
                params.tenantId = '000000'
                params.deptId = '1123598813738675201'
                params.year = e
                statisticsStockMonth(Object.assign(params)).then((res) => {
                    this.yieldMonth = res.data.data
                    this.initClSyBar('ClSyEcharts')
                })
            },
            // 农产品监管
            productsSupervise () {
                var params = {}
                params.tenantId = '000000'
                params.deptId = '1123598813738675201'
                params.year = '2022'
                productsSupervise(Object.assign(params)).then((res) => {
                    this.NcpJg = res.data.data
                })
            },
            // 农产品投入
            pageCount (e) {
                var params = {}
                params.tenantId = '000000'
                params.deptId = '1123598813738675201'
                params.year = e
                params.status = '1'
                pageCount(Object.assign(params)).then((res) => {
                    this.ncptr = res.data.data
                })
            },
            // 农资投入
            pageCountNz () {
            pageCountNz (e) {
                var params = {}
                params.codes = '000000'
                params.deptId = '1123598813738675201'
                params.year = '2022'
                params.year = e
                pageCountNz(Object.assign(params)).then((res) => {
                    this.nztr = res.data.data.records
                    // 投入品监管图表
@@ -837,11 +854,11 @@
                })
            },
            // 统计任务总数
            countTaskNum () {
            countTaskNum (year) {
                var params = {}
                params.codes = '000000'
                params.deptId = '1123598813738675201'
                params.year = '2022'
                params.year = year
                countTaskNum(Object.assign(params)).then((res) => {
                    this.taskNum = res.data.data
                    this.initBar('TaskNumEcharts')
@@ -857,6 +874,37 @@
                farmingRecords(Object.assign(params)).then((res) => {
                    this.farminList = res.data.data.records
                })
            },
            // 农资出入库记录
            pageCountNzCrk () {
                var params = {}
                params.codes = '000000'
                params.deptId = '1123598813738675201'
                params.current = '1'
                params.size = '3'
                pageCountNzCrk(Object.assign(params)).then((res) => {
                    this.stockrecordList = res.data.data.records
                })
            },
            // 溯源次数统计
            getSweepRecordStatistics () {
                var params = {}
                // 农场id
                params.farmId = '1'
                getSweepRecordStatistics(Object.assign(params)).then((res) => {
                    this.sweepList = res.data.data
                })
            },
            // 监管图表切换
            trpOrNcpChange (item) {
                var that = this
                that.trpOrNcp = item
                if (item == 'trp') {
                    that.initTrpBar('TrpEcharts')
                } else {
                    // 农产品监管
                    that.initNcpBar('TrpEcharts')
                }
            }
        }
    }