'可用', 2 => '不可用', ); $front = array ( 1 => '可用', 2 => '不可用', ); $show_type = array ( 1 => '数据区', 2 => '状态区', 100 => '不显示', ); $type = array ( 1 => '否', 2 => '是', ); $status = array ( 1 => '显式', 2 => '隐式', ); $oper = array ( 'open' => '启动', 'close' => '关闭', 'other' => '普通指令', 'set' => '设备设置', 'device' => '设备状态码', //'none' => '非直接发送指令', //'camera' => '摄像头', ); $id = Dever::input('where_id'); $element = Dever::input('option_element_id'); $code = function() use ($id, $element) { $array = array(-1 => array('name' => '非互斥命令码')); $code = Dever::load('device/code-getAll', array('option_id' => $id, 'option_element_id' => $element)); if($code) { $array += $code; } return $array; }; $next_code = function() use ($id, $element) { $array = array(-1 => array('name' => '无下级命令码')); $code = Dever::load('device/code-getAll', array('option_id' => $id, 'option_element_id' => $element)); if($code) { $array += $code; } return $array; }; $proxy_code = function() use ($id, $element) { $array = array(-1 => array('name' => '无代理命令码')); $code = Dever::load('device/code-getAll', array('option_id' => $id, 'option_element_id' => $element)); if($code) { $array += $code; } return $array; }; $main_code = function() use ($id, $element) { $array = array(-1 => array('name' => '无主任务命令码')); $code = Dever::load('device/code-getAll', array('option_id' => $id, 'option_element_id' => $element)); if($code) { $array += $code; } return $array; }; return array ( # 表名 'name' => 'code', # 显示给用户看的名称 'lang' => '命令码设置', 'menu' => false, 'start' => array ( 'update' => 'device/code.save', ), 'end' => array ( 'insert' => 'device/code.save', ), # 数据结构 'struct' => array ( 'id' => array ( 'type' => 'int-11', 'name' => '命令码ID', 'default' => '', 'desc' => '', 'match' => 'is_numeric', 'search' => 'order', 'order' => 'desc', //'list' => true, ), 'name' => array ( 'type' => 'varchar-32', 'name' => '操作名称', 'default' => '', 'desc' => '请输入操作名称', 'match' => 'is_string', 'update' => 'text', 'search' => 'fulltext', 'list' => true, ), 'oper' => array ( 'type' => 'varchar-32', 'name' => '操作方式-前台根据这个来判断具体的命令码,请准确选择,如果选择非直接发送指令,那么下述发送指令不会立刻发送,需要等到条件满足时才会发送,比如旋转圈数', 'default' => 'other', 'desc' => '操作方式', 'match' => 'option', 'update' => 'radio', 'option' => $oper, 'search' => 'fulltext', 'list' => true, ), 'element_id' => array ( 'type' => 'int-11', 'name' => '所属元件', 'default' => Dever::input('option_element_id'), 'desc' => '请选择所属元件', 'match' => 'is_numeric', 'update' => 'hidden', ), 'type' => array ( 'type' => 'tinyint-1', 'name' => '是否数据指令-数据指令用于数据计算,可根据数据记录,进行公式或者其他方式计算', 'default' => '1', 'desc' => '请选择是否数据指令', 'match' => 'is_numeric', 'option' => $type, 'update' => 'radio', //'list' => true, # 开启显示控制,可以控制下边的表单 'show' => 'type', ), 'data' => array ( 'type' => 'varchar-500', 'name' => '数据指令名称-仅用于数据计算,根据以下填写的计算公式,计算出数据,本字段为该数据的名称,如水压,多个名称请用@隔开', 'default' => '', 'desc' => '请输入数据指令名称', 'match' => 'is_string', 'update' => 'textarea', //'search' => 'fulltext', //'list' => true, 'show' => array('type_2'), ), 'gs' => array ( 'type' => 'varchar-200', 'name' => '数据计算公式-根据该公式计算出当前回传回得数据,{b}为本次回传数据,多个请用@隔开', 'default' => '', 'desc' => '请输入数据计算公式', 'match' => 'is_string', 'update' => 'textarea', //'search' => 'fulltext', //'list' => true, 'show' => array('type_2'), ), 'dw' => array ( 'type' => 'varchar-200', 'name' => '数据单位-显示出来的数据单位,多个请用@隔开', 'default' => '', 'desc' => '显示出来的数据单位', 'match' => 'option', 'update' => 'textarea', //'search' => 'fulltext', //'list' => true, 'show' => array('type_2'), ), //100102(.*)@200203(.*)||00 10@01 20||阀门1状态(1开0关) 阀门1通电时间(10ms)@阀门2状态(1开0关) 阀门2通电时间(10ms)||01=开&00=关@time 'send' => array ( 'type' => 'text-255', 'name' => '发送指令-多个指令用换行隔开,如果有后续指令[如at指令],请用|AT|隔开,会依次向服务器发送这些指令,如果选择设备设置,此处的变量请用(.*)代替,如10 01 03(.*)03 03,带上||则为后续设置,此时多个指令用@隔开,注意与换行的区别', 'default' => '', 'desc' => '请输入发送指令', 'match' => 'option', 'update' => 'textarea', 'list_name' => '指令', 'list' => '"发送:{send}
接收:{receive}" . ({type} != 1 ? "
数据指令:{data}" : "")', //'list' => 'table', 'modal' => '查看详情', ), 'send_name' => array ( 'type' => 'text-255', 'name' => '发送指令对应的名称-如果定义了这个,则会取代上述"操作名称",多个指令名称用换行隔开,除非直接发送指令外,其他指令均需和上边的发送指令一一对应', 'default' => '', 'desc' => '请输入发送指令名称', 'match' => 'option', 'update' => 'textarea', ), 'receive' => array ( 'type' => 'text-255', 'name' => '固定接收指令-多个指令用换行隔开,注意,本指令可用于数据计算,必须写入固定的接收指令部分,变化部分请用(.*)代替,如0103020000b844,可将0000b844替换为(.*),加|为配置信息,第一为取多少个数据(4个字节为一个数据)', 'default' => '', 'desc' => '请输入接收指令', 'match' => 'option', 'update' => 'textarea', //'list' => true, ), 'reorder' => array ( 'type' => 'int-11', 'name' => '排序-数值越大越靠前', 'default' => '1', 'desc' => '请输入排序', 'match' => 'option', 'update' => 'text', 'search' => 'order', 'list' => true, 'order' => 'desc', 'edit' => true, ), 'time' => array ( 'type' => 'int-11', 'name' => '发送时间间隔-秒级别,默认为0不周期性发送,大于0则按照本时间间隔进行周期性发送指令,需要计划任务支持', 'default' => '0', 'match' => 'is_numeric', 'desc' => '请输入时间间隔', 'update' => 'text', 'list' => true, 'edit' => true, ), 'code_id' => array ( 'type' => 'int-11', 'name' => '互斥命令码-选择互斥的命令码,同时只能存在一个,如启动和关闭,启动命令码执行之后,关闭才能执行', 'default' => '-1', 'desc' => '互斥命令码', 'match' => 'is_numeric', 'option' => $code, 'update' => 'select', 'list' => true, //'edit' => 'yes', ), 'next_code_id' => array ( 'type' => 'int-11', 'name' => '下级命令码-选择下级命令码,则本次命令码在执行成功之后,会发送后续的下级命令码。适用于在关闭时,同时关闭多项命令码的操作。', 'default' => '-1', 'desc' => '下级命令码', 'match' => 'is_numeric', 'option' => $next_code, //'update' => 'select', //'list' => true, //'edit' => 'yes', ), 'proxy_code_id' => array ( 'type' => 'int-11', 'name' => '代理命令码-选择代理命令码,在执行该命令码时,同步执行代理命令码,注意和下级命令码不同,代理命令码不依托于执行状态。', 'default' => '-1', 'desc' => '代理命令码', 'match' => 'is_numeric', 'option' => $proxy_code, //'update' => 'select', //'list' => true, //'edit' => 'yes', ), 'second' => array ( 'type' => 'varchar-30', 'name' => '代理或下级命令码执行延时-单位为秒,添加后执行该命令码将会延时', 'default' => '0.5', 'desc' => '代理或下级命令码执行延时', 'match' => 'option', //'update' => 'text', ), 'main_code_id' => array ( 'type' => 'int-11', 'name' => '主任务命令码-当当前命令码执行成功后无法区分状态时(比如很多命令码返回的命令码都是一个),可以启用主任务命令码来区分是哪个主进程', 'default' => '-1', 'desc' => '主任务命令码', 'match' => 'is_numeric', 'option' => $main_code, //'update' => 'select', //'list' => true, //'edit' => 'yes', ), 'status' => array ( 'type' => 'tinyint-1', 'name' => '命令码类型-显式命令码会在点击按钮后立刻发送,隐式命令码则不会立刻发送执行,一般是在下级命令码中设置为隐式命令码', 'default' => '1', 'desc' => '请选择状态', 'match' => 'is_numeric', 'option' => $status, //'update' => 'radio', 'list' => true, 'edit' => true, ), 'show_type' => array ( 'type' => 'int-11', 'name' => '显示位置', 'default' => '1', 'desc' => '请选择显示位置', 'match' => 'is_numeric', 'option' => $show_type, 'update' => 'radio', //'list' => true, ), 'state' => array ( 'type' => 'tinyint-1', 'name' => '状态', 'default' => '1', 'desc' => '请选择状态', 'match' => 'is_numeric', 'option' => $option, 'update' => 'radio', 'list' => true, ), 'cdate' => array ( 'type' => 'int-11', 'name' => '录入时间', 'match' => array('is_numeric', time()), 'desc' => '', # 只有insert时才生效 'insert' => true, //'list' => 'date("Y-m-d H:i:s", {cdate})', ), ), 'alter' => array ( 1 => array ( array('update', 'data', 'data', 'varchar-255 数据指令名称'),//更新字段 ), 2 => array ( array('update', 'data', 'data', 'varchar-500 数据指令名称'),//更新字段 ), 3 => array ( array('update', 'gs', 'gs', 'varchar-500 公式'),//更新字段 ), 'version' => 3, ), # request 请求接口定义 'request' => array ( 'info' => array ( # 匹配的正则或函数 选填项 'where' => array ( 'state' => 1, 'id' => 'yes', ), 'type' => 'one', ), # 取所有菜单 'all' => array ( 'where' => array ( 'state' => 1, 'element_id' => 'yes', ), 'type' => 'all', 'order' => array('reorder` desc,`id', 'desc'), 'col' => '*|id', ), 'getAll' => array ( 'option' => array ( //'state' => 1, 'id' => array('yes', '!='), 'element_id' => 'yes', ), 'type' => 'all', 'order' => array('reorder` desc,`id', 'desc'), 'col' => '*|id', ), 'getIds' => array ( 'where' => array ( 'state' => 1, 'type' => 2, 'id' => array('yes', 'in'), ), 'type' => 'all', 'order' => array('reorder` desc,`id', 'desc'), 'col' => '*|id', ), 'getIdsData' => array ( 'where' => array ( 'state' => 1, 'type' => 2, 'id' => array('yes', 'in'), ), 'type' => 'all', 'order' => array('reorder` desc,`id', 'desc'), 'col' => 'id,data as name|id', ), # 根据id获取 'getData' => array ( 'where' => array ( //'state' => 1, //'type' => 2, 'element_id' => 'yes', ), 'type' => 'all', 'col' => '*', ), # 根据id获取 'getDataByIds' => array ( 'where' => array ( //'state' => 1, //'type' => 2, 'id' => array('yes', 'in'), ), 'type' => 'all', 'col' => '*', ), ), );