rabin 4 years ago
parent
commit
bab0fbbc69

+ 20 - 13
admin/page/device.py

@@ -17,14 +17,17 @@ class gateway_path(Load):
 			,height = '500'
 			#,add = False
 			#,edit = False
-			,search = (('label-1','cdate-time-start','cdate-time-end','name-input-mlike'), (u'日期范围',u'开始时间',u'截止时间',u'网关名称'))
-			,thead = (u'网关名称', u'网关ID', u'所属产品', u'关联服务', u'网关连接状态', u'更新时间')
-			,tbody = ('name', 'hardware_id', 'product', 'server', 'status', 'cdate')
+			,search = (('label-1','cdate-time-start','cdate-time-end','farm_id-select-','name-input-mlike'), (u'日期范围',u'开始时间',u'截止时间',u'选择农场',u'网关名称'))
+			,thead = (u'所属农场',u'网关名称', u'网关ID', u'所属产品', u'关联服务', u'网关连接状态', u'更新时间')
+			,tbody = ('farm','name', 'hardware_id', 'product', 'server', 'status', 'cdate')
 			,state = False
 		)
+		self.data['common']['search_farm_id-select-'] = Demeter.config['setting']['farmList']
 		self.list('device_gateway')
 		if self.data['list']:
 			for key, value in enumerate(self.data['list']):
+				farm = self.service('common').one('farm', id=value['farm_id'])
+				self.data['list'][key]['farm'] = farm['name']
 				device = self.service('common').list('device_info', search={'hardware_id':value['hardware_id']})
 				self.data['list'][key]['status'] = '断开'
 				self.data['list'][key]['product'] = '无'
@@ -59,10 +62,11 @@ class gateway_update_path(Load):
 			hardware_id = 'hardware_id-input-required'
 		self.set(
 			path = 'gateway'
-			,label = (u'网关名称', u'网关ID', u'所属产品', u'关联服务', u'设备分布图纸')
-			,update = ('name-input-required',hardware_id,'product_id-select-','server_id-select-', 'pic-pic-')
+			,label = (u'所属农场', u'网关名称', u'网关ID', u'所属产品', u'关联服务', u'设备分布图纸')
+			,update = ('farm_id-select-required', 'name-input-required',hardware_id,'product_id-select-','server_id-select-', 'pic-pic-')
 			,update_product_id = self.service('common').list('setting_product')
 			,update_server_id = self.service('common').list('setting_server')
+			,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 		)
 		self.one('device_gateway')
 		self.show('update')
@@ -95,11 +99,12 @@ class info_path(Load):
 			,button = ({'name':'添加摄像机','link':'/device/camera_update'},{'name':'添加摄像头','link':'/device/camera_pic_update'})
 			,add = False
 			#,edit = False
-			,search = (('hardware_type-select-','type_id-select-','name-input-mlike', 'status-hidden-'), (u'硬件类型',u'设备类型',u'设备名称', '设备状态'))
-			,thead = (u'设备名称', u'设备id', u'当前值', u'设备类型', u'网关',u'硬件类型')
-			,tbody = ('name', 'hardware_id', 'value', 'type', 'gateway', 'hardware_type')
+			,search = (('farm_id-select--gateway_id', 'hardware_type-select-','type_id-select-','name-input-mlike', 'status-hidden-'), (u'选择农场',u'硬件类型',u'设备类型',u'设备名称', '设备状态'))
+			,thead = (u'所属农场',u'设备名称', u'设备id', u'当前值', u'设备类型', u'网关',u'硬件类型')
+			,tbody = ('farm','name', 'hardware_id', 'value', 'type', 'gateway', 'hardware_type')
 			,state = True
 		)
+		self.data['common']['search_farm_id-select--gateway_id'] = Demeter.config['setting']['farmList']
 		self.data['common']['search_type_id-select-'] = self.service('common').list('setting_device_type')
 		self.data['common']['search_gateway_id-select---farm_id'] = self.service('common').list('device_gateway')
 		self.data['common']['search_hardware_type-select-'] = self.service('common').list('hardware_type')
@@ -193,7 +198,7 @@ class info_update_path(Load):
 				#,update = ('name-input-required','hardware_id-show-','farm_id-select-required','gateway_id-select-required','hardware_type-select-required','value-text-required')
 				,label = (u'摄像机名称', u'摄像机id', u'所属农场', u'选择网关', u'摄像机地址', u'排序')
 				,update = ('name-input-required','hardware_id-show-','farm_id-select-required-gateway_id','gateway_id-select-required--farm_id','value-text-required','inorder-input-')
-				,update_farm_id = Demeter.config['setting']['farmList']
+				,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 				,update_gateway_id = self.service('common').list('device_gateway')
 				#,update_hardware_type = self.service('common').list('hardware_type')
 			)
@@ -202,7 +207,7 @@ class info_update_path(Load):
 				path = 'camera_pic'
 				,label = (u'摄像头名称', u'摄像头id', u'所属农场', u'选择网关', u'摄像头地址', u'排序')
 				,update = ('name-input-required','hardware_id-show-','farm_id-select-required-gateway_id','gateway_id-select-required--farm_id','value-text-required','inorder-input-')
-				,update_farm_id = Demeter.config['setting']['farmList']
+				,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 				,update_gateway_id = self.service('common').list('device_gateway')
 			)
 		elif self.data['info']['hardware_type'] in (2,4):
@@ -251,7 +256,7 @@ class camera_update_path(Load):
 			path = 'camera'
 			,label = (u'摄像机名称', u'摄像机id', u'所属农场', u'选择网关', u'摄像机地址',u'排序')
 			,update = ('name-input-required','hardware_id-input-required','farm_id-select-required-gateway_id','gateway_id-select-required--farm_id','value-text-required','inorder-text-')
-			,update_farm_id = Demeter.config['setting']['farmList']
+			,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 			,update_gateway_id = self.service('common').list('device_gateway')
 		)
 		self.one('device_info')
@@ -281,7 +286,7 @@ class camera_pic_update_path(Load):
 			path = 'camera_pic'
 			,label = (u'摄像头名称', u'摄像头id', u'所属农场', u'选择网关', u'摄像头地址',u'排序')
 			,update = ('name-input-required','hardware_id-input-required','farm_id-select-required-gateway_id','gateway_id-select-required--farm_id','value-text-required','inorder-text-')
-			,update_farm_id = Demeter.config['setting']['farmList']
+			,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 			,update_gateway_id = self.service('common').list('device_gateway')
 		)
 		self.one('device_info')
@@ -383,7 +388,7 @@ class printer_update_path(Load):
 			path = 'printer'
 			,label = (u'所属农场', u'打印机名称', u'打印机地址')
 			,update = ('farm_id-select-required', 'name-input-required','host-input-required')
-			,update_farm_id = Demeter.config['setting']['farmList']
+			,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 		)
 		self.one('device_printer')
 		self.show('update')
@@ -429,10 +434,12 @@ class notice_type_update_path(Load):
 	@Web.setting
 	def post(self):
 		self.update('notice_type')
+		Demeter.service('core', 'eros').rsync('notice_type')
 	@Web.auth
 	@Web.setting
 	def delete(self):
 		self.drop('notice_type')
+		Demeter.service('core', 'eros').rsync('notice_type')
 
 class log_path(Load):
 	@Web.auth

+ 14 - 11
admin/page/farm.py

@@ -21,8 +21,8 @@ class farm_path(Load):
 			,height = '600' # 新增页面的高度
 			,edit = False
 			,search = (('label-1','cdate-time-start','cdate-time-end','name-input-mlike'), (u'日期范围',u'开始时间',u'截止时间',u'农场名称')) #搜索
-			,thead = (u'ID', u'农场名称', u'功能列表') #表头
-			,tbody = ('id','name', 'func') #表内容
+			,thead = (u'ID', u'农场名称', u'状态', u'功能列表') #表头
+			,tbody = ('id','name', 'status', 'func') #表内容
 			,state = False #启用回收站
 		)
 		menu = (
@@ -36,18 +36,21 @@ class farm_path(Load):
 			,{'name':'网关管理', 'url':'/device/gateway'}
 			,{'name':'设备管理', 'url':'/device/info'}
 
-			,{'name':'打包下载', 'url':'/package/download'}
-			,{'name':'本地控制', 'url':'/package/download'}
+			,{'name':'生成本地控制器', 'url':'/package/download'}
 			
 			#,{'name':'打印机管理', 'url':'/device/printer'}
 			#,{'name':'消息提醒', 'url':'/msg/msg'}
 			#,{'name':'网关日志', 'url':'/device/log'}
 			)
+		control = {'name':'本地控制', 'url':'/package/download'}
 		self.list('farm')
 		if self.data['list']:
 			for key, value in enumerate(self.data['list']):
 				id = str(value['id'])
 				param = '?farm=' + id + '&search_farm_id-select-=' + id
+				self.data['list'][key]['status'] = '云端'
+				if value['eros_status'] == 1:
+					self.data['list'][key]['status'] = '本地:' + value['eros_server']
 				self.data['list'][key]['func'] = ''
 				for i in menu:
 					self.data['list'][key]['func'] = self.data['list'][key]['func'] + '<a href="'+i['url']+''+param+'">'+i['name']+'</a>&nbsp;&nbsp;&nbsp;&nbsp;'
@@ -98,20 +101,20 @@ class info_path(Load):
 	@Web.auth
 	@Web.setting
 	def get(self):
-		id = str(farm['id'])
+		id = self.input('farm')
 		param = '?farm=' + id
 		self.set(
 			path = '/farm/info' + param
-			,label = (u'农场名称',u'农场图片',u'农场位置',u'联系电话',u'联系地址',u'农场主姓名',u'农场主照片',u'欢迎语',u'农场介绍',u'本地控制器')
-			,update = ('name-input-required','pic-pic-required-1000px*300~450px','location-input-required','tel-input-required','address-input-required','master_name-input-required','master_pic-pic-required-300px*450px','welcome-input-',u'info-text-required-请输入农场介绍','eros_status-select-required')
+			,label = (u'农场名称',u'农场图片',u'农场位置',u'联系电话',u'联系地址',u'农场主姓名',u'农场主照片',u'欢迎语',u'农场介绍')
+			,update = ('name-input-required','pic-pic-required-1000px*300~450px','location-input-required','tel-input-required','address-input-required','master_name-input-required','master_pic-pic-required-300px*450px','welcome-input-',u'info-text-required-请输入农场介绍')
 			,update_eros_status = Demeter.service('core', 'setting').eros_status()
 		)
-		self.one('farm', id=farm['id'])
+		self.one('farm', id=id)
 		self.show('set')
 	@Web.auth
 	@Web.setting
 	def post(self):
-		self.update('farm', id=farm['id'])
+		self.update('farm')
 
 class product_path(Load):
 	@Web.auth
@@ -147,7 +150,7 @@ class product_update_path(Load):
 			path = '/farm/product'
 			,label = (u'所属农场',u'产品名称', u'种植面积', u'平均亩产', u'特点', u'使用须知', u'图片')
 			,update = ('farm_id-select-required', 'name-input-required','area-input-required','yields-input-required','charact-input-required','notice-input-required','pic-pic-required')
-			,update_farm_id = Demeter.config['setting']['farmList']
+			,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 		)
 		self.one('farm_product')
 		self.show('update')
@@ -194,7 +197,7 @@ class user_update_path(Load):
 			path = '/farm/user'
 			,label = (u'所属农场',u'账号姓名',u'手机号',u'安全码')
 			,update = ('farm_id-select-required','username-input-required','mobile-input-phone','password-password-')
-			,update_farm_id = Demeter.config['setting']['farmList']
+			,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 		)
 		self.one('farm_user')
 		self.show('update')

+ 2 - 0
admin/page/hardware.py

@@ -98,10 +98,12 @@ class type_update_path(Load):
 	@Web.setting
 	def post(self):
 		self.update('hardware_type')
+		Demeter.service('core', 'eros').rsync('hardware_type')
 	@Web.auth
 	@Web.setting
 	def delete(self):
 		self.drop('hardware_type')
+		Demeter.service('core', 'eros').rsync('hardware_type')
 
 class restart_cron_path(Load):
 	@Web.auth

+ 11 - 5
admin/page/msg.py

@@ -20,15 +20,18 @@ class msg_path(Load):
 			,add = False
 			,edit = False
 			,full = True
-			,search = (('type_id-select-','content-input-mlike'), (u'硬件类型', u'消息内容'))
-			,thead = ( u'消息类型', u'消息内容', u'是否已读',u'发送时间')
-			,tbody = ('type', 'content', 'status', 'cdate')
+			,search = (('farm_id-select-','type_id-select-','content-input-mlike'), (u'选择农场',u'硬件类型', u'消息内容'))
+			,thead = (u'所属农场', u'消息类型', u'消息内容', u'是否已读',u'发送时间')
+			,tbody = ('farm','type', 'content', 'status', 'cdate')
 			,state = False
 		)
+		self.data['common']['search_farm_id-select-'] = Demeter.config['setting']['farmList']
 		self.data['common']['search_type_id-select-'] = self.service('common').list('msg_type')
 		self.list('msg')
 		if self.data['list']:
 			for key, value in enumerate(self.data['list']):
+				farm = self.service('common').one('farm', id=value['farm_id'])
+				self.data['list'][key]['farm'] = farm['name']
 				htype = self.service('common').one('msg_type', id=value['type_id'])
 				self.data['list'][key]['type'] = htype['name']
 
@@ -50,9 +53,10 @@ class msg_update_path(Load):
 	def get(self):
 		self.set(
 			path = '/msg/msg'
-			,label = (u'发送用户',u'消息类型',u'消息内容',u'消息链接',u'推送')
-			,update = ('uid-checkbox--farm_id','msg_type-select-required','content-editor-required','link-input-','push-checkbox-')
+			,label = (u'所属农场',u'发送用户',u'消息类型',u'消息内容',u'消息链接',u'推送')
+			,update = ('farm_id-select--uid','uid-checkbox--farm_id','msg_type-select-required','content-editor-required','link-input-','push-checkbox-')
 			,update_msg_type = self.service('common').list('msg_type')
+			,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 			,update_uid = self.service('common').list('farm_user')
 			,update_push = push
 		)
@@ -103,7 +107,9 @@ class type_update_path(Load):
 	@Web.setting
 	def post(self):
 		self.update('msg_type')
+		Demeter.service('core', 'eros').rsync('msg_type')
 	@Web.auth
 	@Web.setting
 	def delete(self):
 		self.drop('msg_type')
+		Demeter.service('core', 'eros').rsync('msg_type')

+ 9 - 5
admin/page/origin.py

@@ -17,15 +17,18 @@ class batch_path(Load):
 			,height = '600'
 			,add = False
 			,edit = False
-			,search = (('land_id-select-',), (u'地块',))
-			,thead = (u'产品名称', u'种植时间', u'采收时间', u'地块')
-			,tbody = ('name', 'zzdate', 'csdate', 'land')
+			,search = (('farm_id-select-','land_id-select-'), (u'选择农场',u'地块'))
+			,thead = (u'所属农场', u'产品名称', u'种植时间', u'采收时间', u'地块')
+			,tbody = ('farm','name', 'zzdate', 'csdate', 'land')
 			,state = False
 		)
+		self.data['common']['search_farm_id-select-'] = Demeter.config['setting']['farmList']
 		self.data['common']['search_land_id-select-'] = self.service('common').list('farm_work_land')
 		self.list('origin_batch')
 		if self.data['list']:
 			for key, value in enumerate(self.data['list']):
+				farm = self.service('common').one('farm', id=value['farm_id'])
+				self.data['list'][key]['farm'] = farm['name']
 				land = self.service('common').one('farm_work_land', id=value['land_id'])
 				self.data['list'][key]['land'] = land['name']
 		self.show('list')
@@ -36,10 +39,11 @@ class batch_update_path(Load):
 	def get(self):
 		self.set(
 			path = '/origin/batch'
-			,label = (u'产品名称', u'种植时间',u'采收时间',u'设备网关',u'地块',u'图像记录')
-			,update = ('name-input-required', 'zzdate-date-required', 'csdate-date-required','gateway_id-select-required','land_id-select-required','pic-pic-required')
+			,label = (u'所属农场',u'产品名称', u'种植时间',u'采收时间',u'设备网关',u'地块',u'图像记录')
+			,update = ('farm_id-select-required','name-input-required', 'zzdate-date-required', 'csdate-date-required','gateway_id-select-required','land_id-select-required','pic-pic-required')
 			,update_gateway_id = self.service('common').list('device_gateway')
 			,update_land_id = self.service('common').list('farm_work_land')
+			,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 		)
 		self.one('origin_batch')
 		self.show('update')

+ 7 - 1
admin/page/setting.py

@@ -81,10 +81,12 @@ class product_update_path(Load):
 	@Web.setting
 	def post(self):
 		self.update('setting_product')
+		Demeter.service('core', 'eros').rsync('setting_product')
 	@Web.auth
 	@Web.setting
 	def delete(self):
 		self.drop('setting_product')
+		Demeter.service('core', 'eros').rsync('setting_product')
 
 class device_type_path(Load):
 	@Web.auth
@@ -121,10 +123,12 @@ class device_type_update_path(Load):
 	@Web.setting
 	def post(self):
 		self.update('setting_device_type')
+		Demeter.service('core', 'eros').rsync('setting_device_type')
 	@Web.auth
 	@Web.setting
 	def delete(self):
 		self.drop('setting_device_type')
+		Demeter.service('core', 'eros').rsync('setting_device_type')
 
 class modbus_code_path(Load):
 	@Web.auth
@@ -168,7 +172,9 @@ class modbus_code_update_path(Load):
 	@Web.setting
 	def post(self):
 		self.update('setting_modbus_code')
+		Demeter.service('core', 'eros').rsync('setting_modbus_code')
 	@Web.auth
 	@Web.setting
 	def delete(self):
-		self.drop('setting_modbus_code')
+		self.drop('setting_modbus_code')
+		Demeter.service('core', 'eros').rsync('setting_modbus_code')

+ 41 - 20
admin/page/work.py

@@ -17,17 +17,21 @@ class work_path(Load):
 			,height = '600'
 			,add = False
 			,edit = False
-			,search = (('label-1','workdate-time-start','workdate-time-end','category_id-select-'), (u'日期范围',u'开始时间',u'截止时间',u'劳作分类'))
-			,thead = (u'劳作时间', u'劳作分类', u'劳作方式', u'劳作地块', u'劳作用量', u'更新时间')
-			,tbody = ('workdate', 'category', 'method', 'land', 'amount', 'cdate')
+			,search = (('label-1','workdate-time-start','workdate-time-end','farm_id-select-','category_id-select-'), (u'日期范围',u'开始时间',u'截止时间',u'选择农场',u'劳作分类'))
+			,thead = (u'所属农场', u'劳作时间', u'劳作分类', u'劳作方式', u'劳作地块', u'劳作用量', u'更新时间')
+			,tbody = ('farm','workdate', 'category', 'method', 'land', 'amount', 'cdate')
 			,state = False
 		)
+		self.data['common']['search_farm_id-select-'] = Demeter.config['setting']['farmList']
 		self.list('device_gateway')
 
 		self.data['common']['search_category_id-select-'] = self.service('common').list('farm_work_category')
 		self.list('farm_work')
 		if self.data['list']:
 			for key, value in enumerate(self.data['list']):
+				farm = self.service('common').one('farm', id=value['farm_id'])
+				#self.data['list'][key]['workdate'] = Demeter.date(value['workdate'])
+				self.data['list'][key]['farm'] = farm['name']
 				category = self.service('common').one('farm_work_category', id=value['category_id'])
 				self.data['list'][key]['category'] = category['name']
 				method = self.service('common').one('farm_work_method', id=value['method_id'])
@@ -42,11 +46,12 @@ class work_update_path(Load):
 	def get(self):
 		self.set(
 			path = '/work/work'
-			,label = (u'劳作时间',u'劳作类别',u'劳作方式',u'劳作用量',u'劳作地块',u'图像记录')
-			,update = ('workdate-date-required','category_id-select-required-method_id','method_id-select-required--category_id','amount-input-required','land_id-select-required','pic-pic-required')
+			,label = (u'所属农场',u'劳作时间',u'劳作类别',u'劳作方式',u'劳作用量',u'劳作地块',u'图像记录')
+			,update = ('farm_id-select-required', 'workdate-date-required','category_id-select-required-method_id','method_id-select-required--category_id','amount-input-required','land_id-select-required','pic-pic-required')
 			,update_category_id = self.service('common').list('farm_work_category')
 			,update_method_id = self.service('common').list('farm_work_method')
 			,update_land_id = self.service('common').list('farm_work_land')
+			,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 		)
 		self.one('farm_work')
 		self.show('update')
@@ -70,15 +75,18 @@ class method_path(Load):
 			,height = '300'
 			,add = False
 			,edit = False
-			,search = (('label-1','cdate-time-start','cdate-time-end','category_id-select-','name-input-mlike'), (u'日期范围',u'开始时间',u'截止时间',u'劳作分类',u'劳作内容'))
-			,thead = (u'劳作内容', u'劳作分类', u'更新时间')
-			,tbody = ('name', 'category', 'cdate')
+			,search = (('label-1','cdate-time-start','cdate-time-end','farm_id-select-','category_id-select-','name-input-mlike'), (u'日期范围',u'开始时间',u'截止时间',u'选择农场',u'劳作分类',u'劳作内容'))
+			,thead = (u'所属农场',u'劳作内容', u'劳作分类', u'更新时间')
+			,tbody = ('farm','name', 'category', 'cdate')
 			,state = False
 		)
+		self.data['common']['search_farm_id-select-'] = Demeter.config['setting']['farmList']
 		self.data['common']['search_category_id-select-'] = self.service('common').list('farm_work_category')
 		self.list('farm_work_method')
 		if self.data['list']:
 			for key, value in enumerate(self.data['list']):
+				farm = self.service('common').one('farm', id=value['farm_id'])
+				self.data['list'][key]['farm'] = farm['name']
 				category = self.service('common').one('farm_work_category', id=value['category_id'])
 				self.data['list'][key]['category'] = category['name']
 		self.show('list')
@@ -89,9 +97,10 @@ class method_update_path(Load):
 	def get(self):
 		self.set(
 			path = '/work/method'
-			,label = (u'劳作内容',u'劳作分类')
-			,update = ('name-input-required','category_id-select-required')
+			,label = (u'所属农场', u'劳作内容',u'劳作分类')
+			,update = ('farm_id-select-required', 'name-input-required','category_id-select-required')
 			,update_category_id = self.service('common').list('farm_work_category')
+			,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 		)
 		self.one('farm_work_method')
 		self.show('update')
@@ -115,12 +124,17 @@ class category_path(Load):
 			,height = '300'
 			,add = False
 			,edit = False
-			,search = (('label-1','cdate-time-start','cdate-time-end','name-input-mlike'), (u'日期范围',u'开始时间',u'截止时间',u'选择农场',u'分类名称'))
-			,thead = (u'分类名称', u'更新时间')
-			,tbody = ('name', 'cdate')
+			,search = (('label-1','cdate-time-start','cdate-time-end','farm_id-select-','name-input-mlike'), (u'日期范围',u'开始时间',u'截止时间',u'选择农场',u'分类名称'))
+			,thead = (u'所属农场',u'分类名称', u'更新时间')
+			,tbody = ('farm', 'name', 'cdate')
 			,state = False
 		)
+		self.data['common']['search_farm_id-select-'] = Demeter.config['setting']['farmList']
 		self.list('farm_work_category')
+		if self.data['list']:
+			for key, value in enumerate(self.data['list']):
+				farm = self.service('common').one('farm', id=value['farm_id'])
+				self.data['list'][key]['farm'] = farm['name']
 		self.show('list')
 
 class category_update_path(Load):
@@ -129,8 +143,9 @@ class category_update_path(Load):
 	def get(self):
 		self.set(
 			path = '/work/category'
-			,label = (u'分类名称')
-			,update = ('name-input-required')
+			,label = (u'所属农场', u'分类名称')
+			,update = ('farm_id-select-required', 'name-input-required')
+			,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 		)
 		self.one('farm_work_category')
 		self.show('update')
@@ -155,12 +170,17 @@ class land_path(Load):
 			,height = '300'
 			,add = False
 			,edit = False
-			,search = (('label-1','cdate-time-start','cdate-time-end','name-input-mlike'), (u'日期范围',u'开始时间',u'截止时间',u'地块名称'))
-			,thead = (u'地块名称', u'更新时间')
-			,tbody = ('name', 'cdate')
+			,search = (('label-1','cdate-time-start','cdate-time-end','farm_id-select-','name-input-mlike'), (u'日期范围',u'开始时间',u'截止时间',u'选择农场',u'地块名称'))
+			,thead = (u'所属农场',u'地块名称', u'更新时间')
+			,tbody = ('farm', 'name', 'cdate')
 			,state = False
 		)
+		self.data['common']['search_farm_id-select-'] = Demeter.config['setting']['farmList']
 		self.list('farm_work_land')
+		if self.data['list']:
+			for key, value in enumerate(self.data['list']):
+				farm = self.service('common').one('farm', id=value['farm_id'])
+				self.data['list'][key]['farm'] = farm['name']
 		self.show('list')
 
 class land_update_path(Load):
@@ -169,8 +189,9 @@ class land_update_path(Load):
 	def get(self):
 		self.set(
 			path = '/work/land'
-			,label = (u'地块名称',)
-			,update = ('name-input-required',)
+			,label = (u'所属农场', u'地块名称')
+			,update = ('farm_id-select-required','name-input-required')
+			,update_farm_id = self.service('common').list('farm', search={'eros_status':2})
 		)
 		self.one('farm_work_land')
 		self.show('update')

+ 1 - 1
conf/dev.conf

@@ -65,7 +65,7 @@ process				= 0
 ;定义后台父级菜单
 menu_parent			= 农场管理:&#xe62e;,设备管理:&#xe62c;,配置管理:&#xe614;,网站管理:&#xe64a;
 ;定义后台子级菜单
-menu_child			= 农场管理:/farm/farm,用户管理:/farm/user,产品管理:/farm/product,地块管理:/work/land,农事管理:/work/work,溯源批次:/origin/batch,消息提醒:/msg/msg;网关列表:/device/gateway,设备列表:/device/info;产品配置:/setting/product,服务配置:/setting/server,设备类型:/setting/device_type,硬件类型:/hardware/type,MODBUS命令码:/setting/modbus_code;网站资料设置:/web/set,帮助分类:/web/help_category,发布帮助内容:/web/help,文章分类:/web/category,发布内容文章:/web/article,菜单管理:/web/menu
+menu_child			= 农场管理:/farm/farm,用户管理:/farm/user,产品管理:/farm/product,地块管理:/work/land,农事管理:/work/work,溯源批次:/origin/batch,消息提醒:/msg/msg;网关列表:/device/gateway,设备列表:/device/info;产品配置:/setting/product,服务配置:/setting/server,设备类型:/setting/device_type,硬件类型:/hardware/type,MODBUS命令码:/setting/modbus_code,错误码配置:/device/notice_type,消息类型设置:/msg/type;网站资料设置:/web/set,帮助分类:/web/help_category,发布帮助内容:/web/help,文章分类:/web/category,发布内容文章:/web/article,菜单管理:/web/menu
 
 ;cookie
 cookie_secret       = 61oETzKXQAGaYekL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=

+ 1 - 0
front/api/__init__.py

@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-

+ 15 - 0
front/api/__load__.py

@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+"""
+    demeter load
+    author:rabin
+"""
+from demeter.web import *
+
+class Load(Base):
+	KEYS = ('farm', )
+
+	def setting(self):
+		self.user()
+
+	def user(self):
+		pass

+ 56 - 0
front/api/interface.py

@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+"""
+    demeter web page
+    name:main.py
+    author:rabin
+"""
+from .__load__ import *
+
+class Core(object):
+	@staticmethod
+	def check(self):
+		pass
+
+
+# eros注册
+class init_path(Load):
+	@Web.setting
+	def post(self):
+		Core.check(self)
+		id = self.input('id')
+		ip = self.input('ip')
+		update = {}
+		update['eros_status'] = 1
+		update['eros_server'] = ip
+		self.service('common').update('farm', id, update)
+		self.out('ok')
+
+# 同步数据
+class sync_path(Load):
+	@Web.setting
+	def post(self):
+		Core.check(self)
+		data = self.input('data')
+		data = json.loads(data)
+		table = self.input('table')
+
+		if data:
+			for v in data:
+				update = {}
+				info = self.service('common').one(table, id=v['id'], farm_id=v['farm_id'])
+				if info:
+					id = v['id']
+					del v['cdate']
+					del v['id']
+					for i in v:
+						if v[i]:
+							update[i] = v[i]
+					self.service('common').update(table, id, update, cdate=False)
+				else:
+					del v['cdate']
+					for i in v:
+						if v[i]:
+							update[i] = v[i]
+					self.service('common').update(table, False, update)
+		
+		self.out('ok')

+ 2 - 1
front/main.py

@@ -1,4 +1,5 @@
 # -*- coding: utf-8 -*-
 from demeter.web import *
 import front.page
-Web.start(application=[front.page,])
+import front.api
+Web.start(application=[front.page,front.api])

+ 2 - 2
install.py

@@ -138,6 +138,6 @@ def device():
 			model.insert()
 
 manage()
-farm()
-device()
+#farm()
+#device()
 Demeter.echo('install success!')

+ 3 - 1
model/farm.py

@@ -23,4 +23,6 @@ class Farm(Model):
 	state = Fields(type='boolean', default='True', comment='数据存在状态')
 	cdate = Fields(type='int', default='time', comment='创建时间')
 	eros_status = Fields(type='int', default='2', comment='本地控制器是否开启')
-	#ALTER TABLE demeter_farm ADD eros_status boolean; 
+	eros_server = Fields(type='varchar(600)', comment='本地服务地址')
+	#ALTER TABLE demeter_farm ADD eros_status boolean; 
+	#ALTER TABLE demeter_farm ADD eros_server varchar(600);

+ 1 - 2
model/web_article.py

@@ -1,11 +1,10 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter database
     name:farm.py
     author:rabin
 """
-from __load__ import *
+from .__load__ import *
 
 class Web_article(Model):
 	__table__ = 'web_article'

+ 1 - 2
model/web_article_category.py

@@ -1,11 +1,10 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter database
     name:article_category.py
     author:rabin
 """
-from __load__ import *
+from .__load__ import *
 
 class Web_article_category(Model):
 	__table__ = 'web_article_category'

+ 1 - 2
model/web_help.py

@@ -1,11 +1,10 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter database
     name:help.py
     author:rabin
 """
-from __load__ import *
+from .__load__ import *
 
 class Web_help(Model):
 	__table__ = 'web_help'

+ 1 - 2
model/web_help_category.py

@@ -1,11 +1,10 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter database
     name:web_help_category.py
     author:rabin
 """
-from __load__ import *
+from .__load__ import *
 
 class Web_help_category(Model):
 	__table__ = 'web_help_category'

+ 1 - 1
model/web_menu.py

@@ -5,7 +5,7 @@
     name:web_menu.py
     author:rabin
 """
-from __load__ import *
+from .__load__ import *
 
 class Web_menu(Model):
 	__table__ = 'web_menu'

+ 1 - 2
model/web_set.py

@@ -1,11 +1,10 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter database
     name:web_set.py
     author:rabin
 """
-from __load__ import *
+from .__load__ import *
 
 class Web_set(Model):
 	__table__ = 'web_set'

+ 25 - 0
service/eros/core.py

@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+from demeter.core import *
+import json
+
+class Core(object):
+
+	# 实时同步
+	def rsync(self, table):
+		command = Demeter.path + 'sync.py -t ' + table
+		Shell.popen("python3 " + command, bg=True)
+		#self.sync(table)
+
+	# 远程同步
+	def sync(self, table):
+		farm = Demeter.service('common').list('farm', search={'eros_status':1})
+		data = Demeter.service('common').list(table)
+		param = {}
+		param['data'] = json.dumps(data)
+		param['table'] = table
+		if farm and data:
+			for v in farm:
+				url = 'http://' + v['eros_server'] + ':8091/interface/sync'
+				Demeter.curl(url, param, 'post')
+
+	

+ 13 - 0
sync.py

@@ -0,0 +1,13 @@
+# -*- coding: utf-8 -*-
+"""
+    demeter web
+    name:admin.py
+    author:rabin
+"""
+from demeter.core import *
+
+param = {}
+param['table'] = 't'
+Demeter.getopt(param)
+table = Demeter.option['table']
+Demeter.service('core', 'eros').sync(table)

+ 0 - 1
web/__init__.py

@@ -1,4 +1,3 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter init

+ 3 - 9
web/main.py

@@ -1,10 +1,4 @@
-#!/usr/bin/env python
-#coding=utf-8
-"""
-    demeter web
-    name:main.py
-    author:rabin
-"""
-from page import *
+# -*- coding: utf-8 -*-
 from demeter.web import *
-Web.start(url)
+import web.page
+Web.start(application=[web.page,])

+ 1 - 14
web/page/__init__.py

@@ -1,14 +1 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""
-    demeter init
-    author:rabin
-    这里写页面逻辑
-"""
-from demeter.web import *
-path = os.path.split(os.path.realpath(__file__))[0] + '/'
-files = Web.file(path)
-url = []
-for key in files:
-	module = __import__(key, globals())
-	url = Web.url(module, key, url)
+# -*- coding: utf-8 -*-

+ 0 - 1
web/page/__load__.py

@@ -1,4 +1,3 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter load

+ 1 - 2
web/page/article.py

@@ -1,11 +1,10 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter web page
     name:origin.py
     author:rabin
 """
-from __load__ import *
+from .__load__ import *
 
 class index_path(Load):
 	@Web.setting

+ 1 - 2
web/page/farm.py

@@ -1,11 +1,10 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter web page
     name:main.py
     author:rabin
 """
-from __load__ import *
+from .__load__ import *
 
 class index_path(Load):
 	@Web.setting

+ 1 - 2
web/page/help.py

@@ -1,11 +1,10 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter web page
     name:help.py
     author:rabin
 """
-from __load__ import *
+from .__load__ import *
 
 class index_path(Load):
 	@Web.setting

+ 1 - 2
web/page/main.py

@@ -1,11 +1,10 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter web page
     name:main.py
     author:rabin
 """
-from __load__ import *
+from .__load__ import *
 
 class index_path(Load):
 	@Web.setting

+ 1 - 2
web/page/origin.py

@@ -1,11 +1,10 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter web page
     name:main.py
     author:rabin
 """
-from __load__ import *
+from .__load__ import *
 
 class Origin(object):
 	@staticmethod

+ 1 - 2
web/page/user.py

@@ -1,11 +1,10 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
     demeter web page
     name:user.py
     author:rabin
 """
-from __load__ import *
+from .__load__ import *
 
 class login_path(Load):
 	@Web.setting