资源库运行服务平台软件
  isX5rqH6jQ7R 2023年11月02日 30 0

const express = require('express');

const app = express();

app.use('/',express.static('./dist'));

process.on('uncaughtException', function (err) {

  console.log('[uncaughtException] ' + err);

});

var server = app.listen(process.env.PORT || 1001, function () {

  let port = server.address().port;

  let addr = server.address().address;

  console.log('server [APP] listening at ' + addr + ':' + port);

});

{

  "name": "menu.nxnhl",

  "version": "",

  "description": "",

  "main": "server.js",

  "scripts": {

    "global": "yarn add express",

    "devGlobal": "yarn add -D gulp@next gulp-pug",

    "webpack": "webpack --progress --watch",

    "start": "node server"

  },

  "dependencies": {

    "express": "^4.16.4"

  },

  "devDependencies": {

    "@babel/core": "^7.2.2",

    "@babel/preset-env": "^7.2.3",

    "babel-loader": "^8.0.4",

    "gulp": "^4.0.0",

    "gulp-babel": "^8.0.0",

    "gulp-clean-css": "^4.0.0",

    "gulp-less": "^4.0.1",

    "gulp-pug": "^4.0.1",

    "less-plugin-autoprefix": "^2.0.0",

    "webpack": "^4.26.1",

    "webpack-cli": "^3.1.2"

  },

  "debug": false

}

const path = require('path');

const webpack = require('webpack');  

const pkg=require('./package.json');

const _config={

  mode: 'development', development/production

  entry:{

    'index':'./view/pages/index'

    ,'app/index':'./view/pages/app/index'

    ,'view/view':'./view/pages/view/view'

    ,'alarm/alarm':'./view/pages/alarm/alarm'

    ,'data/data':'./view/pages/data/data'

    ,'equipment/equipment':'./view/pages/equipment/equipment'

     ,'login/login':'./view/pages/login/login'

  },

  output:{

    path: path.resolve(__dirname, './dist/'),

    filename: '[name].js'

  },

  module: {

    rules: [

      { ES6

        test: /\.m?js$/,

        exclude: file => (

          /(node_modules|bower_components)/.test(file) &&

          !/\.vue\.js/.test(file)

        ),

        use: {

          loader: 'babel-loader',

          options: {

            presets: ['@babel/preset-env']

          }

        }

      }

    ]

  },

  plugins: [

  ]

};

module.exports = _config;

import muiTools from '../muiTools'

import {server,api} from '../../config/config'

function _req(data,uri,callback){

muiTools.ajax(server.uri+uri,{

data,

    success(res){

      muiTools.isStatus(res,(_data)=>{

        return typeof callback==='function'?callback(_data):callback;

      })

    }

  })

}

export default{

  alarm(data,callback){

    _req(data,api.alarm,callback)

  },

  alarmEdit(data,callback){

    _req(data,api.alarmEdit,callback)

  },

  alarmCount(data,callback){

    _req(data,api.alarmCount,callback)

  }

}

import muiTools from '../muiTools'

import {server,api} from '../../config/config'

function _req(data,uri,callback){

  muiTools.ajax(server.uri+uri,{

    data,

    success(res){

      muiTools.isStatus(res,(_data)=>{

        return typeof callback==='function'?callback(_data):callback;

      })

    }

  })

}

export default{

  farmList(data,callback){

    _req(data,api.farmList,callback)

  },

  plotList(data,callback){

    _req(data,api.plotList,callback)

  },

  lastData(data,callback){

    _req(data,api.lastData,callback)

  },


  historyData(data,callback){

    muiTools.ajax(server.uri+api.historyData,{

      data,

      success(res){

        let _status=res.successful

        if(res.hasOwnProperty('sessionStatus')){

          mui.alert(',2s','')

          mui.later(function(){

            parent.location.href=mui.os.wechat ? route.menuLogin : route.login

          },2000)

        }else if(_status == Number(_status)){

          if(_status == 1){

            mui.hideLoading()

            typeof callback==='function'?callback(res):''

          }else{

            mui.hideLoading()

            mui.alert(res.msg || '')

          }

        }else{

          mui.alert(json.msg,'status')

        }

      }

    })

     _req(data,api.historyData,callback)

  },

  equipmentList(data,callback){

    _req(data,api.equipment_list,callback)

  },

  certralStatus(data,callback){

    _req(data,api.certral_status,callback)

  },

  switchStatus(data,callback){

    _req(data,api.control_point,callback)

  },

  sensorData(data,callback){

    _req(data,api.sensorData,callback)

  }

}

import muiTools from '../muiTools'

import {server,api} from '../../config/config'

function _req(data,uri,callback){

  muiTools.ajax(server.uri+uri,{

    data,

    success(res){

      muiTools.isStatus(res,(_data)=>{

        return typeof callback==='function'?callback(_data):callback;

      })

    }

  })

}

export default{

  telecommand(data,callback){

    _req(data,api.telecommand,callback)

  },

  telemetering(data,callback){

    _req(data,api.telemetering,callback)

  },

  mainArea(data,callback){

    _req(data,api.mainArea,callback)

  },

  meterArea(data,callback){

    _req(data,api.meterArea,callback)

  },

  meterLine(data,callback){

    _req(data,api.meterLine,callback)

  },

  mainClassify(data,callback){

    _req(data,api.mainClassify,callback)

  },

}

import muiTools from '../muiTools'

import {server,api} from '../../config/config'

function _req(data,uri,callback){

  muiTools.ajax(server.uri+uri,{

    data,

    success(res){

      muiTools.isStatus(res,(_data)=>{

        return typeof callback==='function'?callback(_data):callback;

      })

    }

  })

}

export default{

  patrol(data,callback){

    _req(data,api.patrol,callback)

  },

  patrolByWeek(data,callback){

    _req(data,api.patrolByWeek,callback)

  },

  patrolEdit(data,callback){

    _req(data,api.patrolEdit,callback)

  },

  patrolCount(data,callback){

    _req(data,api.patrolCount,callback)

  }

}

import muiTools from '../muiTools'

import {server,api} from '../../config/config'

function _req(data,uri,callback){

  muiTools.ajax(server.uri+uri,{

    data,

    success(res){

      muiTools.isStatus(res,(_data)=>{

        return typeof callback==='function'?callback(_data):callback;

      })

    }

  })

}

export default{

  plineAndPlant(data,callback){

    _req(data,api.pline_plant,callback)

  }

  ,pline(data,callback){

    _req(data,api.plineList,callback)

  }

  ,plineLastData(data,callback){

    _req(data,api.plineLastData,callback)

  }

  ,sensorData(data,callback){

    muiTools.ajax(server.uri+api.sensorData,{

      data,

      success(res){

        let _status=res.successful

        if(res.hasOwnProperty('sessionStatus')){

          mui.alert(',2s','')

          mui.later(function(){

            parent.location.href=mui.os.wechat ? route.menuLogin : route.login

          },2000)

        }else if(_status == Number(_status)){

          if(_status == 1){

            mui.hideLoading()

            typeof callback==='function'?callback(res):''

          }else{

            mui.hideLoading()

            mui.alert(res.msg || '')

          }

        }else{

          mui.alert(json.msg,'status')

        }

      }

    })

  }

}

@charset "utf-8";

@import '../config/config.less';

html,body{

  font-family: " CN","Microsoft YaHei","SimHei";

  font-size: @base-size;

}

vue {{}}

[v-cloak] {

  display: none;

}

.red{

  color: @red !important;

}

.green{

  color: @green !important;

}

.yellow{

  color: @yellow !important;

}

.blue{

  color: @blue !important;

}

.hidden-vis{

  visibility:hidden;

}

mui-loading

.mui-show-loading {

  position: fixed;

  padding: 5px;

  width: 120px;

  min-height: 120px;

  top: 30%;

  left: 50%;

  margin-left: -60px;

  background: rgba(0, 0, 0, 0.6);

  text-align: center;

  border-radius: 5px;

  color: #FFFFFF;

  visibility: hidden;

  margin: 0;

  z-index: 2000;

  -webkit-transition-duration: .2s;

  transition-duration: .2s;

  opacity: 0;

  -webkit-transform: scale(0.9) translate(-50%, -50%);

  transform: scale(0.9) translate(-50%, -50%);

  -webkit-transform-origin: 0 0;

  transform-origin: 0 0;

}

.mui-show-loading.loading-visible {

  opacity: 1;

  visibility: visible;

  -webkit-transform: scale(1) translate(-50%, -50%);

  transform: scale(1) translate(-50%, -50%);

}

.mui-show-loading .mui-spinner{

  margin-top: 24px;

  width: 36px;

  height: 36px;

}

.mui-show-loading .text {

  line-height: 1.6;

  font-family: -apple-system-font,"Helvetica Neue",sans-serif;

  font-size: 14px;

  margin: 10px 0 0;

  color: #fff;

}

.mui-show-loading-mask {

position: fixed;

z-index: 1000;

top: 0;

right: 0;

left: 0;

bottom: 0;

}

.mui-show-loading-mask-hidden{

  display: none !important;

}

layui-tab

.layui-tab.layui-tab-brief{

  position: fixed;

  top: 0;

  left: 0;

  right: 0;

  z-index: 11;

  background-color: white;

}

include ../config/config.pug

<!DOCTYPE html>

html(lang="zh-cmn-Hans")

    head

      meta(charset="UTF-8")

      meta(http-equiv="Content-Type", content="text/html;charset=UTF-8")

      meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, shrink-to-fit=no")

      meta(http-equiv="X-UA-Compatible", content="ie=edge")

      meta(name="keywords", content=KEYWORDS)

      meta(name="description", content=DESCRIPTION)


      meta(name='renderer' content='webkit')

      link(rel="shortcut icon", href=ICON, type="image/x-icon")

      - link(rel="stylesheet", href=WEUI_CSS)

      block CSS

        link(rel="stylesheet", href=MUI_CSS)

        link(rel="stylesheet", href=LAYUI_CSS)

        - link(rel="stylesheet", href=LAYUI_ADMIN_CSS)

        link(rel="stylesheet", href=ICONFONT)

    body

      block CONTENT

      block JS

        - script(src=VUE)

        - script(src=VUE_TAP)

        script(src=MUI_JS)

        script(src=LAYUI_JS)


import {route} from '../config/config'



    mui.showLoading = function(message,type) {

      if (mui.os.plus && type !== 'div') {

          mui.plusReady(function() {

              plus.nativeUI.showWaiting(message)

          })

      } else {

          var html = ''

          html += '<i class="mui-spinner mui-spinner-white"></i>'

          html += '<p class="text">' + (message || "") + '</p>'


          var mask=document.getElementsByClassName("mui-show-loading-mask")

          if(mask.length==0){

              mask = document.createElement('div')

              mask.classList.add("mui-show-loading-mask")

              document.body.appendChild(mask)

              mask.addEventListener("touchmove", function(e){e.stopPropagation();e.preventDefault()})

          }else{

              mask[0].classList.remove("mui-show-loading-mask-hidden")

          }


          var toast=document.getElementsByClassName("mui-show-loading")

          if(toast.length==0){

              toast = document.createElement('div')

              toast.classList.add("mui-show-loading")

              toast.classList.add('loading-visible')

              document.body.appendChild(toast)

              toast.innerHTML = html

              toast.addEventListener("touchmove", function(e){e.stopPropagation();e.preventDefault()})

          }else{

              toast[0].innerHTML = html

              toast[0].classList.add("loading-visible")

          }

      }   

  }


    mui.hideLoading = function(callback) {

      if (mui.os.plus) {

          mui.plusReady(function() {

              plus.nativeUI.closeWaiting()

          })

      }

      var mask=document.getElementsByClassName("mui-show-loading-mask")

      var toast=document.getElementsByClassName("mui-show-loading")

      if(mask.length>0){

          mask[0].classList.add("mui-show-loading-mask-hidden")

      }

      if(toast.length>0){

          toast[0].classList.remove("loading-visible")

          callback && callback()

      }

    }

export default{

  ajax(url,opt){


    var _opt={

      loadText:'..',

      dataType:'json',json

      type:'post',HTTP

      data:{},

      xhrFields: {


        withCredentials: true

      },

      crossDomain: true,

      headers:{'Content-Type':'application/json'},

      error:function(xhr,type,errorThrown){

        mui.alert('')

      },

      success:function(data){

        console.log('>>>>debug>>>>')

        console.log(data)

      }

    }

    opt=opt?opt:{}

    mui.extend(true,_opt,opt)

    mui.showLoading(_opt.loadText,'div')

    mui.later(function(){

      mui.hideLoading()

    },2000)

    mui.ajax(url,_opt)

  }

  ajax

  ,isStatus(json,callback,opt){ajax

    var _status=json.successful

    opt=opt?opt:{}

    var _opt={

      noToast:false,

      msg:json.msg

    }

    mui.extend(true,_opt,opt)

    if(json.hasOwnProperty('sessionStatus')){

      mui.alert(',2s','')

      mui.later(function(){

        parent.location.href=mui.os.wechat ? route.menuLogin : route.login

      },2000)

    }else if(_status == Number(_status)){

      if(_status == 1){

        mui.hideLoading()

        _opt.noToast?'':mui.toast(_opt.okText || _opt.msg || '')

        typeof callback==='function'?callback(json.data):''

      }else{

        mui.hideLoading()

        _opt.noToast?'':mui.alert(_opt.otherText || _opt.msg || '')

      }

    }else{

      var _title=''

      if(json.hasOwnProperty('permissionStatus')){

        _title=''

      }else{

        _title='status'

      }

      mui.alert(json.msg,_title)

    }

  }

}

const _t={

  getData(key){

    return JSON.parse(localStorage.getItem(key))

  },

  ()

  getDayStamp(num){

    var today=new Date().valueOf()

    var onedayStamp=86400000


    return today+num*onedayStamp

  }

}

export default{

  getData(key){

    let _now=_t.getDayStamp(0)

      ,_json=_t.getData(key)  

      ,_time=_json?_json.time:false

    if(_time || _time===0){time

      if(_now<_time){,,

        return JSON.parse(_json.data)

      }else{

        return false

      }

    }else{

      return _json

    }

  }

  ,setData(str,valObj){

    let _strArr=String(str).split('.')

    const _oldData=_t.getData(_strArr[0])

    let _newData=_oldData?_oldData:{}

    if(_strArr.length>1){

      let _key=_strArr.slice(1).join('.')

      const _keyObj=JSON.parse('{"'+_key.replace(/\./g,'":{"')+'":'+JSON.stringify(valObj)+'}'.repeat(_strArr.length-1))

      Object.assign(_newData,_keyObj)

    }else{

      Object.assign(_newData,valObj)

    }

    localStorage.setItem(_strArr[0],JSON.stringify(_newData))

    return _newData

  }

  ,echarts($obj,option){

    var echplat = [], plat = [option]

    var renderplat = function(index){

      var _mychart=echarts.getInstanceByDom($obj[0])

      if(_mychart){

        $obj[0].innerHTML=''

        _mychart.dispose()

        renderplat(0)

      }else{

        echplat[index] = echarts.init($obj[index])

        echplat[index].setOption(plat[index],false)

      }

      window.onresize = echplat[index].resize

    }   

    if(!$obj[0]) return

    renderplat(0)

  }

  ,renderEcharts($obj,option){

    var echplat = [], plat = [option]

    var renderplat = function(index){

      echplat[index] = echarts.init($obj[index])

      echplat[index].setOption(plat[index],false)

      window.onresize = echplat[index].resize

    }   

    if(!$obj[0]) return

    renderplat(0)

  }


  ,renderTable($obj,opt){

    var axisData = opt.xAxis.data

    var series = opt.series

    <p class="table-title">'+opt.title.text+'</p>

    var table = '<table id="chartTable" style="width:100%text-align:center"><tbody><tr>'

      + '<th></th>'

      + '<th>' + series.name + '</th>'

      + '</tr>'

    for (var i = 0, l = axisData.length ;i < l; i++) {

      table += '<tr>'

        + '<td>' + axisData[i] + '</td>'

        + '<td>' + series.data[i] + series.unit + '</td>'

        + '</tr>'

    }

    table += '</tbody></table></div>'

    $obj[0].innerHTML=table

  }


  ,stampToDatetime(stamp){

    var $date=new Date(stamp)

      ,temp=''

    var year=$date.getFullYear()

      ,month=$date.getMonth()+1

      ,day=$date.getDate()

      ,hour=$date.getHours()

      ,minute=$date.getMinutes()

      ,second=$date.getSeconds()

    temp=''+year+'-'+(month<10?'0'+month:month)+'-'+(day<10?'0'+day:day)+' '+(hour<10?'0'+hour:hour)+':'+(minute<10?'0'+minute:minute)+':'+(second<10?'0'+second:second)

    return temp

  }

  ()

  ,getDayStamp:_t.getDayStamp

  ,getParams() {

    var ArrParam = params?params.split('&'):''

    var paramsArr = {}

    if(ArrParam == '') {

      return {}

    } else {

       $.each(ArrParam, function(i) {

         var param = this.split('=')

         paramsArr[param[0]] = param[1]

       })

      ArrParam.forEach(element => {

        var param = element.split('=')

        paramsArr[param[0]] = param[1]

      })

      return paramsArr

    }

  }

  echarts

  ,getEchartsDefOpt() {

    return {

      title: {

        text: "",

        x: "center",

        align: "right"

      },

      tooltip: {

        trigger: "axis",

        axisPointer: {

          animation: false

        }

      },

      xAxis: {

        type: "time",

        splitLine: {

          show: false

        }

      },

      grid: {

        y: 40,

        x2: 20,

        y2: 30,

        x: 40

      },

      yAxis: {

        show: true,

        boundaryGap: [0, '100%'],

        splitLine: {

          show: false

        }

      },

      series: [{

        data: [],

        type: "line",

        showSymbol: false,

        lineStyle:{

          normal:{

            color:'#7bbae8'

          }

        },

        hoverAnimation: false,

        smooth: false

      }]

    }

  },

  inTimeRange(time,startTime,endTime){


    let _startTimeStamp=new Date(startTime).valueOf()

      ,_endTimeStamp=new Date(endTime).valueOf()

      ,_time=time

    if(time==0){

      _time=new Date().valueOf()

    }

    if(_time<_startTimeStamp){

      return -1

    }else if(_time>_endTimeStamp){

      return 1

    }else{

      return 0

    }

  },

  getMenuUri(uri,appid,opt){

    let _encodeuri=encodeURIComponent(uri)

      ,_opt={

        appid:appid  CorpID

        ,response_type:'code'

        ,scope:'snsapi_base'

,<128

        ,wechat_redirect:'#wechat_redirect'

      }

      Object.assign(_opt,opt?opt:{})

      return `https:open.weixin.qq.com/connect/oauth2/authorize?appid=${_opt.appid}&redirect_uri=${_encodeuri}&response_type=${_opt.response_type}&scope=${_opt.scope}&state=${_opt.state}${_opt.wechat_redirect}`

  }

}

const _frame={

  init(){

    mui.init();

    mui(".mui-scroll-wrapper").scroll({

      deceleration: 0.0005     });


    mui('.nav-left').on('tap','.item',function(){

      var _hash=mui(this)[0].dataset.hash

      location.href='#'+_hash

    })

  }

}

module.exports={

  frame:_frame

}

@import "../../common/base.less";

@navLeft_width: 55px;

.frame {

  display: flex;

  flex-direction: column;

  & > .mui-content {

    padding-bottom: 6px;

    display: flex;

    align-items: stretch;

     flex: 1;

    height: 100vh;

  }

}

header.mui-bar {

  height: 36px;

  & > .mui-title {

    font-size: 15px;

    line-height: 36px;

  }

}


.nav-left {

   margin: 5px;

  box-sizing: border-box;

  display: flex;

  flex-direction: column;

  font-size: 13px;

  text-align: center;

  box-shadow: 0 1px 6px #ccc;

  width: @navLeft_width;

  flex: 0 0 @navLeft_width;

  & > .item {

    padding: 7px 0;

    display: flex;

    flex-direction: column;

    flex:1;

    min-height: 70px;

    border-bottom: 1px solid #ddd;

     margin: 0 @navLeft_width / 5;

  }

  & .active {

    background-color: white;

    box-shadow: -4px 1px 4px 1px #ddd;

    position: relative;

    left: 2px;

    margin: 0;

    z-index: 2;

    border: none;

    & * {

      color: @blue;

    }

  }

}

.nav-left i {

  display: flex;

  align-items: center;

  justify-content: center;

  color: #666;

  font-size: 25px;

  overflow: hidden;

  flex: 1;

  text-align: center;

}

.nav-line {

  margin: 5px auto 0;

  width: 35px;

  text-align: center;

  border-top: 1px solid #eee;

}


.content-right {

  background-color: white;

  box-shadow: 1px 0px 4px 2px #ddd;

  flex: 1;

  position: relative;

  & * {

    touch-action: none;

  }

}

extends ../../common/base.pug

block append CSS

  title= TITLE

block CONTENT

  - navleftNAVLEFT

  - var navLeft = NAVLEFT?NAVLEFT:[{name:'',icon:'icon-gailan',uri:PATCH_before+'home/home.html'}]

  - TITLE,block HEADER

  - var frame_title = TITLE?TITLE:'TITLE'


  .frame

    -

    block HEADER

      header.mui-bar.mui-bar-nav

        h1.mui-title= frame_title


    .mui-content

      -  

      .nav-left#nav-user

        each item,index in navLeft

          .item(class=index==0?'active':'',data-hash=item.hash,data-id=item.id,data-uri=item.uri)

            i.iconfont(class=item.icon)

            span= item.name


      -

      .content-right

        .mui-scroll-wrapper

          .mui-scroll

            - ,extend

            block FRAME

block append JS

extends ../../common/base.pug

block append CSS

  title= TITLE

block CONTENT

  .mui-content

    .logo

      block LOGIN

    form#login-form.mui-input-group

      .mui-input-row

        label

        input#username.mui-input-clear.mui-input(type="text" placeholder="")

      .mui-input-row

        label

        input#password.mui-input-clear.mui-input(type="password" placeholder="")

    form.mui-input-group

      ul.mui-table-view.mui-table-view-chevron

        li.mui-table-view-cell

          #remember.mui-switch

            .mui-switch-handle

    .mui-content-padded

      button#login.mui-btn.mui-btn-block.mui-btn-primary(type="button")

    .mui-content-padded.oauth-area

      p.mui-text-center

        label#menuAuth

          i.iconfont.icon-weixin  

          span

block append JS

@import '../../common/base.less';

.mui-input-group {

  margin-top: 10px;

}

.mui-input-group:first-child {

  margin-top: 20px;

}

.mui-input-group label {

  width: 25%;

}

.mui-input-row label~input,

.mui-input-row label~select,

.mui-input-row label~textarea {

  width: 75%;

}

.mui-checkbox input[type=checkbox],

.mui-radio input[type=radio] {

  top: 6px;

}

.mui-content-padded {

  margin-top: 25px;

}

.mui-btn {

  padding: 10px;

}

.logo{

  text-align: center;

  padding: 8vh 0 3vh;

  &>p{

    font-size: 20px;

    padding-top: 2vh;

  }

}

.icon-weixin{

  color:#05ca04;

  font-size: 16px;

}

const _s={

  uri:'http:test.senontech.com/nxnhl/'

   uri:'http:localhost:8084/nxnhl/'

   uri:'http:192.168.0.15:8080/nxnhl/'

  ,cache:true

  ,cacheTime:600000 10

}

const _api={

  ,historyData: 'data/read/paintDataBySensor'  

   ,pline_plant:'productionLine/queryProductionLineTypeListWithWorkShop'

   ,plineList:'productionLine/queryProductionLineList'

   ,plineLastData:'dataCollect/queryLastDataByProductionLine'

   ,sensorData:'dataCollect/queryHistoryData'

   ,patrol:'patrol/queryList'  

   ,patrolByWeek:'patrol/queryListByWeekList'

   ,patrolEdit:'patrol/edit'

   ,patrolCount:'patrol/queryListWithCount'

   ,alarm:'informInfo/queryListWithWorkShop'

   ,alarmEdit:'informInfo/edit'

   ,alarmCount:'informInfo/queryListWithCount'


}

const _static={

  patrolState:{

    'false':''

    ,'true':''

    ,'wait':''

    ,'complete':''

    ,'beyond':''

  }

  ,alarmState:{

    'prewarning':'',

    'alarm':''

  }

}

weixin

_menu={

  appid:'ww3b6d4978149c4609'  CorpID

  appid:'ww57b0d5bffdbb625e'  

  ,redirect_uri:'http:zlmifan.xicp.io/login/login.html'  

  ,redirect_uri:'http:192.168.0.15:8080/nxnhlmenu/login/login.html'

  ,response_type:'code'

  ,scope:'snsapi_base'

  ,state:''

}

_route={

  index:'../app/index.html'

  ,menuLogin:'http:zlmifan.xicp.io'

  ,menuLogin:'http:192.168.0.15:8080/nxnhlmenu/index.html'

  ,login:'../login/login.html'

  ,delogin:'./login/login.html'index.html

}

module.exports={

  server:_s

  ,api:_api

  ,static:_static

  ,menu:_menu

  ,route:_route

}

-  gulpfile->pug.js data

- VERSION :  

- DEBUG : .min

- config

- var KEYWORDS=''       

- var DESCRIPTION = ''  

- var ICON = ''         icon(logo)

- var TITLE = ''  

-

- var PATCH_before='../'            dist

- var PATCH_lib=PATCH_before+'lib/' -

- var PATCH_min =DEBUG?'':'.min'    

- var PATCH_logo = PATCH_before+'images/logo.png' logo

- CDN

- iconfont

- var ICONFONT = PATCH_before+'fonts/iconfont.css'

- fetch,fetch,promise_polyfill

- var FETCH=PATCH_lib+'fetch/fetch.umd'+PATCH_min+'.js'

- promise_polyfill

- var PROMISE=PATCH_lib+'polyfill'+PATCH_min+'.js'

- MUI

- var MUI_CSS=PATCH_lib+'mui/css/mui'+PATCH_min+'.css'

- var MUI_JS=PATCH_lib+'mui/js/mui'+PATCH_min+'.js'

- vue

- var VUE = PATCH_lib+ 'vue/vue'+PATCH_min+'.js'

- var VUE_TAP = PATCH_lib+ 'vue/vue-tap'+PATCH_min+'.js'

- layui

- var LAYUI_CSS = PATCH_lib+ 'layui/css/layui.css'

- var LAYUI_JS = PATCH_lib+ 'layui/layui.js'

- var LAYUI_ADMIN_CSS = PATCH_lib+ 'layui/css/admin/admin.css'

- echarts

- var ECHARTS = PATCH_lib+ 'echarts/echarts.common'+PATCH_min+'.js'

- var ECHARTS_ALL = PATCH_lib+ 'echarts/echarts'+PATCH_min+'.js'

- weixinjs

- var WEIXIN = PATCH_lib+ 'menu/jweixin-1.4.0.js'

- frame(index.html)

-

  var NAVLEFT =[

    {name:'',icon:'icon-gailan',uri:PATCH_before+'view/view.html',hash:'view',id:'viewTab'},

    {name:'',icon:'icon-data',uri:PATCH_before+'data/data.html',hash:'data',id:'dataTab'},

    {name:'',icon:'icon-alarm',uri:PATCH_before+'alarm/alarm.html',hash:'alarm',id:'alarmTab'},

    {name:'',icon:'icon-equipment',uri:PATCH_before+'equipment/equipment.html',hash:'equipment',id:'equipmentTab'}

    ]

- LOGIN

-

  var LOGIN={

    title:''

    ,href:PATCH_before+'login/login.html'

  }

- VIEW

-

  var VIEW={

    href:PATCH_before+'view/view.html'

  }

import tools from '../../common/tools'

import alarmAPI from '../../common/api/alarm'

import {static as STATIC} from '../../config/config'

layui.use(['element','form','table','layer','laydate'], function(){

  var element = layui.element

    ,form=layui.form

    ,$=layui.jquery

    ,table = layui.table

    ,layer=layui.layer

    ,laydate=layui.laydate

    ,_params=tools.getParams()

    ,_tabId=_params.tabId

  var _alarm={

    tabId:'prewarning',

    loadAlarm(type){

      alarmAPI.alarm({

        startDatetime:tools.stampToDatetime(tools.getDayStamp(-1))

        ,type

        ,state:'false'

        ,page:1

        ,pageSize:100

      },data=>{

        $('#alarm').html('')

        if(data.length<1){

          $('#alarm').html('<p class="nodata"></p>')

        }else{

          let _trClass=''

          if(_alarm.tabId==='prewarning'){

            _trClass='yellow'

          }else{

            _trClass='red'

          }

          $('#alarm').html('')

          if(data.length<1){

            $('#alarm').html('<p class="nodata"></p>')

          }else{

            $('#alarm').append(`<div class="layui-colla-item">

                <div class="layui-colla-title" data-title="">

                  <span></span>

                  <label class="colla-info ${_trClass}" id="alarmInfo"></label></div>

                <div id="alarmList" class="layui-colla-content"></div></div>`)

             $.each(data,(index,item)=>{


              let _alarmInfo=this.renderTable('alarmList',data)

              $('#alarmInfo').html(`

              ${_alarmInfo.alarm}<i class="iconfont icon-alarm"></i> 

              `)

             })

            element.render('collapse')

          }


           $.each(data,(index,item)=>{

             let _trClass=''


             if(_alarm.tabId==='prewarning'){

               _trClass='yellow'

             }else{

               _trClass='red'

             }


             $('#alarm').append(`<div class="layui-colla-item">

               <div class="layui-colla-title" data-title="${item.name}">

                 <span>${item.name}</span>

                 <label class="colla-info ${_trClass}" id="alarmInfo${index}"></label></div>

               <div id="alarm${index}" class="layui-colla-content ${_alarm.tabId=='history'?'':'layui-show'}"></div></div>`)


             let _alarmInfo=this.renderTable('alarm'+index,item.informInfoList)

             let $info=$('#alarmInfo'+index)

             if(_alarmInfo.alarm){

               $info.html(_alarmInfo.alarm+'')

             }else{

               $info.removeClass('yellow red')

               $info.addClass('green')

               $info.html('')

             }


           })

           element.render('collapse')

        }


      })

    },


    history(){

      let _type=$('#toolType').val()

      ,_state=$('#toolState').val()

      ,_Date=$('#toolDate').val()

      ,_opt={

        startDatetime:tools.stampToDatetime(tools.getDayStamp(_Date))

        ,page:1

        ,pageSize:1000

      }

      _type=='' || _type==null?'':_opt.type=_type

      _state=='' || _state==null?'':_opt.state=_state

      alarmAPI.alarm(_opt,data=>{

        $('#alarm').html('')

        if(data.length<1){

          $('#alarm').html('<p class="nodata"></p>')

        }else{

          $('#alarm').append(`<div class="layui-colla-item">

              <div class="layui-colla-title" data-title="">

                <span></span>

                <label class="colla-info history" id="alarmInfo"></label></div>

              <div id="alarmList" class="layui-colla-content"></div></div>`)

           $.each(data,(index,item)=>{


            let _alarmInfo=this.renderTable('alarmList',data)

            $('#alarmInfo').html(`

            ${_alarmInfo.alarm}<i class="iconfont icon-alarm"></i> 

            ${_alarmInfo.ok}<i class="iconfont icon-gaojingyichuli"></i>

            `)

           })

          element.render('collapse')

        }

      })

    },

    renderTable(id,data){

      let _re={

        ok:0

        ,alarm:0

      }

      $('#'+id).html(`<table class="layui-table" lay-skin="nob">

        <tbody></tbody></table>`)

      $.each(data,(index,item)=>{

        let _i=index+1

          ,_trClass=''

          ,_icon=''


        if(item.type==='prewarning'){

          _trClass='yellow'

        }else{

          _trClass='red'

        }


        if(item.state==='true' || item.state===true){

          _re.ok++

          _trClass='green'

          _icon='icon-ok'

        }else{

          _re.alarm++

        }


        $('#'+id+' tbody').append(`<tr class="${_trClass}"

          data-time="${item.informTime}"

          data-remark="${item.remark?item.remark:''}"

          data-type="${item.type}"

          data-state="${item.state}"

          data-id="${item.informInfoId}">

          <td>${_i}</td>

          <td>${item.content}

            <i class="iconfont ${_icon}"></i></td></tr>`)

      })

      return _re;

    }

  }

   or URLtabId

  if(_tabId && _tabId!=''){

    element.tabChange('alarmTab', _tabId);

    _alarm.tabId=_tabId

    if(_tabId=='history'){

      $('.tools').removeClass('mui-hidden')

      $('#alarm').removeClass('padtop')

      let _type=_params.toolType

        ,_state=_params.toolState

      $('#toolType').val(_type)

      $('#toolState').val(_state)

      form.render('select')

      _alarm.history()

    }else{

      $('.tools').addClass('mui-hidden')

      $('#alarm').addClass('padtop')

      _alarm.loadAlarm(_tabId)

    }

  }else{


    _alarm.loadAlarm(_alarm.tabId)

  }

,hash

  element.on('tab(alarmTab)', function(){

    let _type=this.getAttribute('lay-id')

    _alarm.tabId=_type

    if(_type=='history'){

      $('.tools').removeClass('mui-hidden')

      $('#alarm').removeClass('padtop')

      _alarm.history()

    }else{

      $('.tools').addClass('mui-hidden')

      $('#alarm').addClass('padtop')

      _alarm.loadAlarm(_type)

    }


  });


  mui('#alarm').on('tap','tr',function(){

    let _time=$(this).data('time')

      ,informInfoId=$(this).data('id')id

      ,_type=$(this).data('type')

      ,_typeName=STATIC.alarmState[_type]

      ,_remark=$(this).data('remark')

      ,_state=$(this).data('state')

      ,_content=$(this).children('td+td').html()

      ,_plineName=$(this).parents('.layui-colla-item').children('.layui-colla-title').data('title')

      ,_remarkHtml=''

    if(_remark && _remark!=''){

      _remarkHtml='value="'+_remark+'"'

    }else{

      _remarkHtml='placeholder="'+_typeName+'"'

    }

    if(_alarm.tabId=='history'){

      layer.open({

        title:''

        ,content:`<p><i class="layui-icon layui-icon-location"></i><span>${_plineName}</span></p>

        <p><i class="iconfont icon-gaojingshijian"></i><span>${_time}</span></p>

        <p class='layerContent'>${_content}</p>

        <p><i class="iconfont icon-yichuli"></i><span>${_state?_remark:''}</span></p>

        `

        ,skin:'alarmLayer'

      })

    }else{

      layer.open({

        title:_typeName+''

        ,content:`<p><i class="layui-icon layui-icon-location"></i><span>${_plineName}</span></p>

        <p><i class="iconfont icon-gaojingshijian"></i><span>${_time}</span></p>

        <p class='layerContent'>${_content}</p>

        <input class="layui-input" id="remark${informInfoId}" ${_remarkHtml}></input>

        `

        ,btn:[_state?'':'']

        ,skin:'alarmLayer'

        ,yes:(index,layero)=>{

          let remark=$('#remark'+informInfoId).val()

          alarmAPI.alarmEdit({

            informInfoId

            ,state:'true'

            ,remark

          },data=>{

            layer.close(index);

            mui.toast('')

            _alarm.loadAlarm(_alarm.tabId)

          })

        }

      })

    }

  })

  select

  form.on('select(toolDate)', function(data){

    _alarm.history()

  });  

  form.on('select(toolType)', function(data){

    _alarm.history()

  });  

  form.on('select(toolState)', function(data){

    _alarm.history()

  });  

});

@import '../../common/base.less';

body{

  background-color:white;

}

@padding:15px;

tab

.layui-tab-title li {

  padding: 0 10px;

}

.layui-tab{

  margin: 0;

  padding: @padding/2 @padding 0;

}

.switch{

  padding: @padding*4 @padding 0;

  color: #666;

  width: 80%;

  margin-left: 20%;

  & input{

    margin-bottom: 0;

  }

  & .layui-form-label{

    width: 110px;

  }

}

.layui-collapse{

  &.padtop{

    margin-top: @padding*4;

  }

  margin: @padding @padding @padding;

  & .layui-colla-content{

    padding: 0;

  }

  & .colla-info{

    float: right;

    font-size: 13px;

  }

  & .colla-info.history{

    font-size: 16px;

    color: #666;

    & i{

      font-size: 18px;

    }

  }

}

table.layui-table{

  margin: 0;

  & tr+tr>td{

    border-top: 1px solid #e6e6e6 !important;

  }

  & td i{

    font-size: 20px;

    float: right;

  }

}

layer

.layui-layer.layui-layer-dialog.alarmLayer{

  margin-right:4vw;

  & .layui-layer-content{

    padding: @padding @padding @padding/3;

    & p {

      padding-bottom:@padding/5;

      font-size: 15px;

      color: #666;

    }

    & i{

      display: inline-block;

      font-size: 20px;

      width: 24px;

    }

    & .layerContent{

      position: relative;

      padding-bottom: @padding/2;

      text-indent: 24px;

      &>i{

        position: absolute;

        width: 24px;

        height: 24px;

        left: 0;

        top: 0;

        &::before{

          margin-left: -24px;

        }

      }

    }

    & textarea{

      padding: @padding/5 @padding/3;

    }

  }

}

.tools{

  margin: @padding*4 @padding/2 0;

  & .layui-inline{

    width: 33.3%;

    box-sizing: border-box;

    padding: 0 @padding/4;

    & select,& input{

      margin-bottom: 0;

      padding: @padding/2;

    }

  }

}

.nodata{

  position: absolute;

  left: 0;

  right: 0;

  margin-top: -2px;

  background-color: white;

  text-align: center;

  height: 80px;

  line-height: 80px;

}

extends ../../common/base.pug

block append CSS

  link(href="./alarm.css?v="+VERSION, rel="stylesheet")

block CONTENT

  .layui-tab.layui-tab-brief(lay-filter='alarmTab')

    ul.layui-tab-title

      li.layui-this(lay-id='prewarning')

      li(lay-id='alarm')

      li(lay-id='history')

  -

  .tools.layui-form.mui-hidden

    .layui-inline

      select#toolDate(name="toolDate" lay-filter="toolDate")

        option(value='-1') 24

        option(value='-7') 7

        option(value='-15')

        option(value='-30') 1

    .layui-inline

      select#toolType(name="toolType" lay-filter="toolType")

        option(value='')

        option(value='prewarning')

        option(value='alarm')

    .layui-inline

      select#toolState(name="toolState" lay-filter="toolState")

        option(value='')

        option(value='true')

        option(value='false')

    .layui-inline.mui-hidden

      select.layui-input#plantSelect(name='plant')

  .layui-collapse.padtop#alarm

block append JS

  script(src="./alarm.js?v="+VERSION)


import { frame } from '../../components/frame/frame'

import tools from '../../common/tools'

import plineAPI from '../../common/api/pline'

import userAPI from '../../common/api/user'

import { server, route } from '../../config/config'

layui.use(['element'], function () {

  var element = layui.element

    , $ = layui.$


  var _user = tools.getData('user')


    , _isWechat = mui.os.wechat

    , _logoutUri = (_isWechat) ? route.menuLogin : route.login


  if (_user && _user.username) {


    if (_isWechat) {

      $('#loginPop ul').append(`<li id="menuunbind" class="mui-table-view-cell">

      <a href="javascript:;"></a></li>`)

      mui('#loginPop').on('tap', '#menuunbind', function () {

        mui.confirm('', '', ['', ''], function (e) {

          if (e.index == 1) {

            userAPI.menuUnbind({

            }, data => {

              mui.toast('')

              mui('#loginPop').popover('hide');

              $('#menuunbind').addClass('mui-hidden')

              $('#menubind').removeClass('mui-hidden')

            })

          }

        })

      })

      $('#loginPop ul').append(`<li id="menubind" class="mui-table-view-cell">

    <a href="javascript:;"></a></li>`)

      mui('#loginPop').on('tap', '#menubind', function () {

        mui.confirm('ID', '', ['', ''], function (e) {

          mui.prompt('','','',['',''],function(e){

          if (e.index == 1) {

            userAPI.menuBind({

              , password: e.value

            }, data => {

              mui.toast('')

              mui('#loginPop').popover('hide');

              $('#menubind').addClass('mui-hidden')

              $('#menuunbind').removeClass('mui-hidden')

            })

          }

        })

        document.querySelector('.mui-popup-input input').type='password'

      })

      if (_user.wechatId && _user.wechatId !== '') {

        $('#menubind').addClass('mui-hidden')

        $('#menuunbind').removeClass('mui-hidden')

      } else {

        $('#menuunbind').addClass('mui-hidden')

        $('#menubind').removeClass('mui-hidden')

      }

    }

    frame.init();


    window.history.pushState(null, null, "#view");

    window.addEventListener("popstate", function (e) {

      let _uriArr=location.hash.split('?')

        ,_hash = _uriArr[0].substr(1)

        ,_paramsURI=_uriArr.length==2?'&'+_uriArr[1]:''

        , _params = tools.getParams()

        ,_uri=''


        if(_hash.substr(0,5)==='plant'){

          _uri = '../plant/plant.html'

        }else{

          _uri = '../' + _hash + '/' + _hash + '.html'

        }

      mui(".nav-left .item").each(function () {

        this.classList.remove("active")

        if (this.dataset.hash == _hash) {iframe

          this.classList.add('active')

          var iframe = document.createElement('iframe')

          iframe.src = _uri + '?id=' + this.dataset.id+_paramsURI

          iframe.classList.add('iframe')

          var _iframeDOM = mui('.iframe')[0]

          var _iframeDOM_parent = mui('.iframe')[0].parentNode

          _iframeDOM_parent.removeChild(_iframeDOM)

          _iframeDOM_parent.appendChild(iframe);

        }

      });

    }, false);

    iframe

    mui('.header').on('tap', '#refresh', () => {

      window.history.pushState(null, null, location.hash);

      history.back(-1)

    })


    mui('#loginPop').on('tap', '#outlog', () => {

      userAPI.userlogout(data => {

      })

      location.href = _logoutUri

    })

  } else {

    mui.alert(',2s')

    setTimeout(() => {

      location.href = _logoutUri

    }, 3000)

  }

})

@import '../../components/frame/frame.less';

@header-bg:white;

@header-height:8vh;

.header{

  background-color: @header-bg;

  height: @header-height;

  margin-bottom: 1vh;

  position: fixed;

  top: 0;

  left: 0;

  right: 0;

  & i{

    font-weight: bold;

  }

  & ul{

    display: flex;

    justify-content: flex-end;

    align-items: center;

    height: 100%;

    &>li{

      height: inherit;

      display: flex;

      align-items: center;

      padding: 0 20px;

    }

  }

}

.frame > .mui-content {

  padding-top: 9vh;

}

.alarm{

  color: #FF5722;

  &::after{

    content: '6';

    width: 15px;

    height: 15px;

    padding: 0;

    border-radius: 50%;

    line-height: 16px;

    font-size: 12px;

    position: absolute;

    text-align: center;

    top: 6px;

    right: 6px;

    background-color: red;

    color: white;

  }

}

.iframe{

  width: 100%;

  height: 90vh;

   height: fill-available;

  overflow: scroll;

  border: none;

}

pop

.mui-popover{

  width: 95px

}

extends ../../components/frame/frame.pug

block append CSS

  link(href="./index.css?v="+VERSION, rel="stylesheet")

block HEADER

  .header

    ul

      li

        a#refresh(href='javascript:;' title='refresh')

          i.mui-icon.mui-icon-reload

      li

        a(href='#loginPop' title='user')

          i.mui-icon.mui-icon-person

          span#username

  .mui-popover#loginPop

    ul.mui-table-view

      li.mui-table-view-cell

        a#outlog(href='javascript:;')

block FRAME

  iframe.iframe(src=VIEW.href)

block append JS

  script(src="./index.js?v="+VERSION)

import tools from '../../common/tools'

import dataAPI from '../../common/api/data'

layui.use(['element','form','table','jquery'], function(){

  var element = layui.element

    ,form=layui.form

    ,$=layui.jquery

  element.tabChange('alarmTab', 'alarmed')

  ,

  var _active={

    farmId:'' id ()

    ,plotId:''    id  ()

    ,dataItemId:''          id()

    ,dataItemName:''        

    ,unitName:''

    ,startDatetime: tools.stampToDatetime(tools.getDayStamp(-1))      ,''

    ,endDatetime: ''

    ,chartLine:[]

  }

  var _data={

    loadData(){


      dataAPI.farmList({},data=>{


        $('#farm').html('')

        $.each(data,(index,item)=>{

          if(index==0){


            _active.farmId=item.farmId

          }

          $('#farm').append(`<option value='${item.farmId}'>${item.farmName}</option>`)

        })

        form.render('select');


        _active.farmId!=''?this.plotList(_active.farmId):mui.alert('');

      })

    }


    ,plotList(farmId){

      ,

      dataAPI.plotList({farmId:farmId},data=>{


        $('#plot').html('')

        $.each(data,(index,item)=>{

          if(index==0){


            _active.plotId=item.plotId

          }

          $('#plot').append(`<option value='${item.plotId}'>${item.plotName}</option>`)

        })

        form.render('select');


        _active.plotId!=''?this.lastData(_active.plotId):mui.alert('');

      })

    }


    ,chartLine(prewarningValue,alarmValue){

      let  _alarmTemp=alarmValue?alarmValue.split('~'):[]

      , _alarmDown=Number(_alarmTemp[0])

      , _alarmUp=Number(_alarmTemp[1])

      , _prewarningTemp=prewarningValue?prewarningValue.split('~'):[]

      , _prewarnDown=Number(_prewarningTemp[0])

      , _prewarnUp=Number(_prewarningTemp[1])

      let _line=[{

        name:'',

        yAxis:_alarmUp,

        lineStyle:{color:'#d63646'}

      },{

        name:'',

        yAxis:_prewarnUp,

        lineStyle:{color:'#d8ae11'}

      },{

        name:'',

        yAxis:_prewarnDown,

        lineStyle:{color:'#d8ae11'}

      },{

        name:'',

        yAxis:_alarmDown,

        lineStyle:{color:'#d63646'}

      }]

      return _line

    }



    ,lastData(plotId){

      dataAPI.lastData({plotId:plotId},data=>{

        $('#sensorInfo').html('')

        if(data.length>0){

          $.each(data,(index,item)=>{


            let  _alarmTemp=item.alarmValue?item.alarmValue.split('~'):[]

              , _alarmDown=Number(_alarmTemp[0])

              , _alarmUp=Number(_alarmTemp[1])

              , _prewarningTemp=item.prewarningValue?item.prewarningValue.split('~'):[]

              , _prewarnDown=Number(_prewarningTemp[0])

              , _prewarnUp=Number(_prewarningTemp[1])


              if(index==0){

                id

                _active.dataItemId=item.dataItemId

                _active.dataItemName=item.dataItemName

                _active.unitName=item.unitName

              }



            let _collectData=item.lastData?item.lastData:{}

              ,_value=Number(_collectData.value)

              ,_alarmHtml=''

              ,_color=''css

              ,_arrow=''css

            switch (item.valueType) {

              case 1:

                if(_value){

                  if(_value>=_alarmUp){

                    _alarmHtml='<label></label>'

                    ,_color='red'

                    ,_arrow='up'

                  }else if(_value>=_prewarnUp){

                    _alarmHtml='<label></label>'

                    ,_color='yellow'

                    ,_arrow='up'

                  }else if(_value>_prewarnDown){

                    _color='green'

                  }else if(_value>_alarmDown){

                    _alarmHtml='<label></label>'

                    ,_color='yellow'

                    ,_arrow='down'

                  }else if(_value<=_alarmDown){

                    _alarmHtml='<label></label>'

                    ,_color='red'

                    ,_arrow='down'

                  }else{


                  }

                }

          $('#alarm').html('')

        if(data.length<1){

          $('#alarm').html('<p class="nodata"></p>')

        }else{

          let _trClass=''

          if(_alarm.tabId==='prewarning'){

            _trClass='yellow'

          }else{

            _trClass='red'

          }

          $('#alarm').html('')

          if(data.length<1){

            $('#alarm').html('<p class="nodata"></p>')

          }else{

            $('#alarm').append(`<div class="layui-colla-item">

                <div class="layui-colla-title" data-title="">

                  <span></span>

                  <label class="colla-info ${_trClass}" id="alarmInfo"></label></div>

                <div id="alarmList" class="layui-colla-content"></div></div>`)

             $.each(data,(index,item)=>{


              let _alarmInfo=this.renderTable('alarmList',data)

              $('#alarmInfo').html(`

              ${_alarmInfo.alarm}<i class="iconfont icon-alarm"></i> 

              `)

             })

            element.render('collapse')

          }


           $.each(data,(index,item)=>{

             let _trClass=''


             if(_alarm.tabId==='prewarning'){

               _trClass='yellow'

             }else{

               _trClass='red'

             }


             $('#alarm').append(`<div class="layui-colla-item">

               <div class="layui-colla-title" data-title="${item.name}">

                 <span>${item.name}</span>

                 <label class="colla-info ${_trClass}" id="alarmInfo${index}"></label></div>

               <div id="alarm${index}" class="layui-colla-content ${_alarm.tabId=='history'?'':'layui-show'}"></div></div>`)


             let _alarmInfo=this.renderTable('alarm'+index,item.informInfoList)

             let $info=$('#alarmInfo'+index)

             if(_alarmInfo.alarm){

               $info.html(_alarmInfo.alarm+'')

             }else{

               $info.removeClass('yellow red')

               $info.addClass('green')

               $info.html('')

             }


           })

           element.render('collapse')

        }


      })

    },



                $('#sensorInfo').append(`<li class="mui-table-view-cell mui-media">

                <a data-item-id='${item.dataItemId}' data-item-name='${item.dataItemName}' data-unit-name='${item.unitName}'>

                  <div class="mui-media-object mui-pull-right ${_color}">

                    <span class="${_arrow}">${_value?_value.toFixed(2)+item.unitName:'N/A'}</span>

                    ${_alarmHtml}</div>

                  <div class="mui-media-body">${item.dataItemName}

                    <p>${_collectData.collectDatetime?_collectData.collectDatetime:''}</p></div></a></li>`)

                break;


              default:mui.toast('valueType='+item.valueType+'')

                break;

            }

          })

        }else{


          _active.dataItemId=''

        }

        _menu={

  appid:'ww3b6d4978149c4609'  CorpID

  appid:'ww57b0d5bffdbb625e'  

  ,redirect_uri:'http:zlmifan.xicp.io/login/login.html'  

  ,redirect_uri:'http:192.168.0.15:8080/nxnhlmenu/login/login.html'

  ,response_type:'code'

  ,scope:'snsapi_base'

  ,state:''

}

_route={

  index:'../app/index.html'

  ,menuLogin:'http:zlmifan.xicp.io'

  ,menuLogin:'http:192.168.0.15:8080/nxnhlmenu/index.html'

  ,login:'../login/login.html'

  ,delogin:'./login/login.html'index.html

}

module.exports={

  server:_s

  ,api:_api

  ,static:_static

  ,menu:_menu

  ,route:_route

}

-  gulpfile->pug.js data

- VERSION :  

- DEBUG : .min

- config

- var KEYWORDS=''       

- var DESCRIPTION = ''  

- var ICON = ''         icon(logo)

- var TITLE = ''  

-

- var PATCH_before='../'            dist

- var PATCH_lib=PATCH_before+'lib/' -

- var PATCH_min =DEBUG?'':'.min'    

- var PATCH_logo = PATCH_before+'images/logo.png' logo

- CDN

- iconfont

- var ICONFONT = PATCH_before+'fonts/iconfont.css'

- fetch,fetch,promise_polyfill

- var FETCH=PATCH_lib+'fetch/fetch.umd'+PATCH_min+'.js'

- promise_polyfill

- var PROMISE=PATCH_lib+'polyfill'+PATCH_min+'.js'

- MUI

- var MUI_CSS=PATCH_lib+'mui/css/mui'+PATCH_min+'.css'

- var MUI_JS=PATCH_lib+'mui/js/mui'+PATCH_min+'.js'

- vue

- var VUE = PATCH_lib+ 'vue/vue'+PATCH_min+'.js'

- var VUE_TAP = PATCH_lib+ 'vue/vue-tap'+PATCH_min+'.js'

- layui

- var LAYUI_CSS = PATCH_lib+ 'layui/css/layui.css'

- var LAYUI_JS = PATCH_lib+ 'layui/layui.js'

- var LAYUI_ADMIN_CSS = PATCH_lib+ 'layui/css/admin/admin.css'

        if(_active.dataItemId==''){


          $('#sensorInfo').html('<p class="nodata"></p>')

          $('#plineChart').html('<p class="nodata"></p>')

        }else{


          this.sensorData(_active.dataItemId)

        }

      })

    }


    ,sensorData(dataItemId){

      dataAPI.historyData({

        dataItemId:dataItemId?dataItemId:_active.dataItemId

        ,startDatetime:_active.startDatetime

        ,endDatetime:_active.endDatetime

        ,plotId: _active.plotId

      },data=>{

        this.renderChart(data)

      })

    }

    ,

    ,renderChart(res){

      let _series = res.data? res.data['valueList']:[];

      _active.chartLine=_data.chartLine(res.prewarningValue,res.alarmValue)

      if(_series && _series.length>0){

        var _timedata=[]

         $.each(_series, (index, item)=>{

           _timedata.push({

             name:item.value[0],

             value:[item.collectDatetime,item.value.toFixed(2)]

           })

         });

        let chartOpt=tools.getEchartsDefOpt()

        mui.extend(true,chartOpt,{

          title:{

            text:_active.dataItemName

          }

          ,xAxis: {

              type: 'time',

              splitLine:{

                  show:false

              }

          }

          ,yAxis:{

            name:_active.unitName

            ,axisLabel:{

              formatter(val){

                if(val>999999)

                  val=val/1000000+'m';

                if(val>999)

                  val=val/1000+'k';

                return val;

              }

            }

          }

          ,tooltip: {

            formatter: function (params) {

              params = params[0];

              return params.name.substr(6,10)+'<br>'+params.value[1]+_active.unitName;

            }

          }

          ,series:[{

            name:_active.dataItemName

            ,type: 'line'

            ,symbol:'none'

            ,smooth: true

            ,unitName:_active.unitName

            ,data:_series

            , label: {normal: {show: true}},animation:false

            ,markLine:{

              data:_timedata

              ,label:{

                position: 'middle',

                show:false,

                formatter: '{b} {c}'+_active.unitName

            }}

          }]

        })

        tools.echarts($("#plineChart"), chartOpt);

        tools.renderTable($("#plineTable"), chartOpt);

      }else{

        $('#plineChart').html('<p class="nodata"></p>')

        $('#plineTable').html('<p class="nodata"></p>')

      }

    }

  }


  form.on('select(farm)', function(data){

    _active.farmId=data.value

    _data.plotList(_active.farmId)

  });      



  form.on('select(plot)', function(data){

    _active.plotId=data.value

    _data.lastData(_active.plotId)

  });    

    margin-right:4vw;

  & .layui-layer-content{

    padding: @padding @padding @padding/3;

    & p {

      padding-bottom:@padding/5;

      font-size: 15px;

      color: #666;

    }

    & i{

      display: inline-block;

      font-size: 20px;

      width: 24px;

    }

    & .layerContent{

      position: relative;

      padding-bottom: @padding/2;

      text-indent: 24px;

      &>i{

        position: absolute;

        width: 24px;

        height: 24px;

        left: 0;

        top: 0;

        &::before{

          margin-left: -24px;

        }

      }

    }

    & textarea{

      padding: @padding/5 @padding/3;

    }

  }

}

.tools{

  margin: @padding*4 @padding/2 0;

  & .layui-inline{

    width: 33.3%;

    box-sizing: border-box;

    padding: 0 @padding/4;

    & select,& input{

      margin-bottom: 0;

      padding: @padding/2;

    }

  }

}

.nodata{

  position: absolute;

  left: 0;

  right: 0;

  margin-top: -2px;

  background-color: white;

  text-align: center;

  height: 80px;

  line-height: 80px;

}

extends ../../common/base.pug

block append CSS

  link(href="./alarm.css?v="+VERSION, rel="stylesheet")

block CONTENT

  .layui-tab.layui-tab-brief(lay-filter='alarmTab')

    ul.layui-tab-title

      li.layui-this(lay-id='prewarning')

      li(lay-id='alarm')

      li(lay-id='history')

  -

  .tools.layui-form.mui-hidden

    .layui-inline

      select#toolDate(name="toolDate" lay-filter="toolDate")

        option(value='-1') 24

        option(value='-7') 7

        option(value='-15')

        option(value='-30') 1

    .layui-inline

      select#toolType(name="toolType" lay-filter="toolType")

        option(value='')

        option(value='prewarning')

        option(value='alarm')

    .layui-inline

      select#toolState(name="toolState" lay-filter="toolState")

        option(value='')

        option(value='true')

        option(value='false')

    .layui-inline.mui-hidden

      select.layui-input#plantSelect(name='plant')

  .layui-collapse.padtop#alarm

block append JS

  script(src="./alarm.js?v="+VERSION)


  _data.loadData();


  mui

  mui.init({

    gestureConfig: {

      doubletap: true

    }

  })

  tap

  mui('.toolbar')

    .on('tap','#refresh',function(){


      let _plotId=$('#plot').val()

      _plotId?_data.lastData(_plotId):mui.alert('')


    })

    .on('tap','#switchBtn',function(){

       /

      .

    })

  ymin-max

  mui(".chart").on("doubletap", "#plineChart", function() {

    tools.renderEcharts(mui("#plineChart"), {

      yAxis: {

        min: function(value) {

          return (value.min - 2).toFixed(0);

        },

        max: function(value) {

          return (value.max + 2).toFixed(0);

        }

      }

    });

  });


  mui('#sensorInfo').on('tap','a',function(){

    let _dataItemId=$(this).data('itemId')

      ,_name=$(this).data('itemName')

      ,_unitName=$(this).data('unitName')

      ,_unitName=$(this).data('unitName')

      _active.dataItemId=_dataItemId

      _active.dataItemName=_name

      _active.unitName=_unitName

    _data.sensorData(_dataItemId)

      _active.dataItemId=_dataItemId

      _active.dataItemName=_name

      _active.unitName=_unitName

    _data.sensorData(_dataItemId)

  })


  mui('#actionsheet').on('tap','a',function(){

    let _day=$(this).data('day')

      ,_html=$(this).html()

    _active.startDatetime=tools.stampToDatetime(tools.getDayStamp(_day))

    _active.dataItemId?_data.sensorData():mui.alert('')


    $('#chartDay').html(_html)

    mui('#actionsheet').popover('hide');

  })

})

@import '../../common/base.less';

body{

  background-color:white;

  display: flex;

  justify-content: flex-start;

  flex-direction: column;

  height: 100vh;

}

@padding:15px;

tab

.layui-tab-title li {

  padding: 0 10px;

}

.layui-tab{

  margin: 0;

  padding: @padding/2 @padding 0;

}

.switch{

  padding: 5px 15px 5px;

  color: #666;

  -webkit-box-flex: 0;

  & .layui-form-label{

    width: 110px;

  }

  & input[type=text]{

    margin-bottom: 0;

  }

}


.chart{

  flex: 0 0 33vh;

  &>#plineChart,&>#plineTable{

    width: 100%;

    height: 33vh;

  }

}


.toolbar{

  flex: 0 0 8vh;

  padding: 0 6vw;

  display: flex;

  align-items: center;

  justify-content: space-between;

  & > a{

    font-size: 17px;

    color: #777;

  }

  & > a.btn {

    color: white;

    background-color: #bbb;

    border-radius: 15px;

    padding: 3px 10px;

  }

}

#sheetBlack {

  position: fixed;

  top: 0;

  right: 0;

  bottom: 0;

  left: 0;

  background-color: rgba(255, 255, 255, 0.1);

  z-index: 10;

}

#actionsheet {

  width: 30vw;

  left: 20px;

  & ul.mui-table-view {

    margin-top: 0;

  }

  & li.mui-table-view-cell {

    padding: 9px 15px;

  }

}

.sensor{

  padding-top: 1px;

  overflow: scroll;

}

.mui-table-view .mui-media-object {

  &.red,&.yellow{

    line-height: 21px;

    font-size: 21px;

    & label{

      font-size:12px;

    }

  }

  max-width: inherit;

  display: flex;

  justify-content: center;

  align-items: center;

  flex-direction: column;

  & span{

    font-family: Muiicons;

    &.up::after{

      content:'\e584';

      font-size: 21px;

      font-weight: bold;

    }

    &.down::after{

      content:'\e585';

      font-size: 21px;

      font-weight: bold;

    }

  }

}

echarts

#plineTable{

  border-spacing: 0;

  &>.table-title{

    text-align: center;

    font-size: 18px;

    font-weight: bold;

    color: black;

    height: 28px;

    line-height: 29px;

  }

  & tr:hover {

      background: #dad8d3;

      -o-transition: all 0.1s ease-in-out;

      -webkit-transition: all 0.1s ease-in-out;

      -moz-transition: all 0.1s ease-in-out;

      -ms-transition: all 0.1s ease-in-out;

      transition: all 0.1s ease-in-out;

  }

  & th {

      padding: 5px;

      text-align: center;

      width: 50%;

  }

  & td{

      padding: 3px;

      text-align: center;

  }

  & th {

    background:#dadada;

    cursor: pointer;

  }

  & td:first-child, & th:first-child {

      border-left: none;

  }

  &  tr:nth-of-type(2n){background:#f1f1f1;cursor: pointer;}

  &  tr:nth-of-type(2n+1){background:#eaeaea;cursor: pointer;}

  &  tbody tr:hover{  

    background: #fbf8e9;

    -o-transition: all 0.1s ease-in-out;

    -webkit-transition: all 0.1s ease-in-out;

    -moz-transition: all 0.1s ease-in-out;

    -ms-transition: all 0.1s ease-in-out;

    transition: all 0.1s ease-in-out;

  }

}

.mui-toast-container{

  margin-bottom: 60px;

}

.nodata{

  text-align: center;

  height: 10vh;

  line-height: 10vh;

}

extends ../../common/base.pug

block append CSS

  link(href="./data.css?v="+VERSION, rel="stylesheet")

block CONTENT

  -

  .switch.layui-form

    label.layui-form-label(for='farm') :

    .layui-input-block

      select.layui-input#farm(name='farm',lay-filter='farm')

  -

  .switch.layui-form

    label.layui-form-label(for='plot') :

    .layui-input-block

      select.layui-input#plot(name='plot',lay-filter='plot')

  .chart

    #plineChart

    #plineTable.mui-hidden

  .toolbar

    a.btn#chartPopBtn(href="#actionsheet")

      i#chartDay.iconfont.icon-rili

        |  

        span 1

    a#refresh(href="javascript:;")

      span

      |  

      i.iconfont.icon-f14

    - a#switchBtn(href="javascript:;")

    -   span

    -   |  

    -   i.iconfont.icon-qiehuan

    .mui-popover#actionsheet

      ul.mui-table-view

        li.mui-table-view-cell

          a(data-day='-1')  1

        li.mui-table-view-cell

          a(data-day='-7')  1

        li.mui-table-view-cell

          a(data-day='-30')  1

    #sheetBlack.mui-hidden

  .sensor

    ul.mui-table-view#sensorInfo

block append JS

  script(src=ECHARTS)

  script(src="./data.js?v="+VERSION)


import tools from '../../common/tools'

import dataAPI from '../../common/api/data'

layui.use(['element','form','table','jquery'], function(){

  var element = layui.element

    ,form=layui.form

    ,$=layui.jquery

  element.tabChange('alarmTab', 'alarmed')

  ,

  var _active={

    farmId:'' id ()

    ,plotId:''    id  ()

    ,sensorId:''          id()

    ,dataItemName:''        

  }

  var _data={

    loadData(){


      dataAPI.farmList({},data=>{


        $('#farm').html('')

        $.each(data,(index,item)=>{

          if(index==0){


            _active.farmId=item.farmId

          }

          $('#farm').append(`<option value='${item.farmId}'>${item.farmName}</option>`)

        })

        form.render('select');


        _active.farmId!=''?this.plotList(_active.farmId):mui.alert('');

      })

    }


    ,plotList(farmId){

      ,

      dataAPI.plotList({farmId:farmId},data=>{


        $('#plot').html('')

        $.each(data,(index,item)=>{

          if(index==0){


            _active.plotId=item.plotId

          }

          $('#plot').append(`<option value='${item.plotId}'>${item.plotName}</option>`)

        })

        form.render('select');


        _active.plotId!=''?this.equipmentList(_active.plotId):mui.alert('');

      })

    }



    ,equipmentList(plotId){

      dataAPI.equipmentList({plotId:plotId},data=>{

        $('#sensorInfo').html('')

        if(data.length>0){

          $.each(data,(index,item)=>{

            let _dataItemList=item.dataItemList?item.dataItemList:{}

              ,sensorId=item.sensorId

              ,_value=this.getDataItemValue(_dataItemList)

              ,modeZeroId=this.getDataItemId(_dataItemList,'')  id

              ,modeOneId=this.getDataItemId(_dataItemList,'')  id

              ,modeStopId=this.getDataItemId(_dataItemList,'')  id

            $('#sensorInfo').append(`

            <li class="mui-table-view-cell mui-media" id='sensor_block_${sensorId}'>

            <a data-item-id='${sensorId}' data-name='${item.sensorName}' data-status-id='${_dataItemList[0].dataItemId}'>

              <div class="mui-media-data mui-clearfix">

                <label class="mui-pull-left"><i class="iconfont icon-equipment"></i> ${item.sensorName}</label>

                <span class="mui-pull-right">${_value?_value:''}</span>

              </div>

              <div class="mui-out-line" id="outline${sensorId}">


              </div>

              <div class="mui-media-btns" id="sensor${sensorId}">

                <button id="sensorBtn${sensorId}0" ${_value==''?'disabled':''} type="button" class="mui-btn" data-loading-text="..." data-sensor-name="${item.sensorName}" data-sensor-id="${sensorId}" data-item-operation="1" data-item-id="${modeOneId}"></button>

                <button id="sensorBtn${sensorId}1" ${_value==''?'disabled':''} type="button" class="mui-btn" data-loading-text="..." data-sensor-name="${item.sensorName}" data-sensor-id="${sensorId}" data-item-operation="0" data-item-id="${modeStopId}"></button>

                <button id="sensorBtn${sensorId}2" ${_value==''?'disabled':''} type="button" class="mui-btn" data-loading-text="..." data-sensor-name="${item.sensorName}" data-sensor-id="${sensorId}" data-item-operation="1" data-item-id="${modeZeroId}"></button>

              </div>

            </a></li>`);


            this.certralStatus(modeZeroId,(data)=>{

              if(data.state == 'true'){

                $("#sensor"+sensorId).show();

              }else{

                $("#outline"+sensorId).show();

                 mui.toast('')

              }

            })

          })


           $("#sensor"+_active.sensorId).show();

        }else{


          $('#sensorInfo').html('<p class="nodata"></p>')

          $('#plineChart').html('<p class="nodata"></p>')

        }

      })

    }


    ,certralStatus(dataItemId,cb){

      dataAPI.certralStatus({dataItemId:dataItemId},data=>{

        cb(data);

      })

    }


    ,switchStatus(params,otherParams,cb){

      dataAPI.switchStatus(params,data=>{

        cb(data,otherParams);

      })

    }

     Id

    ,getDataItemId(list,dir){

       eachid

      for(let i=0;i<list.length;i++){

        if(list[i]['dataName'].indexOf(dir)>-1){

          return list[i]['dataItemId'];

        }

        if(list[i]['lastData']['value'] == '' && dir==""){

          return list[i]['dataItemId'];

        }

      }

       $.each(list,(index,item)=>{

         if(item['dataName'].indexOf(dir)>-1){

           return item['dataItemId']

         }

         if(item['lastData']['value'] == '' && dir==""){

           return item['dataItemId'];

         }

       })

    }


    ,getDataItemValue(list){

      if(list.length){

        for(let i=0;i<list.length;i++){

          var item = list[i] || {};

          if(item['dataName'].indexOf('')>-1){

            if((item['lastData'] ? item['lastData']['value']:'') == ''){

              return '';

            }

          }

          if(item['dataName'].indexOf('')>-1){

            if((item['lastData'] ? item['lastData']['value']:'') == ''){

              return '';

            }

          }

        }

        return '';

         $.each(list,(index,item)=>{

           if(item['dataName'].indexOf('')>-1){

             if((item['lastData'] ? item['lastData']['value']:'') == ''){

               return '';

             }

           }

           if(item['dataName'].indexOf('')>-1){

             if((item['lastData'] ? item['lastData']['value']:'') == ''){

               return '';

             }

           }

         })

         return '';

      }else{

        return '';

      }

    }


    ,sensorData(sensorId,sensorName){

      let id = sensorId

      dataAPI.sensorData({sensorId:sensorId},data=>{

        let _dataItemList=data?data:[]

            ,sensorId=id

            ,_value=this.getDataItemValue(_dataItemList)

            ,modeZeroId=this.getDataItemId(_dataItemList,'')  id

            ,modeOneId=this.getDataItemId(_dataItemList,'')  id

            ,modeStopId=this.getDataItemId(_dataItemList,'')  id


        $('#sensor_block_'+sensorId).html(`

        <a data-item-id='${sensorId}' data-item-name='${sensorName}' data-status-id='${_dataItemList[0].dataItemId}'>

          <div class="mui-media-data mui-clearfix">

            <label class="mui-pull-left"><i class="iconfont icon-equipment"></i> ${sensorName}</label>

            <span class="mui-pull-right">${_value?_value:''}</span>

          </div>

          <div class="mui-out-line" id="outline${sensorId}">


          </div>

          <div class="mui-media-btns" id="sensor${sensorId}">

            <button id="sensorBtn${sensorId}0" ${_value==''?'disabled':''} type="button" class="mui-btn" data-loading-text="..." data-sensor-name="${sensorName}" data-sensor-id="${sensorId}"  data-item-operation="1" data-item-id="${modeOneId}"></button>

            <button id="sensorBtn${sensorId}1" ${_value==''?'disabled':''} type="button" class="mui-btn" data-loading-text="..." data-sensor-name="${sensorName}" data-sensor-id="${sensorId}"  data-item-operation="0" data-item-id="${modeStopId}"></button>

            <button id="sensorBtn${sensorId}2" ${_value==''?'disabled':''} type="button" class="mui-btn" data-loading-text="..." data-sensor-name="${sensorName}" data-sensor-id="${sensorId}"  data-item-operation="1" data-item-id="${modeZeroId}"></button>

          </div>

        </a>`);

        setTimeout(()=>{

          $("#sensor"+sensorId).show();

        },20);

      })

    }

  }


  form.on('select(farm)', function(data){

    _active.farmId=data.value

    _data.plotList(_active.farmId)

  });      



  form.on('select(plot)', function(data){

    _active.plotId=data.value

    _data.equipmentList(_active.plotId)

  });    


  _data.loadData();


  mui

  mui.init({

    gestureConfig: {

      doubletap: true

    }

  })

  tap

  mui('.toolbar')

    .on('tap','#refresh',function(){


      let _plotId=$('#plot').val()

      _plotId?_data.equipmentList(_plotId):mui.alert('')


    })

    .on('tap','#switchBtn',function(){

       /

      .

    })

   mui('#sensorInfo').on('tap','a',function(){


     if(_active.sensorId)

     $("#sensor"+_active.sensorId).hide();

     let sensorId=$(this).data('itemId')

       ,_name=$(this).data('itemName')

       ,_dataItemId=$(this).data('statusId')


       _active.sensorId=sensorId

       _active.dataItemName=_name


       _data.certralStatus(_dataItemId,sensorId);

   })


  mui(document.body).on('tap', '.mui-btn', function(e) {

    mui(this).button('loading');

    let id = $(this).data('itemId')

      ,operation = $(this).data('itemOperation')

      ,sensorId = $(this).data('sensorId')

      ,name =  $(this).data('sensorName')

      ,params = {dataItemId:id,operator:operation}

      ,list = [0,1,2]

      ,otherParams = {'sensorId':sensorId,'sensorName':name}

    $.each(list,(index,item)=>{

      $("#sensorBtn"+sensorId+index).attr('disabled',true);

    })


    _data.switchStatus(params,otherParams,(data,otherParams)=>{

      setTimeout(function() {

        _data.sensorData(otherParams.sensorId,otherParams.sensorName);

         _data.equipmentList(_active.plotId);

      }.bind(this), 5000);

    })

  });

})

@import '../../common/base.less';

body{

  background-color:white;

  display: flex;

  justify-content: flex-start;

  flex-direction: column;

  height: 100vh;

}

@padding:15px;

tab

.layui-tab-title li {

  padding: 0 10px;

}

.layui-tab{

  margin: 0;

  padding: @padding/2 @padding 0;

}

.switch{

  padding: 5px 15px 5px;

  color: #666;

  -webkit-box-flex: 0;

  & .layui-form-label{

    width: 110px;

  }

  & input[type=text]{

    margin-bottom: 0;

  }

}


.chart{

  flex: 0 0 33vh;

  &>#plineChart,&>#plineTable{

    width: 100%;

    height: 33vh;

  }

}


.toolbar{

  flex: 0 0 8vh;

  padding: 0 6vw;

  display: flex;

  align-items: center;

  justify-content: space-between;

  & > a{

    font-size: 17px;

    color: #777;

  }

  & > a.btn {

    color: white;

    background-color: #bbb;

    border-radius: 15px;

    padding: 3px 10px;

  }

}

#sheetBlack {

  position: fixed;

  top: 0;

  right: 0;

  bottom: 0;

  left: 0;

  background-color: rgba(255, 255, 255, 0.1);

  z-index: 10;

}

#actionsheet {

  width: 30vw;

  left: 20px;

  & ul.mui-table-view {

    margin-top: 0;

  }

  & li.mui-table-view-cell {

    padding: 9px 15px;

  }

}

.sensor{

  padding-top: 1px;

  overflow: scroll;

}

.mui-table-view .mui-media-object {

  &.red,&.yellow{

    line-height: 21px;

    font-size: 21px;

    & label{

      font-size:12px;

    }

  }

  max-width: inherit;

  display: flex;

  justify-content: center;

  align-items: center;

  flex-direction: column;

  & span{

    font-family: Muiicons;

    &.up::after{

      content:'\e584';

      font-size: 21px;

      font-weight: bold;

    }

    &.down::after{

      content:'\e585';

      font-size: 21px;

      font-weight: bold;

    }

  }

}

.mui-media-data{

  & label,& span{

    line-height: 30px;

    font-size: 16px;

  }

}

.mui-out-line{

  display: none;

  margin-top: 15px;

  color: #b5b5b5;

  font: normal 14px/20px '';

  text-indent: 1.5em;

}

.mui-media-btns{

  display: none;

  margin-top: 15px;

}

echarts

#plineTable{

  border-spacing: 0;

  &>.table-title{

    text-align: center;

    font-size: 18px;

    font-weight: bold;

    color: black;

    height: 28px;

    line-height: 29px;

  }

  & tr:hover {

      background: #dad8d3;

      -o-transition: all 0.1s ease-in-out;

      -webkit-transition: all 0.1s ease-in-out;

      -moz-transition: all 0.1s ease-in-out;

      -ms-transition: all 0.1s ease-in-out;

      transition: all 0.1s ease-in-out;

  }

  & th {

      padding: 5px;

      text-align: center;

      width: 50%;

  }

  & td{

      padding: 3px;

      text-align: center;

  }

  & th {

    background:#dadada;

    cursor: pointer;

  }

  & td:first-child, & th:first-child {

      border-left: none;

  }

  &  tr:nth-of-type(2n){background:#f1f1f1;cursor: pointer;}

  &  tr:nth-of-type(2n+1){background:#eaeaea;cursor: pointer;}

  &  tbody tr:hover{  

    background: #fbf8e9;

    -o-transition: all 0.1s ease-in-out;

    -webkit-transition: all 0.1s ease-in-out;

    -moz-transition: all 0.1s ease-in-out;

    -ms-transition: all 0.1s ease-in-out;

    transition: all 0.1s ease-in-out;

  }

}

.mui-toast-container{

  margin-bottom: 60px;

}

.nodata{

  text-align: center;

  height: 10vh;

  line-height: 10vh;

}

extends ../../common/base.pug

block append CSS

  link(href="./equipment.css?v="+VERSION, rel="stylesheet")

block CONTENT

  -

  .switch.layui-form

    label.layui-form-label(for='farm') :

    .layui-input-block

      select.layui-input#farm(name='farm',lay-filter='farm')

  -

  .switch.layui-form

    label.layui-form-label(for='plot') :

    .layui-input-block

      select.layui-input#plot(name='plot',lay-filter='plot')

  .sensor

    ul.mui-table-view#sensorInfo

block append JS

  script(src="./equipment.js?v="+VERSION)


import {login} from '../../components/login/login'

import tools from '../../common/tools'

import userAPI from '../../common/api/user'

import {route,menu} from '../../config/config'

const _login={

  params:tools.getParams(),URL

  remeber(){

    let _user=this.user

       if()

    var remember=mui('#remember')[0].classList.contains("mui-active")

    if(_user && _user.password)

      if(!remember){

        mui('#remember').switch()

        mui('#remember').switch().toggle()

      }

  }

}

_login.remeber()

if(_login.params.code){code

  mui('#menuAuth')[0].classList.remove('mui-hidden')

  tools.setData('user',{

    code:_login.params.code

  })

}else{

  mui('#menuAuth')[0].classList.add('mui-hidden')

}


mui('.mui-content').on('tap','#login',function(){

  var username=mui('#username')[0].value

  var password=mui('#password')[0].value

  var remember=mui('#remember')[0].classList.contains("mui-active")

  if(remember){

    tools.setData('user',{

      password

    })

  }else{

    tools.setData('user',{

      password:''

    })

  }

  tools.setData('user',{

    username

  })


  userAPI.userLogin({

    username,

    password

  },data=>{

    _login.user=tools.setData('user',{

      ,wechatId:data.wechatId

    })

    if(!data.wechatId && !_login.user.nomenubindHint && _login.params.code){ID

      mui.confirm('','',['',''],function(e){

        if(e.index==0){

          _login.user=tools.setData('user',{

            nomenubindHint:true

          })

          mui.alert(',','')

          mui.later(()=>{

            location.href=route.index

          },2000)

        }else{


          userAPI.menuBind({

            code: _login.params.code,

             username,

             password

          },data=>{

            mui.alert(',2s','')

            mui.later(()=>{

              location.href=route.index

            },2000)

          })

        }

      })

    }else{

      location.href=route.index

    }


  })

})

weixin

mui('.oauth-area').on('tap','#menuAuth',function(){

    _login.user=tools.setData('user',{

      ,wechatId:data.wechatId

    })

    location.href=route.index

  })

})

extends ../../components/login/login.pug

block append CSS

  link(href="./login.css?v="+VERSION, rel="stylesheet")



block LOGIN

  img(src=PATCH_logo, alt="")

  p= LOGIN.title

block append JS

  script(src=WEIXIN)

  script(src="./login.js?v="+VERSION)

import tools from '../../common/tools'

import alarmAPI from '../../common/api/alarm'

import patrolAPI from '../../common/api/patrol'

import {route} from '../../config/config'

import { ok } from 'assert';

layui.use(['element','form','table','layer'], function(){

  var element = layui.element

    ,form=layui.form

    ,$=layui.jquery

    ,table = layui.table

    ,layer=layui.layer

  var _view={

    loadAlarm(){

      alarmAPI.alarmCount({},data=>{

        $.each(data,(index,value)=>{

          if(typeof value==='number'){

            $('#'+index).html(value)

          }

        })

      })

    },

  }


  _view.loadAlarm()

   _view.loadPatrol()

  ,

  mui('.mui-card').on('tap','.block',function(){

    let _hash=$(this).data('hash')

      ,_tab=$(this).data('tab')


      ,_toolType=$(this).data('toolType')

      ,_toolState=$(this).data('toolState')


      ,_other=''

    parent.layui.$('.nav-left .item').each((index,item)=>{

      let $item= parent.layui.$(item)

        ,_navHash=$item.data('hash')

      $item.removeClass('active')

      if(_navHash==_hash){

        $item.addClass('active')

      }

    })

    if(_toolType) _other+='&toolType='+_toolType

    if(_toolState) _other+='&toolState='+_toolState

    parent.location.href=route.index+'#'+_hash+'?tabId='+_tab+_other

  })

});

@import '../../common/base.less';


.mui-card-content-inner{

  padding: 2%;

  display: flex;

  flex-wrap: wrap;

  & .block{

    display: flex;

    width: 50%;

    padding: 1vh;

    height: 16vh;

    box-sizing: border-box;

    &>.item{

      background-color: #eee;

      width: 100%;

      position: relative;

      color: #666;

      display: flex;

      flex-direction: column;

      justify-content: center;

      &>label{

        font-size: 15px;

        display: block;

        padding-left: 3vw;

        line-height: 6.2vh;

        flex: 0 0;

        z-index: 10;

      }

      &>i{

        position: absolute;

        color: #dbdbdb;

        right: 8px;

        bottom: 4px;

      }

      &>number{

        font-size: 32px;

        padding-left: 6vw;

        flex: 1;

      }

    }

  }

}

extends ../../common/base.pug

block append CSS

  link(href="./view.css?v="+VERSION, rel="stylesheet")

block CONTENT

  .mui-content

    .mui-card

      .mui-card-header

      .mui-card-content

        .mui-card-content-inner

          -

          .block(data-hash='alarm',data-tab='alarm')

            .item

              number#alarmUndisposedCount.red

              i.iconfont.icon-alarm

          .block(data-hash='alarm',data-tab='prewarning')

            .item

              number#prewarningUndisposedCount.yellow

          .block(data-hash='alarm',data-tab='history',data-tool-type='alarm',data-tool-state='true')

            .item

              number#alarmProcessedCount.green

              i.iconfont.icon-gaojingyichuli

          .block(data-hash='alarm',data-tab='history',data-tool-type='prewarning',data-tool-state='true')

            .item

              number#prewarningProcessedCount.green

              i.iconfont.icon-yichuli

block append JS

import {route,menu} from '../config/config'

if(mui.os.wechat){

  tools.setData('env',{

    isWechat:true

  })

  location.href=tools.getMenuUri(menu.redirect_uri,menu.appid)

}else{

  tools.setData('env',{

    isWechat:false

  })

  location.href=route.delogin

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  gBkHYLY8jvYd   2023年12月06日   50   0   0 #includecii++
  gBkHYLY8jvYd   2023年11月19日   31   0   0 #includecic++
  gBkHYLY8jvYd   2023年12月09日   30   0   0 cii++数据
  lh6O4DgR0ZQ8   2023年11月19日   31   0   0 解包ci插槽
  gBkHYLY8jvYd   2023年12月06日   24   0   0 cii++依赖关系
  lh6O4DgR0ZQ8   2023年11月24日   18   0   0 cii++c++
  gBkHYLY8jvYd   2023年11月22日   24   0   0 ioscii++
  gBkHYLY8jvYd   2023年11月19日   27   0   0 #include数组ci
  gBkHYLY8jvYd   2023年11月19日   26   0   0 cifor循环字符串
  gBkHYLY8jvYd   2023年12月08日   21   0   0 #includecii++
  gBkHYLY8jvYd   2023年11月19日   29   0   0 #includeiosci
  gBkHYLY8jvYd   2023年12月11日   20   0   0 cic++最小值
  gBkHYLY8jvYd   2023年11月19日   30   0   0 测试点cic++
  gBkHYLY8jvYd   2023年11月22日   26   0   0 #includeiosci