浏览代码

重整3.0

zoie 2 年之前
父节点
当前提交
51332db896
共有 100 个文件被更改,包括 4295 次插入22523 次删除
  1. 35 0
      .gitignore
  2. 二进制
      Cold_Api6200
  3. 193 18
      Nats/Nats.go
  4. 13 14
      Nats/NatsServer/NatsMqtt.go
  5. 9 15
      conf/app.conf
  6. 5 0
      conf/config.go
  7. 83 642
      controllers/Data.go
  8. 493 344
      controllers/Device.go
  9. 977 989
      controllers/GoodsOrder.go
  10. 4 98
      controllers/Login.go
  11. 6 64
      controllers/Logs.go
  12. 3 3
      controllers/RawSql.go
  13. 0 152
      controllers/Template.go
  14. 310 539
      controllers/User.go
  15. 3 3
      controllers/lib/lib.go
  16. 24 28
      go.mod
  17. 362 86
      go.sum
  18. 0 1
      lastupdate.tmp
  19. 11 0
      logs/logx/logx.log
  20. 17 17
      main.go
  21. 58 89
      models/Account/Admin.go
  22. 124 33
      models/Account/Company.go
  23. 407 0
      models/Account/Menu.go
  24. 92 45
      models/Account/Power.go
  25. 5 5
      models/Account/Tokey.go
  26. 183 2
      models/Company/CompanyClass.go
  27. 93 46
      models/Company/CompanyNotice.go
  28. 48 54
      models/Device/Device.go
  29. 74 104
      models/Device/DeviceData.go
  30. 4 4
      models/Device/DeviceParameter.go
  31. 152 129
      models/Device/DeviceSensor.go
  32. 58 19
      models/Device/DeviceSensorParameter.go
  33. 2 12
      models/Device/DeviceTask.go
  34. 1 0
      models/Device/DeviceType.go
  35. 9 0
      models/SplitString.go
  36. 8 18
      models/System/Logs.go
  37. 1 22
      models/System/UserLogs.go
  38. 31 58
      models/Warning/Warning.go
  39. 3 6
      models/Warning/WarningSand.go
  40. 28 17
      routers/Data.go
  41. 33 38
      routers/Device.go
  42. 9 14
      routers/GoodsOrder.go
  43. 31 17
      routers/User.go
  44. 73 0
      routers/filter.go
  45. 7 3
      routers/router.go
  46. 122 164
      routers/v2.go
  47. 91 0
      routers/v3.go
  48. 0 1342
      views/Data/DataLine.html
  49. 0 780
      views/Data/DataLine_.html
  50. 0 772
      views/Data/DataList.html
  51. 0 825
      views/Data/DataMap.html
  52. 0 52
      views/Data/DataPlane.html
  53. 0 672
      views/Data/DataReal.html
  54. 0 614
      views/Data/DataRealCalss-.html
  55. 0 624
      views/Data/DataRealCalss.html
  56. 0 1301
      views/Data/DataScreen.html
  57. 0 2
      views/Data/DataView3d.html
  58. 0 139
      views/Data/DataView3dE.html
  59. 0 218
      views/Data/Template-.html
  60. 0 176
      views/Device/Device-.html
  61. 0 333
      views/Device/Device.html
  62. 0 467
      views/Device/DeviceBind-.html
  63. 0 275
      views/Device/DeviceBind.html
  64. 0 887
      views/Device/DeviceClass-.html
  65. 0 149
      views/Device/DeviceClass.html
  66. 0 677
      views/Device/DeviceClassBind-.html
  67. 0 582
      views/Device/DeviceClassPlan.html
  68. 0 87
      views/Device/DeviceLogs.html
  69. 0 136
      views/Device/DeviceWarning-.html
  70. 0 143
      views/Device/DeviceWarning-M.html
  71. 0 29
      views/Device/DeviceWarning-log.html
  72. 0 314
      views/Device/DeviceWarning.html
  73. 0 937
      views/Device/Device_Parameter-.html
  74. 0 581
      views/Device/Device_Sensor-.html
  75. 0 765
      views/Device/Device_Sensor-_.html
  76. 0 138
      views/Device/TemplateClass-.html
  77. 0 157
      views/Device/TemplateClass.html
  78. 0 160
      views/Device/TemplateClassPlan.html
  79. 0 204
      views/GoodsOrder/GoodsOrder-.html
  80. 0 200
      views/GoodsOrder/GoodsOrder.html
  81. 0 119
      views/RawSql/RawSql-.html
  82. 0 156
      views/RawSql/RawSql.html
  83. 0 168
      views/System/Logs.html
  84. 0 218
      views/Template/Template-.html
  85. 0 192
      views/Template/Template.html
  86. 0 137
      views/Template/TemplateClass-.html
  87. 0 156
      views/Template/TemplateClass.html
  88. 0 610
      views/Tool/DataTool.html
  89. 0 274
      views/User/Admin-.html
  90. 0 204
      views/User/Admin.html
  91. 0 362
      views/User/Power-.html
  92. 0 232
      views/User/Power.html
  93. 0 280
      views/User/User-.html
  94. 0 270
      views/User/User-Info.html
  95. 0 301
      views/User/User.html
  96. 0 168
      views/User/UserLogs.html
  97. 0 11
      views/base/base.html
  98. 0 0
      views/base/footer.html
  99. 0 15
      views/base/head.html
  100. 0 0
      views/base/navbar.html

+ 35 - 0
.gitignore

@@ -0,0 +1,35 @@
+# ---> Go
+# Compiled Object files, Static and Dynamic libs (Shared Objects)
+*.o
+*.a
+*.so
+
+# Folders
+_obj
+_test
+
+# Architecture specific extensions/prefixes
+*.[568vq]
+[568vq].out
+
+*.cgo1.go
+*.cgo2.c
+_cgo_defun.c
+_cgo_gotypes.go
+_cgo_export.*
+
+_testmain.go
+
+*.exe
+*.test
+*.prof
+
+# local
+.idea
+/_
+/.cache
+.vscode/
+/logs/logx
+lastupdate.tmp
+main
+Cold_Api6200

二进制
Cold_Api6200


+ 193 - 18
Nats/Nats.go

@@ -4,11 +4,14 @@ import (
 	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/logs"
+	"Cold_Api/models/Account"
 	"Cold_Api/models/Company"
+	"Cold_Api/models/System"
 	"encoding/xml"
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	"github.com/nats-io/nats.go"
+	"github.com/vmihailenco/msgpack/v5"
 	"strconv"
 	"strings"
 	"time"
@@ -72,22 +75,22 @@ func NatsInit() {
 			decryptCode := lib.AesDecryptCBC(Content_r, "0123456789012345")
 			decryptCode_int, err := strconv.Atoi(decryptCode)
 			fmt.Println("解密结果:", decryptCode, "  decryptCode_int", decryptCode_int, "  Content_r:", Content_r)
-			R_DeviceClass, err := Company.Read_Class_ById(decryptCode_int)
+			R_DeviceNotice, err := Company.Read_CompanyNotice_ById(decryptCode_int)
 			if err != nil {
 				_ = lib.Nats.Publish(m.Reply, []byte(""))
 				return
 			}
 
-			if strings.Contains(R_DeviceClass.T_Notice_wx, person_QRCode.FromUserName) {
+			if strings.Contains(R_DeviceNotice.T_Notice_wx, person_QRCode.FromUserName) {
 
-				_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceClass.T_name+" 已绑定,无需重复绑定!"))
+				_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceNotice.T_name+" 已绑定,无需重复绑定!"))
 				return
 			}
 
-			R_DeviceClass.T_Notice_wx = R_DeviceClass.T_Notice_wx + person_QRCode.FromUserName + "/重令名|"
-			Company.Update_Class_ById(R_DeviceClass)
+			R_DeviceNotice.T_Notice_wx = R_DeviceNotice.T_Notice_wx + person_QRCode.FromUserName + "/重令名|"
+			Company.Update_CompanyNotice(R_DeviceNotice, "T_Notice_wx")
 
-			_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceClass.T_name+" 绑定成功!"))
+			_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceNotice.T_name+" 绑定成功!"))
 			return
 		}
 		_ = lib.Nats.Publish(m.Reply, []byte(""))
@@ -121,25 +124,25 @@ func NatsInit() {
 			decryptCode := lib.AesDecryptCBC(Content_r, "0123456789012345")
 			decryptCode_int, err := strconv.Atoi(decryptCode)
 			fmt.Println("解密结果:", decryptCode, "  decryptCode_int", decryptCode_int, "  Content_r:", Content_r)
-			R_DeviceClass, err := Company.Read_Class_ById(decryptCode_int)
+			R_DeviceNotice, err := Company.Read_CompanyNotice_ById(decryptCode_int)
 			if err != nil {
 				_ = lib.Nats.Publish(m.Reply, []byte(""))
 				return
 			}
 
-			if strings.Contains(R_DeviceClass.T_Notice_wx2, person_QRCode.FromUserName+"/重令名|") {
-				_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceClass.T_name+" 重复扫码!请在 5分钟内 回复您的名字,否则将 无法收到报警消息!如回复:张三"))
+			if strings.Contains(R_DeviceNotice.T_Notice_wx2, person_QRCode.FromUserName+"/重令名|") {
+				_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceNotice.T_name+" 重复扫码!请在 5分钟内 回复您的名字,否则将 无法收到报警消息!如回复:张三"))
 				return
 			}
-			if strings.Contains(R_DeviceClass.T_Notice_wx2, person_QRCode.FromUserName) {
-				_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceClass.T_name+" 已绑定,无需重复绑定!"))
+			if strings.Contains(R_DeviceNotice.T_Notice_wx2, person_QRCode.FromUserName) {
+				_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceNotice.T_name+" 已绑定,无需重复绑定!"))
 				return
 			}
 
-			R_DeviceClass.T_Notice_wx2 = R_DeviceClass.T_Notice_wx2 + person_QRCode.FromUserName + "/重令名|"
-			Company.Update_Class_ById(R_DeviceClass)
+			R_DeviceNotice.T_Notice_wx2 = R_DeviceNotice.T_Notice_wx2 + person_QRCode.FromUserName + "/重令名|"
+			Company.Update_CompanyNotice(R_DeviceNotice, "T_Notice_wx2")
 			redisCache_NatsServer.Put(person_QRCode.FromUserName, decryptCode_int, 5*time.Minute)
-			_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceClass.T_name+" 扫码成功!请在 5分钟内 回复您的名字,否则将 无法收到报警消息!如回复:张三"))
+			_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceNotice.T_name+" 扫码成功!请在 5分钟内 回复您的名字,否则将 无法收到报警消息!如回复:张三"))
 			return
 		}
 		_ = lib.Nats.Publish(m.Reply, []byte(""))
@@ -177,22 +180,22 @@ func NatsInit() {
 			return
 		}
 		Class_ById := lib.To_int(redisCache_NatsServer.Get(person_Text.FromUserName))
-		R_DeviceClass, err := Company.Read_Class_ById(Class_ById)
+		R_DeviceNotice, err := Company.Read_CompanyNotice_ById(Class_ById)
 		if err != nil {
 			_ = lib.Nats.Publish(m.Reply, []byte(""))
 			return
 		}
 
-		R_DeviceClass.T_Notice_wx2 = strings.Replace(R_DeviceClass.T_Notice_wx2,
+		R_DeviceNotice.T_Notice_wx2 = strings.Replace(R_DeviceNotice.T_Notice_wx2,
 			person_Text.FromUserName+"/重令名|",
 			person_Text.FromUserName+"/"+person_Text.Content+"|",
 			-1)
-		Company.Update_Class_ById(R_DeviceClass)
+		Company.Update_CompanyNotice(R_DeviceNotice, "T_Notice_wx2")
 
 		// 删除 缓存
 		redisCache_NatsServer.Delete(person_Text.FromUserName)
 
-		_ = lib.Nats.Publish(m.Reply, []byte("尊敬的 "+person_Text.Content+",您以成功绑定 "+R_DeviceClass.T_name))
+		_ = lib.Nats.Publish(m.Reply, []byte("尊敬的 "+person_Text.Content+",您以成功绑定 "+R_DeviceNotice.T_name))
 	})
 
 	//// 发布-订阅 模式,异步订阅 test1
@@ -211,4 +214,176 @@ func NatsInit() {
 	//	_ = Nats.Publish(m.Reply, []byte("I can help!!"))
 	//})
 
+	// 请求-响应 验证登录
+	_, _ = lib.Nats.Subscribe("Cold_User_verification", func(m *nats.Msg) {
+		fmt.Printf("verification message: %s\n", string(m.Data))
+
+		type T_User struct {
+			T_uuid  string `xml:"T_uuid"`
+			T_pid   int    `xml:"T_pid"`
+			T_power int    `xml:"T_power"`
+			T_name  string `xml:"T_name"`
+			T_user  string `xml:"T_user"`
+		}
+		type T_R struct {
+			Code int16  `xml:"Code"`
+			Msg  string `xml:"Msg"`
+			Data T_User `xml:"Data"` // 泛型
+		}
+
+		var t_R T_R
+
+		// 验证登录
+		b_, admin_r := lib.Verification(string(m.Data), "")
+		if !b_ {
+			fmt.Println("Unmarshal error")
+			t_R.Code = 201
+			t_R.Msg = "User_tokey Err!"
+			b, _ := msgpack.Marshal(&t_R)
+			_ = lib.Nats.Publish(m.Reply, b)
+			return
+		}
+
+		t_R.Code = 200
+		t_R.Msg = "ok"
+		t_R.Data.T_uuid = admin_r.T_uuid
+		t_R.Data.T_pid = admin_r.T_pid
+		t_R.Data.T_power = admin_r.T_power
+		t_R.Data.T_name = admin_r.T_name
+		t_R.Data.T_user = admin_r.T_user
+
+		b, _ := msgpack.Marshal(&t_R)
+		_ = lib.Nats.Publish(m.Reply, b)
+	})
+
+	// 请求-响应 通过公司名获取所有公司信息
+	_, _ = lib.Nats.Subscribe("Cold_User_CompanyListAllByT_name", func(m *nats.Msg) {
+		fmt.Printf("CompanyListAll message: %s\n", string(m.Data))
+
+		type T_R struct {
+			Code int16             `xml:"Code"`
+			Msg  string            `xml:"Msg"`
+			Data []Account.Company `xml:"Data"` // 泛型
+		}
+
+		var t_R T_R
+		t_R.Code = 200
+		t_R.Msg = "ok"
+		t_R.Data = Account.Read_Company_List_All_ByT_name(string(m.Data))
+
+		b, _ := msgpack.Marshal(&t_R)
+		_ = lib.Nats.Publish(m.Reply, b)
+	})
+	// 请求-响应 获取所有用户列表
+	_, _ = lib.Nats.Subscribe("Cold_User_UserListAll", func(m *nats.Msg) {
+
+		type T_R struct {
+			Code int16             `xml:"Code"`
+			Msg  string            `xml:"Msg"`
+			Data []Account.Admin_R `xml:"Data"` // 泛型
+		}
+
+		var t_R T_R
+		t_R.Code = 200
+		t_R.Msg = "ok"
+		t_R.Data = Account.Read_Admin_List_All()
+
+		b, _ := msgpack.Marshal(&t_R)
+		_ = lib.Nats.Publish(m.Reply, b)
+	})
+	// 请求-响应 检查用户权限
+	_, _ = lib.Nats.Subscribe("Cold_User_CheckUserPermissions", func(m *nats.Msg) {
+		fmt.Printf("CheckUserPermissions message: %s\n", string(m.Data))
+		type T_Req struct {
+			Power_Id int    `xml:"Power_Id"` // 权限id
+			Req_Url  string `xml:"Req_Url"`  // 请求url
+		}
+
+		type T_R struct {
+			Code int16  `xml:"Code"`
+			Msg  string `xml:"Msg"`
+			Pass bool   `xml:"Pass"` // 泛型
+		}
+
+		var t_Req T_Req
+		var t_R T_R
+		err := msgpack.Unmarshal(m.Data, &t_Req)
+		if err != nil {
+			t_R.Code = 201
+			t_R.Msg = "Unmarshal error"
+			b, _ := msgpack.Marshal(&t_R)
+			_ = lib.Nats.Publish(m.Reply, b)
+			return
+		}
+
+		power, _ := Account.Read_Power_ById(t_Req.Power_Id)
+
+		flag := false
+		if power.T_Menu_Bind == "*" {
+			flag = true
+		}
+
+		if !flag {
+			api := Account.Read_API_List_ByPower_Id(power.Id, power.T_Menu_Bind)
+			for _, v := range api {
+				if conf.Version+v.T_uri == t_Req.Req_Url {
+					flag = true
+					break
+				}
+			}
+		}
+
+		t_R.Code = 200
+		t_R.Msg = "ok"
+		t_R.Pass = flag
+
+		b, _ := msgpack.Marshal(&t_R)
+		_ = lib.Nats.Publish(m.Reply, b)
+	})
+
+	// 发布-订阅 模式,异步订阅 AddSysLogs
+	_, _ = lib.Nats.Subscribe("Cold_User_AddSysLogs", func(m *nats.Msg) {
+		fmt.Printf("AddSysLogs message: %s\n", string(m.Data))
+
+		type T_S struct {
+			T_class string
+			T_title string
+			T_txt   interface{}
+		}
+
+		var t_S T_S
+
+		err := msgpack.Unmarshal(m.Data, &t_S)
+		if err != nil {
+
+			System.Add_Logs("Nats", "Nats AddSysLogs 解析失败", string(m.Data))
+			return
+		}
+
+		System.Add_Logs_T(t_S.T_class, t_S.T_title, t_S.T_txt)
+
+	})
+
+	// 发布-订阅 模式,异步订阅 AddUserLogs
+	_, _ = lib.Nats.Subscribe("Cold_User_AddUserLogs", func(m *nats.Msg) {
+		fmt.Printf("AddUserLogs message: %s\n", string(m.Data))
+
+		type T_S struct {
+			T_uuid  string
+			T_class string
+			T_title string
+			T_txt   interface{}
+		}
+
+		var t_S T_S
+
+		err := msgpack.Unmarshal(m.Data, &t_S)
+		if err != nil {
+			System.Add_Logs("Nats", "Nats AddUserLogs 解析失败", string(m.Data))
+			return
+		}
+		System.Add_UserLogs_T(t_S.T_uuid, t_S.T_class, t_S.T_title, t_S.T_txt)
+
+	})
+
 }

+ 13 - 14
Nats/NatsServer/NatsMqtt.go

@@ -62,20 +62,19 @@ func Set_DeviceTask(v Device.Device_task) {
 
 }
 
-//
-//func Del_DeviceSensor(v Device.DeviceSensor_Del) {
-//	logs.Println("Nats =>", lib.FuncName(), v)
-//	b, err := msgpack.Marshal(&v)
-//	if err != nil {
-//		panic(err)
-//	}
-//
-//	err = lib.Nats.Publish("Del_DeviceSensor", b)
-//	if err != nil {
-//		logs.Println("Nats =>", lib.FuncName(), err)
-//	}
-//
-//}
+func Del_DeviceSensor(v Device.DeviceSensor_Del) {
+	logs.Println("Nats =>", lib.FuncName(), v)
+	b, err := msgpack.Marshal(&v)
+	if err != nil {
+		panic(err)
+	}
+
+	err = lib.Nats.Publish("Del_DeviceSensor", b)
+	if err != nil {
+		logs.Println("Nats =>", lib.FuncName(), err)
+	}
+
+}
 
 func Get_Device_Realtime(v string) {
 	logs.Println("Nats =>", lib.FuncName(), v)

+ 9 - 15
conf/app.conf

@@ -10,33 +10,25 @@ copyrequestbody = true
 # AdminAddr = "localhost"
 # AdminPort = 8088
 
-# Nats
-NatsServer_Url = "127.0.0.1:4222"
+version = "/v3"
 
+# Nats
+NatsServer_Url = "127.0.0.1:43422"
 
 # Mysql
-MysqlServer_UrlPort = "47.111.15.17:3306"
+MysqlServer_UrlPort = "127.0.0.1:40306"
 MysqlServer_Database = "cold"
 MysqlServer_Username = "cold"
-MysqlServer_Password = "j6WXwyEckZS7bJFM"
+MysqlServer_Password = "yjwyEckZS7rE5H!"
 MysqlServer_MaxIdleConnections = 100
 MysqlServer_MaxOpenConnections = 200
 
-# # Mysql
-# MysqlServer_UrlPort = "192.168.192.250:3306"
-# MysqlServer_Database = "culd"
-# MysqlServer_Username = "cold"
-# MysqlServer_Password = "j6WXwyEckZS7bJFM"
-# MysqlServer_MaxIdleConnections = 100
-# MysqlServer_MaxOpenConnections = 200
-
-
 # Redis
-Redis_address = "47.111.15.17:6379"
+# Redis
+Redis_address = "127.0.0.1:41379"
 Redis_password = ""
 Redis_dbNum = "1"
 
-
 # 静态资源
 # Oss = "https://osscold.baozhida.cn/"
 Oss = "../../../static"
@@ -45,3 +37,5 @@ Oss_file = "C:\\Users\\Administrator\\Pictures\\oss"
 # Panel
 Panel_url = "http://127.0.0.1:6204/Cold_Panel"
 
+FilterExcludeURL = /Login_verification
+FilterOnlyLoginCheckURL = /Menu/List,/User/Info

+ 5 - 0
conf/config.go

@@ -10,6 +10,8 @@ var NatsServer_Url, _ = beego.AppConfig.String("NatsServer_Url")
 var HTTPPort, _ = beego.AppConfig.String("HTTPPort")
 var AppName, _ = beego.AppConfig.String("appname")
 
+var Version, _ = beego.AppConfig.String("Version")
+
 var Page_size = 10
 
 // Mysql
@@ -30,3 +32,6 @@ var Oss, _ = beego.AppConfig.String("Oss")
 var Oss_file, _ = beego.AppConfig.String("Oss_file")
 
 var Panel_url, _ = beego.AppConfig.String("Panel_url")
+
+var FilterExcludeURL, _ = beego.AppConfig.String("FilterExcludeURL")
+var FilterOnlyLoginCheckURL, _ = beego.AppConfig.String("FilterOnlyLoginCheckURL")

+ 83 - 642
controllers/Data.go

@@ -4,10 +4,8 @@ import (
 	"Cold_Api/Nats/NatsServer"
 	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
-	"Cold_Api/models/Account"
 	"Cold_Api/models/Device"
 	"Cold_Api/models/RawSql"
-	"Cold_Api/models/Warning"
 	"fmt"
 	beego "github.com/beego/beego/v2/server/web"
 	"github.com/signintech/gopdf"
@@ -35,98 +33,9 @@ func (c *DataController) DataPlane() {
 
 	c.TplName = "Data/DataPlane.html"
 } // 列表 -
-func (c *DataController) DataReal_html() {
-	// 验证登录
-	b_, R_u := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-
-	Name := c.GetString("Name")
-
-	c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(R_u.Admin_uuid)
-	c.Data["Name"] = Name
-
-	c.TplName = "Data/DataReal.html"
-}
-
-// 列表 -
-func (c *DataController) DataRealCalss_html() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	c.Data["Admin_r"] = admin_r
-
-	Name := c.GetString("Name")
-
-	c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(admin_r.Admin_uuid)
-	c.Data["Name"] = Name
-
-	c.TplName = "Data/DataRealCalss.html"
-}
 
-// 列表 -
-func (c *DataController) DataList_html() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	c.Data["Admin_r"] = admin_r
-
-	Name := c.GetString("Name")
-
-	c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(admin_r.Admin_uuid)
-	c.Data["Name"] = Name
-
-	c.TplName = "Data/DataList.html"
-}
-
-// 列表 -
-func (c *DataController) DataLine_html() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	c.Data["Admin_r"] = admin_r
-	Name := c.GetString("Name")
-
-	c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(admin_r.Admin_uuid)
-	c.Data["Name"] = Name
-
-	c.TplName = "Data/DataLine.html"
-}
-
-// 列表 -
-func (c *DataController) DataMap_html() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	c.Data["Admin_r"] = admin_r
-	Name := c.GetString("Name")
-
-	c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(admin_r.Admin_uuid)
-	c.Data["Name"] = Name
-
-	c.TplName = "Data/DataMap.html"
-}
-
-func (c *DataController) Device_Sensor() {
+// 获取传感器
+func (c *DataController) Device_Sensor_Get() {
 	// 验证登录
 	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !b_ {
@@ -150,6 +59,8 @@ func (c *DataController) Device_Sensor() {
 	return
 
 }
+
+// 传感器列表
 func (c *DataController) Device_Sensor_List() {
 	// 验证登录
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
@@ -183,11 +94,13 @@ func (c *DataController) Device_Sensor_List() {
 	T_Calss_id, _ := c.GetInt("T_class_id")
 	T_name := c.GetString("T_name")
 	SN_type := c.GetString("SN_type")
-
-	//c.Data["Class_List"] = Device.Read_Class_All_1()
+	T_pid := admin_r.T_pid
+	if T_pid == 0 {
+		T_pid, _ = c.GetInt("T_pid")
+	}
 
 	var cnt int64
-	r_jsons.DeviceSensor_lite, cnt = Device.Read_DeviceSensor_class_ALL_1(admin_r, T_Calss_id, page, page_z, T_sn, T_name, SN_type)
+	r_jsons.DeviceSensor_lite, cnt = Device.Read_DeviceSensor_class_ALL_1(T_pid, T_Calss_id, page, page_z, T_sn, T_name, SN_type)
 
 	page_size := math.Ceil(float64(cnt) / float64(page_z))
 	r_jsons.Page = int(page)
@@ -201,18 +114,10 @@ func (c *DataController) Device_Sensor_List() {
 
 }
 
-// 列表 - 接口
+// 传感器数据列表
 func (c *DataController) Device_Sensor_Data() {
 	page, _ := c.GetInt("page")
 	page_z, _ := c.GetInt("page_z")
-	println(page)
-	if page < 1 {
-		page = 1
-	}
-	if page_z < 1 {
-		page_z = 10
-	}
-
 	T_id, _ := c.GetInt("T_id")
 	SN := c.GetString("T_sn")
 	Time_start := c.GetString("Time_start")
@@ -220,66 +125,22 @@ func (c *DataController) Device_Sensor_Data() {
 
 	type R_JSONS struct {
 		//必须的大写开头
-		DeviceSensor_data []Device.DeviceData_
+		DeviceSensor_data []Device.DeviceData_R
 		Num               int
 		Page              int
 		Page_size         int
 		Pages             []lib.Page_T
 	}
 	var r_jsons R_JSONS
-
 	var cnt int
-	r_jsons.DeviceSensor_data, cnt = Device.Read_DeviceSensorData_ById_List(SN, T_id, Time_start, Time_end, page, page_z)
-	page_size := math.Ceil(float64(cnt) / float64(page_z))
-	r_jsons.Page = int(page)
-	r_jsons.Page_size = int(page_size)
-	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
-	r_jsons.Num = int(cnt)
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
-	c.ServeJSON()
-	return
-}
-
-// 列表 - 接口
-func (c *DataController) Device_Sensor_Data_More() {
-	page, _ := c.GetInt("page")
-	page_z, _ := c.GetInt("page_z")
-	println(page)
-	if page < 1 {
-		page = 1
-	}
-	if page_z < 1 {
-		page_z = 10
-	}
-
-	T_snid := c.GetString("T_snid")
-	Time_start := c.GetString("Time_start")
-	Time_end := c.GetString("Time_end")
+	SParamMap := Device.Read_DeviceSensorParameter_Map_All(SN, T_id)
+	r_jsons.DeviceSensor_data, cnt = Device.Read_DeviceData_ById_List(SN, T_id, Time_start, Time_end, page, page_z, SParamMap)
 
-	if len(T_snid) < 10 {
-		c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-		c.ServeJSON()
-		return
-	}
-
-	type R_JSONS struct {
-		//必须的大写开头
-		DeviceSensor_data []Device.DeviceData_
-		Num               int
-		Page              int
-		Page_size         int
-		Pages             []lib.Page_T
-	}
-	var r_jsons R_JSONS
-
-	var cnt int
-	r_jsons.DeviceSensor_data, cnt = Device.Read_DeviceSensorData_By_T_snid_List(T_snid, Time_start, Time_end, page, page_z)
 	page_size := math.Ceil(float64(cnt) / float64(page_z))
-	r_jsons.Page = int(page)
+	r_jsons.Page = page
 	r_jsons.Page_size = int(page_size)
 	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
-	r_jsons.Num = int(cnt)
+	r_jsons.Num = cnt
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.ServeJSON()
@@ -287,7 +148,7 @@ func (c *DataController) Device_Sensor_Data_More() {
 }
 
 // 列表 - 接口
-func (c *DataController) V2_Device_Sensor_Data_More() {
+func (c *DataController) Device_Sensor_Data_More() {
 	// 验证登录
 	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !b_ {
@@ -318,14 +179,14 @@ func (c *DataController) V2_Device_Sensor_Data_More() {
 
 	type R_JSONS struct {
 		//必须的大写开头
-		Data      []Device.DeviceData_
+		Data      []Device.DeviceData_R
 		Num       int64
 		Page      int
 		Page_size int
 	}
 	var r_jsons R_JSONS
 
-	r_jsons.Data, r_jsons.Num = Device.Read_V2_DeviceSensorData_By_T_snid_List(T_snid, Time_start, Time_end, page, page_z)
+	r_jsons.Data, r_jsons.Num = Device.Read_V2_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, page, page_z)
 	r_jsons.Page = page
 	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
 
@@ -334,11 +195,13 @@ func (c *DataController) V2_Device_Sensor_Data_More() {
 	return
 }
 
-// 列表 - 接口
+// -------------------------------------
+
+// 导出传感器数据列表
 func (c *DataController) Device_Sensor_Data_Excel() {
 
 	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !b_ {
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
 		c.ServeJSON()
@@ -354,9 +217,9 @@ func (c *DataController) Device_Sensor_Data_Excel() {
 		c.ServeJSON()
 		return
 	}
-	var DeviceSensor_data []Device.DeviceData_
+	var DeviceSensor_data []Device.DeviceData_R
 
-	DeviceSensor_data, _ = Device.Read_DeviceSensorData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999)
+	DeviceSensor_data, _ = Device.Read_V2_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999)
 
 	f := excelize.NewFile() // 设置单元格的值
 	// 这里设置表头
@@ -376,20 +239,14 @@ func (c *DataController) Device_Sensor_Data_Excel() {
 
 	line := 1
 
-	headStyleLower, _ := f.NewStyle(`{
-		   "font":{
-			  "color":"#ff8585",
-			 	"size":11,
-      "family":"arial"
-		   }
-		}`)
-	headStyleUpper, _ := f.NewStyle(`{
-		   "font":{
-			  "color":"#ff8585",
-				"size":11,
-      "family":"arial"
-		   }
-		}`)
+	headStyleLower, _ := f.NewStyle(
+		&excelize.Style{
+			Font: &excelize.Font{Size: 11, Color: "#ff8585", Family: "arial"},
+		})
+	headStyleUpper, _ := f.NewStyle(
+		&excelize.Style{
+			Font: &excelize.Font{Size: 11, Color: "#ff8585", Family: "arial"},
+		})
 
 	// 循环写入数据
 	for _, v := range DeviceSensor_data {
@@ -398,23 +255,15 @@ func (c *DataController) Device_Sensor_Data_Excel() {
 		f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1)
 		f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]")
 		f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t)
-		if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
-			f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
-		}
-
-		f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64))
-		if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
-			f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64))
-		}
+		f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
+		f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_tl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_tu), 'f', 2, 64))
+		f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_rhl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_rhu), 'f', 2, 64))
 		f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
-
-		if v.T_t < v.T_Tlower || v.T_t > v.T_Tupper {
+		if v.T_t < v.T_tl || v.T_t > v.T_tu {
 			f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower)
 		}
-		if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
-			if v.T_rh < v.T_RHlower || v.T_rh > v.T_RHupper {
-				f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
-			}
+		if v.T_rh < v.T_rhl || v.T_rh > v.T_rhu {
+			f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
 		}
 
 	}
@@ -446,7 +295,7 @@ func (c *DataController) Device_Sensor_Data_Excel() {
 func (c *DataController) Device_Sensor_Data_Excel_m() {
 
 	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !b_ {
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
 		c.ServeJSON()
@@ -463,9 +312,9 @@ func (c *DataController) Device_Sensor_Data_Excel_m() {
 		c.ServeJSON()
 		return
 	}
-	var DeviceSensor_data []Device.DeviceData_
+	var DeviceSensor_data []Device.DeviceData_R
 
-	DeviceSensor_data, _ = Device.Read_DeviceSensorData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999)
+	DeviceSensor_data, _ = Device.Read_V2_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999)
 
 	f := excelize.NewFile() // 设置单元格的值
 	// 这里设置表头
@@ -484,21 +333,14 @@ func (c *DataController) Device_Sensor_Data_Excel_m() {
 	f.SetColWidth("Sheet1", "G", "G", 22)
 
 	line := 1
-
-	headStyleLower, _ := f.NewStyle(`{
-		   "font":{
-			  "color":"#a8f7ff",
-			 	"size":11,
-      "family":"arial"
-		   }
-		}`)
-	headStyleUpper, _ := f.NewStyle(`{
-		   "font":{
-			  "color":"#ff8585",
-				"size":11,
-      "family":"arial"
-		   }
-		}`)
+	headStyleLower, _ := f.NewStyle(
+		&excelize.Style{
+			Font: &excelize.Font{Size: 11, Color: "#a8f7ff", Family: "arial"},
+		})
+	headStyleUpper, _ := f.NewStyle(
+		&excelize.Style{
+			Font: &excelize.Font{Size: 11, Color: "#ff8585", Family: "arial"},
+		})
 
 	atime, _ := time.ParseDuration("-1m") //  Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
 
@@ -508,20 +350,14 @@ func (c *DataController) Device_Sensor_Data_Excel_m() {
 		f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1)
 		f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]")
 		f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t)
-		if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
-			f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
-		}
-
-		f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64))
-		if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
-			f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64))
-		}
+		f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
+		f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_tl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_tu), 'f', 2, 64))
+		f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_rhl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_rhu), 'f', 2, 64))
 		f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
-
-		if v.T_t < v.T_Tlower || v.T_rh < v.T_RHlower {
+		if v.T_t < v.T_tl || v.T_t > v.T_tu {
 			f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower)
 		}
-		if v.T_t > v.T_Tupper || v.T_rh > v.T_RHupper {
+		if v.T_rh < v.T_rhl || v.T_rh > v.T_rhu {
 			f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
 		}
 
@@ -533,34 +369,28 @@ func (c *DataController) Device_Sensor_Data_Excel_m() {
 		println("t_x:", t_x)
 		for i := 0; i < t_x; i++ {
 			println("// -------", i)
-			// -------
 			v.T_t = float32(lib.Decimal(float64(v.T_t + cha_v)))
-			fTime, _ := time.Parse("2006-1-2 15:04:05", v.T_time)
+			fTime, _ := time.Parse("2006-01-02 15:04:05", v.T_time)
 			fTime = fTime.Add(atime)
-			v.T_time = fTime.Format("2006-1-2 15:04:05")
+			v.T_time = fTime.Format("2006-01-02 15:04:05")
 
 			line++
 			f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), line-1)
 			f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_name+"["+strconv.Itoa(v.T_id)+"]")
 			f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.T_t)
-			if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
-				f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
-			}
+			f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_rh)
+			f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_tl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_tu), 'f', 2, 64))
+			f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_rhl), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_rhu), 'f', 2, 64))
 
-			f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strconv.FormatFloat(float64(v.T_Tlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_Tupper), 'f', 2, 64))
-			if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
-				f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), strconv.FormatFloat(float64(v.T_RHlower), 'f', 2, 64)+"~"+strconv.FormatFloat(float64(v.T_RHupper), 'f', 2, 64))
-			}
 			f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_time)
 
-			if v.T_t < v.T_Tlower || v.T_t > v.T_Tupper {
+			if v.T_t < v.T_tl || v.T_t > v.T_tu {
 				f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleLower)
 			}
-			if !(admin_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD")) {
-				if v.T_rh < v.T_RHlower || v.T_rh > v.T_RHupper {
-					f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
-				}
+			if v.T_rh < v.T_rhl || v.T_rh > v.T_rhu {
+				f.SetCellStyle("Sheet1", fmt.Sprintf("A%d", line), fmt.Sprintf("G%d", line), headStyleUpper)
 			}
+
 		}
 
 	}
@@ -589,272 +419,11 @@ func (c *DataController) Device_Sensor_Data_Excel_m() {
 	return
 }
 
-//  大数据平台
-func (c *DataController) DataScreen() {
-	// 验证登录
-	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-
-	c.TplName = "Data/DataScreen.html"
-}
-
-// 大数据 数据
-func (c *DataController) DataScreen_Data() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	Device_YD_1_Count_use := 0
-	Device_YD_2_Count_use := 0
-
-	Data := make(map[string]interface{})
-	if admin_r.Admin_power == 10 {
-		admin_r.Id = admin_r.Admin_master
-	}
-	// ----------------- 左上角  -----------------
-	//仓库端总数
-	Data["KF_Count"] = Device.Read_Device_ALL_T_Bind_Count(admin_r, "KF", 0)
-	//运输端总数
-	Data["YD_Count"] = Device.Read_Device_ALL_T_Bind_Count(admin_r, "YD", 0)
-	// 仓库报备数
-	Data["KF_Warning_Count"] = Warning.Read_Warning_ALL_T_Bind_TIME_1d_Count(admin_r, "KF")
-	//  运输报警数
-	Data["YD_Warning_Count"] = Warning.Read_Warning_ALL_T_Bind_TIME_1d_Count(admin_r, "YD")
-
-	// 仓库端分公司数据统计  分公司名  终端总数  报警设备数  设备报警率
-	var KF_list []map[string]interface{}
-	Admin_maps := Account.Read_Admin_List_Admin_master_ALL(admin_r.Id)
-	for _, v := range Admin_maps {
-		Data_KF := make(map[string]interface{})
-		Data_KF["Name"] = v.Admin_name
-		Device_Count := Device.Read_Device_ALL_T_Bind_Count(v, "KF", 0)
-		Data_KF["Device_Count"] = Device_Count
-		Warning_Count := Warning.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "KF")
-		Data_KF["Warning_Count"] = Warning_Count
-		// 强制 报警数  不超过 设备数量
-		if Warning_Count > Device_Count {
-			Warning_Count = Device_Count
-		}
-		//fmt.Println("Device_Count:",Device_Count,"Warning_Count:",Warning_Count)
-		if Warning_Count == 0 || Device_Count == 0 {
-			Data_KF["Ratio"] = 0
-		} else {
-			Data_KF["Ratio"] = int((float32(Warning_Count) / float32(Device_Count)) * 100)
-		}
-		KF_list = append(KF_list, Data_KF)
-	}
-
-	//  运输报警数
-	Data["KF_list"] = KF_list
-
-	// 运输端分公司数据统计   分公司名  终端总数  报警设备数  设备报警率
-	var YD_list []map[string]interface{}
-	Admin_maps = Account.Read_Admin_List_Admin_master_ALL(admin_r.Id)
-	for _, v := range Admin_maps {
-		Data_YD := make(map[string]interface{})
-		Data_YD["Name"] = v.Admin_name
-		Device_Count := Device.Read_Device_ALL_T_Bind_Count(v, "YD", 0)
-		Data_YD["Device_Count"] = Device_Count
-		Warning_Count := Warning.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "YD")
-		Data_YD["Warning_Count"] = Warning_Count
-		//fmt.Println("Device_Count:",Device_Count,"Warning_Count:",Warning_Count)
-		if Warning_Count == 0 || Device_Count == 0 {
-			Data_YD["Ratio"] = 0
-		} else {
-			Data_YD["Ratio"] = int((float32(Warning_Count) / float32(Device_Count)) * 100)
-		}
-		YD_list = append(YD_list, Data_YD)
-	}
-	//  运输报警数
-	Data["YD_list"] = YD_list
-
-	// 分公司名  终端总数  报警设备数  设备报警率
-	var KF_YD_list []map[string]interface{}
-	Admin_maps = Account.Read_Admin_List_Admin_master_ALL(admin_r.Id)
-	for _, v := range Admin_maps {
-		Data_KF_YD := make(map[string]interface{})
-		Data_KF_YD["Name"] = v.Admin_name
-		Device_Count := Device.Read_Device_ALL_T_Bind_Count(v, "", 0)
-		Data_KF_YD["Device_Count"] = Device_Count
-		Warning_Count := Warning.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "")
-		Data_KF_YD["Warning_Count"] = Warning_Count
-		//fmt.Println("Device_Count:",Device_Count,"Warning_Count:",Warning_Count)
-		if Warning_Count == 0 || Device_Count == 0 {
-			Data_KF_YD["Ratio"] = 0
-		} else {
-			Data_KF_YD["Ratio"] = int((float32(Warning_Count) / float32(Device_Count)) * 100)
-		}
-		KF_YD_list = append(KF_YD_list, Data_KF_YD)
-	}
-
-	//  报警率排名
-	Data["Warning_KF_YD_list"] = KF_YD_list
-
-	//每个时间段使用数量走势(物流曲线/药店曲线)
-	// 年
-	Device_list := Device.Read_Device_ALL_bind(admin_r)
-	var Sales_Year_z_list_1 [12]int
-	var Sales_Year_z_list_2 [12]int
-	for _, D_v := range Device_list {
-		for _, v := range Device.Read_DeviceData_ById_Year_List(D_v.T_sn) {
-			switch D_v.T_l_p {
-			case 1:
-				Sales_Year_z_list_1[lib.To_int(v[0])-1] += 1
-				break
-			case 2:
-				Sales_Year_z_list_2[lib.To_int(v[0])-1] += 1
-				break
-			}
-		}
-	}
-	Data["Sales_Year_z_list_1"] = Sales_Year_z_list_1
-	Data["Sales_Year_z_list_2"] = Sales_Year_z_list_2
-
-	// 月
-	currentTime := time.Now()
-	Month_z := lib.GetYearMonthToDay(currentTime.Year(), int(currentTime.Month()))
-	var Sales_Month_z_list_1 = make([]int, Month_z)
-	var Sales_Month_z_list_2 = make([]int, Month_z)
-	for _, D_v := range Device_list {
-		for _, v := range Device.Read_DeviceData_ById_Month_List(D_v.T_sn) {
-			switch D_v.T_l_p {
-			case 1:
-				Sales_Month_z_list_1[lib.To_int(v[0])-1] += 1
-				break
-			case 2:
-				Sales_Month_z_list_2[lib.To_int(v[0])-1] += 1
-				break
-			}
-		}
-	}
-	Data["Sales_Month_z_list_1"] = Sales_Month_z_list_1
-	Data["Sales_Month_z_list_2"] = Sales_Month_z_list_2
-
-	// 日
-	var Sales_Day_z_list_1 [24]int
-	var Sales_Day_z_list_2 [24]int
-	for _, D_v := range Device_list {
-		for _, v := range Device.Read_DeviceSensorData_ById_Day_List(D_v.T_sn) {
-			switch D_v.T_l_p {
-			case 1:
-				Sales_Day_z_list_1[lib.To_int(v[0])] += 1
-				break
-			case 2:
-				Sales_Day_z_list_2[lib.To_int(v[0])] += 1
-				break
-			}
-		}
-	}
-	Data["Sales_Day_z_list_1"] = Sales_Day_z_list_1
-	Data["Sales_Day_z_list_2"] = Sales_Day_z_list_2
-
-	// 物流端使用占比
-	var DY_pie_1 []map[string]interface{}
-	Admin_maps = Account.Read_Admin_List_Admin_master_ALL(admin_r.Id)
-	for _, Admin_maps_v := range Admin_maps {
-		Day_x := 0
-		Device_l := Device.Read_Device_ALL_bind_T_l_p(Admin_maps_v, 1)
-		if len(Device_l) == 0 {
-			continue
-		}
-		for _, Device_list_v := range Device_l {
-			// 今天 次数(每小时一次)
-			if len(Device.Read_DeviceSensorData_ById_Day_List(Device_list_v.T_sn)) > 0 {
-				Day_x += 1
-			}
-		}
-		Data_YD := make(map[string]interface{})
-		Data_YD["Name"] = Admin_maps_v.Admin_name
-		Data_YD["Ratio"] = Day_x
-		Device_YD_1_Count_use += Day_x // 统计 使用次数
-		DY_pie_1 = append(DY_pie_1, Data_YD)
-	}
-	Data["YD_pie_1"] = DY_pie_1
-
-	// 药店端使用占比
-	var DY_pie_2 []map[string]interface{}
-	Admin_maps = Account.Read_Admin_List_Admin_master_ALL(admin_r.Id)
-	for _, Admin_maps_v := range Admin_maps {
-		Day_x := 0
-		Device_l := Device.Read_Device_ALL_bind_T_l_p(Admin_maps_v, 2)
-		if len(Device_l) == 0 {
-			continue
-		}
-		for _, Device_list_v := range Device_l {
-			// 今天 次数(每小时一次)
-			if len(Device.Read_DeviceSensorData_ById_Day_List(Device_list_v.T_sn)) > 0 {
-				Day_x += 1
-			}
-
-		}
-		Data_YD := make(map[string]interface{})
-		Data_YD["Name"] = Admin_maps_v.Admin_name
-		Data_YD["Ratio"] = Day_x
-		Device_YD_1_Count_use += Day_x // 统计 使用次数
-		DY_pie_2 = append(DY_pie_2, Data_YD)
-	}
-	Data["YD_pie_2"] = DY_pie_2
-
-	// 运输端数据统计
-	var YD_1_2 = make(map[string]interface{})
-	Device_YD_1_Count := Device.Read_Device_ALL_T_Bind_Count(admin_r, "YD", 1)
-	YD_1_2["Device_YD_1_Count"] = Device_YD_1_Count
-	Device_YD_2_Count := Device.Read_Device_ALL_T_Bind_Count(admin_r, "YD", 2)
-	YD_1_2["Device_YD_2_Count"] = Device_YD_2_Count
-
-	YD_1_2["Device_YD_1_Count_use"] = Device_YD_1_Count_use
-	YD_1_2["Device_YD_2_Count_use"] = Device_YD_2_Count_use
-
-	Data["YD_1_2"] = YD_1_2
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Data}
-	c.ServeJSON()
-	return
-}
-
-//  大数据平台
-func (c *DataController) DataScreen_Map() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	if admin_r.Admin_power == 10 {
-		admin_r.Id = admin_r.Admin_master
-	}
-
-	data := Device.Read_DeviceSensor_Map_ALL_1(admin_r, 0, "", "", "YD")
-
-	for i, v := range data {
-		DeviceSensorData, is := Device.Read_DeviceSensorData_ById_New(v.T_sn, v.T_id)
-		if !is {
-			continue
-		}
-		data[i].T_t = DeviceSensorData.T_t
-		data[i].T_rh = DeviceSensorData.T_rh
-		data[i].T_Site = DeviceSensorData.T_Site
-		data[i].T_Dattery = DeviceSensorData.T_Dattery
-		data[i].T_time = DeviceSensorData.T_time
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: data}
-	c.ServeJSON()
-	return
-}
-
 // 列表 - 接口
 func (c *DataController) DeviceSensor_Data_Print() {
 
 	SN := c.GetString("T_sn")
+	T_id, _ := c.GetInt("T_id")
 	Time_start := c.GetString("Time_start")
 	Time_end := c.GetString("Time_end")
 
@@ -869,15 +438,15 @@ func (c *DataController) DeviceSensor_Data_Print() {
 
 	r_jsons := make(map[string]R_JSONS)
 
-	GROUP_BY_t_time := Device.Read_DeviceSensorData_List_GROUP_BY_t_time(SN, Time_start, Time_end)
+	GROUP_BY_t_time := Device.Read_DeviceData_List_GROUP_BY_t_time(SN, Time_start, Time_end)
 	// 时间 MAP
 	for _, vt := range GROUP_BY_t_time {
 		tt := lib.To_string(vt[0])
 		r_jsons[tt] = R_JSONS{T_time: tt, T1: nil, T2: nil, T3: nil, T4: nil}
 	}
 	// 记录传感器
-
-	maps, num := Device.Read_DeviceSensorData_ById_List(SN, 1, Time_start, Time_end, 1, 9999)
+	SParamMap := Device.Read_DeviceSensorParameter_Map_All(SN, T_id)
+	maps, num := Device.Read_DeviceData_ById_List(SN, T_id, Time_start, Time_end, 1, 9999, SParamMap)
 	if num > 0 {
 		for _, v_map := range maps {
 			ws, ok := r_jsons[v_map.T_time] /*如果确定是真实的,则存在,否则不存在 */
@@ -887,37 +456,6 @@ func (c *DataController) DeviceSensor_Data_Print() {
 			}
 		}
 	}
-	maps, num = Device.Read_DeviceSensorData_ById_List(SN, 2, Time_start, Time_end, 1, 9999)
-	if num > 0 {
-		for _, v_map := range maps {
-			ws, ok := r_jsons[v_map.T_time] /*如果确定是真实的,则存在,否则不存在 */
-			if ok {
-				ws.T2 = v_map
-				r_jsons[v_map.T_time] = ws
-			}
-		}
-	}
-	maps, num = Device.Read_DeviceSensorData_ById_List(SN, 3, Time_start, Time_end, 1, 9999)
-	if num > 0 {
-		for _, v_map := range maps {
-			ws, ok := r_jsons[v_map.T_time] /*如果确定是真实的,则存在,否则不存在 */
-			if ok {
-				ws.T3 = v_map
-				r_jsons[v_map.T_time] = ws
-			}
-		}
-	}
-	maps, num = Device.Read_DeviceSensorData_ById_List(SN, 4, Time_start, Time_end, 1, 9999)
-	if num > 0 {
-		for _, v_map := range maps {
-			ws, ok := r_jsons[v_map.T_time] /*如果确定是真实的,则存在,否则不存在 */
-			if ok {
-				ws.T4 = v_map
-				r_jsons[v_map.T_time] = ws
-			}
-		}
-	}
-
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.ServeJSON()
 	return
@@ -942,9 +480,9 @@ func (c *DataController) Device_Sensor_Data_PDF() {
 		c.ServeJSON()
 		return
 	}
-	var DeviceSensor_data []Device.DeviceData_
+	var DeviceSensor_data []Device.DeviceData_R
 
-	DeviceSensor_data, _ = Device.Read_DeviceSensorData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999)
+	DeviceSensor_data, _ = Device.Read_V2_DeviceData_By_T_snid_List(T_snid, Time_start, Time_end, 0, 9999)
 
 	var err error
 	pdf := &gopdf.GoPdf{}
@@ -979,10 +517,10 @@ func (c *DataController) Device_Sensor_Data_PDF() {
 	//use path
 	//pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50})
 
-	textw, _ := pdf.MeasureTextWidth(user_r.Admin_name)
+	textw, _ := pdf.MeasureTextWidth(user_r.T_name)
 	pdf.SetX((595 / 2) - (textw / 2))
 	pdf.SetY(40)
-	pdf.Text(user_r.Admin_name)
+	pdf.Text(user_r.T_name)
 
 	// 线
 	pdf.SetLineWidth(2)
@@ -1035,13 +573,13 @@ func (c *DataController) Device_Sensor_Data_PDF() {
 
 		T_t := fmt.Sprintf(" %.1f ", v.T_t)
 		T_rh := fmt.Sprintf(" %.1f ", v.T_rh)
-		T_Tlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_Tlower, v.T_Tupper)
-		T_Rlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_RHlower, v.T_RHupper)
+		T_Tlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_tl, v.T_tu)
+		T_Rlu := fmt.Sprintf(" %.1f ~ %.1f ", v.T_rhl, v.T_rhu)
 		T_time := fmt.Sprintf("%s", v.T_time)
-		if user_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD") {
-			T_rh = "-"
-			T_Rlu = "-"
-		}
+		//if user_r.Admin_rh == 0 && strings.Contains(v.T_sn, "YD") {
+		//	T_rh = "-"
+		//	T_Rlu = "-"
+		//}
 
 		lib.RectFillColor(pdf, text, 10, 22, y, 30, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
 		lib.RectFillColor(pdf, v.T_name, 10, 52, y, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
@@ -1083,7 +621,7 @@ func (c *DataController) Device_Sensor_Data_PDF() {
 
 }
 
-//  大数据平台
+// 大数据平台
 func (c *DataController) Raw() {
 	// 验证登录
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
@@ -1116,120 +654,23 @@ func (c *DataController) Raw() {
 		strings.Contains(T_SQL_, "insert") ||
 		strings.Contains(T_SQL_, "update") ||
 		strings.Contains(T_SQL_, "delete") {
-		RawSql.Add_SqlLogs(admin_r.Admin_uuid, "Err:"+admin_r.Admin_user, T_SQL)
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.Admin_name + " :你的行为 也被记录"}
+		RawSql.Add_SqlLogs(admin_r.T_uuid, "Err:"+admin_r.T_user, T_SQL)
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.T_name + " :你的行为 也被记录"}
 		c.ServeJSON()
 		return
 	}
 
 	if //!strings.Contains(T_SQL, "Z_DeviceData_") ||
 	!strings.Contains(T_SQL_, "select") {
-		RawSql.Add_SqlLogs(admin_r.Admin_uuid, "Err:"+admin_r.Admin_user, T_SQL)
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.Admin_name + " :你的行为 也被记录"}
+		RawSql.Add_SqlLogs(admin_r.T_uuid, "Err:"+admin_r.T_user, T_SQL)
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.T_name + " :你的行为 也被记录"}
 		c.ServeJSON()
 		return
 	}
 
-	RawSql.Add_SqlLogs(admin_r.Admin_uuid, "ok", T_SQL)
+	RawSql.Add_SqlLogs(admin_r.T_uuid, "ok", T_SQL)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.Read_SqlRaw(T_SQL)}
 	c.ServeJSON()
 	return
 }
-
-// -------------------------------------------------      3D视图 - HTML     -------------------------------------------------
-func (c *DataController) DataView3d_html() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	c.Data["Admin_r"] = admin_r
-	v, err := c.GetInt("v") // 强行阅览
-
-	if admin_r.Admin_power != 6 || err == nil {
-		Htmlv3d := ""
-		switch v {
-		case 0:
-			Htmlv3d = admin_r.Admin_panel_v3d
-			break
-		case 1:
-			Htmlv3d = admin_r.Admin_panel_v3d1
-			break
-		case 2:
-			Htmlv3d = admin_r.Admin_panel_v3d2
-			break
-		case 3:
-			Htmlv3d = admin_r.Admin_panel_v3d3
-			break
-		case 4:
-			Htmlv3d = admin_r.Admin_panel_v3d4
-			break
-		case 5:
-			Htmlv3d = admin_r.Admin_panel_v3d5
-			break
-
-		default:
-			Htmlv3d = admin_r.Admin_panel_v3d
-			break
-		}
-		if len(admin_r.Admin_panel_v3d) == 0 {
-			Htmlv3d = "<html><head></head><body><h1>您当期没有可用3D视图</h1></body></html>"
-		}
-		Htmlv3d = strings.Replace(Htmlv3d, "<<User_tokey>>", c.Ctx.GetCookie("User_tokey"), -1)
-		c.Data["Htmlv3d"] = Htmlv3d
-		// 普通用户
-		c.TplName = "Data/DataView3d.html"
-	} else {
-		// 内部运维
-		c.TplName = "Data/DataView3dE.html"
-	}
-
-	//
-	//
-	//Name := c.GetString("Name")
-	//
-	//c.Data["Class_List"] = Device.Read_DeviceClass_ALL_T_uuid_1(admin_r.Admin_uuid)
-	//c.Data["Name"] = Name
-
-}
-func (c *DataController) UpDataView3d() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	if admin_r.Admin_power != 6 {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User Err!"}
-		c.ServeJSON()
-		return
-	}
-
-	admin_r.Admin_panel_v3d = c.GetString("View3dHtml")
-	admin_r.Admin_panel_v3d1 = c.GetString("View3dHtml1")
-	admin_r.Admin_panel_v3d2 = c.GetString("View3dHtml2")
-	admin_r.Admin_panel_v3d3 = c.GetString("View3dHtml3")
-	admin_r.Admin_panel_v3d4 = c.GetString("View3dHtml4")
-	admin_r.Admin_panel_v3d5 = c.GetString("View3dHtml5")
-
-	Account.Update_Admin(admin_r, "Admin_panel_v3d", "Admin_panel_v3d1", "Admin_panel_v3d2", "Admin_panel_v3d3", "Admin_panel_v3d4", "Admin_panel_v3d5")
-
-	for _, v := range Account.Read_Admin_master_next_ALL(admin_r.Id) {
-		v.Admin_panel_v3d = c.GetString("View3dHtml")
-		v.Admin_panel_v3d1 = c.GetString("View3dHtml1")
-		v.Admin_panel_v3d2 = c.GetString("View3dHtml2")
-		v.Admin_panel_v3d3 = c.GetString("View3dHtml3")
-		v.Admin_panel_v3d4 = c.GetString("View3dHtml4")
-		v.Admin_panel_v3d5 = c.GetString("View3dHtml5")
-
-		Account.Update_Admin(v, "Admin_panel_v3d", "Admin_panel_v3d1", "Admin_panel_v3d2", "Admin_panel_v3d3", "Admin_panel_v3d4", "Admin_panel_v3d5")
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-}

文件差异内容过多而无法显示
+ 493 - 344
controllers/Device.go


+ 977 - 989
controllers/GoodsOrder.go

@@ -1,20 +1,7 @@
 package controllers
 
 import (
-	"Cold_Api/Nats/NatsServer"
-	"Cold_Api/conf"
-	"Cold_Api/controllers/lib"
-	"Cold_Api/models/Device"
-	"Cold_Api/models/Function"
-	"fmt"
 	beego "github.com/beego/beego/v2/server/web"
-	"github.com/signintech/gopdf"
-	"math"
-	"os"
-	"strconv"
-	"strings"
-
-	"time"
 )
 
 //Handle
@@ -22,131 +9,6 @@ type GoodsOrderController struct {
 	beego.Controller
 }
 
-func (c *GoodsOrderController) GoodsOrder_List() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	type R_JSONS struct {
-		//必须的大写开头
-		Data      []Function.GoodsOrderR
-		Num       int64
-		Page      int
-		Page_size int
-	}
-
-	var r_jsons R_JSONS
-
-	page, _ := c.GetInt("page")
-	println(page)
-	if page < 1 {
-		page = 1
-	}
-	page_z, _ := c.GetInt("page_z")
-	if page_z < 1 {
-		page_z = conf.Page_size
-	}
-
-	Name := c.GetString("T_name")
-	c.Data["Name"] = Name
-
-	r_jsons.Data, r_jsons.Num = Function.Read_V2_GoodsOrder_List(admin_r.Admin_uuid, page, page_z, Name)
-	r_jsons.Page = page
-	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
-	c.ServeJSON()
-	return
-}
-func (c *GoodsOrderController) GoodsOrder_Get() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Ctx.Redirect(302, "Login")
-		return
-	}
-
-	id, _ := c.GetInt("T_id")
-
-	r := Function.Read_GoodsOrder_ById(id)
-
-	if r.Id == 0 {
-		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_id !"}
-		c.ServeJSON()
-		return
-	}
-	if admin_r.Admin_uuid != r.T_uuid {
-		c.Data["json"] = lib.JSONS{Code: 205, Msg: "你没有权限 !"}
-		c.ServeJSON()
-		return
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Function.GoodsOrderToGoodsOrderR(r)}
-	c.ServeJSON()
-	return
-}
-
-func (c *GoodsOrderController) GoodsOrder_html() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Ctx.Redirect(302, "Login")
-		return
-	}
-	c.Data["Device_lite"] = Device.Read_Device_ALL_bind(admin_r)
-
-	//c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
-	Name := c.GetString("Name")
-	c.Data["Name"] = Name
-
-	page, _ := c.GetInt("page")
-
-	println(page)
-	if page < 1 {
-		page = 1
-	}
-
-	page_z, _ := c.GetInt("Page_size")
-	if page_z == 0 {
-		page_z = conf.Page_size
-	}
-
-	List, cnt := Function.Read_GoodsOrder_List(admin_r.Admin_uuid, page, page_z, Name)
-
-	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
-
-	c.Data["List"] = List
-	c.Data["Page"] = page
-	c.Data["Page_size"] = page_size
-	c.Data["Pages"] = lib.Func_page(int64(page), int64(page_size))
-	c.Data["cnt"] = cnt
-
-	c.TplName = "GoodsOrder/GoodsOrder.html"
-}
-
-func (c *GoodsOrderController) GoodsOrder__html() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Ctx.Redirect(302, "Login")
-		return
-	}
-
-	c.Data["Device_lite"] = Device.Read_Device_ALL_bind(admin_r)
-
-	//c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
-	id, _ := c.GetInt("id")
-	c.Data["id"] = id
-	if id > 0 {
-		c.Data["Date"] = Function.Read_GoodsOrder_ById(id)
-	}
-
-	c.TplName = "GoodsOrder/GoodsOrder-.html"
-}
-
 //
 //func (c *GoodsOrderController) GoodsOrder_List() {
 //	// 验证登录
@@ -156,16 +18,78 @@ func (c *GoodsOrderController) GoodsOrder__html() {
 //		c.ServeJSON()
 //		return
 //	}
-//
 //	type R_JSONS struct {
 //		//必须的大写开头
-//		DeviceSensor_lite []Device.DeviceSensor_R
-//		Num               int
-//		Page              int
-//		Page_size         int
-//		Pages             []lib.Page_T
+//		Data      []Function.GoodsOrderR
+//		Num       int64
+//		Page      int
+//		Page_size int
 //	}
+//
 //	var r_jsons R_JSONS
+//
+//	page, _ := c.GetInt("page")
+//	println(page)
+//	if page < 1 {
+//		page = 1
+//	}
+//	page_z, _ := c.GetInt("page_z")
+//	if page_z < 1 {
+//		page_z = conf.Page_size
+//	}
+//
+//	Name := c.GetString("T_name")
+//	c.Data["Name"] = Name
+//
+//	r_jsons.Data, r_jsons.Num = Function.Read_V2_GoodsOrder_List(admin_r.Admin_uuid, page, page_z, Name)
+//	r_jsons.Page = page
+//	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
+//
+//	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+//	c.ServeJSON()
+//	return
+//}
+//func (c *GoodsOrderController) GoodsOrder_Get() {
+//	// 验证登录
+//	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+//	if !b_ {
+//		c.Ctx.Redirect(302, "Login")
+//		return
+//	}
+//
+//	id, _ := c.GetInt("T_id")
+//
+//	r := Function.Read_GoodsOrder_ById(id)
+//
+//	if r.Id == 0 {
+//		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_id !"}
+//		c.ServeJSON()
+//		return
+//	}
+//	if admin_r.Admin_uuid != r.T_uuid {
+//		c.Data["json"] = lib.JSONS{Code: 205, Msg: "你没有权限 !"}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Function.GoodsOrderToGoodsOrderR(r)}
+//	c.ServeJSON()
+//	return
+//}
+//
+//func (c *GoodsOrderController) GoodsOrder_html() {
+//	// 验证登录
+//	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+//	if !b_ {
+//		c.Ctx.Redirect(302, "Login")
+//		return
+//	}
+//	c.Data["Device_lite"] = Device.Read_Device_ALL_bind(admin_r)
+//
+//	//c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+//	Name := c.GetString("Name")
+//	c.Data["Name"] = Name
+//
 //	page, _ := c.GetInt("page")
 //
 //	println(page)
@@ -173,869 +97,933 @@ func (c *GoodsOrderController) GoodsOrder__html() {
 //		page = 1
 //	}
 //
-//	page_z, _ := c.GetInt("page_z")
+//	page_z, _ := c.GetInt("Page_size")
 //	if page_z == 0 {
 //		page_z = conf.Page_size
 //	}
 //
-//	T_sn := c.GetString("Sn")
+//	List, cnt := Function.Read_GoodsOrder_List(admin_r.Admin_uuid, page, page_z, Name)
 //
-//	Device_r, err := Device.Read_Device_ByT_sn(T_sn)
-//	if err != nil {
-//		c.Data["json"] = lib.JSONS{Code: 206, Msg: "T_sn Err!"}
+//	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
+//
+//	c.Data["List"] = List
+//	c.Data["Page"] = page
+//	c.Data["Page_size"] = page_size
+//	c.Data["Pages"] = lib.Func_page(int64(page), int64(page_size))
+//	c.Data["cnt"] = cnt
+//
+//	c.TplName = "GoodsOrder/GoodsOrder.html"
+//}
+//
+//func (c *GoodsOrderController) GoodsOrder__html() {
+//	// 验证登录
+//	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+//	if !b_ {
+//		c.Ctx.Redirect(302, "Login")
+//		return
+//	}
+//
+//	c.Data["Device_lite"] = Device.Read_Device_ALL_bind(admin_r)
+//
+//	//c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+//	id, _ := c.GetInt("id")
+//	c.Data["id"] = id
+//	if id > 0 {
+//		c.Data["Date"] = Function.Read_GoodsOrder_ById(id)
+//	}
+//
+//	c.TplName = "GoodsOrder/GoodsOrder-.html"
+//}
+//
+////
+////func (c *GoodsOrderController) GoodsOrder_List() {
+////	// 验证登录
+////	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+////	if !b_ {
+////		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+////		c.ServeJSON()
+////		return
+////	}
+////
+////	type R_JSONS struct {
+////		//必须的大写开头
+////		DeviceSensor_lite []Device.DeviceSensor_R
+////		Num               int
+////		Page              int
+////		Page_size         int
+////		Pages             []lib.Page_T
+////	}
+////	var r_jsons R_JSONS
+////	page, _ := c.GetInt("page")
+////
+////	println(page)
+////	if page < 1 {
+////		page = 1
+////	}
+////
+////	page_z, _ := c.GetInt("page_z")
+////	if page_z == 0 {
+////		page_z = conf.Page_size
+////	}
+////
+////	T_sn := c.GetString("Sn")
+////
+////	Device_r, err := Device.Read_Device_ByT_sn(T_sn)
+////	if err != nil {
+////		c.Data["json"] = lib.JSONS{Code: 206, Msg: "T_sn Err!"}
+////		c.ServeJSON()
+////		return
+////	}
+////	if admin_r.Admin_master > 1 {
+////		if !strings.Contains(Device_r.T_Bind, "U"+strconv.Itoa(admin_r.Id)+"|") && admin_r.Admin_master != 0 {
+////			c.Data["json"] = lib.JSONS{Code: 202, Msg: "! U" + strconv.Itoa(admin_r.Id)}
+////			c.ServeJSON()
+////			return
+////		}
+////	}
+////
+////	//c.Data["Class_List"] = Device.Read_Class_All_1()
+////
+////	var cnt int64
+////	r_jsons.DeviceSensor_lite, cnt = Device.Read_DeviceSensor_ALL_T_sn(T_sn, page, page_z)
+////
+////	page_size := math.Ceil(float64(cnt) / float64(page_z))
+////	r_jsons.Page = int(page)
+////	r_jsons.Page_size = int(page_size)
+////	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
+////	r_jsons.Num = int(cnt)
+////
+////	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+////	c.ServeJSON()
+////	return
+////
+////}
+////
+//
+//func (c *GoodsOrderController) List_Post() {
+//	// 验证登录
+//	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+//	if !b_ {
+//		c.Ctx.Redirect(302, "Login")
+//		return
+//	}
+//	var id int64
+//	var err error
+//
+//	id, _ = c.GetInt64("id")
+//	T_orderid := c.GetString("T_orderid")
+//	T_outorderid := c.GetString("T_outorderid")
+//	T_sn := c.GetString("T_sn")
+//	T_receiving := c.GetString("T_receiving")
+//	T_start_Ut := c.GetString("T_start_Ut")
+//	T_end_Ut := c.GetString("T_end_Ut")
+//	T_start_Ut_T, _ := c.GetFloat("T_start_Ut_T")
+//	T_end_Ut_T, _ := c.GetFloat("T_end_Ut_T")
+//	T_text := c.GetString("T_text")
+//
+//	T_start_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_start_Ut, time.Local)
+//	T_end_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_end_Ut, time.Local)
+//	var_ := Function.GoodsOrder{
+//		T_uuid:       admin_r.Admin_uuid,
+//		T_orderid:    T_orderid,
+//		T_outorderid: T_outorderid,
+//		T_sn:         T_sn,
+//		T_receiving:  T_receiving,
+//		T_start_Ut:   T_start_Ut_,
+//		T_end_Ut:     T_end_Ut_,
+//		T_start_Ut_T: float32(T_start_Ut_T),
+//		T_end_Ut_T:   float32(T_end_Ut_T),
+//		T_text:       T_text,
+//		T_State:      1,
+//	}
+//
+//	if id > 0 {
+//		var_.Id = int(id)
+//		is := Function.Update_TGoodsOrder(var_, "T_orderid", "T_outorderid", "T_sn", "T_receiving", "T_start_Ut", "T_end_Ut", "T_start_Ut_T", "T_end_Ut_T", "T_text")
+//		if !is {
+//			c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
+//			c.ServeJSON()
+//			return
+//		}
+//	} else {
+//		id, err = Function.Add_GoodsOrder(var_)
+//		if err != nil {
+//			c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
+//			c.ServeJSON()
+//			return
+//		}
+//
+//	}
+//
+//	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+//	c.ServeJSON()
+//	return
+//
+//}
+//func (c *GoodsOrderController) GoodsOrder_Add() {
+//	// 验证登录
+//	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+//	if !b_ {
+//		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
 //		c.ServeJSON()
 //		return
 //	}
-//	if admin_r.Admin_master > 1 {
-//		if !strings.Contains(Device_r.T_Bind, "U"+strconv.Itoa(admin_r.Id)+"|") && admin_r.Admin_master != 0 {
-//			c.Data["json"] = lib.JSONS{Code: 202, Msg: "! U" + strconv.Itoa(admin_r.Id)}
+//	var id int64
+//	var err error
+//
+//	id, _ = c.GetInt64("T_id")
+//	T_orderid := c.GetString("T_orderid")
+//	T_outorderid := c.GetString("T_outorderid")
+//	T_sn := c.GetString("T_sn")
+//	T_receiving := c.GetString("T_receiving")
+//	T_time := c.GetString("T_time")
+//	T_text := c.GetString("T_text")
+//	T_time_s := strings.Split(T_time, "|")
+//	if len(T_time_s) != 2 {
+//		c.Data["json"] = lib.JSONS{Code: 207, Msg: "时间参数异常!"}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	T_start_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_time_s[0], time.Local)
+//	T_end_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_time_s[1], time.Local)
+//	var_ := Function.GoodsOrder{
+//		T_uuid:       admin_r.Admin_uuid,
+//		T_orderid:    T_orderid,
+//		T_outorderid: T_outorderid,
+//		T_sn:         T_sn,
+//		T_receiving:  T_receiving,
+//		T_start_Ut:   T_start_Ut_,
+//		T_end_Ut:     T_end_Ut_,
+//		T_text:       T_text,
+//		T_State:      1,
+//	}
+//
+//	if id > 0 {
+//		var_.Id = int(id)
+//		is := Function.Update_TGoodsOrder(var_, "T_orderid", "T_outorderid", "T_sn", "T_receiving", "T_start_Ut", "T_end_Ut", "T_start_Ut_T", "T_end_Ut_T", "T_text")
+//		if !is {
+//			c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
 //			c.ServeJSON()
 //			return
 //		}
+//	} else {
+//		id, err = Function.Add_GoodsOrder(var_)
+//		if err != nil {
+//			c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
+//			c.ServeJSON()
+//			return
+//		}
+//
 //	}
 //
-//	//c.Data["Class_List"] = Device.Read_Class_All_1()
+//	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+//	c.ServeJSON()
+//	return
 //
-//	var cnt int64
-//	r_jsons.DeviceSensor_lite, cnt = Device.Read_DeviceSensor_ALL_T_sn(T_sn, page, page_z)
+//}
+//func (c *GoodsOrderController) GoodsOrder_Edit() {
+//	// 验证登录
+//	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+//	if !b_ {
+//		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+//		c.ServeJSON()
+//		return
+//	}
+//	var id int64
+//	var err error
 //
-//	page_size := math.Ceil(float64(cnt) / float64(page_z))
-//	r_jsons.Page = int(page)
-//	r_jsons.Page_size = int(page_size)
-//	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
-//	r_jsons.Num = int(cnt)
+//	id, _ = c.GetInt64("T_id")
+//	T_orderid := c.GetString("T_orderid")
+//	T_outorderid := c.GetString("T_outorderid")
+//	T_sn := c.GetString("T_sn")
+//	T_receiving := c.GetString("T_receiving")
+//	T_time := c.GetString("T_time")
+//	T_text := c.GetString("T_text")
+//	T_time_s := strings.Split(T_time, "|")
+//	if len(T_time_s) != 2 {
+//		c.Data["json"] = lib.JSONS{Code: 207, Msg: "时间参数异常!"}
+//		c.ServeJSON()
+//		return
+//	}
+//	println("T_time_s:", T_time_s)
+//	T_start_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_time_s[0], time.Local)
+//	T_end_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_time_s[1], time.Local)
+//	var_ := Function.GoodsOrder{
+//		T_uuid:       admin_r.Admin_uuid,
+//		T_orderid:    T_orderid,
+//		T_outorderid: T_outorderid,
+//		T_sn:         T_sn,
+//		T_receiving:  T_receiving,
+//		T_start_Ut:   T_start_Ut_,
+//		T_end_Ut:     T_end_Ut_,
+//		T_text:       T_text,
+//		T_State:      1,
+//	}
 //
-//	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+//	if id > 0 {
+//		var_.Id = int(id)
+//		is := Function.Update_TGoodsOrder(var_, "T_orderid", "T_outorderid", "T_sn", "T_receiving", "T_start_Ut", "T_end_Ut", "T_start_Ut_T", "T_end_Ut_T", "T_text")
+//		if !is {
+//			c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
+//			c.ServeJSON()
+//			return
+//		}
+//	} else {
+//		id, err = Function.Add_GoodsOrder(var_)
+//		if err != nil {
+//			c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
+//			c.ServeJSON()
+//			return
+//		}
+//
+//	}
+//
+//	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 //	c.ServeJSON()
 //	return
 //
 //}
 //
-
-func (c *GoodsOrderController) List_Post() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Ctx.Redirect(302, "Login")
-		return
-	}
-	var id int64
-	var err error
-
-	id, _ = c.GetInt64("id")
-	T_orderid := c.GetString("T_orderid")
-	T_outorderid := c.GetString("T_outorderid")
-	T_sn := c.GetString("T_sn")
-	T_receiving := c.GetString("T_receiving")
-	T_start_Ut := c.GetString("T_start_Ut")
-	T_end_Ut := c.GetString("T_end_Ut")
-	T_start_Ut_T, _ := c.GetFloat("T_start_Ut_T")
-	T_end_Ut_T, _ := c.GetFloat("T_end_Ut_T")
-	T_text := c.GetString("T_text")
-
-	T_start_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_start_Ut, time.Local)
-	T_end_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_end_Ut, time.Local)
-	var_ := Function.GoodsOrder{
-		T_uuid:       admin_r.Admin_uuid,
-		T_orderid:    T_orderid,
-		T_outorderid: T_outorderid,
-		T_sn:         T_sn,
-		T_receiving:  T_receiving,
-		T_start_Ut:   T_start_Ut_,
-		T_end_Ut:     T_end_Ut_,
-		T_start_Ut_T: float32(T_start_Ut_T),
-		T_end_Ut_T:   float32(T_end_Ut_T),
-		T_text:       T_text,
-		T_State:      1,
-	}
-
-	if id > 0 {
-		var_.Id = int(id)
-		is := Function.Update_TGoodsOrder(var_, "T_orderid", "T_outorderid", "T_sn", "T_receiving", "T_start_Ut", "T_end_Ut", "T_start_Ut_T", "T_end_Ut_T", "T_text")
-		if !is {
-			c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
-			c.ServeJSON()
-			return
-		}
-	} else {
-		id, err = Function.Add_GoodsOrder(var_)
-		if err != nil {
-			c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
-			c.ServeJSON()
-			return
-		}
-
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-
-}
-func (c *GoodsOrderController) GoodsOrder_Add() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	var id int64
-	var err error
-
-	id, _ = c.GetInt64("T_id")
-	T_orderid := c.GetString("T_orderid")
-	T_outorderid := c.GetString("T_outorderid")
-	T_sn := c.GetString("T_sn")
-	T_receiving := c.GetString("T_receiving")
-	T_time := c.GetString("T_time")
-	T_text := c.GetString("T_text")
-	T_time_s := strings.Split(T_time, "|")
-	if len(T_time_s) != 2 {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "时间参数异常!"}
-		c.ServeJSON()
-		return
-	}
-
-	T_start_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_time_s[0], time.Local)
-	T_end_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_time_s[1], time.Local)
-	var_ := Function.GoodsOrder{
-		T_uuid:       admin_r.Admin_uuid,
-		T_orderid:    T_orderid,
-		T_outorderid: T_outorderid,
-		T_sn:         T_sn,
-		T_receiving:  T_receiving,
-		T_start_Ut:   T_start_Ut_,
-		T_end_Ut:     T_end_Ut_,
-		T_text:       T_text,
-		T_State:      1,
-	}
-
-	if id > 0 {
-		var_.Id = int(id)
-		is := Function.Update_TGoodsOrder(var_, "T_orderid", "T_outorderid", "T_sn", "T_receiving", "T_start_Ut", "T_end_Ut", "T_start_Ut_T", "T_end_Ut_T", "T_text")
-		if !is {
-			c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
-			c.ServeJSON()
-			return
-		}
-	} else {
-		id, err = Function.Add_GoodsOrder(var_)
-		if err != nil {
-			c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
-			c.ServeJSON()
-			return
-		}
-
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-
-}
-func (c *GoodsOrderController) GoodsOrder_Edit() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	var id int64
-	var err error
-
-	id, _ = c.GetInt64("T_id")
-	T_orderid := c.GetString("T_orderid")
-	T_outorderid := c.GetString("T_outorderid")
-	T_sn := c.GetString("T_sn")
-	T_receiving := c.GetString("T_receiving")
-	T_time := c.GetString("T_time")
-	T_text := c.GetString("T_text")
-	T_time_s := strings.Split(T_time, "|")
-	if len(T_time_s) != 2 {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "时间参数异常!"}
-		c.ServeJSON()
-		return
-	}
-	println("T_time_s:", T_time_s)
-	T_start_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_time_s[0], time.Local)
-	T_end_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_time_s[1], time.Local)
-	var_ := Function.GoodsOrder{
-		T_uuid:       admin_r.Admin_uuid,
-		T_orderid:    T_orderid,
-		T_outorderid: T_outorderid,
-		T_sn:         T_sn,
-		T_receiving:  T_receiving,
-		T_start_Ut:   T_start_Ut_,
-		T_end_Ut:     T_end_Ut_,
-		T_text:       T_text,
-		T_State:      1,
-	}
-
-	if id > 0 {
-		var_.Id = int(id)
-		is := Function.Update_TGoodsOrder(var_, "T_orderid", "T_outorderid", "T_sn", "T_receiving", "T_start_Ut", "T_end_Ut", "T_start_Ut_T", "T_end_Ut_T", "T_text")
-		if !is {
-			c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
-			c.ServeJSON()
-			return
-		}
-	} else {
-		id, err = Function.Add_GoodsOrder(var_)
-		if err != nil {
-			c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
-			c.ServeJSON()
-			return
-		}
-
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-
-}
-
-func (c *GoodsOrderController) GoodsOrder_Del() {
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-
-	Id, _ := c.GetInt("T_id")
-	r := Function.Read_GoodsOrder_ById(Id)
-
-	if r.Id == 0 {
-		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_id !"}
-		c.ServeJSON()
-		return
-	}
-	if admin_r.Admin_uuid != r.T_uuid {
-		c.Data["json"] = lib.JSONS{Code: 205, Msg: "你没有权限 !"}
-		c.ServeJSON()
-		return
-	}
-
-	r.T_State = 0
-	Function.Update_TGoodsOrder(r, "T_State")
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-
-}
-
-func (c *GoodsOrderController) List_Del() {
-	Id, _ := c.GetInt("Id")
-	if Id > 0 {
-		GoodsOrder_r := Function.Read_GoodsOrder_ById(Id)
-		Function.Delete_GoodsOrder_ById(GoodsOrder_r)
-	} else {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
-		c.ServeJSON()
-		return
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-
-}
-
-// 列表 - 接口
-func (c *GoodsOrderController) Data_PDF() {
-	var err error
-	// 验证登录
-	b_, user_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	Id, _ := c.GetInt("Id")
-	if Id == 0 {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id  e!"}
-		c.ServeJSON()
-		return
-	}
-
-	GoodsOrder_r := Function.Read_GoodsOrder_ById(Id)
-	if GoodsOrder_r.Id == 0 {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "Id  e!"}
-		c.ServeJSON()
-		return
-	}
-	Device_r, err := Device.Read_Device_ByT_sn(GoodsOrder_r.T_sn)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_sn Err!"}
-		c.ServeJSON()
-		return
-	}
-
-	DeviceSensor_r := Device.Read_DeviceSensor_ALL_List_T_sn(GoodsOrder_r.T_sn)
-	if len(DeviceSensor_r) == 0 {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: GoodsOrder_r.T_sn + "设备没有数据!"}
-		c.ServeJSON()
-		return
-	}
-
-	var DeviceSensor_data []Device.DeviceData_
-	DeviceSensor_data, _ = Device.Read_DeviceSensorData_By_T_snid_List(GoodsOrder_r.T_sn+","+strconv.Itoa(DeviceSensor_r[0].T_id), GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05"), GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"), 0, 9999)
-
-	pdf := &gopdf.GoPdf{}
-	pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4
-	//err = GetFont(pdf, "LiberationSerif-Regular.ttf")
-	//if err != nil {
-	//	log.Fatalln(err)
-	//}
-	//err = pdf.SetFont("Ubuntu-L", "", 14)
-	//if err != nil {
-	//	log.Fatalln(err)
-	//}
-
-	err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf")
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 204, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-	err = pdf.SetFont("simsun", "", 24)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 205, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-
-	pdf.SetGrayFill(0.5)
-
-	pdf.SetMargins(0, 20, 0, 20)
-	pdf.AddPage()
-
-	//use path
-	//pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50})
-
-	textw, _ := pdf.MeasureTextWidth(user_r.Admin_name)
-	pdf.SetX((595 / 2) - (textw / 2))
-	pdf.SetY(40)
-	pdf.Text(user_r.Admin_name)
-
-	// 线
-	pdf.SetLineWidth(2)
-	pdf.SetLineType("dashed")
-	pdf.Line(10, 60, 585, 60)
-
-	err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf")
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 206, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-	err = pdf.SetFont("wts", "", 10)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-	//fmt.Sprintf(" %.1f ", v.T_t)
-	//lib.RectFillColor(pdf, "历史数据["+Time_start+" / "+Time_end+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-
-	// -------------
-	x := 22.0
-	w1 := 80.0
-	w2 := 195.0
-
-	lib.RectFillColor(pdf, "订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, GoodsOrder_r.T_orderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	lib.RectFillColor(pdf, "出库订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, GoodsOrder_r.T_outorderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-	// -------------
-	x = 22.0
-	w1 = 80.0
-	w2 = 195.0
-
-	lib.RectFillColor(pdf, "设备名称:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, Device_r.T_devName, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	lib.RectFillColor(pdf, "设备编号:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, Device_r.T_sn, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-	// -------------
-	x = 22.0
-	w1 = 80.0
-	w2 = 240.0
-	T_time := fmt.Sprintf("%s", GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05")+" - "+GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"))
-	lib.RectFillColor(pdf, "送货时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_time, 12, x, 120, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_time = fmt.Sprintf("%s", GoodsOrder_r.CreateTime.Format("2006-01-02 15:04:05"))
-	lib.RectFillColor(pdf, "订单时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_time, 12, x, 120, 150, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-
-	// -------------
-	x = 22.0
-	w1 = 80.0
-	w2 = 195.0*2 + 80
-	T_text := fmt.Sprintf("%s", GoodsOrder_r.T_receiving)
-	lib.RectFillColor(pdf, "收货单位:", 12, x, 140, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_text, 12, x, 140, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	// -----------
-	textw, _ = pdf.MeasureTextWidth("历史数据")
-	pdf.SetX(20)
-	pdf.SetY(210)
-	pdf.Text("历史数据:")
-
-	// 数据展示--------------------------------
-	var y float64 = 220
-	x = 22.0
-	w1 = 94.0
-	w2 = 43.0
-
-	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-	// 数据展示--------------------------------
-
-	y = 240
-
-	err = pdf.SetFont("wts", "", 8)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-	nln := 0
-	x = 22.0
-	var T_t_l float32 = 100.0
-	var T_t_u float32 = 0.0
-	var T_t_v float32 = 0.0
-	for n := 0; len(DeviceSensor_data) > n; n++ {
-		// -计算温度
-		if DeviceSensor_data[n].T_t < T_t_l {
-			T_t_l = DeviceSensor_data[n].T_t
-		}
-		if DeviceSensor_data[n].T_t > T_t_u {
-			T_t_u = DeviceSensor_data[n].T_t
-		}
-		T_t_v += DeviceSensor_data[n].T_t
-
-		//text := fmt.Sprintf(" %d ", i+1)
-		var textH float64 = 25 // if text height is 25px.
-		pdf.SetNewY(y, textH)
-		y = pdf.GetY()
-
-		nln++
-		if nln > 4 {
-			nln = 1
-			x = 22.0
-			y += 18
-		}
-
-		// ------------------
-		T_t := fmt.Sprintf(" %.1f ", DeviceSensor_data[n].T_t)
-		T_time = fmt.Sprintf("%s", DeviceSensor_data[n].T_time)
-
-		lib.RectFillColor(pdf, T_time, 10, x, y, w1, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-		x += w1
-		lib.RectFillColor(pdf, T_t, 10, x, y, w2, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-		x += w2
-
-	}
-
-	err = pdf.SetFont("wts", "", 10)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-	// 数据汇总--------------------------------
-	y = 160
-	x = 22.0
-	w1 = 60.0
-	w2 = 50.0
-
-	T_t := fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[len(DeviceSensor_data)-1].T_t)
-	lib.RectFillColor(pdf, "起送温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_t = fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[0].T_t)
-	lib.RectFillColor(pdf, "送达温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_t = fmt.Sprintf(" %.1f℃ ", T_t_l)
-	lib.RectFillColor(pdf, "最低温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_t = fmt.Sprintf(" %.1f℃ ", float32(T_t_v/float32(len(DeviceSensor_data)-1)))
-	lib.RectFillColor(pdf, "平均温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_t = fmt.Sprintf(" %.1f℃ ", T_t_u)
-	lib.RectFillColor(pdf, "最高温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	//----------------
-	timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"
-
-	err = pdf.WritePdf(timeStr)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-
-	// 上传 OSS
-	url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
-	if !is {
-		c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
-		c.ServeJSON()
-		return
-	}
-	//删除目录
-	err = os.Remove(timeStr)
-	if err != nil {
-		fmt.Println(err)
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
-	c.ServeJSON()
-	return
-
-}
-
-// 列表 - 接口
-func (c *GoodsOrderController) GoodsOrder_PDF() {
-	var err error
-	// 验证登录
-	b_, user_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
-		c.ServeJSON()
-		return
-	}
-	Id, _ := c.GetInt("T_id")
-	if Id == 0 {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id  e!"}
-		c.ServeJSON()
-		return
-	}
-
-	GoodsOrder_r := Function.Read_GoodsOrder_ById(Id)
-	if GoodsOrder_r.Id == 0 {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "Id  e!"}
-		c.ServeJSON()
-		return
-	}
-	Device_r, err := Device.Read_Device_ByT_sn(GoodsOrder_r.T_sn)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_sn Err!"}
-		c.ServeJSON()
-		return
-	}
-
-	DeviceSensor_r := Device.Read_DeviceSensor_ALL_List_T_sn(GoodsOrder_r.T_sn)
-	if len(DeviceSensor_r) == 0 {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: GoodsOrder_r.T_sn + "设备没有数据!"}
-		c.ServeJSON()
-		return
-	}
-
-	var DeviceSensor_data []Device.DeviceData_
-	DeviceSensor_data, _ = Device.Read_DeviceSensorData_By_T_snid_List(GoodsOrder_r.T_sn+","+strconv.Itoa(DeviceSensor_r[0].T_id), GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05"), GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"), 0, 9999)
-
-	pdf := &gopdf.GoPdf{}
-	pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4
-	//err = GetFont(pdf, "LiberationSerif-Regular.ttf")
-	//if err != nil {
-	//	log.Fatalln(err)
-	//}
-	//err = pdf.SetFont("Ubuntu-L", "", 14)
-	//if err != nil {
-	//	log.Fatalln(err)
-	//}
-
-	err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf")
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 204, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-	err = pdf.SetFont("simsun", "", 24)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 205, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-
-	pdf.SetGrayFill(0.5)
-
-	pdf.SetMargins(0, 20, 0, 20)
-	pdf.AddPage()
-
-	//use path
-	//pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50})
-
-	textw, _ := pdf.MeasureTextWidth(user_r.Admin_name)
-	pdf.SetX((595 / 2) - (textw / 2))
-	pdf.SetY(40)
-	pdf.Text(user_r.Admin_name)
-
-	// 线
-	pdf.SetLineWidth(2)
-	pdf.SetLineType("dashed")
-	pdf.Line(10, 60, 585, 60)
-
-	err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf")
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 206, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-	err = pdf.SetFont("wts", "", 10)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-	//fmt.Sprintf(" %.1f ", v.T_t)
-	//lib.RectFillColor(pdf, "历史数据["+Time_start+" / "+Time_end+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-
-	// -------------
-	x := 22.0
-	w1 := 80.0
-	w2 := 195.0
-
-	lib.RectFillColor(pdf, "订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, GoodsOrder_r.T_orderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	lib.RectFillColor(pdf, "出库订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, GoodsOrder_r.T_outorderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-	// -------------
-	x = 22.0
-	w1 = 80.0
-	w2 = 195.0
-
-	lib.RectFillColor(pdf, "设备名称:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, Device_r.T_devName, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	lib.RectFillColor(pdf, "设备编号:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, Device_r.T_sn, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-	// -------------
-	x = 22.0
-	w1 = 80.0
-	w2 = 240.0
-	T_time := fmt.Sprintf("%s", GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05")+" - "+GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"))
-	lib.RectFillColor(pdf, "送货时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_time, 12, x, 120, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_time = fmt.Sprintf("%s", GoodsOrder_r.CreateTime.Format("2006-01-02 15:04:05"))
-	lib.RectFillColor(pdf, "订单时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_time, 12, x, 120, 150, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-
-	// -------------
-	x = 22.0
-	w1 = 80.0
-	w2 = 195.0*2 + 80
-	T_text := fmt.Sprintf("%s", GoodsOrder_r.T_receiving)
-	lib.RectFillColor(pdf, "收货单位:", 12, x, 140, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_text, 12, x, 140, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	// -----------
-	textw, _ = pdf.MeasureTextWidth("历史数据")
-	pdf.SetX(20)
-	pdf.SetY(210)
-	pdf.Text("历史数据:")
-
-	// 数据展示--------------------------------
-	var y float64 = 220
-	x = 22.0
-	w1 = 94.0
-	w2 = 43.0
-
-	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-	// 数据展示--------------------------------
-
-	y = 240
-
-	err = pdf.SetFont("wts", "", 8)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-	nln := 0
-	x = 22.0
-	var T_t_l float32 = 100.0
-	var T_t_u float32 = 0.0
-	var T_t_v float32 = 0.0
-	for n := 0; len(DeviceSensor_data) > n; n++ {
-		// -计算温度
-		if DeviceSensor_data[n].T_t < T_t_l {
-			T_t_l = DeviceSensor_data[n].T_t
-		}
-		if DeviceSensor_data[n].T_t > T_t_u {
-			T_t_u = DeviceSensor_data[n].T_t
-		}
-		T_t_v += DeviceSensor_data[n].T_t
-
-		//text := fmt.Sprintf(" %d ", i+1)
-		var textH float64 = 25 // if text height is 25px.
-		pdf.SetNewY(y, textH)
-		y = pdf.GetY()
-
-		nln++
-		if nln > 4 {
-			nln = 1
-			x = 22.0
-			y += 18
-		}
-
-		// ------------------
-		T_t := fmt.Sprintf(" %.1f ", DeviceSensor_data[n].T_t)
-		T_time = fmt.Sprintf("%s", DeviceSensor_data[n].T_time)
-
-		lib.RectFillColor(pdf, T_time, 10, x, y, w1, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-		x += w1
-		lib.RectFillColor(pdf, T_t, 10, x, y, w2, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-		x += w2
-
-	}
-
-	err = pdf.SetFont("wts", "", 10)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-	// 数据汇总--------------------------------
-	y = 160
-	x = 22.0
-	w1 = 60.0
-	w2 = 50.0
-
-	T_t := fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[len(DeviceSensor_data)-1].T_t)
-	lib.RectFillColor(pdf, "起送温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_t = fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[0].T_t)
-	lib.RectFillColor(pdf, "送达温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_t = fmt.Sprintf(" %.1f℃ ", T_t_l)
-	lib.RectFillColor(pdf, "最低温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_t = fmt.Sprintf(" %.1f℃ ", float32(T_t_v/float32(len(DeviceSensor_data)-1)))
-	lib.RectFillColor(pdf, "平均温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_t = fmt.Sprintf(" %.1f℃ ", T_t_u)
-	lib.RectFillColor(pdf, "最高温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	//----------------
-	timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"
-
-	err = pdf.WritePdf(timeStr)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
-		c.ServeJSON()
-		return
-	}
-
-	// 上传 OSS
-	url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
-	if !is {
-		c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
-		c.ServeJSON()
-		return
-	}
-	//删除目录
-	err = os.Remove(timeStr)
-	if err != nil {
-		fmt.Println(err)
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
-	c.ServeJSON()
-	return
-
-}
+//func (c *GoodsOrderController) GoodsOrder_Del() {
+//	// 验证登录
+//	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+//	if !b_ {
+//		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	Id, _ := c.GetInt("T_id")
+//	r := Function.Read_GoodsOrder_ById(Id)
+//
+//	if r.Id == 0 {
+//		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_id !"}
+//		c.ServeJSON()
+//		return
+//	}
+//	if admin_r.Admin_uuid != r.T_uuid {
+//		c.Data["json"] = lib.JSONS{Code: 205, Msg: "你没有权限 !"}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	r.T_State = 0
+//	Function.Update_TGoodsOrder(r, "T_State")
+//
+//	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+//	c.ServeJSON()
+//	return
+//
+//}
+//
+//func (c *GoodsOrderController) List_Del() {
+//	Id, _ := c.GetInt("Id")
+//	if Id > 0 {
+//		GoodsOrder_r := Function.Read_GoodsOrder_ById(Id)
+//		Function.Delete_GoodsOrder_ById(GoodsOrder_r)
+//	} else {
+//		c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+//	c.ServeJSON()
+//	return
+//
+//}
+//
+//// 列表 - 接口
+//func (c *GoodsOrderController) Data_PDF() {
+//	var err error
+//	// 验证登录
+//	b_, user_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+//	if !b_ {
+//		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+//		c.ServeJSON()
+//		return
+//	}
+//	Id, _ := c.GetInt("Id")
+//	if Id == 0 {
+//		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id  e!"}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	GoodsOrder_r := Function.Read_GoodsOrder_ById(Id)
+//	if GoodsOrder_r.Id == 0 {
+//		c.Data["json"] = lib.JSONS{Code: 207, Msg: "Id  e!"}
+//		c.ServeJSON()
+//		return
+//	}
+//	Device_r, err := Device.Read_Device_ByT_sn(GoodsOrder_r.T_sn)
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_sn Err!"}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	DeviceSensor_r := Device.Read_DeviceSensor_ALL_List_T_sn(GoodsOrder_r.T_sn)
+//	if len(DeviceSensor_r) == 0 {
+//		c.Data["json"] = lib.JSONS{Code: 202, Msg: GoodsOrder_r.T_sn + "设备没有数据!"}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	var DeviceSensor_data []Device.DeviceData_
+//	DeviceSensor_data, _ = Device.Read_DeviceSensorData_By_T_snid_List(GoodsOrder_r.T_sn+","+strconv.Itoa(DeviceSensor_r[0].T_id), GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05"), GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"), 0, 9999)
+//
+//	pdf := &gopdf.GoPdf{}
+//	pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4
+//	//err = GetFont(pdf, "LiberationSerif-Regular.ttf")
+//	//if err != nil {
+//	//	log.Fatalln(err)
+//	//}
+//	//err = pdf.SetFont("Ubuntu-L", "", 14)
+//	//if err != nil {
+//	//	log.Fatalln(err)
+//	//}
+//
+//	err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf")
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 204, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//	err = pdf.SetFont("simsun", "", 24)
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 205, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	pdf.SetGrayFill(0.5)
+//
+//	pdf.SetMargins(0, 20, 0, 20)
+//	pdf.AddPage()
+//
+//	//use path
+//	//pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50})
+//
+//	textw, _ := pdf.MeasureTextWidth(user_r.Admin_name)
+//	pdf.SetX((595 / 2) - (textw / 2))
+//	pdf.SetY(40)
+//	pdf.Text(user_r.Admin_name)
+//
+//	// 线
+//	pdf.SetLineWidth(2)
+//	pdf.SetLineType("dashed")
+//	pdf.Line(10, 60, 585, 60)
+//
+//	err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf")
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 206, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//	err = pdf.SetFont("wts", "", 10)
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//	//fmt.Sprintf(" %.1f ", v.T_t)
+//	//lib.RectFillColor(pdf, "历史数据["+Time_start+" / "+Time_end+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//
+//	// -------------
+//	x := 22.0
+//	w1 := 80.0
+//	w2 := 195.0
+//
+//	lib.RectFillColor(pdf, "订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, GoodsOrder_r.T_orderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	lib.RectFillColor(pdf, "出库订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, GoodsOrder_r.T_outorderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//	// -------------
+//	x = 22.0
+//	w1 = 80.0
+//	w2 = 195.0
+//
+//	lib.RectFillColor(pdf, "设备名称:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, Device_r.T_devName, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	lib.RectFillColor(pdf, "设备编号:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, Device_r.T_sn, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//	// -------------
+//	x = 22.0
+//	w1 = 80.0
+//	w2 = 240.0
+//	T_time := fmt.Sprintf("%s", GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05")+" - "+GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"))
+//	lib.RectFillColor(pdf, "送货时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_time, 12, x, 120, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	T_time = fmt.Sprintf("%s", GoodsOrder_r.CreateTime.Format("2006-01-02 15:04:05"))
+//	lib.RectFillColor(pdf, "订单时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_time, 12, x, 120, 150, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//
+//	// -------------
+//	x = 22.0
+//	w1 = 80.0
+//	w2 = 195.0*2 + 80
+//	T_text := fmt.Sprintf("%s", GoodsOrder_r.T_receiving)
+//	lib.RectFillColor(pdf, "收货单位:", 12, x, 140, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_text, 12, x, 140, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	// -----------
+//	textw, _ = pdf.MeasureTextWidth("历史数据")
+//	pdf.SetX(20)
+//	pdf.SetY(210)
+//	pdf.Text("历史数据:")
+//
+//	// 数据展示--------------------------------
+//	var y float64 = 220
+//	x = 22.0
+//	w1 = 94.0
+//	w2 = 43.0
+//
+//	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//	// 数据展示--------------------------------
+//
+//	y = 240
+//
+//	err = pdf.SetFont("wts", "", 8)
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//	nln := 0
+//	x = 22.0
+//	var T_t_l float32 = 100.0
+//	var T_t_u float32 = 0.0
+//	var T_t_v float32 = 0.0
+//	for n := 0; len(DeviceSensor_data) > n; n++ {
+//		// -计算温度
+//		if DeviceSensor_data[n].T_t < T_t_l {
+//			T_t_l = DeviceSensor_data[n].T_t
+//		}
+//		if DeviceSensor_data[n].T_t > T_t_u {
+//			T_t_u = DeviceSensor_data[n].T_t
+//		}
+//		T_t_v += DeviceSensor_data[n].T_t
+//
+//		//text := fmt.Sprintf(" %d ", i+1)
+//		var textH float64 = 25 // if text height is 25px.
+//		pdf.SetNewY(y, textH)
+//		y = pdf.GetY()
+//
+//		nln++
+//		if nln > 4 {
+//			nln = 1
+//			x = 22.0
+//			y += 18
+//		}
+//
+//		// ------------------
+//		T_t := fmt.Sprintf(" %.1f ", DeviceSensor_data[n].T_t)
+//		T_time = fmt.Sprintf("%s", DeviceSensor_data[n].T_time)
+//
+//		lib.RectFillColor(pdf, T_time, 10, x, y, w1, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//		x += w1
+//		lib.RectFillColor(pdf, T_t, 10, x, y, w2, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//		x += w2
+//
+//	}
+//
+//	err = pdf.SetFont("wts", "", 10)
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//	// 数据汇总--------------------------------
+//	y = 160
+//	x = 22.0
+//	w1 = 60.0
+//	w2 = 50.0
+//
+//	T_t := fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[len(DeviceSensor_data)-1].T_t)
+//	lib.RectFillColor(pdf, "起送温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	T_t = fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[0].T_t)
+//	lib.RectFillColor(pdf, "送达温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	T_t = fmt.Sprintf(" %.1f℃ ", T_t_l)
+//	lib.RectFillColor(pdf, "最低温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	T_t = fmt.Sprintf(" %.1f℃ ", float32(T_t_v/float32(len(DeviceSensor_data)-1)))
+//	lib.RectFillColor(pdf, "平均温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	T_t = fmt.Sprintf(" %.1f℃ ", T_t_u)
+//	lib.RectFillColor(pdf, "最高温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	//----------------
+//	timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"
+//
+//	err = pdf.WritePdf(timeStr)
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	// 上传 OSS
+//	url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
+//	if !is {
+//		c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
+//		c.ServeJSON()
+//		return
+//	}
+//	//删除目录
+//	err = os.Remove(timeStr)
+//	if err != nil {
+//		fmt.Println(err)
+//	}
+//
+//	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
+//	c.ServeJSON()
+//	return
+//
+//}
+//
+//// 列表 - 接口
+//func (c *GoodsOrderController) GoodsOrder_PDF() {
+//	var err error
+//	// 验证登录
+//	b_, user_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+//	if !b_ {
+//		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+//		c.ServeJSON()
+//		return
+//	}
+//	Id, _ := c.GetInt("T_id")
+//	if Id == 0 {
+//		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id  e!"}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	GoodsOrder_r := Function.Read_GoodsOrder_ById(Id)
+//	if GoodsOrder_r.Id == 0 {
+//		c.Data["json"] = lib.JSONS{Code: 207, Msg: "Id  e!"}
+//		c.ServeJSON()
+//		return
+//	}
+//	Device_r, err := Device.Read_Device_ByT_sn(GoodsOrder_r.T_sn)
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_sn Err!"}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	DeviceSensor_r := Device.Read_DeviceSensor_ALL_List_T_sn(GoodsOrder_r.T_sn)
+//	if len(DeviceSensor_r) == 0 {
+//		c.Data["json"] = lib.JSONS{Code: 202, Msg: GoodsOrder_r.T_sn + "设备没有数据!"}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	var DeviceSensor_data []Device.DeviceData_
+//	DeviceSensor_data, _ = Device.Read_DeviceSensorData_By_T_snid_List(GoodsOrder_r.T_sn+","+strconv.Itoa(DeviceSensor_r[0].T_id), GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05"), GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"), 0, 9999)
+//
+//	pdf := &gopdf.GoPdf{}
+//	pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4
+//	//err = GetFont(pdf, "LiberationSerif-Regular.ttf")
+//	//if err != nil {
+//	//	log.Fatalln(err)
+//	//}
+//	//err = pdf.SetFont("Ubuntu-L", "", 14)
+//	//if err != nil {
+//	//	log.Fatalln(err)
+//	//}
+//
+//	err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf")
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 204, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//	err = pdf.SetFont("simsun", "", 24)
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 205, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	pdf.SetGrayFill(0.5)
+//
+//	pdf.SetMargins(0, 20, 0, 20)
+//	pdf.AddPage()
+//
+//	//use path
+//	//pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50})
+//
+//	textw, _ := pdf.MeasureTextWidth(user_r.Admin_name)
+//	pdf.SetX((595 / 2) - (textw / 2))
+//	pdf.SetY(40)
+//	pdf.Text(user_r.Admin_name)
+//
+//	// 线
+//	pdf.SetLineWidth(2)
+//	pdf.SetLineType("dashed")
+//	pdf.Line(10, 60, 585, 60)
+//
+//	err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf")
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 206, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//	err = pdf.SetFont("wts", "", 10)
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//	//fmt.Sprintf(" %.1f ", v.T_t)
+//	//lib.RectFillColor(pdf, "历史数据["+Time_start+" / "+Time_end+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//
+//	// -------------
+//	x := 22.0
+//	w1 := 80.0
+//	w2 := 195.0
+//
+//	lib.RectFillColor(pdf, "订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, GoodsOrder_r.T_orderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	lib.RectFillColor(pdf, "出库订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, GoodsOrder_r.T_outorderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//	// -------------
+//	x = 22.0
+//	w1 = 80.0
+//	w2 = 195.0
+//
+//	lib.RectFillColor(pdf, "设备名称:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, Device_r.T_devName, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	lib.RectFillColor(pdf, "设备编号:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, Device_r.T_sn, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//	// -------------
+//	x = 22.0
+//	w1 = 80.0
+//	w2 = 240.0
+//	T_time := fmt.Sprintf("%s", GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05")+" - "+GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"))
+//	lib.RectFillColor(pdf, "送货时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_time, 12, x, 120, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	T_time = fmt.Sprintf("%s", GoodsOrder_r.CreateTime.Format("2006-01-02 15:04:05"))
+//	lib.RectFillColor(pdf, "订单时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_time, 12, x, 120, 150, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//
+//	// -------------
+//	x = 22.0
+//	w1 = 80.0
+//	w2 = 195.0*2 + 80
+//	T_text := fmt.Sprintf("%s", GoodsOrder_r.T_receiving)
+//	lib.RectFillColor(pdf, "收货单位:", 12, x, 140, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_text, 12, x, 140, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	// -----------
+//	textw, _ = pdf.MeasureTextWidth("历史数据")
+//	pdf.SetX(20)
+//	pdf.SetY(210)
+//	pdf.Text("历史数据:")
+//
+//	// 数据展示--------------------------------
+//	var y float64 = 220
+//	x = 22.0
+//	w1 = 94.0
+//	w2 = 43.0
+//
+//	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//	// 数据展示--------------------------------
+//
+//	y = 240
+//
+//	err = pdf.SetFont("wts", "", 8)
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//	nln := 0
+//	x = 22.0
+//	var T_t_l float32 = 100.0
+//	var T_t_u float32 = 0.0
+//	var T_t_v float32 = 0.0
+//	for n := 0; len(DeviceSensor_data) > n; n++ {
+//		// -计算温度
+//		if DeviceSensor_data[n].T_t < T_t_l {
+//			T_t_l = DeviceSensor_data[n].T_t
+//		}
+//		if DeviceSensor_data[n].T_t > T_t_u {
+//			T_t_u = DeviceSensor_data[n].T_t
+//		}
+//		T_t_v += DeviceSensor_data[n].T_t
+//
+//		//text := fmt.Sprintf(" %d ", i+1)
+//		var textH float64 = 25 // if text height is 25px.
+//		pdf.SetNewY(y, textH)
+//		y = pdf.GetY()
+//
+//		nln++
+//		if nln > 4 {
+//			nln = 1
+//			x = 22.0
+//			y += 18
+//		}
+//
+//		// ------------------
+//		T_t := fmt.Sprintf(" %.1f ", DeviceSensor_data[n].T_t)
+//		T_time = fmt.Sprintf("%s", DeviceSensor_data[n].T_time)
+//
+//		lib.RectFillColor(pdf, T_time, 10, x, y, w1, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//		x += w1
+//		lib.RectFillColor(pdf, T_t, 10, x, y, w2, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//		x += w2
+//
+//	}
+//
+//	err = pdf.SetFont("wts", "", 10)
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//	// 数据汇总--------------------------------
+//	y = 160
+//	x = 22.0
+//	w1 = 60.0
+//	w2 = 50.0
+//
+//	T_t := fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[len(DeviceSensor_data)-1].T_t)
+//	lib.RectFillColor(pdf, "起送温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	T_t = fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[0].T_t)
+//	lib.RectFillColor(pdf, "送达温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	T_t = fmt.Sprintf(" %.1f℃ ", T_t_l)
+//	lib.RectFillColor(pdf, "最低温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	T_t = fmt.Sprintf(" %.1f℃ ", float32(T_t_v/float32(len(DeviceSensor_data)-1)))
+//	lib.RectFillColor(pdf, "平均温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	T_t = fmt.Sprintf(" %.1f℃ ", T_t_u)
+//	lib.RectFillColor(pdf, "最高温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w1
+//	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+//	x += w2
+//
+//	//----------------
+//	timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"
+//
+//	err = pdf.WritePdf(timeStr)
+//	if err != nil {
+//		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+//		c.ServeJSON()
+//		return
+//	}
+//
+//	// 上传 OSS
+//	url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
+//	if !is {
+//		c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
+//		c.ServeJSON()
+//		return
+//	}
+//	//删除目录
+//	err = os.Remove(timeStr)
+//	if err != nil {
+//		fmt.Println(err)
+//	}
+//
+//	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
+//	c.ServeJSON()
+//	return
+//
+//}

+ 4 - 98
controllers/Login.go

@@ -1,13 +1,10 @@
 package controllers
 
 import (
-	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/models/Account"
-	"Cold_Api/models/Admin"
 	"Cold_Api/models/System"
 	beego "github.com/beego/beego/v2/server/web"
-	"strconv"
 	"time"
 )
 
@@ -25,16 +22,16 @@ func (c *AdminController) Login_verification() {
 	Admin_pass := c.GetString("bzd_password")
 
 	println("Login_verification", Admin_user, Admin_pass)
-	err, admin_r := Account.ReadLogin_verification(Admin_user, Admin_pass)
+	err, admin_r := Account.Read_AdminLogin_verification(Admin_user, Admin_pass)
 
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "账号密码错误!"}
 	} else {
-		User_tokey := Account.Add_Tokey_Set(admin_r.Admin_uuid)
+		User_tokey := Account.Add_Tokey_Set(admin_r.T_uuid)
 		c.Ctx.SetCookie("User_tokey", User_tokey, time.Second*60*60)
 		c.Data["json"] = lib.JSONS{Code: 200, Msg: "OK!", Data: User_tokey}
 
-		System.Add_UserLogs(admin_r.Admin_uuid, "登陆", "用户登陆", "")
+		System.Add_UserLogs(admin_r.T_uuid, "登陆", "用户登陆", "")
 
 	}
 
@@ -43,97 +40,6 @@ func (c *AdminController) Login_verification() {
 
 }
 
-func (c *AdminController) Index() {
-	// 验证登录
-
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Ctx.Redirect(302, "Login")
-		return
-	}
-
-	// 基本信息
-	c.Data["Admin_name"] = admin_r.Admin_name
-	c.Data["Admin_root"] = admin_r.Id
-	if admin_r.Admin_master == 0 {
-		c.Data["Admin_master"] = "管理员"
-	} else if admin_r.Admin_master == 1 {
-		c.Data["Admin_master"] = "企业"
-	} else {
-		Admin_m, _ := Account.Read_Admin_ById(admin_r.Admin_master)
-		c.Data["Admin_master"] = Admin_m.Admin_name
-	}
-
-	c.Data["Admin_Power"], _ = Account.Read_AdminPower_ById(admin_r.Admin_power)
-
-	// 消息
-	AdminNews_list := System.Read_AdminNews_all_1(admin_r.Admin_uuid)
-	c.Data["Now_list"] = AdminNews_list
-	c.Data["News"] = len(AdminNews_list)
-
-	c.Data["Panel_url"] = conf.Panel_url
-
-	c.TplName = "index.html"
-
-}
-func (c *AdminController) Home() {
-
-	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Ctx.Redirect(302, "Login")
-		return
-	}
-
-	// 基本信息
-	c.Data["Admin_name"] = admin_r.Admin_name
-	//c.Data["Admin_type_name"] = Admin.Read_AdminType_id(admin_r.Id).Type_name
-
-	if admin_r.Admin_master == 0 {
-		c.Data["Admin_master"] = "管理员"
-	} else if admin_r.Admin_master == 1 {
-		c.Data["Admin_master"] = "企业"
-	} else {
-		Admin_m, _ := Account.Read_Admin_ById(admin_r.Admin_master)
-		c.Data["Admin_master"] = Admin_m.Admin_name
-	}
-	c.Data["Admin_Power"], _ = Account.Read_AdminPower_ById(admin_r.Admin_power)
-	if admin_r.Admin_master <= 1 {
-		FlowPoolSharingInfo, _ := lib.Yidong_group_data_margin()
-
-		int64_, _ := strconv.ParseFloat(FlowPoolSharingInfo.RemainAmount, 32)
-		FlowPoolSharingInfo.RemainAmount = strconv.FormatFloat(int64_/1024, 'f', 2, 32)
-
-		int64_, _ = strconv.ParseFloat(FlowPoolSharingInfo.UseAmount, 32)
-		FlowPoolSharingInfo.UseAmount = strconv.FormatFloat(int64_/1024, 'f', 2, 32)
-
-		int64_, _ = strconv.ParseFloat(FlowPoolSharingInfo.TotalAmount, 32)
-		FlowPoolSharingInfo.TotalAmount = strconv.FormatFloat(int64_/1024, 'f', 2, 32)
-
-		c.Data["FlowPoolSharingInfo"] = FlowPoolSharingInfo
-	}
-
-	c.TplName = "home.html"
-
-}
-func (c *AdminController) Nows_rend() {
-
-	// 验证登录
-	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
-	if !b_ {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "no"}
-		c.ServeJSON()
-		return
-	}
-
-	Id, _ := c.GetInt("Id")
-	System.Update_AdminNews_News_Tag_2(Id)
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok"}
-	c.ServeJSON()
-	return
-}
-
 func (c *AdminController) Info() {
 
 	// 验证登录
@@ -144,7 +50,7 @@ func (c *AdminController) Info() {
 		return
 	}
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok", Data: Account.Admin_To_Admin_R(user_r)}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok", Data: Account.AdminToAdmin_R(user_r)}
 	c.ServeJSON()
 	return
 }

+ 6 - 64
controllers/Logs.go

@@ -14,55 +14,7 @@ type LogsController struct {
 }
 
 // 列表 -
-func (c *LogsController) List() {
-	page, _ := c.GetInt("page")
-	println(page)
-	if page < 1 {
-		page = 1
-	}
-
-	Class_1 := c.GetString("Class_1")
-
-	c.Data["Class_1"] = Class_1
-	c.Data["Class_List"] = System.Read_Logs_Class()
-
-	var cnt int64
-	c.Data["List"], cnt = System.Read_Logs_ALL(page, Class_1)
-	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
-	c.Data["Page"] = page
-	c.Data["Page_size"] = page_size
-	c.Data["Pages"] = lib.Func_page(int64(page), int64(page_size))
-	c.Data["cnt"] = cnt
-
-	c.TplName = "System/Logs.html"
-}
-
-// 列表 -
-func (c *LogsController) UserLogs() {
-	page, _ := c.GetInt("page")
-	println(page)
-	if page < 1 {
-		page = 1
-	}
-
-	Class_1 := c.GetString("Class_1")
-
-	c.Data["Class_1"] = Class_1
-	c.Data["Class_List"] = System.Read_UserLogs_Class()
-
-	var cnt int64
-	c.Data["List"], cnt = System.Read_UserLogs_ALL(page, Class_1)
-	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
-	c.Data["Page"] = page
-	c.Data["Page_size"] = page_size
-	c.Data["Pages"] = lib.Func_page(int64(page), int64(page_size))
-	c.Data["cnt"] = cnt
-
-	c.TplName = "User/UserLogs.html"
-}
-
-// 列表 -
-func (c *LogsController) V2_UserLogsClass() {
+func (c *LogsController) UserLogsClass() {
 	// 验证登录
 	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !b_ {
@@ -77,7 +29,7 @@ func (c *LogsController) V2_UserLogsClass() {
 }
 
 // 列表 -
-func (c *LogsController) V2_UserLogs() {
+func (c *LogsController) UserLogsList() {
 	// 验证登录
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !b_ {
@@ -107,7 +59,7 @@ func (c *LogsController) V2_UserLogs() {
 
 	Class_1 := c.GetString("T_class")
 	Class_1 = strings.Replace(Class_1, "\"", "", -1)
-	r_jsons.Data, r_jsons.Num = System.Read_V2_UserLogs_ALL(admin_r.Admin_uuid, Class_1, page, page_z)
+	r_jsons.Data, r_jsons.Num = System.Read_UserLogs_ALL(admin_r.T_uuid, Class_1, page, page_z)
 	r_jsons.Page = page
 	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
 
@@ -119,17 +71,12 @@ func (c *LogsController) V2_UserLogs() {
 // 列表 -
 func (c *LogsController) LogsClass() {
 	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !b_ {
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
 		c.ServeJSON()
 		return
 	}
-	if admin_r.Admin_power > 6 {
-		c.Data["json"] = lib.JSONS{Code: 205, Msg: "没有权限!"}
-		c.ServeJSON()
-		return
-	}
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: System.Read_Logs_Class()}
 	c.ServeJSON()
@@ -139,17 +86,12 @@ func (c *LogsController) LogsClass() {
 // 列表 -
 func (c *LogsController) LogsList() {
 	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !b_ {
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
 		c.ServeJSON()
 		return
 	}
-	if admin_r.Admin_power > 6 {
-		c.Data["json"] = lib.JSONS{Code: 205, Msg: "没有权限!"}
-		c.ServeJSON()
-		return
-	}
 
 	type R_JSONS struct {
 		//必须的大写开头
@@ -173,7 +115,7 @@ func (c *LogsController) LogsList() {
 
 	Class_1 := c.GetString("T_class")
 	Class_1 = strings.Replace(Class_1, "\"", "", -1)
-	r_jsons.Data, r_jsons.Num = System.Read_V2_Logs_ALL(Class_1, page, page_z)
+	r_jsons.Data, r_jsons.Num = System.Read_Logs_ALL(Class_1, page, page_z)
 	r_jsons.Page = page
 	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
 

+ 3 - 3
controllers/RawSql.go

@@ -70,9 +70,9 @@ func (c *RawSqlController) RawSql__html() {
 
 	}
 
-	c.Data["Device_lite"] = Device.Read_Device_ALL_bind(admin_r)
+	//c.Data["Device_lite"] = Device.Read_Device_ALL_bind(admin_r)
 
-	//c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	//c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.T_power)
 	id, _ := c.GetInt("id")
 	c.Data["id"] = id
 	if id > 0 {
@@ -200,7 +200,7 @@ func (c *RawSqlController) Rawv3() {
 	}
 
 	T_data := c.GetString("T_data")
-	fmt.Println(" 执行SQL:", T_id, " => [", T_data, "] ", admin_r.Admin_uuid, admin_r.Admin_name)
+	fmt.Println(" 执行SQL:", T_id, " => [", T_data, "] ", admin_r.T_uuid, admin_r.T_name)
 	var T_dataL []string
 	for _, v := range strings.Split(T_data, "|") {
 		if len(v) > 0 {

+ 0 - 152
controllers/Template.go

@@ -1,152 +0,0 @@
-package controllers
-
-import (
-	"Cold_Api/conf"
-	"Cold_Api/controllers/lib"
-	"Cold_Api/models/Template"
-	beego "github.com/beego/beego/v2/server/web"
-	"math"
-)
-
-type TemplateController struct {
-	beego.Controller
-}
-
-// 列表 -
-func (c *TemplateController) List() {
-	page, _ := c.GetInt("page")
-	println(page)
-	if page < 1 {
-		page = 1
-	}
-
-	Class_1, _ := c.GetInt("Class_1")
-	Name := c.GetString("Name")
-
-	c.Data["Class_1"] = Class_1
-	c.Data["Name"] = Name
-	c.Data["Class_List"] = Template.Read_Class_All_1()
-
-	var cnt int64
-	c.Data["List"],cnt = Template.Read_List_1(page, Name, Class_1)
-	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
-	c.Data["Page"] = page
-	c.Data["Page_size"] = page_size
-	c.Data["Pages"] = lib.Func_page(int64(page), int64(page_size))
-	c.Data["cnt"] = cnt
-
-	c.TplName = "Template/Template.html"
-}
-func (c *TemplateController) List_() {
-	id, _ := c.GetInt("id")
-	c.Data["id"] = id
-	if id > 0 {
-		c.Data["Date"] = Template.Read_List_ById(id)
-		//c.Data["FormulaList"] = Formula.ReadFormulaListByid_List(id)
-	}
-	c.Data["Class_List"] = Template.Read_Class_All_1()
-
-	c.TplName = "Template/Template-.html"
-}
-func (c *TemplateController) List_Post() {
-	var id int64
-	var err error
-
-	id, _ = c.GetInt64("id")
-	T_name := c.GetString("T_name")
-	T_class, _ := c.GetInt("T_class")
-	T_img := c.GetString("T_img")
-	T_int, _ := c.GetInt("T_int")
-	T_text := c.GetString("T_text")
-
-	var_ := Template.Template{
-		T_name: T_name,
-		T_class:T_class,
-		T_img:T_img,
-		T_int:T_int,
-		T_text:T_text,
-		T_State: 1,
-	}
-
-	if id > 0 {
-		var_.Id = int(id)
-		err = Template.Update_List_ById(var_)
-		if err != nil {
-			c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
-			c.ServeJSON()
-			return
-		}
-	} else {
-		id, err = Template.Add_List(var_)
-		if err != nil {
-			c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
-			c.ServeJSON()
-			return
-		}
-
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-
-}
-func (c *TemplateController) List_Del() {
-	Id, _ := c.GetInt("Id")
-	if Id > 0 {
-		Template.Delete_List_ById(Id)
-	} else {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
-		c.ServeJSON()
-		return
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-
-}
-
-// 分类 -
-func (c *TemplateController) Class() {
-	c.Data["List"] = Template.Read_Class_All_1()
-	c.TplName = "Template/TemplateClass.html"
-}
-
-func (c *TemplateController) Class_() {
-	id, _ := c.GetInt("id")
-	c.Data["T"] = Template.Read_Class_ById(id)
-	c.Data["id"] = id
-
-	c.TplName = "Template/TemplateClass-.html"
-}
-func (c *TemplateController) Class_Post() {
-
-	Id, _ := c.GetInt("Id")
-	T_name := c.GetString("T_name")
-
-	if Id == 0 {
-		Template.Add_Class(Template.TemplateClass{
-			T_name: T_name,
-			T_State: 1,
-		})
-	} else {
-		Template.Update_Class_ById(Template.TemplateClass{
-			Id:         Id,
-			T_name: T_name,
-		})
-	}
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-}
-func (c *TemplateController) Class_Del() {
-
-	id, _ := c.GetInt("Id")
-	Template.Delete_Class_ById(id)
-
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
-}

文件差异内容过多而无法显示
+ 310 - 539
controllers/User.go


+ 3 - 3
controllers/lib/lib.go

@@ -1,7 +1,7 @@
 package lib
 
 import (
-	"Cold_Api/models/Admin"
+	"Cold_Api/models/Account"
 	"encoding/json"
 	"fmt"
 	"github.com/nats-io/nats.go"
@@ -78,12 +78,12 @@ func Verification(GetCookie string, GetString string) (bool, Account.Admin) {
 	if !is {
 		return false, Account.Admin{}
 	}
-	err, admin_r := Account.Read_Admin_ByAdmin_uuid(tokey)
+	admin_r, err := Account.Read_Admin_ByUuid(tokey)
 	if err != nil {
 		is = false
 		return false, Account.Admin{}
 	}
-	log.Println("登录 Admin_name 为:", admin_r.Admin_name)
+	log.Println("登录 Admin_name 为:", admin_r.T_name)
 	return is, admin_r
 }
 

+ 24 - 28
go.mod

@@ -1,51 +1,47 @@
 module Cold_Api
 
-go 1.17
-
-require github.com/beego/beego/v2 v2.0.1
+go 1.19
 
 require (
 	github.com/astaxie/beego v1.12.3
-	github.com/go-sql-driver/mysql v1.5.0
-	github.com/gorilla/websocket v1.5.0
-	github.com/nats-io/nats.go v1.16.0
+	github.com/beego/beego/v2 v2.0.7
+	github.com/go-sql-driver/mysql v1.7.0
+	github.com/nats-io/nats.go v1.22.1
 	github.com/satori/go.uuid v1.2.0
-	github.com/signintech/gopdf v0.13.0
+	github.com/signintech/gopdf v0.15.1
 	github.com/vmihailenco/msgpack/v5 v5.3.5
-	github.com/xuri/excelize/v2 v2.6.0
+	github.com/xuri/excelize/v2 v2.7.0
 )
 
 require (
 	github.com/beorn7/perks v1.0.1 // indirect
-	github.com/cespare/xxhash/v2 v2.1.1 // indirect
-	github.com/golang/protobuf v1.4.2 // indirect
+	github.com/cespare/xxhash/v2 v2.1.2 // indirect
+	github.com/golang/protobuf v1.5.2 // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
 	github.com/hashicorp/golang-lru v0.5.4 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
-	github.com/mitchellh/mapstructure v1.3.3 // indirect
+	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
-	github.com/nats-io/nats-server/v2 v2.8.4 // indirect
+	github.com/nats-io/nats-server/v2 v2.9.11 // indirect
 	github.com/nats-io/nkeys v0.3.0 // indirect
 	github.com/nats-io/nuid v1.0.1 // indirect
 	github.com/phpdave11/gofpdi v1.0.11 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
-	github.com/prometheus/client_golang v1.7.0 // indirect
-	github.com/prometheus/client_model v0.2.0 // indirect
-	github.com/prometheus/common v0.10.0 // indirect
-	github.com/prometheus/procfs v0.1.3 // indirect
+	github.com/prometheus/client_golang v1.14.0 // indirect
+	github.com/prometheus/client_model v0.3.0 // indirect
+	github.com/prometheus/common v0.37.0 // indirect
+	github.com/prometheus/procfs v0.8.0 // indirect
 	github.com/richardlehane/mscfb v1.0.4 // indirect
-	github.com/richardlehane/msoleps v1.0.1 // indirect
-	github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
+	github.com/richardlehane/msoleps v1.0.3 // indirect
+	github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
 	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
-	github.com/xuri/efp v0.0.0-20220407160117-ad0f7a785be8 // indirect
+	github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 // indirect
 	github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect
-	golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 // indirect
-	golang.org/x/mod v0.3.0 // indirect
-	golang.org/x/net v0.0.0-20220407224826-aac1ed45d8e3 // indirect
-	golang.org/x/sys v0.0.0-20220111092808-5a964db01320 // indirect
-	golang.org/x/text v0.3.7 // indirect
-	golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58 // indirect
-	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
-	google.golang.org/protobuf v1.23.0 // indirect
-	gopkg.in/yaml.v2 v2.2.8 // indirect
+	golang.org/x/crypto v0.5.0 // indirect
+	golang.org/x/net v0.5.0 // indirect
+	golang.org/x/sys v0.4.0 // indirect
+	golang.org/x/text v0.6.0 // indirect
+	google.golang.org/protobuf v1.28.1 // indirect
+	gopkg.in/yaml.v2 v2.4.0 // indirect
+	gopkg.in/yaml.v3 v3.0.1 // indirect
 )

+ 362 - 86
go.sum

@@ -1,16 +1,50 @@
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
+cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
+cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
+cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
+cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
+cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
+cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
+cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
+cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
+cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
+cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
+cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
+cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
+cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
+cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
+cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
+cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
+cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
+cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
+cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
+cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
+cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
+cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
+cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
+cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
+cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
+cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
+cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
 github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
 github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=
 github.com/astaxie/beego v1.12.3 h1:SAQkdD2ePye+v8Gn1r4X6IKZM1wd28EyUOVQ3PDSOOQ=
 github.com/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA=
-github.com/beego/beego/v2 v2.0.1 h1:07a7Z0Ok5vbqyqh+q53sDPl9LdhKh0ZDy3gbyGrhFnE=
-github.com/beego/beego/v2 v2.0.1/go.mod h1:8zyHi1FnWO1mZLwTn62aKRIZF/aIKvkCBB2JYs+eqQI=
+github.com/beego/beego/v2 v2.0.7 h1:9KNnUM40tn3pbCOFfe6SJ1oOL0oTi/oBS/C/wCEdAXA=
+github.com/beego/beego/v2 v2.0.7/go.mod h1:f0uOEkmJWgAuDTlTxUdgJzwG3PDSIf3UWF3NpMohbFE=
 github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ=
 github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
@@ -20,14 +54,15 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r
 github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60=
 github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
+github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
-github.com/coreos/etcd v3.3.25+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
-github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
-github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
 github.com/couchbase/go-couchbase v0.0.0-20200519150804-63f3cdb75e0d/go.mod h1:TWI8EKQMs5u5jLKW/tsb9VwauIrMIxQG1r5fMsswK5U=
 github.com/couchbase/gomemcached v0.0.0-20200526233749-ec430f949808/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c=
 github.com/couchbase/goutils v0.0.0-20180530154633-e865a1461c8a/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs=
@@ -37,92 +72,136 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
 github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI=
-github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk=
 github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
+github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
+github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
+github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
 github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
-github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg=
-github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
+github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
+github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
 github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
 github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
 github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
 github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
 github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
 github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
 github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
+github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
+github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
-github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
+github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.14.4 h1:eijASRJcobkVtSt81Olfh7JX43osYLwy5krOJo6YEu4=
-github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
+github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ=
-github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=
 github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/lib/pq v1.10.5 h1:J+gdV2cUmX7ZqL2B0lFcW0m+egaHC2V3lpO8nWxyYiQ=
 github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
 github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g=
-github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
-github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8=
-github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/nats-io/jwt/v2 v2.2.1-0.20220330180145-442af02fd36a h1:lem6QCvxR0Y28gth9P+wV2K/zYUUAkJ+55U8cpS0p5I=
-github.com/nats-io/jwt/v2 v2.2.1-0.20220330180145-442af02fd36a/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k=
-github.com/nats-io/nats-server/v2 v2.8.4 h1:0jQzze1T9mECg8YZEl8+WYUXb9JKluJfCBriPUtluB4=
-github.com/nats-io/nats-server/v2 v2.8.4/go.mod h1:8zZa+Al3WsESfmgSs98Fi06dRWLH5Bnq90m5bKD/eT4=
-github.com/nats-io/nats.go v1.15.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w=
-github.com/nats-io/nats.go v1.16.0 h1:zvLE7fGBQYW6MWaFaRdsgm9qT39PJDQoju+DS8KsO1g=
-github.com/nats-io/nats.go v1.16.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w=
+github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/nats-io/jwt/v2 v2.3.0 h1:z2mA1a7tIf5ShggOFlR1oBPgd6hGqcDYsISxZByUzdI=
+github.com/nats-io/nats-server/v2 v2.9.11 h1:4y5SwWvWI59V5mcqtuoqKq6L9NDUydOP3Ekwuwl8cZI=
+github.com/nats-io/nats-server/v2 v2.9.11/go.mod h1:b0oVuxSlkvS3ZjMkncFeACGyZohbO4XhSqW1Lt7iRRY=
+github.com/nats-io/nats.go v1.22.1 h1:XzfqDspY0RNufzdrB8c4hFR+R3dahkxlpWe5+IWJzbE=
+github.com/nats-io/nats.go v1.22.1/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA=
 github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8=
 github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4=
 github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
@@ -130,14 +209,10 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
-github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
-github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
 github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
-github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
 github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
 github.com/phpdave11/gofpdi v1.0.11 h1:wsBNx+3S0wy1dEp6fzv281S74ogZGgIdYWV2PugWgho=
 github.com/phpdave11/gofpdi v1.0.11/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
@@ -149,45 +224,61 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.7.0 h1:wCi7urQOGBsYcQROHqpUUX4ct84xp40t9R9JX0FuA/U=
 github.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
+github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
+github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw=
+github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4=
+github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc=
 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
+github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
+github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
+github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE=
+github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8=
 github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo=
+github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
 github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM=
 github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk=
-github.com/richardlehane/msoleps v1.0.1 h1:RfrALnSNXzmXLbGct/P2b4xkFz4e8Gmj/0Vj9M9xC1o=
 github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
+github.com/richardlehane/msoleps v1.0.3 h1:aznSZzrwYRl3rLKRT3gUk9am7T/mLNSnJINvN0AQoVM=
+github.com/richardlehane/msoleps v1.0.3/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
-github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo=
 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
+github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 h1:DAYUYH5869yV94zvCES9F51oYtN5oGlwjxJJz7ZCnik=
+github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
 github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw=
 github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s=
 github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA=
-github.com/signintech/gopdf v0.13.0 h1:1+pzfg2ll84NHvKvHCiXQ5XOqWaJ6M9xKmboBfyePAw=
-github.com/signintech/gopdf v0.13.0/go.mod h1:a+E8HlIuBwghPyoo7UaoB5UaL7zklDzmYVIAHoW/Rlw=
+github.com/signintech/gopdf v0.15.1 h1:8lFdW+UX0oUkrADJv5HmhyhRP9YzMvJzkw7iSNX/35U=
+github.com/signintech/gopdf v0.15.1/go.mod h1:a+E8HlIuBwghPyoo7UaoB5UaL7zklDzmYVIAHoW/Rlw=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
 github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
 github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
 github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
@@ -196,124 +287,300 @@ github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q
 github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=
 github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds=
 github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=
-github.com/xuri/efp v0.0.0-20220407160117-ad0f7a785be8 h1:3X7aE0iLKJ5j+tz58BpvIZkXNV7Yq4jC93Z/rbN2Fxk=
-github.com/xuri/efp v0.0.0-20220407160117-ad0f7a785be8/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
-github.com/xuri/excelize/v2 v2.6.0 h1:m/aXAzSAqxgt74Nfd+sNzpzVKhTGl7+S9nbG4A57mF4=
-github.com/xuri/excelize/v2 v2.6.0/go.mod h1:Q1YetlHesXEKwGFfeJn7PfEZz2IvHb6wdOeYjBxVcVs=
+github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 h1:6932x8ltq1w4utjmfMPVj09jdMlkY0aiA6+Skbtl3/c=
+github.com/xuri/efp v0.0.0-20220603152613-6918739fd470/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
+github.com/xuri/excelize/v2 v2.7.0 h1:Hri/czwyRCW6f6zrCDWXcXKshlq4xAZNpNOpdfnFhEw=
+github.com/xuri/excelize/v2 v2.7.0/go.mod h1:ebKlRoS+rGyLMyUx3ErBECXs/HNYqyj+PbkkKRK5vSI=
 github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 h1:OAmKAfT06//esDdpi/DZ8Qsdt4+M5+ltca05dA5bG2M=
 github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU=
-go.etcd.io/etcd v3.3.25+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI=
-go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
-go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
-go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
-go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
+go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
-golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 h1:iU7T1X1J6yxDr0rda54sWGkHgOp5XJrqm79gcNlC2VM=
-golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
+golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/image v0.0.0-20211028202545-6944b10bf410 h1:hTftEOvwiOq2+O8k2D5/Q7COC7k5Qcrgc2TFURJYnvQ=
-golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
+golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
+golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
+golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
+golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20220902085622-e7cb96979f69 h1:Lj6HJGCSn5AjxRAH2+r35Mir4icalbqku+CLUtjnvXY=
+golang.org/x/image v0.0.0-20220902085622-e7cb96979f69/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
+golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
 golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20220407224826-aac1ed45d8e3 h1:EN5+DfgmRMvRUrMGERW2gQl3Vc+Z7ZMnI/xdEpPSf0c=
-golang.org/x/net v0.0.0-20220407224826-aac1ed45d8e3/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
+golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220111092808-5a964db01320 h1:0jf+tOCoZ3LyutmCOWpVni1chK4VfFLhRsDK7MhqGRY=
-golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
+golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
+golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 h1:GZokNIeuVkl3aZHJchRrr13WCsols02MLUcz1U9is6M=
-golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k=
+golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20220922220347-f3bd1da661af h1:Yx9k8YCG3dvF87UAn2tu2HQLf2dt/eR1bXxpLMWeH+Y=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58 h1:1Bs6RVeBFtLZ8Yi1Hk07DiOqzvwLD/4hln4iahvFlag=
-golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
+golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
+google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
+google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
+google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
+google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
+google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
+google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
+google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
 google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
 google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
+google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
+google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
 google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
 google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
+google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -328,11 +595,20 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
+rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
+rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=

+ 0 - 1
lastupdate.tmp

@@ -1 +0,0 @@
-{"C:\\BZD\\Cold\\Cold_Api\\controllers":1670835715610312600}

+ 11 - 0
logs/logx/logx.log

@@ -120,3 +120,14 @@
 2022/12/12 16:39:53.510 [I]  2022-12-12 16:39:53>%!(EXTRA []interface {}=[nats OK!])
 2022/12/12 17:02:38.394 [I]  2022-12-12 17:02:38>%!(EXTRA []interface {}=[============Nats init============])
 2022/12/12 17:02:38.395 [I]  2022-12-12 17:02:38>%!(EXTRA []interface {}=[nats OK!])
+2022/12/27 11:58:17.428 [I]  2022-12-27 11:58:17>%!(EXTRA []interface {}=[============Nats init============])
+2023/01/09 15:32:48.609 [I]  2023-01-09 15:32:48>%!(EXTRA []interface {}=[============Nats init============])
+2023/01/09 15:57:55.073 [I]  2023-01-09 15:57:55>%!(EXTRA []interface {}=[============Nats init============])
+2023/01/09 15:57:55.225 [I]  2023-01-09 15:57:55>%!(EXTRA []interface {}=[nats OK!])
+2023/01/09 15:58:48.999 [I]  2023-01-09 15:58:48>%!(EXTRA []interface {}=[============Nats init============])
+2023/01/09 15:58:50.065 [I]  2023-01-09 15:58:50>%!(EXTRA []interface {}=[nats OK!])
+2023/01/09 15:59:48.113 [I]  2023-01-09 15:59:48>%!(EXTRA []interface {}=[============Nats init============])
+2023/01/09 16:03:29.794 [I]  2023-01-09 16:03:29>%!(EXTRA []interface {}=[============Nats init============])
+2023/01/09 16:03:30.542 [I]  2023-01-09 16:03:30>%!(EXTRA []interface {}=[nats OK!])
+2023/01/09 16:04:24.546 [I]  2023-01-09 16:04:24>%!(EXTRA []interface {}=[============Nats init============])
+2023/01/09 16:04:25.751 [I]  2023-01-09 16:04:25>%!(EXTRA []interface {}=[nats OK!])

+ 17 - 17
main.go

@@ -5,6 +5,7 @@ import (
 	"Cold_Api/conf"
 	"Cold_Api/controllers"
 	"Cold_Api/models/Device"
+	"Cold_Api/routers"
 	_ "Cold_Api/routers"
 	"fmt"
 	"github.com/beego/beego/v2/adapter/orm"
@@ -14,7 +15,6 @@ import (
 	"runtime"
 	"strconv"
 	"strings"
-	"time"
 )
 
 func init() {
@@ -46,7 +46,7 @@ func main() {
 		ExposeHeaders: []string{"Content-Length", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Access-Control-Allow-Headers", "Content-Type"},
 		// 如果设置,则允许共享身份验证凭据,例如cookie
 		AllowCredentials: true,
-	}))
+	})).InsertFilter("/*", beego.BeforeRouter, routers.FilterRBAC)
 
 	beego.BConfig.AppName = conf.AppName                    // 项目名
 	beego.BConfig.ServerName = conf.AppName + conf.HTTPPort //server  名称
@@ -64,9 +64,9 @@ func main() {
 
 // 转十进制
 func convertM(Devicesensor Device.DeviceSensor) (out string) {
-	var TouTime float64
-	TouTime = 2 * 60
-	now := time.Now()
+	//var TouTime float64
+	//TouTime = 2 * 60
+	//now := time.Now()
 	//DeviceData_, is := Device.Read_DeviceSensorData_ById_New(Devicesensor.T_sn, Devicesensor.T_id)
 	//if is {
 	//	// 谁 是最新的
@@ -84,20 +84,20 @@ func convertM(Devicesensor Device.DeviceSensor) (out string) {
 	//}
 
 	//fmt.Println(Devicesensor.T_time, Devicesensor.T_time.Format("2006-01-02 15:04:05"))
-	subM := now.Sub(Devicesensor.T_time)
+	//subM := now.Sub(Devicesensor.T_time)
 	//fmt.Println(int(subM.Minutes()), "分钟")
-	if subM.Minutes() > TouTime {
-		// 传感器超时
-		return "温湿度传感器-2.png"
-	}
+	//if subM.Minutes() > TouTime {
+	//	// 传感器超时
+	//	return "温湿度传感器-2.png"
+	//}
 
-	if (0 == Devicesensor.T_Tlower && 0 == Devicesensor.T_RHlower) && (0 == Devicesensor.T_Tupper && 0 == Devicesensor.T_RHupper) {
-		return "温湿度传感器-1.png"
-	}
-	if Devicesensor.T_t < Devicesensor.T_Tlower || Devicesensor.T_rh < Devicesensor.T_RHlower || Devicesensor.T_t > Devicesensor.T_Tupper || Devicesensor.T_rh > Devicesensor.T_RHupper {
-		// 传感器 超标
-		return "温湿度传感器-3.png"
-	}
+	//if (0 == Devicesensor.T_Tlower && 0 == Devicesensor.T_RHlower) && (0 == Devicesensor.T_Tupper && 0 == Devicesensor.T_RHupper) {
+	//	return "温湿度传感器-1.png"
+	//}
+	//if Devicesensor.T_t < Devicesensor.T_Tlower || Devicesensor.T_rh < Devicesensor.T_RHlower || Devicesensor.T_t > Devicesensor.T_Tupper || Devicesensor.T_rh > Devicesensor.T_RHupper {
+	//	// 传感器 超标
+	//	return "温湿度传感器-3.png"
+	//}
 	// 传感器正常
 	return "温湿度传感器-1.png"
 }

+ 58 - 89
models/Account/Admin.go

@@ -14,38 +14,39 @@ import (
 
 type Admin struct {
 	Id      int    `orm:"column(ID);size(11);auto;pk"`
-	T_uuid  string `orm:"size(256);null"` //  用户编号
-	T_pid   int    `orm:"size(200);null"` //  绑定公司 ( 只有创建公司用户时添加,内部人员 为0)
-	T_power int    `orm:"size(2);0"`      // 权限 (关联权限表)
-	T_user  string `orm:"size(256);null"` // 用户名 (唯一)
-	T_pass  string `orm:"size(256);null"` // MD5
+	T_uuid  string `orm:"size(256);null"`     //  用户编号
+	T_pid   int    `orm:"size(200);null"`     //  绑定公司 ( 只有创建公司用户时添加,内部人员 为0)
+	T_pids  string `orm:"size(200);null"`     //  绑定公司管理 Pid| 如 P1|P2
+	T_power int    `orm:"size(2);default(0)"` // 权限 (关联权限表)
+	T_user  string `orm:"size(256);null"`     // 用户名 (唯一)
+	T_pass  string `orm:"size(256);null"`     // MD5
 
 	T_name  string `orm:"size(256);null"` // 姓名
 	T_phone string `orm:"size(256);null"` // 电话
 	T_mail  string `orm:"size(200);null"` // 邮箱
 	T_wx    string `orm:"size(256);null"` // 微信
 
-	T_State    int       `orm:"size(200);1"`                                           //  0删除  1 正常
+	T_State    int       `orm:"size(2);default(1)"`                                    //  0删除  1 正常
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
 }
 
 type Admin_R struct {
-	T_uuid  string //  用户编号
-	T_pid   int    //  绑定公司 ( 只有创建公司用户时添加,内部人员 为0)
+	T_uuid  string // 用户编号
+	T_pid   int    // 绑定公司 ( 只有创建公司用户时添加,内部人员 为0)
+	T_pids  string //  绑定公司管理 Pid| 如 P1|P2
 	T_power int    // 权限 (关联权限表)
 	T_user  string // 用户名 (唯一)
-
 	T_name  string // 姓名
 	T_phone string // 电话
 	T_mail  string // 邮箱
 	T_wx    string // 微信
-
 }
 
-func Admin_To_Admin_R(r Admin) (v Admin_R) {
+func AdminToAdmin_R(r Admin) (v Admin_R) {
 	v.T_uuid = r.T_uuid
 	v.T_pid = r.T_pid
+	v.T_pids = r.T_pids
 	v.T_power = r.T_power
 	v.T_user = r.T_user
 	v.T_name = r.T_name
@@ -67,7 +68,7 @@ func init() {
 	orm.RegisterModel(new(Admin))
 
 	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
-		"redis_Admin", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+		"redis_Cold_User_Admin", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
 	fmt.Println(config)
 	var err error
 	redisCache_Admin, err = cache.NewCache("redis", config)
@@ -147,7 +148,7 @@ func Add_Admin(m Admin) (id int64, err error) {
 //	return err
 //}
 
-func Read_Admin_T_user(T_user string) (error, Admin) {
+func Read_Admin_T_user(T_user string) (Admin, error) {
 
 	o := orm.NewOrm()
 	r := Admin{T_user: T_user, T_State: 1}
@@ -155,8 +156,9 @@ func Read_Admin_T_user(T_user string) (error, Admin) {
 	if err != nil {
 		fmt.Println(err)
 	}
-	return err, r
+	return r, err
 }
+
 func Read_AdminLogin_verification(T_user string, T_pass string) (error, Admin) {
 
 	o := orm.NewOrm()
@@ -180,7 +182,31 @@ func Update_Admin(m Admin, cols ...string) bool {
 	return false
 }
 
+// 删除
+func Delete_Admin(v Admin) bool {
+	o := orm.NewOrm()
+	v.T_State = 0
+	if num, err := o.Update(&v, "T_State"); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+	} else {
+		return false
+	}
+	Redis_Admin_DelK(v.T_uuid) // Redis 更新缓存
+	return true
+}
+
 // 获取 ById
+func Read_Admin_ById(Id int) (r Admin, err error) {
+	o := orm.NewOrm()
+	r = Admin{Id: Id, T_State: 1}
+	err = o.Read(&r, "Id", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	if err != nil {
+		fmt.Println(err)
+	}
+	return r, err
+}
+
+// 获取 ByT_uuid
 func Read_Admin_ByUuid(T_uuid string) (r Admin, err error) {
 	if r, is := Redis_Admin_Get(T_uuid); is {
 		//println("Redis_Get  OK")
@@ -196,32 +222,14 @@ func Read_Admin_ByUuid(T_uuid string) (r Admin, err error) {
 }
 
 // 获取列表
-func Read_Admin_List_ALL_User(page int, Admin_name string, Admin_master int) (maps []Admin, cnt int64) {
+func Read_Admin_List(T_pid int, T_name string, page int, page_z int) (AdminList []Admin_R, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
 	qs := o.QueryTable(new(Admin))
-	var offset int64
-	if page <= 1 {
-		offset = 0
-	} else {
-		offset = int64((page - 1) * conf.Page_size)
-	}
-
-	qs.Limit(conf.Page_size, offset).Filter("Admin_name__icontains", Admin_name).Exclude("Admin_master", 0).Filter("Admin_master", Admin_master).Filter("T_State", 1).OrderBy("-Id").All(&maps)
-	cnt, _ = qs.Filter("Admin_name__icontains", Admin_name).Filter("Admin_master", Admin_master).Filter("T_State", 1).Count()
+	var maps []Admin
 
-	return maps, cnt
-}
-
-// 获取列表
-func Read_v2_Admin_List(Admin_master int, Admin_name string, page int, page_z int) (maps []Admin, cnt int64) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(Admin))
 	var offset int64
 	if page_z == 0 {
 		page_z = conf.Page_size
@@ -232,77 +240,38 @@ func Read_v2_Admin_List(Admin_master int, Admin_name string, page int, page_z in
 		offset = int64((page - 1) * page_z)
 	}
 	cond := orm.NewCondition()
-	cond1 := cond.And("T_State", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+	cond1 := cond.And("T_State", 1)
 
-	if Admin_master > 0 {
-		cond1 = cond1.AndCond(cond.And("Admin_master", Admin_master))
+	if T_pid > 0 {
+		cond1 = cond1.AndCond(cond.And("T_pid", T_pid))
 	}
 
-	if len(Admin_name) > 0 {
-		cond1 = cond1.AndCond(cond.Or("Admin_name__icontains", Admin_name).Or("T_user__icontains", Admin_name))
+	if len(T_name) > 0 {
+		cond1 = cond1.AndCond(cond.Or("T_name__icontains", T_name).Or("T_user__icontains", T_name))
 	}
 
 	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
 	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
 
-	return maps, cnt
-}
-
-// 获取列表
-func Read_Admin_List_ALL_Admin_master(page int, Admin_name string, Admin_master int) (maps []Admin, cnt int64) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(Admin))
-	var offset int64
-	if page <= 1 {
-		offset = 0
-	} else {
-		offset = int64((page - 1) * conf.Page_size)
+	for _, v := range maps {
+		AdminList = append(AdminList, AdminToAdmin_R(v))
 	}
 
-	qs.Limit(conf.Page_size, offset).Filter("Admin_name__icontains", Admin_name).Filter("Admin_master", Admin_master).Filter("T_State", 1).OrderBy("-Id").All(&maps)
-	cnt, _ = qs.Filter("Admin_name__icontains", Admin_name).Filter("Admin_master", Admin_master).Filter("T_State", 1).Count()
-
-	return maps, cnt
+	return AdminList, cnt
 }
 
-// 获取列表 - 权限相同
-func Read_Admin_List_ALL_AdminPower(AdminPower int) (maps []Admin) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(Admin))
-	qs.Filter("Admin_power", AdminPower).Filter("T_State", 1).OrderBy("Id").All(&maps)
-	//cnt, _ := qs.Filter("Id", AdminPower).Count()
-
-	return maps
-}
-
-// 获取列表 - 权限相同
-func Read_Admin_List_Admin_master_ALL(Admin_master int) (maps []Admin) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(Admin))
-	qs.Filter("Admin_master", Admin_master).Filter("T_State", 1).Filter("Admin_power", 6).OrderBy("Id").All(&maps)
-	//cnt, _ := qs.Filter("Id", AdminPower).Count()
-
-	return maps
-}
-
-// 获取列表 - 权限相同
-func Read_Admin_master_next_ALL(Admin_master int) (maps []Admin) {
+// 获取列表
+func Read_Admin_List_All() (AdminList []Admin_R) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
 	qs := o.QueryTable(new(Admin))
-	qs.Filter("Admin_master", Admin_master).Filter("T_State", 1).OrderBy("Id").All(&maps)
-	//cnt, _ := qs.Filter("Id", AdminPower).Count()
+	var maps []Admin
 
-	return maps
+	qs.All(&maps)
+	for _, v := range maps {
+		AdminList = append(AdminList, AdminToAdmin_R(v))
+	}
+	return AdminList
 }

+ 124 - 33
models/Account/Company.go

@@ -2,6 +2,7 @@ package Account
 
 import (
 	"Cold_Api/conf"
+	"Cold_Api/models"
 	"encoding/json"
 	"fmt"
 	"github.com/astaxie/beego/cache"
@@ -17,25 +18,25 @@ type Company struct {
 	Id     int    `orm:"column(ID);size(11);auto;pk"`
 	T_mid  int    `orm:"size(200);null"` //  上一级 ID
 	T_name string `orm:"size(256);null"` // 公司名称
-	T_uids string `orm:"size(256);null"` // 绑定用户 Uid|  如:U1|U2|
 
-	T_State    int       `orm:"size(200);1"`                                           //  0删除  1 正常
+	T_State    int       `orm:"size(200);default(1)"`                                  //  0删除  1 正常
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
+
+	Children []Company `orm:"-"`
 }
 
 type Company_R struct {
-	Id     int    `orm:"column(ID);size(11);auto;pk"`
-	T_mid  int    `orm:"size(200);null"` //  上一级 ID
-	T_name string `orm:"size(256);null"` // 公司名称
-	T_uids string `orm:"size(256);null"` // 绑定用户 Uid|  如:U1|U2|
+	Id       int
+	T_mid    int    //  上一级 ID
+	T_name   string // 公司名称
+	Children []Company_R
 }
 
-func Company_To_Company_R(r Company) (v Company_R) {
+func CompanyToCompany_R(r Company) (v Company_R) {
+	v.Id = r.Id
 	v.T_mid = r.T_mid
 	v.T_name = r.T_name
-	v.T_uids = r.T_uids
-
 	return v
 }
 
@@ -48,9 +49,10 @@ var redisCache_Company cache.Cache
 func init() {
 	//注册模型
 	orm.RegisterModel(new(Company))
+	orm.Debug = true
 
 	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
-		"redis_Company", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+		"redis_Cold_User_Company", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
 	fmt.Println(config)
 	var err error
 	redisCache_Company, err = cache.NewCache("redis", config)
@@ -62,7 +64,7 @@ func init() {
 }
 
 // ---------------- Redis -------------------
-//Redis_Set(m.T_sn,m) // Redis 更新缓存
+// Redis_Set(m.T_sn,m) // Redis 更新缓存
 func Redis_Company_Set(r Company) (err error) {
 	//json序列化
 	str, err := json.Marshal(r)
@@ -78,9 +80,9 @@ func Redis_Company_Set(r Company) (err error) {
 	return
 }
 
-//if r,is :=Redis_Get(T_sn);is{
-//return r,nil
-//}
+// if r,is :=Redis_Get(T_sn);is{
+// return r,nil
+// }
 func Redis_Company_Get(key string) (r Company, is bool) {
 	if redisCache_Company.IsExist(key) {
 		//println("找到key:",key)
@@ -123,48 +125,137 @@ func Update_Company(m Company, cols ...string) bool {
 	return false
 }
 
+// 删除
+func Delete_Company(m Company) bool {
+	o := orm.NewOrm()
+	m.T_State = 0
+	if num, err := o.Update(&m, "T_State"); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+	} else {
+		return false
+	}
+	Redis_Company_DelK(strconv.Itoa(m.Id))
+	return true
+}
+
 // 获取 ById
-func Read_Company_id(Id int) (e error, r Company) {
+func Read_Company_ById(Id int) (r Company, e error) {
 	if r, is := Redis_Company_Get(strconv.Itoa(Id)); is {
 		//println("Redis_Get  OK")
-		return nil, r
+		return r, nil
 	}
 
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(Company))
 	e = qs.Filter("Id", Id).Filter("T_State", 1).One(&r)
-	return e, r
+	return r, e
 }
 
 // 获取列表
-func Read_Company_List(Company_master int, Company_name string, page int, page_z int) (maps []Company, cnt int64) {
+func Read_Company_List(admin_r Admin, Company_name string) (CompanyList []Company_R, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
 	qs := o.QueryTable(new(Company))
-	var offset int64
-	if page_z == 0 {
-		page_z = conf.Page_size
-	}
-	if page <= 1 {
-		offset = 0
-	} else {
-		offset = int64((page - 1) * page_z)
-	}
+	var maps []Company
+
 	cond := orm.NewCondition()
-	cond1 := cond.And("T_State", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+	cond1 := cond.And("T_State", 1)
+
+	if admin_r.T_pid > 0 {
+		cond1 = cond1.And("Id", admin_r.T_pid)
+	}
 
-	if Company_master > 0 {
-		cond1 = cond1.AndCond(cond.And("Company_master", Company_master))
+	if len(admin_r.T_pids) > 0 {
+		T_pids := models.SplitStringIds(admin_r.T_pids)
+		cond1 = cond1.AndCond(cond.Or("Id__in", T_pids).Or("T_mid__in", T_pids))
 	}
 
 	if len(Company_name) > 0 {
-		cond1 = cond1.AndCond(cond.Or("Company_name__icontains", Company_name).Or("Company_user__icontains", Company_name))
+		cond1 = cond1.And("T_name__icontains", Company_name)
 	}
 
-	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
+	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
 	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
 
-	return maps, cnt
+	parentMap, flag := getCompanyParent(maps)
+	if flag {
+		for i := 0; i < len(maps); i++ {
+			if parentMap[maps[i].T_mid] {
+				continue
+			}
+			r := Company_R{
+				Id:       maps[i].Id,
+				T_mid:    maps[i].T_mid,
+				T_name:   maps[i].T_name,
+				Children: nil,
+			}
+			info := CompanyCall(maps, r)
+			CompanyList = append(CompanyList, info)
+		}
+	} else {
+		for i := 0; i < len(maps); i++ {
+			r := Company_R{
+				Id:       maps[i].Id,
+				T_mid:    maps[i].T_mid,
+				T_name:   maps[i].T_name,
+				Children: nil,
+			}
+			info := CompanyCall(maps, r)
+			CompanyList = append(CompanyList, info)
+		}
+	}
+
+	return CompanyList, cnt
+}
+
+func CompanyCall(CompanyList []Company, company Company_R) Company_R {
+	list := CompanyList
+	min := make([]Company_R, 0)
+	for j := 0; j < len(list); j++ {
+		if company.Id != list[j].T_mid {
+			continue
+		}
+		mi := Company_R{}
+		mi.Id = list[j].Id
+		mi.T_mid = list[j].T_mid
+		mi.T_name = list[j].T_name
+		mi.Children = []Company_R{}
+		ms := CompanyCall(CompanyList, mi)
+		min = append(min, ms)
+	}
+	company.Children = min
+	return company
+}
+
+func getCompanyParent(CompanyList []Company) (map[int]bool, bool) {
+	list := CompanyList
+	var flag = false
+	var parentMap = map[int]bool{}
+	for j := 0; j < len(list); j++ {
+		parentMap[list[j].T_mid] = false
+	}
+
+	for j := 0; j < len(list); j++ {
+		if _, ok := parentMap[list[j].Id]; !ok {
+			continue
+		}
+		parentMap[list[j].Id] = true
+		flag = true
+	}
+	return parentMap, flag
+}
+
+func Read_Company_List_All_ByT_name(T_name string) (maps []Company) {
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(Company))
+	if len(T_name) > 0 {
+		qs.Filter("T_name", T_name).All(&maps)
+		return maps
+	}
+	qs.All(&maps)
+	return maps
 }

+ 407 - 0
models/Account/Menu.go

@@ -0,0 +1,407 @@
+package Account
+
+import (
+	"Cold_Api/conf"
+	"Cold_Api/models"
+	"encoding/json"
+	"fmt"
+	"github.com/astaxie/beego/cache"
+	_ "github.com/astaxie/beego/cache/redis"
+	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	"strconv"
+	"strings"
+	"time"
+)
+
+type Menu struct {
+	Id           int    `orm:"column(ID);size(11);auto;pk"`
+	T_mid        int    `orm:"size(200);null"`     // 上一级 ID
+	T_name       string `orm:"size(256);null"`     // 菜单标题
+	T_permission string `orm:"size(256);null"`     // 权限表示
+	T_sort       int    `orm:"size(11);null"`      // 排序
+	T_pid        int    `orm:"size(2);default(0)"` // 1 进入公司后才能访问的菜单1,0 公共菜单
+	T_bind       bool   `orm:"-"`                  // 是否选中
+	Children     []Menu `orm:"-"`
+}
+
+func (t *Menu) TableName() string {
+	return "Menu" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+type API struct {
+	Id        int    `orm:"column(ID);size(11);auto;pk"`
+	T_Menu_Id int    `orm:"size(11);null"`      // 所属菜单id 0 第一级菜单
+	T_name    string `orm:"size(256);null"`     // 接口名称
+	T_uri     string `orm:"size(256);null"`     // 接口路径
+	T_method  string `orm:"size(256);null"`     // http请求类型 GET,POST,PUT,DELETE 等
+	T_enable  int    `orm:"size(2);default(1)"` // 是否启用 0-禁用 1-启用
+}
+
+func (t *API) TableName() string {
+	return "api" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+type Menu_R struct {
+	Id       int
+	T_name   string // 菜单标题
+	T_mid    int    // 菜单标题
+	T_pid    int
+	Children map[string]Menu_R
+}
+
+//var redisCache_Menu cache.Cache
+var redisCache_API cache.Cache
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(Menu))
+	orm.RegisterModel(new(API))
+
+	//menuConfig := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
+	//	"redis_Cold_User_Menu", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+	//fmt.Println(menuConfig)
+	//var err error
+	//redisCache_Menu, err = cache.NewCache("redis", menuConfig)
+	//if err != nil || redisCache_Menu == nil {
+	//	errMsg := "failed to init redis"
+	//	fmt.Println(errMsg, err)
+	//}
+
+	apiConfig := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
+		"redis_Cold_User_API", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+	fmt.Println(apiConfig)
+	var err error
+	redisCache_API, err = cache.NewCache("redis", apiConfig)
+	if err != nil || redisCache_API == nil {
+		errMsg := "failed to init redis"
+		fmt.Println(errMsg, err)
+	}
+}
+
+// ---------------- Redis -------------------
+func Redis_API_Set(Power_Id int, r []API) (err error) {
+	//json序列化
+	str, err := json.Marshal(r)
+	if err != nil {
+		fmt.Print(err)
+		return
+	}
+
+	err = redisCache_API.Put(strconv.Itoa(Power_Id), str, 24*time.Hour)
+	if err != nil {
+		fmt.Println("set key:", strconv.Itoa(Power_Id), ",value:", str, err)
+	}
+	return
+}
+
+func Redis_API_Get(key string) (r []API, is bool) {
+	if redisCache_API.IsExist(key) {
+		//println("找到key:",key)
+		v := redisCache_API.Get(key)
+
+		json.Unmarshal(v.([]byte), &r)
+		return r, true
+	}
+	//println("没有 找到key:",key)
+	return []API{}, false
+}
+
+func Redis_API_DelK(key string) (err error) {
+	err = redisCache_API.Delete(key)
+	return
+}
+
+// ---------------- 特殊方法 -------------------
+
+// 添加
+func Add_Menu(m Menu) (id int64, err error) {
+	o := orm.NewOrm()
+	// 插入菜单信息
+	id, err = o.Insert(&m)
+	if err != nil {
+		fmt.Println(err)
+	}
+	return id, err
+}
+
+// 修改
+func Update_Menu(m Menu, cols ...string) bool {
+	o := orm.NewOrm()
+	if num, err := o.Update(&m, cols...); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+		return true
+	}
+	return false
+}
+
+// 删除
+func Delete_Menu(m Menu) bool {
+	o := orm.NewOrm()
+	if num, err := o.Delete(&m); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+	} else {
+		return false
+	}
+	return true
+}
+
+// 获取 ById
+func Read_Menu_ById(Id int) (r Menu, e error) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(Menu))
+	e = qs.Filter("Id", Id).One(&r)
+	return r, e
+}
+
+// 获取列表
+func Read_Menu_List(Grant_Menu string) (maps []Menu) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(Menu))
+	if Grant_Menu == "*" {
+		qs.OrderBy("-T_sort").All(&maps)
+	} else {
+		list := models.SplitStringIds(Grant_Menu)
+		qs.Filter("Id__in", list).OrderBy("-T_sort").All(&maps)
+	}
+	m := Menu_Call(maps, 0)
+	return m
+}
+
+func Read_Menu_Bind_List(Grant_Menu string, Bind_Menu string) (maps []Menu) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(Menu))
+	if Grant_Menu == "*" {
+		qs.OrderBy("-T_sort").All(&maps)
+	} else {
+		list := models.SplitStringIds(Grant_Menu)
+		qs.Filter("Id__in", list).OrderBy("-T_sort").All(&maps)
+	}
+	m := Bind_Menu_Call(maps, 0, Bind_Menu)
+
+	return m
+}
+
+// 获取左侧菜单树
+func Read_Menu_Tree(Menu_Bind string, T_pid int) (MenuList []Menu) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(Menu))
+	cond := orm.NewCondition()
+	T_pid_list := []int{0}
+	if T_pid > 0 {
+		T_pid_list = append(T_pid_list, 1)
+	}
+	cond1 := cond.And("T_pid__in", T_pid_list)
+	var maps []Menu
+	if Menu_Bind != "*" {
+		list := models.SplitStringIds(Menu_Bind)
+		cond1 = cond1.And("Id__in", list)
+	}
+	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-T_sort").All(&maps)
+
+	//m := Menu_Tree(maps, 0)
+	MenuList = Menu_Call(maps, 0)
+	//parentMap, flag := getMenuParent(maps)
+	//if flag {
+	//	for i := 0; i < len(maps); i++ {
+	//		if parentMap[maps[i].T_mid] {
+	//			continue
+	//		}
+	//		info := MenuCall(maps, maps[i])
+	//		MenuList = append(MenuList, info)
+	//	}
+	//} else {
+	//	for i := 0; i < len(maps); i++ {
+	//		info := MenuCall(maps, maps[i])
+	//		MenuList = append(MenuList, info)
+	//	}
+	//}
+	return MenuList
+}
+
+// Bind_Menu_Call 构建菜单树,包含是否绑定
+func Bind_Menu_Call(list []Menu, parentId int, Bind_Menu string) []Menu {
+	res := make([]Menu, 0)
+	for _, v := range list {
+		if v.T_mid == parentId {
+			if strings.Contains(Bind_Menu, strconv.Itoa(v.Id)) || Bind_Menu == "*" {
+				v.T_bind = true
+			}
+			v.Children = Bind_Menu_Call(list, v.Id, Bind_Menu)
+			res = append(res, v)
+		}
+	}
+	return res
+}
+
+// Menu_Call 构建菜单树
+// [{"Id":70,"T_mid":0,"T_name":"工单管理","T_permission":"workorder","T_sort":0,"T_pid":1,"T_bind":false,"Children":[{"Id":71,"T_mid":70,"T_name":"工单列表","T_permission":"workorder:list","T_sort":0,"T_pid":1,"T_bind":false,"Children":[]}]}]
+func Menu_Call(list []Menu, parentId int) []Menu {
+	res := make([]Menu, 0)
+	for _, v := range list {
+		if v.T_mid == parentId {
+			v.Children = Menu_Call(list, v.Id)
+			res = append(res, v)
+		}
+	}
+	return res
+}
+
+func MenuCall(MenuList []Menu, company Menu) Menu {
+	list := MenuList
+	min := make([]Menu, 0)
+	for j := 0; j < len(list); j++ {
+		if company.Id != list[j].T_mid {
+			continue
+		}
+		mi := Menu{}
+		mi.Id = list[j].Id
+		mi.T_mid = list[j].T_mid
+		mi.T_name = list[j].T_name
+		mi.Children = []Menu{}
+		ms := MenuCall(MenuList, mi)
+		min = append(min, ms)
+	}
+	company.Children = min
+	return company
+}
+
+func getMenuParent(MenuList []Menu) (map[int]bool, bool) {
+	list := MenuList
+	var flag = false
+	var parentMap = map[int]bool{}
+	for j := 0; j < len(list); j++ {
+		parentMap[list[j].T_mid] = false
+	}
+
+	for j := 0; j < len(list); j++ {
+		if _, ok := parentMap[list[j].Id]; !ok {
+			continue
+		}
+		parentMap[list[j].Id] = true
+		flag = true
+	}
+	return parentMap, flag
+}
+
+// Menu_Tree 构建菜单树
+// {"workorder":{"Id":70,"T_name":"工单管理","T_mid":0,"T_pid":1,"Children":{"workorder:list":{"Id":71,"T_name":"工单列表","T_mid":70,"T_pid":1,"Children":{}}}}}
+func Menu_Tree(list []Menu, parentId int) map[string]Menu_R {
+	res := make(map[string]Menu_R, 0)
+	for _, v := range list {
+		if v.T_mid == parentId {
+			r := Menu_R{
+				Id:     v.Id,
+				T_mid:  v.T_mid,
+				T_pid:  v.T_pid,
+				T_name: v.T_name,
+			}
+			r.Children = Menu_Tree(list, v.Id)
+			res[v.T_permission] = r
+		}
+	}
+	return res
+}
+
+// 添加
+func Add_API(m API) (id int64, err error) {
+	o := orm.NewOrm()
+	id, err = o.Insert(&m)
+	if err != nil {
+		fmt.Println(err)
+	}
+	m.Id = int(id)
+	return id, err
+}
+
+// 批量添加
+func Add_Multi_API(m []API) (id int64, err error) {
+	o := orm.NewOrm()
+	id, err = o.InsertMulti(len(m), &m)
+	if err != nil {
+		fmt.Println(err)
+	}
+	return id, err
+}
+
+// 修改
+func Update_API(m API, cols ...string) bool {
+	o := orm.NewOrm()
+	if num, err := o.Update(&m, cols...); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+		return true
+	}
+	return false
+}
+
+// 删除
+func Delete_API(m API) bool {
+	o := orm.NewOrm()
+	if num, err := o.Delete(&m); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+	} else {
+		return false
+	}
+	return true
+}
+
+// 批量删除
+func Delete_Multi_API(m []API) bool {
+	o := orm.NewOrm()
+	if num, err := o.Delete(&m); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+	} else {
+		return false
+	}
+	return true
+}
+
+// 获取 ById
+func Read_API_ById(Id int) (r API, e error) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(API))
+	e = qs.Filter("Id", Id).Filter("T_State", 1).One(&r)
+	return r, e
+}
+
+// 获取列表
+func Read_API_List_ByPower_Id(Power_Id int, Menu_Bind string) (maps []API) {
+
+	if r, is := Redis_API_Get(strconv.Itoa(Power_Id)); is {
+		//println("Redis_Get  OK")
+		return r
+	}
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(API))
+
+	list := models.SplitStringIds(Menu_Bind)
+	qs.Filter("T_Menu_Id__in", list).All(&maps)
+
+	Redis_API_Set(Power_Id, maps)
+
+	return maps
+}
+
+func Read_API_List_By_Menu_Bind(Menu_Bind string) (maps []API) {
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(API))
+
+	list := models.SplitStringIds(Menu_Bind)
+	qs.Filter("T_Menu_Id__in", list).All(&maps)
+
+	return maps
+}

+ 92 - 45
models/Account/Power.go

@@ -7,35 +7,23 @@ import (
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
 	"github.com/beego/beego/v2/adapter/orm"
+	"math/rand"
 	"strconv"
+	"strings"
 	"time"
 )
 
 type Power struct {
-	Id                   int    `orm:"column(ID);size(11);auto;pk"`
-	Power_name           string `orm:"size(256);null"` //  权限名称
-	Power_Administration int    `orm:"size(2);0"`      //  内部人员
-
-	Power_User_r     int `orm:"size(2);0"` //  用户管理
-	Power_User_e     int `orm:"size(2);0"` //  用户管理
-	Power_User_entry int `orm:"size(2);0"` //  无钥匙进入 用户管理
-
-	Power_Device_r                  int `orm:"size(2);0"` //  设备查看
-	Power_Device_a                  int `orm:"size(2);0"` //  设备增加
-	Power_Device_Parameter_e        int `orm:"size(2);0"` //  设备 参数
-	Power_DeviceSensor_Parameter_e  int `orm:"size(2);0"` //  设备 传感器参数
-	Power_DeviceSensor_Compensate_e int `orm:"size(2);0"` //设备 传感器 偏差值 参数
-	Power_DeviceSensor_Class        int `orm:"size(2);0"` // 传感器分类
-	Power_Device_Bind_e             int `orm:"size(2);0"` //  用户 设备绑定
-
-	Power_DataScreen_r int `orm:"size(2);0"` //  大数据平台
-
-	Logs_Sys_r  int `orm:"size(2);0"` //  系统日志
-	Logs_User_r int `orm:"size(2);0"` //  用户日志
-
-	T_State    int       `orm:"size(200);1"`                                           //  0删除  1 正常
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
+	Id           int       `orm:"column(ID);size(11);auto;pk"`
+	T_code       string    `orm:"size(256);null"`                                        //  唯一编码
+	T_name       string    `orm:"size(256);null"`                                        //  权限名称
+	T_role       int       `orm:"size(2);default(0)"`                                    //  1-内部 2-实施 3-养护员
+	T_warning    int       `orm:"size(2);default(0)"`                                    //  告警权限 1-超标 2-异常 3-系统
+	T_Menu_Bind  string    `orm:"size(256);null"`                                        //  权限绑定菜单id 1|2|3|4|5|
+	T_Menu_Grant string    `orm:"size(256);null"`                                        //  可以授予的菜单id 1|2|3|4|5| * 代表全部菜单
+	T_State      int       `orm:"size(2);default(1)"`                                    //  0删除  1 正常
+	CreateTime   time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
+	UpdateTime   time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
 }
 
 func (t *Power) TableName() string {
@@ -49,7 +37,7 @@ func init() {
 	orm.RegisterModel(new(Power))
 
 	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
-		"redis_Power", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+		"redis_Cold_User_Power", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
 	fmt.Println(config)
 	var err error
 	redisCache_Power, err = cache.NewCache("redis", config)
@@ -61,7 +49,7 @@ func init() {
 }
 
 // ---------------- Redis -------------------
-//Redis_Set(m.T_sn,m) // Redis 更新缓存
+// Redis_Set(m.T_sn,m) // Redis 更新缓存
 func Redis_Power_Set(r Power) (err error) {
 	//json序列化
 	str, err := json.Marshal(r)
@@ -77,9 +65,9 @@ func Redis_Power_Set(r Power) (err error) {
 	return
 }
 
-//if r,is :=Redis_Get(T_sn);is{
-//return r,nil
-//}
+// if r,is :=Redis_Get(T_sn);is{
+// return r,nil
+// }
 func Redis_Power_Get(key string) (r Power, is bool) {
 	if redisCache_Power.IsExist(key) {
 		//println("找到key:",key)
@@ -119,10 +107,24 @@ func Update_Power_ById_Basics(m Power) (err error) {
 // 添加
 func Add_Power(m Power) (id int64, err error) {
 	o := orm.NewOrm()
+
+	// 生成编号
+	rand_x := 0
+	for true {
+		m.T_code = GetRandString(6, "", int64(rand_x)) // 1,336,336
+		err := o.Read(&m, "T_code")                    // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+		if err != nil {
+			break
+		}
+		rand_x += 1
+	}
+
 	id, err = o.Insert(&m)
 	if err != nil {
 		fmt.Println(err)
 	}
+
+	Redis_API_Set(int(id), Read_API_List_By_Menu_Bind(m.T_Menu_Bind))
 	Redis_Power_Set(m)
 	return id, err
 }
@@ -135,8 +137,8 @@ func Read_Power_ById(Id int) (r Power, err error) {
 	}
 
 	o := orm.NewOrm()
-	r = Power{Id: Id}
-	err = o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	r = Power{Id: Id, T_State: 1}
+	err = o.Read(&r, "Id", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 		fmt.Println(err)
 	} else {
@@ -158,7 +160,7 @@ func Read_Power_List_ALL_Power_Administration(Power_Administration int) (maps []
 }
 
 // 获取列表
-func Read_Power_List_ALL(Power_name string, page int, page_z int) (maps []Power, cnt int64) {
+func Read_Power_List(T_name string, page int, page_z int) (maps []Power, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -171,25 +173,70 @@ func Read_Power_List_ALL(Power_name string, page int, page_z int) (maps []Power,
 		offset = int64((page - 1) * page_z)
 	}
 
-	qs.Limit(page_z, offset).Filter("Power_name__icontains", Power_name).Filter("T_State", 1).OrderBy("Id").All(&maps)
-	cnt, _ = qs.Filter("Power_name__icontains", Power_name).Filter("T_State", 1).Count()
+	qs.Limit(page_z, offset).Filter("T_name__icontains", T_name).Filter("T_State", 1).OrderBy("Id").All(&maps)
+	cnt, _ = qs.Filter("T_name__icontains", T_name).Filter("T_State", 1).Count()
+
+	return maps, cnt
+}
+
+// 获取列表
+func Read_Power_List_ALL() (maps []Power, cnt int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(Power))
+
+	qs.Filter("T_State", 1).OrderBy("Id").All(&maps)
+	cnt, _ = qs.Filter("T_State", 1).Count()
 
 	return maps, cnt
 }
 
 // 修改
-func Update_Delete_Power_Byid(Id int) (err error) {
+func Update_Power(v Power, cols ...string) bool {
 	o := orm.NewOrm()
-	v := Power{Id: Id}
-	// ascertain id exists in the database
-	if err = o.Read(&v); err == nil {
-		var num int64
-		v.T_State = 0
-		if num, err = o.Update(&v, "T_State"); err == nil {
-			fmt.Println("Number of records updated in database:", num)
-		}
-		Redis_Power_DelK(strconv.Itoa(Id))
+	if num, err := o.Update(&v, cols...); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+		Redis_API_Set(v.Id, Read_API_List_By_Menu_Bind(v.T_Menu_Bind))
+		Redis_Power_Set(v) // Redis 更新缓存
+		return true
 	}
+	return false
+}
 
-	return err
+// 删除
+func Delete_Power(v Power) bool {
+	o := orm.NewOrm()
+	v.T_State = 0
+	if num, err := o.Update(&v, "T_State"); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+	} else {
+		return false
+	}
+	Redis_API_DelK(strconv.Itoa(v.Id))   // Redis 删除API缓存
+	Redis_Power_DelK(strconv.Itoa(v.Id)) // Redis 删除缓存
+	return true
+}
+
+// #取得随机字符串:通过打乱slice来操作
+func GetRandString(length int, char string, rand_x int64) string {
+	if length < 1 {
+		return ""
+	}
+
+	if len(char) <= 6 || len(char) <= length {
+		char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+	}
+
+	charArr := strings.Split(char, "")
+	ran := rand.New(rand.NewSource(time.Now().Unix() + rand_x))
+
+	l := len(charArr)
+	for i := l - 1; i > 0; i-- {
+		r := ran.Intn(i)
+		charArr[r], charArr[i] = charArr[i], charArr[r]
+	}
+	rchar := charArr[:length]
+	return strings.Join(rchar, "")
 }

+ 5 - 5
models/Account/Tokey.go

@@ -16,7 +16,7 @@ func init() {
 	//orm.RegisterModel(new(Tokey))
 
 	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
-		"redisCache_Tokey", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+		"redisCache_Cold_User_Tokey", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
 	fmt.Println(config)
 	var err error
 	redisCache_Tokey, err = cache.NewCache("redis", config)
@@ -27,7 +27,7 @@ func init() {
 }
 
 // ---------------- Redis -------------------
-//Redis_Set(m.T_sn,m) // Redis 更新缓存
+// Redis_Set(m.T_sn,m) // Redis 更新缓存
 func Add_Tokey_Set(Uuid string) string {
 	var Tokey string
 	for true {
@@ -42,9 +42,9 @@ func Add_Tokey_Set(Uuid string) string {
 	return Tokey
 }
 
-//if r,is :=Redis_Get(T_sn);is{
-//return r,nil
-//}
+// if r,is :=Redis_Get(T_sn);is{
+// return r,nil
+// }
 func Redis_Tokey_Get(Tokey string) (string, bool) {
 	if len(Tokey) < 10 {
 		return "", false

+ 183 - 2
models/Company/CompanyClass.go

@@ -1,10 +1,15 @@
 package Company
 
 import (
+	"Cold_Api/conf"
+	"encoding/json"
+	"fmt"
+	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
 	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
-
+	"strconv"
 	"time"
 )
 
@@ -13,17 +18,193 @@ type CompanyClass struct {
 	T_pid  int    `orm:"index;size(256);null"` // Account.Company 绑定公司
 	T_name string `orm:"size(256);null"`       // 分类
 
-	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常
+	T_State    int       `orm:"size(2);default(1)"`                                    // 0 删除   1 正常
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
 
+type CompanyClass_R struct {
+	Id     int
+	T_pid  int    // Account.Company 绑定公司
+	T_name string // 分类
+}
+
 func (t *CompanyClass) TableName() string {
 	return "DeviceClass" // 数据库名称   // ************** 替换 DesignClass **************
 }
 
+var redisCache_CompanyClass cache.Cache
+
 func init() {
 	//注册模型
 	orm.RegisterModel(new(CompanyClass))
+}
+
+// Redis_Set(m.T_sn,m) // Redis 更新缓存
+func Redis_CompanyClass_Set(r CompanyClass) (err error) {
+	key := strconv.Itoa(r.Id)
+
+	//json序列化
+	str, err := json.Marshal(r)
+	if err != nil {
+		fmt.Print(err)
+		return
+	}
+
+	err = redisCache_CompanyNotice.Put(key, str, 2*time.Hour)
+	if err != nil {
+		fmt.Println("set key:", key, ",value:", str, err)
+	}
+	return
+}
+
+// if r,is :=Redis_Get(T_sn);is{
+// return r,nil
+// }
+func Redis_CompanyClass_Get(key string) (CompanyClass, bool) {
+	println("找到key:", key)
+	if redisCache_CompanyNotice.IsExist(key) {
+		//println("找到key:",key)
+		v := redisCache_CompanyNotice.Get(key)
+		var r CompanyClass
+		json.Unmarshal(v.([]byte), &r)
+
+		return r, true
+	}
+
+	return CompanyClass{}, false
+}
+func Redis_CompanyClass_DelK(key string) (err error) {
+	err = redisCache_CompanyNotice.Delete(key)
+	return
+}
+
+// ---------------- 特殊方法 -------------------
+func CompanyClassToCompanyClass_R(t CompanyClass) (r CompanyClass_R) {
+	r.Id = t.Id
+	r.T_pid = t.T_pid
+	r.T_name = t.T_name
+	return r
+}
+
+// 获取 ById
+func Read_CompanyClass_ById(id int) (r CompanyClass, err error) {
+	key := strconv.Itoa(id)
+	if r, is := Redis_CompanyClass_Get(key); is {
+		return r, nil
+	}
+	o := orm.NewOrm()
+	r = CompanyClass{Id: id, T_State: 1}
+	err = o.Read(&r, "Id", "T_pid", "T_State")
+	if err != nil {
+		fmt.Println(err)
+		return r, err
+	}
+	Redis_CompanyClass_Set(r)
+	return r, err
+}
+
+// 添加
+func Add_CompanyClass(m CompanyClass) (id int64, err error) {
+	o := orm.NewOrm()
+	id, err = o.Insert(&m)
+	if err != nil {
+		fmt.Println(err)
+	}
+	Redis_CompanyClass_Set(m)
+	return
+}
+
+// 修改
+func Update_CompanyClass(r CompanyClass, cols ...string) bool {
+	o := orm.NewOrm()
+	if num, err := o.Update(&r, cols...); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+		Redis_CompanyClass_Set(r)
+		return true
+	}
+	return false
+}
+
+// 删除
+func Delete_CompanyClass_ById(id int) bool {
+	o := orm.NewOrm()
+	v := CompanyClass{Id: id}
+	// ascertain id exists in the database
+	if err := o.Read(&v); err == nil {
+		var num int64
+		v.T_State = 0
+		if num, err = o.Update(&v, "T_State"); err == nil {
+			fmt.Println("Number of records updated in database:", num)
+			key := strconv.Itoa(v.Id)
+			Redis_CompanyClass_DelK(key)
+			return true
+		}
+	}
+	return false
+}
+
+// 获取列表
+func Read_CompanyClass_List(T_pid int, T_name string, page int, page_z int) (r []CompanyClass_R, cnt int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	var map_r []CompanyClass
+	qs := o.QueryTable(new(CompanyClass))
+	var offset int64
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	cond := orm.NewCondition()
+
+	cond1 := cond.And("T_State", 1)
+
+	if T_pid > 0 {
+		cond1 = cond1.And("T_pid", T_pid)
+	}
+	if len(T_name) > 0 {
+		cond1 = cond1.And("T_name", T_name)
+	}
+
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&map_r)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	for _, v := range map_r {
+		r = append(r, CompanyClassToCompanyClass_R(v))
+	}
+
+	return r, cnt
+
+}
+
+// 获取全部列表
+func Read_CompanyClass_All(T_pid int, T_name string) (r []CompanyClass_R) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	var map_r []CompanyClass
+	qs := o.QueryTable(new(CompanyClass))
+
+	cond := orm.NewCondition()
+
+	cond1 := cond.And("T_State", 1).And("T_pid", T_pid)
+
+	if len(T_name) > 0 {
+		cond1 = cond1.And("T_name", T_name)
+	}
+
+	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&map_r)
+
+	for _, v := range map_r {
+		r = append(r, CompanyClassToCompanyClass_R(v))
+	}
+
+	return r
 
 }

+ 93 - 46
models/Company/CompanyNotice.go

@@ -2,14 +2,15 @@ package Company
 
 import (
 	"Cold_Api/conf"
-	"Cold_Api/models/Account"
 	"encoding/json"
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
 	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
+	"strings"
 	"time"
 )
 
@@ -18,17 +19,17 @@ type CompanyNotice struct {
 	T_pid  int    `orm:"index;size(256);null"` // Account.Company 绑定公司
 	T_name string `orm:"size(256);null"`       // 分类
 
-	T_Notice_wx      string `orm:"type(text);null"` //w微信公众号  appid/名字|
-	T_Notice_wx2     string `orm:"type(text);null"` //w微信公众号  appid/名字|
-	T_Notice_phone   string `orm:"type(text);null"` //p手机  1111111|
-	T_Notice_message string `orm:"type(text);null"` //m短信   1111111|
-	T_Notice_mailbox string `orm:"type(text);null"` //e邮箱    1111111|
-
+	T_Notice_wx        string `orm:"type(text);null"` //w微信公众号  appid/名字|
+	T_Notice_wx2       string `orm:"type(text);null"` //w微信公众号  appid/名字|
+	T_Notice_phone     string `orm:"type(text);null"` //p手机  1111111|
+	T_Notice_message   string `orm:"type(text);null"` //m短信   1111111|
+	T_Notice_mailbox   string `orm:"type(text);null"` //e邮箱    1111111|
+	T_Notice_bind      string `orm:"type(text);null"` // 绑定T_sn,Tid|    862289056463538,1|8622546456433,1|
 	T_Notice_mechanism string `orm:"type(text);null"` // 报警机制
 	// W报警编号,处理,w启用,数量,上限,~|
 	// W15,0,0,0,0,0,0,0,0,0,0,0,0|
 
-	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常
+	T_State    int       `orm:"size(2);default(1)"`                                    // 0 删除   1 正常
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
@@ -39,8 +40,8 @@ type CompanyNotice_R struct {
 	T_Notice_phone     string `orm:"type(text);null"` //p手机  1111111|
 	T_Notice_message   string `orm:"type(text);null"` //m短信   1111111|
 	T_Notice_mailbox   string `orm:"type(text);null"` //e邮箱    1111111|
+	T_Notice_bind      string `orm:"type(text);null"` // 绑定T_sn,Tid|
 	T_Notice_mechanism string `orm:"type(text);null"` // 报警机制
-
 }
 
 func (t *CompanyNotice) TableName() string {
@@ -66,7 +67,7 @@ func init() {
 
 }
 
-//Redis_Set(m.T_sn,m) // Redis 更新缓存
+// Redis_Set(m.T_sn,m) // Redis 更新缓存
 func Redis_CompanyNotice_Set(r CompanyNotice) (err error) {
 	key := strconv.Itoa(r.Id)
 
@@ -84,9 +85,9 @@ func Redis_CompanyNotice_Set(r CompanyNotice) (err error) {
 	return
 }
 
-//if r,is :=Redis_Get(T_sn);is{
-//return r,nil
-//}
+// if r,is :=Redis_Get(T_sn);is{
+// return r,nil
+// }
 func Redis_CompanyNotice_Get(key string) (CompanyNotice, bool) {
 	println("找到key:", key)
 	if redisCache_CompanyNotice.IsExist(key) {
@@ -113,12 +114,13 @@ func CompanyNoticeToCompanyNotice_R(t CompanyNotice) (r CompanyNotice_R) {
 	r.T_Notice_phone = t.T_Notice_phone
 	r.T_Notice_message = t.T_Notice_message
 	r.T_Notice_mailbox = t.T_Notice_mailbox
+	r.T_Notice_bind = t.T_Notice_bind
 	r.T_Notice_mechanism = t.T_Notice_mechanism
 	return r
 }
 
 // 获取 ById
-func Read_Class_ById(id int) (r CompanyNotice, err error) {
+func Read_CompanyNotice_ById(id int) (r CompanyNotice, err error) {
 	key := strconv.Itoa(id)
 	if r, is := Redis_CompanyNotice_Get(key); is {
 		//println("Redis_Get  OK")
@@ -138,7 +140,7 @@ func Read_Class_ById(id int) (r CompanyNotice, err error) {
 }
 
 // 添加
-func Add_Class(m CompanyNotice) (id int64, err error) {
+func Add_CompanyNotice(m CompanyNotice) (id int64, err error) {
 	o := orm.NewOrm()
 	id, err = o.Insert(&m)
 	if err != nil {
@@ -148,23 +150,8 @@ func Add_Class(m CompanyNotice) (id int64, err error) {
 	return
 }
 
-// 修改
-func Update_Class_ById(m CompanyNotice) (err error) {
-	o := orm.NewOrm()
-	v := CompanyNotice{Id: m.Id}
-	// ascertain id exists in the database
-	if err = o.Read(&v); err == nil {
-		var num int64
-		if num, err = o.Update(&m, "T_name", "T_Notice_wx", "T_Notice_wx2", "T_Notice_phone", "T_Notice_message", "T_Notice_mailbox", "T_Notice_mechanism"); err == nil {
-			fmt.Println("Number of records updated in database:", num)
-		}
-	}
-	Redis_CompanyNotice_Set(m)
-	return
-}
-
 // 删除
-func Delete_Class_ById(id int) CompanyNotice {
+func Delete_CompanyNotice_ById(id int) bool {
 	o := orm.NewOrm()
 	v := CompanyNotice{Id: id}
 	// ascertain id exists in the database
@@ -173,15 +160,16 @@ func Delete_Class_ById(id int) CompanyNotice {
 		v.T_State = 0
 		if num, err = o.Update(&v, "T_State"); err == nil {
 			fmt.Println("Number of records updated in database:", num)
+			key := strconv.Itoa(v.Id)
+			Redis_CompanyNotice_DelK(key)
+			return true
 		}
-		key := strconv.Itoa(v.Id)
-		Redis_CompanyNotice_DelK(key)
 	}
-	return v
+	return false
 }
 
 // 修改
-func Update_Class(m CompanyNotice, cols ...string) bool {
+func Update_CompanyNotice(m CompanyNotice, cols ...string) bool {
 	o := orm.NewOrm()
 	if num, err := o.Update(&m, cols...); err == nil {
 		fmt.Println("Number of records updated in database:", num)
@@ -192,21 +180,23 @@ func Update_Class(m CompanyNotice, cols ...string) bool {
 }
 
 // 删除
-func Delete_Class_ByUuid_All(user_ Account.Admin) {
+func Delete_CompanyNotice_ByT_pid_All(T_pid int) {
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(CompanyNotice))
 
 	var r []CompanyNotice
-	qs.Filter("T_State", 1).All(&r)
+	qs.Filter("T_pid", T_pid).Filter("T_State", 1).All(&r)
 	for _, v := range r {
 		v.T_State = 0
-		o.Update(&v, "T_State")
+		if _, err := o.Update(&v, "T_State"); err == nil {
+			Redis_CompanyNotice_DelK(strconv.Itoa(v.Id))
+		}
 	}
 
 }
 
 // 获取全部
-func Read_Class_All_1() (r []CompanyNotice) {
+func Read_CompanyNotice_All_1() (r []CompanyNotice) {
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(CompanyNotice))
 	qs.Filter("T_State", 1).All(&r)
@@ -214,34 +204,91 @@ func Read_Class_All_1() (r []CompanyNotice) {
 }
 
 // 获取列表
-func Read_CompanyNotice_ALL_1(T_uuid string, page int, T_name string) (r []CompanyNotice, cnt int64) {
+func Read_CompanyNotice_List(T_pid int, T_name string, page int, page_z int) (r []CompanyNotice_R, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
 	qs := o.QueryTable(new(CompanyNotice))
+	var maps []CompanyNotice
 	var offset int64
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
 	if page <= 1 {
 		offset = 0
 	} else {
-		offset = int64((page - 1) * conf.Page_size)
+		offset = int64((page - 1) * page_z)
 	}
 
-	qs.Limit(conf.Page_size, offset).Filter("T_uuid", T_uuid).Filter("T_name__icontains", T_name).OrderBy("-Id").Filter("T_State", 1).All(&r)
-	cnt, _ = qs.Filter("T_uuid", T_uuid).Filter("T_name__icontains", T_name).Filter("T_State", 1).Count()
-
+	qs.Limit(conf.Page_size, offset).Filter("T_pid", T_pid).Filter("T_name__icontains", T_name).Filter("T_State", 1).OrderBy("-Id").All(&maps)
+	cnt, _ = qs.Filter("T_pid", T_pid).Filter("T_name__icontains", T_name).Filter("T_State", 1).Count()
+	for _, v := range maps {
+		r = append(r, CompanyNoticeToCompanyNotice_R(v))
+	}
 	return r, cnt
 }
 
 // 获取列表
-func Read_CompanyNotice_ALL_T_uuid_1(T_uuid string) (r []CompanyNotice) {
+func Read_CompanyNotice_ALL_T_pid(T_pid int) (r []CompanyNotice) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
 	qs := o.QueryTable(new(CompanyNotice))
 
-	qs.Filter("T_uuid", T_uuid).OrderBy("-Id").Filter("T_State", 1).All(&r)
+	qs.Filter("T_pid", T_pid).OrderBy("-Id").Filter("T_State", 1).All(&r)
+
+	return r
+}
+
+// 获取全部列表
+func Read_CompanyNotice_All(T_pid int, T_name string) (r []CompanyNotice_R) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	var map_r []CompanyNotice
+	qs := o.QueryTable(new(CompanyNotice))
+
+	cond := orm.NewCondition()
+
+	cond1 := cond.And("T_State", 1).And("T_pid", T_pid)
+
+	if len(T_name) > 0 {
+		cond1 = cond1.And("T_name", T_name)
+	}
+
+	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&map_r)
+
+	for _, v := range map_r {
+		r = append(r, CompanyNoticeToCompanyNotice_R(v))
+	}
 
 	return r
+
+}
+
+func Add_T_Notice_bind(T_sn string, T_id int, T_Notice_id int) (err error) {
+
+	o := orm.NewOrm()
+	v := CompanyNotice{Id: T_Notice_id}
+	T_Notice_bind := T_sn + strconv.Itoa(T_id) + "|"
+	if err = o.Read(&v, "Id"); err == nil {
+		v.T_Notice_bind = strings.Replace(v.T_Notice_bind, T_Notice_bind, "", -1)
+		v.T_Notice_bind = v.T_Notice_bind + T_Notice_bind
+		o.Update(&v, "T_Notice_bind")
+	}
+	return err
+}
+
+func Delete_T_Notice_bind(T_sn string, T_id int, T_Notice_id int) (err error) {
+	o := orm.NewOrm()
+	v := CompanyNotice{Id: T_Notice_id}
+	T_Notice_bind := T_sn + strconv.Itoa(T_id) + "|"
+	if err = o.Read(&v, "Id"); err == nil {
+		v.T_Notice_bind = strings.Replace(v.T_Notice_bind, T_Notice_bind, "", -1)
+		o.Update(&v, "T_Notice_bind")
+	}
+	return err
+
 }

+ 48 - 54
models/Device/Device.go

@@ -2,7 +2,6 @@ package Device
 
 import (
 	"Cold_Api/conf"
-	"Cold_Api/models/Account"
 	"encoding/json"
 	"fmt"
 	"github.com/astaxie/beego/cache"
@@ -21,44 +20,44 @@ type Device struct {
 	T_pid             int       `orm:"index;size(256);null"` // Account.Company 绑定公司
 	T_MSISDN          string    `orm:"size(256);null"`       // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
 	T_devName         string    `orm:"size(256);null"`       // 设备名称
-	T_protocol        int       `orm:"size(2);1"`            // 冷链通讯协议 1 :1.0协议   2 :2.0协议    3 :3.0协议
+	T_protocol        int       `orm:"size(2);default(1)"`   // 冷链通讯协议 1 :1.0协议   2 :2.0协议    3 :3.0协议
 	T_VerifyTime      time.Time `orm:"type(timestamp);"`     // 验证时间
 	T_CalibrationTime time.Time `orm:"type(timestamp);"`     // 校准时间
-	T_ist             int       `orm:"size(2);1"`            // 温度   1开启   2关闭
-	T_ish             int       `orm:"size(2);1"`            // 湿度   1开启   2关闭
+	T_ist             int       `orm:"size(2);default(1)"`   // 温度   1开启   2关闭
+	T_ish             int       `orm:"size(2);default(1)"`   // 湿度   1开启   2关闭
 
 	// 设备同步参数
-	T_Dattery  int    `orm:"size(4);null"`       // 电量
-	T_Site     string `orm:"size(200);null"`     // GPS
-	T_type     int    `orm:"index;size(4);null"` // Device.DeviceType  1库房   2移动
-	T_give     int    `orm:"index;size(2);1"`    // 屏蔽状态 0 屏蔽  1 正常
-	T_monitor  int    `orm:"index;size(2);null"` // 监控状态 0 未监控 1 监控
-	T_online   int    `orm:"index;size(2);1"`    // 在线状态 0 未启用  1 在线  2 离线
-	T_online_s int    `orm:"index;size(2);0"`    // 在线状态-备用  0 未启用  1 在线  2 离线
-
-	T_State    int       `orm:"index;size(2);1"`                                       // 0 删除   1 正常
+	T_Dattery  int    `orm:"size(4);null"`             // 电量
+	T_Site     string `orm:"size(200);null"`           // GPS
+	T_type     int    `orm:"index;size(4);null"`       // Device.DeviceType  1库房   2移动
+	T_give     int    `orm:"index;size(2);default(1)"` // 屏蔽状态 0 屏蔽  1 正常
+	T_monitor  int    `orm:"index;size(2);null"`       // 监控状态 0 未监控 1 监控
+	T_online   int    `orm:"index;size(2);default(1)"` // 在线状态 0 未启用  1 在线  2 离线
+	T_online_s int    `orm:"index;size(2);default(0)"` // 在线状态-备用  0 未启用  1 在线  2 离线
+
+	T_State    int       `orm:"index;size(2);default(1)"`                              // 0 删除   1 正常
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
 
 type Device_R struct {
-	T_sn              string    // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_MSISDN          string    // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_devName         string    //设备名称
-	T_protocol        int       // 1 1.0协议  2 2.0协议
-	T_VerifyTime      time.Time // 验证时间
-	T_CalibrationTime time.Time // 校准时间
-	T_ist             int       // 温度   1开启   2关闭
-	T_ish             int       // 湿度   1开启   2关闭
-	T_Dattery         int       // 电量
-	T_Site            string    // GPS
-	T_type            int       // 1库房   2移动
-	T_give            int       // 屏蔽状态 0 屏蔽  1 正常
-	T_monitor         int       // 监控状态 0 未监控 1 监控
-	T_online          int       // 在线状态 0 未启用  1 在线  2 离线
-	T_online_s        int       // 在线状态-备用  0 未启用  1 在线  2 离线
-	CreateTime        time.Time //auto_now_add 第一次保存时才设置时间
-	UpdateTime        time.Time //auto_now 每次 model 保存时都会对时间自动更新
+	T_sn              string // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_MSISDN          string // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_devName         string // 设备名称
+	T_protocol        int    // 1 1.0协议  2 2.0协议
+	T_VerifyTime      string // 验证时间
+	T_CalibrationTime string // 校准时间
+	T_ist             int    // 温度   1开启   2关闭
+	T_ish             int    // 湿度   1开启   2关闭
+	T_Dattery         int    // 电量
+	T_Site            string // GPS
+	T_type            int    // 1库房   2移动
+	T_give            int    // 屏蔽状态 0 屏蔽  1 正常
+	T_monitor         int    // 监控状态 0 未监控 1 监控
+	T_online          int    // 在线状态 0 未启用  1 在线  2 离线
+	T_online_s        int    // 在线状态-备用  0 未启用  1 在线  2 离线
+	CreateTime        string //auto_now_add 第一次保存时才设置时间
+	UpdateTime        string //auto_now 每次 model 保存时都会对时间自动更新
 
 }
 
@@ -94,8 +93,8 @@ func DeviceToDevice_R(r Device) (t Device_R) {
 	t.T_MSISDN = r.T_MSISDN
 	t.T_devName = r.T_devName
 	t.T_protocol = r.T_protocol
-	t.T_VerifyTime = r.T_VerifyTime
-	t.T_CalibrationTime = r.T_CalibrationTime
+	t.T_VerifyTime = r.T_VerifyTime.Format("2006-01-02 15:04:05")
+	t.T_CalibrationTime = r.T_CalibrationTime.Format("2006-01-02 15:04:05")
 	t.T_ist = r.T_ist
 	t.T_ish = r.T_ish
 	t.T_Dattery = r.T_Dattery
@@ -105,14 +104,14 @@ func DeviceToDevice_R(r Device) (t Device_R) {
 	t.T_monitor = r.T_monitor
 	t.T_online = r.T_online
 	t.T_online_s = r.T_online_s
-	t.CreateTime = r.CreateTime
-	t.UpdateTime = r.UpdateTime
+	t.CreateTime = r.CreateTime.Format("2006-01-02 15:04:05")
+	t.UpdateTime = r.UpdateTime.Format("2006-01-02 15:04:05")
 
 	return
 }
 
 // ---------------- Redis -------------------
-//Redis_Set(m.T_sn,m) // Redis 更新缓存
+// Redis_Set(m.T_sn,m) // Redis 更新缓存
 func Redis_Set(r Device) (err error) {
 	//json序列化
 	str, err := json.Marshal(r)
@@ -127,9 +126,9 @@ func Redis_Set(r Device) (err error) {
 	return
 }
 
-//if r,is :=Redis_Get(T_sn);is{
-//return r,nil
-//}
+// if r,is :=Redis_Get(T_sn);is{
+// return r,nil
+// }
 func Redis_Get(key string) (r Device, is bool) {
 	if redisCache_Device.IsExist(key) {
 		//println("找到key:",key)
@@ -201,7 +200,7 @@ func Update_Device(r Device, cols ...string) bool {
 }
 
 // 获取列表
-func Read_Device_List(user_ Account.Admin, T_name string, T_monitor string, T_online string, page int, page_z int) (r []R2_Device, cnt int64) {
+func Read_Device_List(T_pid int, T_name string, T_monitor string, T_online string, page int, page_z int) (r []Device_R, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -217,14 +216,9 @@ func Read_Device_List(user_ Account.Admin, T_name string, T_monitor string, T_on
 	} else {
 		offset = int64((page - 1) * page_z)
 	}
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	//最高管理、一级账户、没有任何限制
-	if user_.Admin_master <= 1 {
-		T_Bind = ""
-	}
 
 	cond := orm.NewCondition()
-	cond1 := cond.And("T_Bind__icontains", T_Bind).And("T_State", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+	cond1 := cond.And("T_State", 1).And("T_pid", T_pid)
 
 	if len(T_name) > 0 {
 		cond1 = cond1.AndCond(cond.Or("T_sn__icontains", T_name).Or("T_devName__icontains", T_name).Or("T_MSISDN__icontains", T_name))
@@ -241,15 +235,8 @@ func Read_Device_List(user_ Account.Admin, T_name string, T_monitor string, T_on
 		cond1 = cond1.AndCond(cond.And("T_online", 1))
 	} else if T_online == "2" {
 		cond1 = cond1.AndCond(cond.And("T_online", 2))
-	} else if T_online == "3" {
-		cond1 = cond1.AndCond(cond.And("T_online", 3))
 	} else if T_online == "0" {
-		cond1 = cond1.AndCond(cond.And("T_online", 0).Or("T_online", 2).Or("T_online", 3))
-	}
-
-	// 非内部权限 - 丢弃
-	if user_.Admin_power > 6 {
-		cond1 = cond1.AndCond(cond.And("T_give", 1))
+		cond1 = cond1.AndCond(cond.And("T_online", 0))
 	}
 
 	var rx []Device
@@ -258,8 +245,15 @@ func Read_Device_List(user_ Account.Admin, T_name string, T_monitor string, T_on
 	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
 
 	for _, v := range rx {
-		r = append(r, DeviceToR2_Device(v))
+		r = append(r, DeviceToDevice_R(v))
 	}
 
 	return r, cnt
 }
+
+func Read_Device_ALL_T_Type_Count(T_pid int, T_type int) (cnt int64) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(Device))
+	cnt, _ = qs.Filter("T_pid", T_pid).Filter("T_type", T_type).Filter("T_State", 1).Count()
+	return cnt
+}

+ 74 - 104
models/Device/DeviceData.go

@@ -17,9 +17,10 @@ import (
 )
 
 // 建表
-//var CREATEsql = "CREATE TABLE IF NOT EXISTS `Z_DeviceData_" + SN + " ( " +
+// var CREATEsql = "CREATE TABLE IF NOT EXISTS `Z_DeviceData_" + SN + " ( " +
 var CREATEsql = " ( " +
 	"`t_id` int(6) NOT NULL," +
+	"`t_sp` int(6) NOT NULL," +
 	"`t_time` datetime NOT NULL," +
 	"`t_t` double(6, 2) NULL DEFAULT NULL," +
 	"`t_rh` double(6, 2) NULL DEFAULT NULL," +
@@ -28,14 +29,29 @@ var CREATEsql = " ( " +
 	"PRIMARY KEY (`t_time`, `t_id`) USING BTREE" +
 	") ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;"
 
-// 模板
-type DeviceData_R struct {
+type DeviceData_ struct {
+	T_id   int       // 传感器id
+	T_sp   int       // 传感器参数id
 	T_t    float32   // 温度
 	T_rh   float32   // 湿度
 	T_Site string    // GPS
 	T_time time.Time // 采集时间
 }
 
+// 模板
+type DeviceData_R struct {
+	T_id   int     // 传感器id
+	T_name string  // 传感器名称
+	T_t    float32 // 温度
+	T_rh   float32 // 湿度
+	T_Site string  // GPS
+	T_tl   float32 // 温度下限
+	T_tu   float32 // 温度上限
+	T_rhl  float32 // 湿度下限
+	T_rhu  float32 // 湿度上限
+	T_time string  // 采集时间
+}
+
 //func (t *DeviceData) TableName() string {
 //	return "DeviceData" // 数据库名称   // ************** 替换 FormulaList **************
 //}
@@ -55,14 +71,32 @@ func init() {
 	}
 }
 
+func DeviceData_ToDeviceData_R(r DeviceData_, maps map[int]DeviceSensorParameter_M) (t DeviceData_R) {
+	t.T_id = r.T_id
+	t.T_t = r.T_t
+	t.T_rh = r.T_rh
+	t.T_Site = r.T_Site
+	t.T_time = r.T_time.Format("2006-01-02 15:04:05")
+	if sp, ok := maps[r.T_sp]; ok {
+		t.T_name = sp.T_name
+		t.T_tl = sp.T_Tlower
+		t.T_tu = sp.T_Tupper
+		t.T_rhl = sp.T_RHlower
+		t.T_rhu = sp.T_Tupper
+	}
+	return
+}
+
 // ---------------- Redis -------------------
-//Redis_Set(m.T_sn,m) // Redis 更新缓存
+// Redis_Set(m.T_sn,m) // Redis 更新缓存
 func RedisDeviceData_Set(key string, r DeviceData_R) (err error) {
 	if redis_DeviceData.IsExist(key) {
 		var t DeviceData_R
 		v := redis_DeviceData.Get(key)
 		json.Unmarshal(v.([]byte), &t)
-		if t.T_time.Unix() > r.T_time.Unix() {
+		tTime, _ := time.Parse("2006-01-02 15:04:05", t.T_time)
+		rTime, _ := time.Parse("2006-01-02 15:04:05", r.T_time)
+		if tTime.Unix() > rTime.Unix() {
 			// 储存的 是最新数据
 			return
 		}
@@ -90,8 +124,8 @@ func RedisDeviceData_Get(key string) (r DeviceData_R, is bool) {
 	return DeviceData_R{}, false
 }
 
-//-------------------------------------------------------
-//创建数据库  Device.CREATE_DeviceData("")
+// -------------------------------------------------------
+// 创建数据库  Device.CREATE_DeviceData("")
 func CREATE_DeviceData(SN string) bool {
 
 	sql := "CREATE TABLE IF NOT EXISTS `Z_DeviceData_" + SN + "` " + CREATEsql
@@ -118,12 +152,11 @@ func DELETE_DeviceDatar(SN string) bool {
 
 // ---------------- 特殊方法 ------------------
 type DeviceData_T struct {
-	T_id      int       // ID
-	T_t       float32   // 温度
-	T_rh      float32   // 湿度
-	T_Site    string    // GPS
-	T_Dattery int       // 电量
-	T_time    time.Time // 采集时间
+	T_id   int       // ID
+	T_t    float32   // 温度
+	T_rh   float32   // 湿度
+	T_Site string    // GPS
+	T_time time.Time // 采集时间
 }
 
 // 添加
@@ -162,8 +195,8 @@ func Add_DeviceData(SN string, v DeviceData_T) bool {
 	}
 
 	// 开始插入数据
-	sql := "INSERT INTO Z_DeviceData_" + SN + " ( `t_id`, `t_t`, `t_rh`, `t_site`,`t_battery`, `t_time`) " +
-		"VALUES (" + strconv.Itoa(v.T_id) + ", " + lib.To_string(v.T_t) + ", " + lib.To_string(v.T_rh) + ", '" + v.T_Site + "'," + strconv.Itoa(v.T_Dattery) + ", '" + v.T_time.Format("2006-01-02 15:04:05") + "')"
+	sql := "INSERT INTO Z_DeviceData_" + SN + " ( `t_id`, `t_t`, `t_rh`, `t_site`, `t_time`) " +
+		"VALUES (" + strconv.Itoa(v.T_id) + ", " + lib.To_string(v.T_t) + ", " + lib.To_string(v.T_rh) + ", '" + v.T_Site + "'," + v.T_time.Format("2006-01-02 15:04:05") + "')"
 	//  这里有时间优化  用于一次 prepare 多次 exec,以提高批量执行的速度
 	fmt.Println(sql)
 	res, err := o.Raw(sql).Exec()
@@ -172,8 +205,6 @@ func Add_DeviceData(SN string, v DeviceData_T) bool {
 		return false
 	}
 	res.RowsAffected()
-	// 存在 写入 redis
-	Redis_Set_DeviceData_Time(key_time)
 
 	return true
 }
@@ -201,21 +232,21 @@ func Add_DeviceData(SN string, v DeviceData_T) bool {
 //	T_time    time.Time `orm:"column(t_time);type(timestamp);null;"` // 采集时间
 //}
 
-//
-func Read_DeviceData_ById_List(SN string, T_id int, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_, int) {
+func Read_DeviceData_ById_List(SN string, T_id int, Time_start_ string, Time_end_ string, page int, page_z int, SParamMap map[int]DeviceSensorParameter_M) ([]DeviceData_R, int) {
 	o := orm.NewOrm()
 	var maps []DeviceData_
 	var maps_z []orm2.ParamsList
-	pagez := page_z
-
+	var r []DeviceData_R
 	var offset int
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
+
 	if page <= 1 {
 		offset = 0
 	} else {
-		page -= 1
-		offset = page * pagez
+		offset = (page - 1) * page_z
 	}
-
 	sql_time := ""
 
 	if len(Time_start_) > 1 {
@@ -230,15 +261,16 @@ func Read_DeviceData_ById_List(SN string, T_id int, Time_start_ string, Time_end
 	fmt.Println(sql)
 	_, err := o.Raw(sql).ValuesList(&maps_z)
 	if err != nil {
-		return maps, 0
+		return r, 0
 	}
 	if len(maps_z) == 0 {
-		return maps, 0
+		return r, 0
 	}
 	//fmt.Println("maps_z;",maps_z[0][0])
-	sql = "SELECT t_name,t_id,t_t,t_rh,t_tl,t_tu,t_rhl,t_rhu,t_site,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time,t_time AS t_time1  FROM Z_DeviceData_" + SN + " WHERE " + sql_time + " t_id = " + strconv.Itoa(T_id) + " ORDER BY t_time1 DESC "
+	//t_tl,t_tu,t_rhl,t_rhu,
+	sql = "SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM Z_DeviceData_" + SN + " WHERE " + sql_time + " t_id = " + strconv.Itoa(T_id) + " ORDER BY t_time1 DESC "
 	if page_z != 9999 {
-		sql = sql + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(pagez)
+		sql = sql + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(page_z)
 	}
 
 	fmt.Println(sql)
@@ -246,10 +278,14 @@ func Read_DeviceData_ById_List(SN string, T_id int, Time_start_ string, Time_end
 
 	//value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", cnt), 64)
 	key, _ := strconv.Atoi(maps_z[0][0].(string))
-	return maps, key
+
+	for _, v := range maps {
+		r = append(r, DeviceData_ToDeviceData_R(v, SParamMap))
+	}
+
+	return r, key
 }
 
-//
 func Read_SqlRaw(T_SQL string) []orm2.Params {
 	o := orm.NewOrm()
 	var lists []orm2.Params
@@ -260,7 +296,6 @@ func Read_SqlRaw(T_SQL string) []orm2.Params {
 	return lists
 }
 
-//
 func Read_SqlRawL(T_SQL string, T_data []string) (string, []orm2.Params) {
 	o := orm.NewOrm()
 	var lists []orm2.Params
@@ -274,85 +309,21 @@ func Read_SqlRawL(T_SQL string, T_data []string) (string, []orm2.Params) {
 	return "", lists
 }
 
-// 获取最新数据
-func Read_DeviceData_ById_New(SN string, T_id int) (DeviceData_New, bool) {
-	o := orm.NewOrm()
-	var maps DeviceData_New
-
-	key_data := SN + "|" + strconv.Itoa(T_id)
-	if redis_DeviceData.IsExist(key_data) {
-		r, _ := RedisDeviceData_Get(key_data)
-		//println("Redis_Get  OK")
-		return r, true
-	}
-
-	//fmt.Println("maps_z;",maps_z[0][0])
-	sql := "SELECT t_name,t_t,t_rh,t_tl,t_tu,t_rhl,t_rhu,t_site,t_time  FROM Z_DeviceData_" + SN + " WHERE " + " t_id = " + strconv.Itoa(T_id) + " ORDER BY t_time DESC "
-	sql = sql + " LIMIT 0,1 "
-
-	fmt.Println(sql)
-	err := o.Raw(sql).QueryRow(&maps)
-	if err != nil {
-		fmt.Println(err)
-		return maps, false
-	}
-	fmt.Println("T_time:", maps.T_time)
-	RedisDeviceData_Set(key_data, maps)
-	return maps, true
-}
-
-func Read_DeviceData_By_T_snid_List(T_snid string, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_, int) {
+func Read_V2_DeviceData_By_T_snid_List(T_snid string, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_R, int64) {
 	T_snid_list := strings.Split(T_snid, "|")
-	var maps []DeviceData_
-	var maps_num int
-	var offset, offset_z int
-	for _, v := range T_snid_list {
-		sn_id := strings.Split(v, ",")
-
-		if len(sn_id) == 2 {
-			r_maps, r_maps_num := Read_DeviceData_ById_List(sn_id[0], lib.To_int(sn_id[1]), Time_start_, Time_end_, 0, 9999)
-			for i, _ := range r_maps {
-				r_maps[i].T_sn = sn_id[0]
-			}
-			maps = append(maps, r_maps...)
-			maps_num = maps_num + r_maps_num
-
-			fmt.Println("加载数据:", sn_id[0], sn_id[1], r_maps_num)
-		}
-	}
-	if page <= 1 {
-		offset = 0
-	} else {
-		page -= 1
-		offset = page * page_z
-	}
-
-	offset_z = offset + page_z
-	if maps_num < offset_z {
-		offset_z = maps_num
-	}
-
-	if page_z == 9999 {
-		fmt.Println("总数据:", maps_num, " 导出")
-		return maps, maps_num
-	}
-	fmt.Println("总数据:", maps_num, " 截取", offset, offset+page_z)
-	return maps[offset:offset_z], maps_num
-}
-
-func Read_V2_DeviceData_By_T_snid_List(T_snid string, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_, int64) {
-	T_snid_list := strings.Split(T_snid, "|")
-	var maps []DeviceData_
+	var maps []DeviceData_R
 	var maps_num int64
 	var offset, offset_z int
+
 	for _, v := range T_snid_list {
 		sn_id := strings.Split(v, ",")
 
 		if len(sn_id) == 2 {
-			r_maps, r_maps_num := Read_DeviceData_ById_List(sn_id[0], lib.To_int(sn_id[1]), Time_start_, Time_end_, 0, 9999)
-			for i, _ := range r_maps {
-				r_maps[i].T_sn = sn_id[0]
-			}
+			SParamMap := Read_DeviceSensorParameter_Map_All(sn_id[0], lib.To_int(sn_id[1]))
+			r_maps, r_maps_num := Read_DeviceData_ById_List(sn_id[0], lib.To_int(sn_id[1]), Time_start_, Time_end_, 0, 9999, SParamMap)
+			//for i, _ := range r_maps {
+			//	r_maps[i].T_sn = sn_id[0]
+			//}
 			maps = append(maps, r_maps...)
 			maps_num = maps_num + int64(r_maps_num)
 
@@ -379,7 +350,6 @@ func Read_V2_DeviceData_By_T_snid_List(T_snid string, Time_start_ string, Time_e
 	return maps[offset:offset_z], maps_num
 }
 
-//
 func Read_DeviceData_ById_Year_List(SN string) []orm2.ParamsList {
 	o := orm.NewOrm()
 

+ 4 - 4
models/Device/DeviceParameter.go

@@ -12,7 +12,7 @@ import (
 type DeviceParameter struct {
 	Id int `orm:"column(ID);size(11);auto;pk"`
 
-	T_sn           string `orm:"index;size(256);null"` //   设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_sn           string `orm:"index;size(256);null"` //设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
 	T_devName      string `orm:"size(256);null"`       //设备名称
 	T_uploadTime   int    `orm:"size(200);null"`       //实时数据上传间隔
 	T_saveTime     int    `orm:"size(200);null"`       //数据保存间隔
@@ -20,7 +20,7 @@ type DeviceParameter struct {
 	T_overrunAlarm int    `orm:"size(200);null"`       //超限报警触发间隔
 	T_outageAlarm  int    `orm:"size(200);null"`       //断电报警触发间隔
 	T_lostAlarm    int    `orm:"size(200);null"`       //传感器掉线报警触发间隔
-	T_warningTime  int    `orm:"size(200);null"`       // 超限预警触发间隔
+	T_warningTime  int    `orm:"size(200);null"`       //超限预警触发间隔
 	T_warningDelay int    `orm:"size(200);null"`       //超限预警延时
 	T_batteryLimit int    `orm:"size(200);null"`       //电池电量下限
 	T_enwarning    int    `orm:"size(2);null"`         //是否启动超限预警
@@ -31,10 +31,10 @@ type DeviceParameter struct {
 	T_decTotal     string `orm:"size(256);''"`         ////配置管理主机总终端数量
 	T_chDecTotal   string `orm:"size(256);''"`         //[18,19,21,12,30,0,0,0,0,0]  //配置每个通道数量[第1通道,第2通道…第10通道]
 
-	T_uuid      string    `orm:"size(256);null"`                                        //处理 人员
+	T_uuid      string    `orm:"size(256);null"`                                        // 处理 人员
 	T_Msid      int       `orm:"size(50);0"`                                            // 消息识别ID
 	T_SendState int       `orm:"size(2);0"`                                             // 发送状态  0 待发送   1 发送成功  2 发送失败  3 丢弃
-	T_State     int       `orm:"size(2);1"`                                             //  1 系统获取   2 用户提交
+	T_State     int       `orm:"size(2);default(1)"`                                    //  1 系统获取   2 用户提交
 	CreateTime  time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime  time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }

+ 152 - 129
models/Device/DeviceSensor.go

@@ -3,7 +3,6 @@ package Device
 import (
 	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
-	"Cold_Api/models/Account"
 	"encoding/json"
 	"fmt"
 	"github.com/astaxie/beego/cache"
@@ -19,11 +18,11 @@ import (
 // 模板
 type DeviceSensor struct {
 	T_sn   string `orm:"pk;size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_id   int    `orm:"pk;size(11);null"`  // 传感器编号
+	T_id   int    `orm:"size(11);null"`     // 传感器编号
 	T_name string `orm:"size(256);null"`    // 标题
 
 	T_pid      int    `orm:"index;size(256);null"` // Account.Company 绑定公司
-	T_Calss    string `orm:"size(256);null"`       // Device.DeviceClass.Id 设备分类  C1|C2|
+	T_Class    string `orm:"size(256);null"`       // Device.DeviceClass.Id 设备分类  C1|C2|
 	T_Notice   string `orm:"size(256);null"`       // Device.DeviceNotice.Id 设备通知策略  N1|N2|
 	T_datashow int    `orm:"index;size(2);1"`      // 0 屏蔽数据展示  1 正常数据展示
 	T_sort     int    `orm:"index;size(200);1"`    // 排序
@@ -57,12 +56,13 @@ type DeviceSensor_R struct {
 	T_id   int    // 传感器编号
 	T_name string // 标题
 
-	T_3dview   string //3D 视图ID
+	T_3dview   string // 3D 视图ID
 	T_sort     int    // 排序
-	T_Dattery  int    //电量
-	T_monitor  int    //  记录状态
-	T_online   int    //  在线状态 1 在线  0 离线
-	T_datashow int    //   0 屏蔽数据展示  1 正常数据展示
+	T_Dattery  int    // 电量
+	T_Site     string // GPS
+	T_monitor  int    // 记录状态
+	T_online   int    // 在线状态 1 在线  0 离线
+	T_datashow int    // 0 屏蔽数据展示  1 正常数据展示
 
 	T_DeviceSensorData      DeviceData_R            // 传感器最新数据
 	T_DeviceSensorParameter DeviceSensorParameter_R //  设备参数
@@ -88,7 +88,7 @@ func init() {
 }
 
 // ---------------- Redis -------------------
-//Redis_Set(m.T_sn,m) // Redis 更新缓存
+// Redis_Set(m.T_sn,m) // Redis 更新缓存
 func Redis_DeviceSensor_Set(r DeviceSensor) (err error) {
 	key := r.T_sn + "|" + strconv.Itoa(r.T_id)
 
@@ -129,10 +129,6 @@ func DeviceSensorToDeviceSensor_R(DeviceSensor_ DeviceSensor) (DeviceSensor_r De
 	DeviceSensor_r.T_sn = DeviceSensor_.T_sn
 	DeviceSensor_r.T_id = DeviceSensor_.T_id
 	DeviceSensor_r.T_name = DeviceSensor_.T_name
-	DeviceSensor_r.T_t = DeviceSensor_.T_t
-	DeviceSensor_r.T_rh = DeviceSensor_.T_rh
-
-	DeviceSensor_r.T_time = DeviceSensor_.T_time.Format("2006-01-02 15:04:05")
 	DeviceSensor_r.T_Site = DeviceSensor_.T_Site
 	DeviceSensor_r.T_Dattery = DeviceSensor_.T_Dattery
 	DeviceSensor_r.T_monitor = DeviceSensor_.T_monitor
@@ -144,20 +140,6 @@ func DeviceSensorToDeviceSensor_R(DeviceSensor_ DeviceSensor) (DeviceSensor_r De
 	// 最新系统参数
 	DeviceSensor_r.T_DeviceSensorParameter, _ = Read_V2DeviceSensorParameter(DeviceSensor_.T_sn, DeviceSensor_.T_id)
 
-	// 最新数据
-	key_data := DeviceSensor_.T_sn + "|" + strconv.Itoa(DeviceSensor_.T_id)
-	r, is := RedisDeviceData_Get_(key_data)
-	if is {
-		//logs.Println("时间对比:",DeviceSensor_.T_time.Format("2006-01-02 15:04:05") , r.T_time.Format("2006-01-02 15:04:05"))
-		if DeviceSensor_.T_time.Unix() < r.T_time.Unix() {
-			DeviceSensor_r.T_t = r.T_t
-			DeviceSensor_r.T_rh = r.T_rh
-			DeviceSensor_r.T_time = r.T_time.Format("2006-01-02 15:04:05")
-			DeviceSensor_r.T_Site = r.T_Site
-			DeviceSensor_r.T_Dattery = r.T_Dattery
-		}
-	}
-
 	return
 }
 
@@ -175,7 +157,7 @@ func Read_V2_DeviceSensor_ByTsn_num(T_sn string) int {
 }
 
 // 获取列表
-func Read_DeviceSensor_v2_List(user_ Account.Admin, T_sn string, T_name string, T_Calss_id int, T_give int, T_datashow int, page int, page_z int) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
+func Read_DeviceSensorList(T_pid int, T_sn string, T_name string, T_Class_id int, T_give int, T_datashow int, page int, page_z int) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -191,21 +173,14 @@ func Read_DeviceSensor_v2_List(user_ Account.Admin, T_sn string, T_name string,
 		offset = int64((page - 1) * page_z)
 	}
 
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	if user_.Admin_master <= 1 {
-		T_Bind = ""
-	}
-
-	fmt.Println("T_Bind:", T_Bind)
-
 	var r []DeviceSensor
 	cond := orm.NewCondition()
-	cond1 := cond.And("T_Bind__icontains", T_Bind) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+	cond1 := cond.And("T_pid", T_pid)
 
-	if T_Calss_id > 0 {
-		T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
-		fmt.Println("T_Calss:", T_Calss)
-		cond1 = cond1.And("T_Calss__icontains", T_Calss)
+	if T_Class_id > 0 {
+		T_Class := "C" + strconv.Itoa(T_Class_id) + "|"
+		fmt.Println("T_Class:", T_Class)
+		cond1 = cond1.And("T_Class__icontains", T_Class)
 	}
 
 	if len(T_sn) > 0 {
@@ -218,12 +193,8 @@ func Read_DeviceSensor_v2_List(user_ Account.Admin, T_sn string, T_name string,
 
 	if T_give != -1 { // 0 :丢弃  1:正常    空:所有
 		cond1 = cond1.And("T_give", T_give)
-	} else {
-		// 非内部权限
-		println("user_.Admin_power:", user_.Admin_power)
-		if user_.Admin_power < 6 {
-			cond1 = cond1.And("T_give", 1)
-		}
+	} else if T_pid > 0 {
+		cond1 = cond1.And("T_give", 1)
 	}
 
 	if T_datashow != -1 { // 空:正常显示   1:强制显示 屏蔽数据展示
@@ -234,8 +205,8 @@ func Read_DeviceSensor_v2_List(user_ Account.Admin, T_sn string, T_name string,
 	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
 
 	//
-	//qs.Limit(page_z, offset).Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", SN_type).Filter("T_sn__icontains", T_sn).Filter("T_name__icontains", T_name).OrderBy("T_sort").All(&r)
-	//cnt, _ = qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", T_sn).Filter("T_sn__icontains", SN_type).Filter("T_name__icontains", T_name).Count()
+	//qs.Limit(page_z, offset).Filter("T_Bind__icontains", T_Bind).Filter("T_Class__icontains", T_Class).Filter("T_sn__icontains", SN_type).Filter("T_sn__icontains", T_sn).Filter("T_name__icontains", T_name).OrderBy("T_sort").All(&r)
+	//cnt, _ = qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Class__icontains", T_Class).Filter("T_sn__icontains", T_sn).Filter("T_sn__icontains", SN_type).Filter("T_name__icontains", T_name).Count()
 
 	//for i, v := range r {
 	//
@@ -291,7 +262,7 @@ func Delete_DeviceSensor_ById(T_sn string, T_id int) (err error) {
 	}
 	// ascertain id exists in the database
 	var num int64
-	if num, err = o.Delete(&DeviceSensor{Id: r.Id}); err == nil {
+	if num, err = o.Delete(&DeviceSensor{T_id: r.T_id}); err == nil {
 		fmt.Println("Number of records deleted in database:", num)
 	}
 	Redis_DeviceSensor_DelK(r)
@@ -310,70 +281,45 @@ func Update_DeviceSensor(r DeviceSensor, cols ...string) bool {
 	return false
 }
 
-// 修改
-func DeviceSensor_Bind_Del(T_sn string, T_id int, T_Calss_id int) (err error) {
+// 修改T_Class,替换为""
+func DeviceSensor_Bind_T_Class_Del(T_sn string, T_id int, T_Class_id int) (err error) {
 	o := orm.NewOrm()
 	v := DeviceSensor{T_sn: T_sn, T_id: T_id}
-	T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
+	T_Class := "C" + strconv.Itoa(T_Class_id) + "|"
 	if err = o.Read(&v, "T_sn", "T_id"); err == nil {
-		v.T_Calss = strings.Replace(v.T_Calss, T_Calss, "", -1)
-		o.Update(&v, "T_Calss")
+		v.T_Class = strings.Replace(v.T_Class, T_Class, "", -1)
+		o.Update(&v, "T_Class")
 	}
 	return err
 
 }
 
-// 修改
-func DeviceSensor_T_Calss_Add(T_sn string, T_id int, T_Calss_id int) (err error) {
+// 修改T_Class,追加
+func DeviceSensor_T_Class_Add(T_sn string, T_id int, T_Class_id int) (err error) {
 	o := orm.NewOrm()
 	v := DeviceSensor{T_sn: T_sn, T_id: T_id}
-	T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
+	T_Class := "C" + strconv.Itoa(T_Class_id) + "|"
 	if err = o.Read(&v, "T_sn", "T_id"); err == nil {
-		v.T_Calss = strings.Replace(v.T_Calss, T_Calss, "", -1)
-		v.T_Calss = v.T_Calss + T_Calss
-		o.Update(&v, "T_Calss")
+		v.T_Class = strings.Replace(v.T_Class, T_Class, "", -1)
+		v.T_Class = v.T_Class + T_Class
+		o.Update(&v, "T_Class")
 	}
 	return err
 }
 
 // 修改
-func DeviceSensor_T_Calss_ALL_Del(T_Calss_id int) {
+func DeviceSensor_T_Class_ALL_Del(T_Class_id int) {
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(DeviceSensor))
 	var r []DeviceSensor
-	T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
-	qs.Filter("T_Calss__icontains", T_Calss).All(&r)
+	T_Class := "C" + strconv.Itoa(T_Class_id) + "|"
+	qs.Filter("T_Class__icontains", T_Class).All(&r)
 	for _, v := range r {
-		v.T_Calss = strings.Replace(v.T_Calss, T_Calss, "", -1)
-		o.Update(&v, "T_Calss")
+		v.T_Class = strings.Replace(v.T_Class, T_Class, "", -1)
+		o.Update(&v, "T_Class")
 	}
 }
 
-// 修改
-//func DeviceSensor_T_Bind_ALL_Del(admin_r Admin.Admin) {
-//	o := orm.NewOrm()
-//	qs := o.QueryTable(new(DeviceSensor))
-//	var r []DeviceSensor
-//	T_Bind := "U" + strconv.Itoa(admin_r.Id) + "|"
-//	qs.Filter("T_Bind__icontains", T_Bind).All(&r)
-//	for _, v := range r {
-//		v.T_Bind = strings.Replace(v.T_Bind, T_Bind, "", -1)
-//		o.Update(&v, "T_Bind")
-//	}
-//}
-// 修改
-func DeviceSensor_T_Bind_Add(T_sn string, T_id int, admin_r Account.Admin) (err error) {
-	o := orm.NewOrm()
-	v := DeviceSensor{T_sn: T_sn, T_id: T_id}
-	T_Bind := "U" + strconv.Itoa(admin_r.Id) + "|"
-	if err = o.Read(&v, "T_sn", "T_id"); err == nil {
-		v.T_Bind = strings.Replace(v.T_Bind, T_Bind, "", -1)
-		v.T_Bind = v.T_Bind + T_Bind
-		o.Update(&v, "T_Bind")
-	}
-	return err
-}
-
 //
 //// 修改
 //func Update_DeviceSensor_ByTsn_All_T_Bind(T_sn string, T_Bind string) (err error) {
@@ -404,10 +350,10 @@ func DeviceSensor_T_Bind_ALL(T_sn string, T_Bind string) {
 }
 
 // 获取最新数据
-func DeviceSensor_T_l_p_ALL(T_sn string, T_l_p int) {
+func DeviceSensor_T_type_ALL(T_sn string, T_type int) {
 	o := orm.NewOrm()
 
-	res, err := o.Raw("UPDATE DeviceSensor SET `t_l_p` = " + strconv.Itoa(T_l_p) + " WHERE `t_sn` = '" + T_sn + "' ").Exec()
+	res, err := o.Raw("UPDATE DeviceSensor SET `t_type` = " + strconv.Itoa(T_type) + " WHERE `t_sn` = '" + T_sn + "' ").Exec()
 	if err == nil {
 		num, _ := res.RowsAffected()
 		fmt.Println("mysql row affected nums: ", num)
@@ -478,7 +424,7 @@ func Read_DeviceSensor_ALL_T_sn(T_sn string, page int, page_z int) (DeviceSensor
 }
 
 // 获取列表
-func Read_DeviceSensor_class_ALL_1(user_ Account.Admin, T_Calss_id int, page int, page_z int, T_sn string, T_name string, SN_type string) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
+func Read_DeviceSensor_class_ALL_1(T_pid int, T_Class_id int, page int, page_z int, T_sn string, T_name string, SN_type string) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -494,27 +440,16 @@ func Read_DeviceSensor_class_ALL_1(user_ Account.Admin, T_Calss_id int, page int
 		offset = int64((page - 1) * page_z)
 	}
 
-	T_Calss := ""
-	if T_Calss_id != 0 {
-		T_Calss = "C" + strconv.Itoa(T_Calss_id) + "|"
-	}
-
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	if user_.Admin_master <= 1 {
-		T_Bind = ""
+	T_Class := ""
+	if T_Class_id != 0 {
+		T_Class = "C" + strconv.Itoa(T_Class_id) + "|"
 	}
-	fmt.Println("T_Bind:", T_Bind)
 
-	fmt.Println("T_Calss:", T_Calss)
+	fmt.Println("T_Class:", T_Class)
 
 	var r []DeviceSensor
 	cond := orm.NewCondition()
-	cond1 := cond.And("T_Bind__icontains", T_Bind).And("T_Calss__icontains", T_Calss).And("T_sn__icontains", SN_type).And("T_sn__icontains", T_sn).And("T_name__icontains", T_name).And("T_datashow", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
-	if len(T_sn) < 6 {
-		cond1 = cond1.AndCond(cond.And("T_give", 1))
-	}
-	// 非内部权限
-	println("user_.Admin_power:", user_.Admin_power)
+	cond1 := cond.And("T_pid", T_pid).And("T_Class__icontains", T_Class).And("T_sn__icontains", SN_type).And("T_sn__icontains", T_sn).And("T_name__icontains", T_name).And("T_datashow", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
 	if len(T_sn) < 6 {
 		cond1 = cond1.AndCond(cond.And("T_give", 1))
 	}
@@ -523,8 +458,8 @@ func Read_DeviceSensor_class_ALL_1(user_ Account.Admin, T_Calss_id int, page int
 	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
 
 	//
-	//qs.Limit(page_z, offset).Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", SN_type).Filter("T_sn__icontains", T_sn).Filter("T_name__icontains", T_name).OrderBy("T_sort").All(&r)
-	//cnt, _ = qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", T_sn).Filter("T_sn__icontains", SN_type).Filter("T_name__icontains", T_name).Count()
+	//qs.Limit(page_z, offset).Filter("T_Bind__icontains", T_Bind).Filter("T_Class__icontains", T_Class).Filter("T_sn__icontains", SN_type).Filter("T_sn__icontains", T_sn).Filter("T_name__icontains", T_name).OrderBy("T_sort").All(&r)
+	//cnt, _ = qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Class__icontains", T_Class).Filter("T_sn__icontains", T_sn).Filter("T_sn__icontains", SN_type).Filter("T_name__icontains", T_name).Count()
 
 	//for i, v := range r {
 	//
@@ -549,7 +484,7 @@ func Read_DeviceSensor_class_ALL_1(user_ Account.Admin, T_Calss_id int, page int
 }
 
 // 获取列表
-func Read_DeviceSensor_Map_ALL_1(user_ Account.Admin, T_Calss_id int, T_sn string, T_name string, SN_type string) (r []DeviceSensor) {
+func Read_DeviceSensor_Map_ALL_1(T_pid int, T_Class_id int, T_sn string, T_name string, SN_type string) (r []DeviceSensor) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -560,32 +495,26 @@ func Read_DeviceSensor_Map_ALL_1(user_ Account.Admin, T_Calss_id int, T_sn strin
 	//d, _ := time.ParseDuration("-1h")
 	//now = now.Add(d)
 
-	T_Calss := ""
-	if T_Calss_id != 0 {
-		T_Calss = "C" + strconv.Itoa(T_Calss_id) + "|"
+	T_Class := ""
+	if T_Class_id != 0 {
+		T_Class = "C" + strconv.Itoa(T_Class_id) + "|"
 	}
 
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	if user_.Admin_master <= 1 {
-		T_Bind = ""
-	}
-	fmt.Println("T_Bind:", T_Bind)
-
-	fmt.Println("T_Calss:", T_Calss)
-	qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", SN_type).Filter("T_sn__icontains", T_sn).Filter("T_name__icontains", T_name).OrderBy("-UpdateTime").All(&r) //.Filter("UpdateTime__gte", now)
+	fmt.Println("T_Class:", T_Class)
+	qs.Filter("T_pid", T_pid).Filter("T_Class__icontains", T_Class).Filter("T_sn__icontains", SN_type).Filter("T_sn__icontains", T_sn).Filter("T_name__icontains", T_name).OrderBy("-UpdateTime").All(&r) //.Filter("UpdateTime__gte", now)
 
 	return r
 }
 
 // 获取列表
-func Read_DeviceSensor_ALL_T_sn_T_id_class_1(T_sn string, T_id int, T_Calss_id int) (r []DeviceSensor) {
+func Read_DeviceSensor_ALL_T_sn_T_id_class_1(T_sn string, T_id int, T_Class_id int) (r []DeviceSensor) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
 	qs := o.QueryTable(new(DeviceSensor))
-	T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
-	qs.Filter("T_Calss__icontains", T_Calss).Filter("T_id", T_id).Filter("T_sn", T_sn).All(&r)
+	T_Class := "C" + strconv.Itoa(T_Class_id) + "|"
+	qs.Filter("T_Class__icontains", T_Class).Filter("T_id", T_id).Filter("T_sn", T_sn).All(&r)
 
 	return r
 }
@@ -604,14 +533,14 @@ func Read_DeviceSensor_ALL_List_T_sn(T_sn string) (r []DeviceSensor) {
 }
 
 // 获取列表
-func Read_DeviceSensor_ALL_class_1(T_Calss_id int) (r []DeviceSensor) {
+func Read_DeviceSensor_ALL_Class_Id(T_Class_id int) (r []DeviceSensor) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
 	qs := o.QueryTable(new(DeviceSensor))
-	T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
-	qs.Filter("T_Calss__icontains", T_Calss).All(&r)
+	T_Class := "C" + strconv.Itoa(T_Class_id) + "|"
+	qs.Filter("T_Class__icontains", T_Class).All(&r)
 
 	return r
 }
@@ -625,3 +554,97 @@ func DELETE_DeviceSensor(SN string) bool {
 	}
 	return true
 }
+
+// 通知 -------------------
+
+// 通过T_sn T_id T_Notice_id 获取全部列表
+func Read_DeviceSensor_ALL_T_sn_T_id_T_Notice(T_sn string, T_id int, T_Notice_id int) (r []DeviceSensor) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(DeviceSensor))
+	T_Notice := "N" + strconv.Itoa(T_Notice_id) + "|"
+	qs.Filter("T_Notice__icontains", T_Notice).Filter("T_id", T_id).Filter("T_sn", T_sn).All(&r)
+
+	return r
+}
+
+// 修改T_Notice,替换为""
+func DeviceSensor_Bind_T_Notice_Del(T_sn string, T_id int, T_Notice_id int) (err error) {
+	o := orm.NewOrm()
+	v := DeviceSensor{T_sn: T_sn, T_id: T_id}
+	T_Notice := "N" + strconv.Itoa(T_Notice_id) + "|"
+	if err = o.Read(&v, "T_sn", "T_id"); err == nil {
+		v.T_Notice = strings.Replace(v.T_Notice, T_Notice, "", -1)
+		o.Update(&v, "T_Notice")
+	}
+	return err
+
+}
+
+// 修改T_Notice,追加
+func DeviceSensor_T_Notice_Add(T_sn string, T_id int, T_Notice_id int) (err error) {
+	o := orm.NewOrm()
+	v := DeviceSensor{T_sn: T_sn, T_id: T_id}
+	T_Notice := "N" + strconv.Itoa(T_Notice_id) + "|"
+	if err = o.Read(&v, "T_sn", "T_id"); err == nil {
+		v.T_Notice = strings.Replace(v.T_Notice, T_Notice, "", -1)
+		v.T_Notice = v.T_Notice + T_Notice
+		o.Update(&v, "T_Notice")
+	}
+	return err
+}
+
+// 获取列表
+func Read_DeviceSensor_ALL_Notice_Id(T_Notice_id int) (r []DeviceSensor) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(DeviceSensor))
+	T_Notice := "N" + strconv.Itoa(T_Notice_id) + "|"
+	qs.Filter("T_Notice__icontains", T_Notice).All(&r)
+
+	return r
+}
+
+// 获取列表
+func Read_DeviceSensor_Notice_ALL_1(T_pid int, T_Notice_id int, page int, page_z int, T_sn string, T_name string, SN_type string) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(DeviceSensor))
+	var offset int64
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	T_Notice := ""
+	if T_Notice_id != 0 {
+		T_Notice = "N" + strconv.Itoa(T_Notice_id) + "|"
+	}
+
+	fmt.Println("T_Notice:", T_Notice)
+
+	var r []DeviceSensor
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_pid", T_pid).And("T_Notice__icontains", T_Notice).And("T_sn__icontains", SN_type).And("T_sn__icontains", T_sn).And("T_name__icontains", T_name).And("T_datashow", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+	if len(T_sn) < 6 {
+		cond1 = cond1.AndCond(cond.And("T_give", 1))
+	}
+
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	for _, v := range r {
+		DeviceSensor_r = append(DeviceSensor_r, DeviceSensorToDeviceSensor_R(v))
+	}
+	return DeviceSensor_r, cnt
+}

+ 58 - 19
models/Device/DeviceSensorParameter.go

@@ -16,9 +16,10 @@ import (
 
 // 模板
 type DeviceSensorParameter struct {
-	Id   int    `orm:"column(ID);size(11);auto;pk"`
-	T_sn string `orm:"index;size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_id int    `orm:"index;size(11);null"`  // 传感器编号
+	Id     int    `orm:"column(ID);size(11);auto;pk"`
+	T_sn   string `orm:"index;size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_id   int    `orm:"index;size(11);null"`  // 传感器编号
+	T_name string `orm:"size(256);null"`       // 标题
 
 	// 报警
 	T_Tlower  float32 `orm:"size(200);null"` //  温度下限
@@ -65,7 +66,16 @@ type DeviceSensorParameter_R struct {
 	T_time models.JsonTime
 }
 
-func DeviceSensorParameter_To_DeviceSensorParameter_R(r DeviceSensorParameter) (t DeviceSensorParameter_R) {
+type DeviceSensorParameter_M struct {
+	T_name string // 标题
+	// 报警
+	T_Tlower  float32 //  温度下限
+	T_Tupper  float32 //  温度上限
+	T_RHlower float32 //  湿度下限
+	T_RHupper float32 //  湿度上限
+}
+
+func DeviceSensorParameterTo_DeviceSensorParameter_R(r DeviceSensorParameter) (t DeviceSensorParameter_R) {
 	t.T_Tlower = r.T_Tlower
 	t.T_Tupper = r.T_Tupper
 	t.T_RHlower = r.T_RHlower
@@ -103,7 +113,7 @@ func init() {
 }
 
 // ---------------- Redis -------------------
-//Redis_Set(m.T_sn,m) // Redis 更新缓存
+// Redis_Set(m.T_sn,m) // Redis 更新缓存
 func Redis_DeviceSensorParameter_Set(key string, r DeviceSensorParameter_R) (err error) {
 
 	//json序列化
@@ -120,9 +130,9 @@ func Redis_DeviceSensorParameter_Set(key string, r DeviceSensorParameter_R) (err
 	return
 }
 
-//if r,is :=Redis_Get(T_sn);is{
-//return r,nil
-//}
+// if r,is :=Redis_Get(T_sn);is{
+// return r,nil
+// }
 func Redis_DeviceSensorParameter_Get(key string) (r DeviceSensorParameter_R, is bool) {
 	if redisCache_DeviceSensorParameter.IsExist(key) {
 		//println("找到key:",key)
@@ -141,16 +151,20 @@ func Read_V2DeviceSensorParameter(T_sn string, T_id int) (t DeviceSensorParamete
 	if t, is := Redis_DeviceSensorParameter_Get(key); is {
 		return t, true
 	}
+
 	o := orm.NewOrm()
-	r := DeviceSensorParameter{T_sn: T_sn, T_id: T_id, T_State: 1}
-	err := o.Read(&r, "T_sn", "T_id", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
-	if err != nil {
-		fmt.Println("DeviceSensorParameter", err)
+	qs := o.QueryTable(new(DeviceSensorParameter))
+	var r []DeviceSensorParameter
+	cond := orm.NewCondition()
+	cond = cond.And("T_sn", T_sn).And("T_id", T_id).AndCond(cond.And("T_State", 1).OrCond(cond.And("T_State", 2).And("T_SendState", 1)))
+
+	qs.Limit(1, 0).SetCond((*orm2.Condition)(cond)).OrderBy("-UpdateTime").All(&r)
+	// 判断是否有数据
+	if len(r) == 0 {
 		return t, false
 	}
-	t = DeviceSensorParameter_To_DeviceSensorParameter_R(r)
-	Redis_DeviceSensorParameter_Set(key, t)
-	return t, true
+
+	return DeviceSensorParameterTo_DeviceSensorParameter_R(r[0]), true
 }
 
 // 获取列表  T_State  1 系统获取   2 用户提交
@@ -172,14 +186,14 @@ func Read_V2DeviceSensorParameter_List(T_sn string, T_id int, T_State int, page_
 }
 
 // 添加
-func Add_DeviceSensorParameter(m DeviceSensorParameter) bool {
+func Add_DeviceSensorParameter(m DeviceSensorParameter) (int64, bool) {
 	o := orm.NewOrm()
-	_, err := o.Insert(&m)
+	id, err := o.Insert(&m)
 	if err != nil {
 		fmt.Println(err)
-		return false
+		return 0, false
 	}
-	return true
+	return id, true
 }
 
 // 修改
@@ -202,3 +216,28 @@ func DELETE_DeviceSensorParameter(SN string) bool {
 	}
 	return true
 }
+
+// 获取列表  T_State  1 系统获取   2 用户提交
+func Read_DeviceSensorParameter_Map_All(T_sn string, T_id int) (maps map[int]DeviceSensorParameter_M) {
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	var list []DeviceSensorParameter
+	qs := o.QueryTable(new(DeviceSensorParameter))
+	cond := orm.NewCondition()
+
+	cond = cond.And("T_sn", T_sn).And("T_id", T_id).AndCond(cond.And("T_State", 1).OrCond(cond.And("T_State", 2).And("T_SendState", 1)))
+
+	qs.SetCond((*orm2.Condition)(cond)).OrderBy("-Id").All(&list)
+
+	for _, v := range list {
+		maps[v.Id] = DeviceSensorParameter_M{
+			T_name:    v.T_name,
+			T_Tlower:  v.T_Tlower,
+			T_Tupper:  v.T_Tupper,
+			T_RHlower: v.T_RHlower,
+			T_RHupper: v.T_RHupper,
+		}
+	}
+
+	return maps
+}

+ 2 - 12
models/Device/DeviceTask.go

@@ -44,17 +44,7 @@ func Read_DeviceTask_All_Limit_1(T_sn string) (DeviceTask, bool) {
 }
 
 // 获取全部
-func Read_DeviceTask_All_50(T_sn string, Time_end string, Time_start string) ([]DeviceTask, bool) {
-	o := orm.NewOrm()
-	qs := o.QueryTable(new(DeviceTask))
-	var r_l []DeviceTask
-	qs.Filter("T_sn", T_sn).Filter("T_Ut_start__gte", Time_start).Filter("T_Ut_end__lte", Time_end).OrderBy("-Id").All(&r_l)
-
-	return r_l, false
-}
-
-// 获取全部
-func Read_V2_DeviceTask_All(T_sn string, Time_start string, Time_end string, page int, page_z int) (r_l []DeviceTask, cnt int64) {
+func Read_DeviceTask_All(T_sn string, Time_start string, Time_end string, page int, page_z int) (r_l []DeviceTask, cnt int64) {
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(DeviceTask))
 	var offset int64
@@ -69,7 +59,7 @@ func Read_V2_DeviceTask_All(T_sn string, Time_start string, Time_end string, pag
 	}
 
 	cond := orm.NewCondition()
-	cond1 := cond.And("T_sn", T_sn) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+	cond1 := cond.And("T_sn", T_sn)
 	if len(Time_start) > 1 {
 		cond1 = cond1.And("T_Ut_start__gte", Time_start)
 	}

+ 1 - 0
models/Device/DeviceType.go

@@ -11,6 +11,7 @@ type DeviceType struct {
 
 	T_name string `orm:"size(256);null"`  // 标题
 	T_text string `orm:"type(text);null"` // 详情
+	T_view int    `orm:"size(2);1"`       // 1 库房   2 移动
 
 	T_State int `orm:"size(2);1"` // 0 删除   1 正常
 }

+ 9 - 0
models/SplitString.go

@@ -0,0 +1,9 @@
+package models
+
+import "strings"
+
+func SplitStringIds(str string) []string {
+	Ids_str := strings.TrimRight(str, "|")
+	Ids := strings.Split(Ids_str, "|")
+	return Ids
+}

+ 8 - 18
models/System/Logs.go

@@ -1,7 +1,7 @@
 package System
 
 import (
-	"Cold_Api/conf"
+	"encoding/json"
 	"fmt"
 	"github.com/beego/beego/v2/adapter/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
@@ -35,28 +35,18 @@ func Add_Logs(Logs_class string, Logs_Title string, Logs_Txt string) {
 	o.Insert(&m)
 }
 
-// 获取列表
-func Read_Logs_ALL(page int, Logs_class string) (r []Logs, cnt int64) {
-
+func Add_Logs_T(Logs_class string, Logs_Title string, Logs_Txt_T interface{}) {
 	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(Logs))
-	var offset int64
-	if page <= 1 {
-		offset = 0
-	} else {
-		offset = int64((page - 1) * conf.Page_size)
+	jsonStu, err := json.Marshal(Logs_Txt_T)
+	if err != nil {
+		fmt.Println("Add_UserLogs_T JSON ,err=", err)
 	}
-
-	qs.Limit(conf.Page_size, offset).Filter("Logs_class__icontains", Logs_class).OrderBy("-Id").All(&r)
-	cnt, _ = qs.Filter("Logs_class__icontains", Logs_class).Count()
-
-	return r, cnt
+	m := Logs{Logs_class: Logs_class, Logs_Title: Logs_Title, Logs_Txt: string(jsonStu)}
+	o.Insert(&m)
 }
 
 // 获取列表
-func Read_V2_Logs_ALL(Logs_class string, page int, page_z int) (r []Logs, cnt int64) {
+func Read_Logs_ALL(Logs_class string, page int, page_z int) (r []Logs, cnt int64) {
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 

+ 1 - 22
models/System/UserLogs.go

@@ -1,7 +1,6 @@
 package System
 
 import (
-	"Cold_Api/conf"
 	"encoding/json"
 	"fmt"
 	"github.com/beego/beego/v2/adapter/orm"
@@ -47,27 +46,7 @@ func Add_UserLogs_T(Logs_uuid string, Logs_class string, Logs_Title string, Logs
 }
 
 // 获取列表
-func Read_UserLogs_ALL(page int, Logs_class string) (r []UserLogs, cnt int64) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(UserLogs))
-	var offset int64
-	if page <= 1 {
-		offset = 0
-	} else {
-		offset = int64((page - 1) * conf.Page_size)
-	}
-
-	qs.Limit(conf.Page_size, offset).Filter("Logs_class__icontains", Logs_class).OrderBy("-Id").All(&r)
-	cnt, _ = qs.Filter("Logs_class__icontains", Logs_class).Count()
-
-	return r, cnt
-}
-
-// 获取列表
-func Read_V2_UserLogs_ALL(Logs_uuid string, Logs_class string, page int, page_z int) (r []UserLogs, cnt int64) {
+func Read_UserLogs_ALL(Logs_uuid string, Logs_class string, page int, page_z int) (r []UserLogs, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名

+ 31 - 58
models/Warning/Warning.go

@@ -3,13 +3,11 @@ package Warning
 import (
 	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
-	"Cold_Api/models/Account"
 	"fmt"
 	"github.com/beego/beego/v2/adapter/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
-	"strings"
 	"time"
 )
 
@@ -46,19 +44,19 @@ type Warning struct {
 // 模板
 type Warning_R struct {
 	Id         int
-	T_sn       string   // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_Id       int      //  传感器 ID
-	T_Name     string   // 传感器  温度探头1
-	T_T        float32  //  湿度下限
-	T_RH       float32  //  湿度上限
-	T_Title    string   // 报警标题 温度超上限报警
-	T_Addr     string   //  地址    车载环境监测仪
-	T_Remark   string   // 备注
-	T_Ut       string   // 采集时间
-	T_Text     string   // 备注
-	T_Log      []string // 处理日志
-	T_State    int      // 0 删除   1 未处理   2 已处理
-	CreateTime string   // 创建时间
+	T_pid      int    // Account.Company 绑定公司
+	T_tp       int    // 报警类型   ->WarningList
+	T_sn       string // 设备序列号
+	T_D_name   string // 设备名称
+	T_id       int    // 传感器 ID
+	T_DS_name  string // 传感器名称
+	T_Remark   string // 采集内容
+	T_Ut       string // 采集时间
+	T_Text     string // 处理备注
+	T_Log      string // 通知日志
+	T_Msid     int64  // 消息ID
+	T_State    int    // 0 删除   1 未处理   2 已处理
+	CreateTime string // 创建时间
 }
 
 func (t *Warning) TableName() string {
@@ -74,18 +72,18 @@ func init() {
 // ---------------- 特殊方法 -------------------
 func WarningToWarning_R(t Warning) (r Warning_R) {
 	r.Id = t.Id
+	r.T_pid = t.T_pid
+	r.T_tp = t.T_tp
 	r.T_sn = t.T_sn
-	r.T_Id = t.T_Id
-	r.T_Name = t.T_Name
-	r.T_T = t.T_T
-	r.T_RH = t.T_RH
-	r.T_Title = t.T_Title
-	r.T_Addr = t.T_Addr
+	r.T_D_name = t.T_D_name
+	r.T_id = t.T_id
+	r.T_DS_name = t.T_DS_name
 	r.T_Remark = t.T_Remark
 	r.T_Ut = t.T_Ut.Format("2006-01-02 15:04:05")
 	r.T_Text = t.T_Text
+	r.T_Log = t.T_Log
+	r.T_Msid = t.T_Msid
 	r.T_State = t.T_State
-	r.T_Log = strings.Split(t.T_Log, "\n")
 	r.CreateTime = t.CreateTime.Format("2006-01-02 15:04:05")
 	return r
 }
@@ -106,9 +104,6 @@ func Add_Warning(m Warning) (id int64, err error) {
 	o := orm.NewOrm()
 
 	id, err = o.Insert(&m)
-	//if err != nil {
-	//	fmt.Println(err)
-	//}
 	return id, err
 }
 
@@ -152,7 +147,7 @@ func Update_Warning_Delete(m Warning) (err error) {
 }
 
 // 获取列表
-func Read_Warning_1(user_ Account.Admin, page int, T_sn string, T_Name string, Time_start_ string, Time_end_ string) (r []Warning, cnt int64) {
+func Read_Warning_1(T_pid int, page int, T_sn string, T_Name string, Time_start_ string, Time_end_ string) (r []Warning, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -171,18 +166,12 @@ func Read_Warning_1(user_ Account.Admin, page int, T_sn string, T_Name string, T
 		offset = 0
 	}
 
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	if user_.Admin_master <= 1 {
-		T_Bind = ""
-	}
-	fmt.Println("T_Bind:", T_Bind)
-
 	cond := orm.NewCondition()
 
 	cond1 := cond.And("T_State__gt", 0)
 
-	if len(T_Bind) > 1 {
-		cond1 = cond.AndCond(cond1).And("T_Bind__icontains", T_Bind)
+	if T_pid > 0 {
+		cond1 = cond.AndCond(cond1).And("T_pid", T_pid)
 	}
 	if len(T_Name) > 1 {
 		cond1 = cond.AndCond(cond1).AndCond(cond.Or("T_Name__icontains", T_Name).Or("T_Title__icontains", T_Name).Or("T_Addr__icontains", T_Name).Or("T_sn__icontains", T_Name))
@@ -227,7 +216,7 @@ func Read_Warning_1(user_ Account.Admin, page int, T_sn string, T_Name string, T
 }
 
 // 获取列表
-func Read_Warning(user_ Account.Admin, T_sn string, T_id string, T_title string, T_handle int, Time_start_ string, Time_end_ string, page int, page_z int) (r []Warning_R, cnt int64) {
+func Read_Warning(T_pid int, T_sn string, T_id string, T_title string, T_handle int, Time_start_ string, Time_end_ string, page int, page_z int) (r []Warning_R, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -243,18 +232,12 @@ func Read_Warning(user_ Account.Admin, T_sn string, T_id string, T_title string,
 		offset = int64((page - 1) * page_z)
 	}
 
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	if user_.Admin_master <= 1 {
-		T_Bind = ""
-	}
-	fmt.Println("T_Bind:", T_Bind)
-
 	cond := orm.NewCondition()
 
 	cond1 := cond.And("T_State__gt", 0)
 
-	if len(T_Bind) > 0 {
-		cond1 = cond1.And("T_Bind__icontains", T_Bind)
+	if T_pid > 0 {
+		cond1 = cond.AndCond(cond1).And("T_pid", T_pid)
 	}
 	if len(T_title) > 0 {
 		cond1 = cond1.And("T_Title", T_title)
@@ -293,7 +276,7 @@ func Read_Warning(user_ Account.Admin, T_sn string, T_id string, T_title string,
 }
 
 // 获取列表
-func Read_Warning_Backups(user_ Account.Admin, T_year string, T_month string, T_sn string, T_id string, T_title string, T_handle int, Time_start_ string, Time_end_ string, page int, page_z int) (r []Warning_R, cnt int64) {
+func Read_Warning_Backups(T_pid int, T_year string, T_month string, T_sn string, T_id string, T_title string, T_handle int, Time_start_ string, Time_end_ string, page int, page_z int) (r []Warning_R, cnt int64) {
 
 	o := orm.NewOrm()
 	var maps []Warning
@@ -315,11 +298,6 @@ func Read_Warning_Backups(user_ Account.Admin, T_year string, T_month string, T_
 		offset = (page - 1) * page_z
 	}
 
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	if user_.Admin_master <= 1 {
-		T_Bind = ""
-	}
-	fmt.Println("T_Bind:", T_Bind)
 	sql_WHERE := ""
 
 	cond := orm.NewCondition()
@@ -327,10 +305,8 @@ func Read_Warning_Backups(user_ Account.Admin, T_year string, T_month string, T_
 	cond1 := cond.And("T_State__gt", 0)
 	sql_WHERE += " t__state > 0 "
 
-	if len(T_Bind) > 0 {
-		//cond1 = cond1.And("T_Bind__icontains", T_Bind)
-		T_Bind = lib.ReplaceSQL(T_Bind)
-		sql_WHERE += " AND t__bind LIKE '%" + T_Bind + "%' "
+	if T_pid > 0 {
+		sql_WHERE += " AND t_pid = " + strconv.Itoa(T_pid)
 	}
 	if len(T_title) > 0 {
 		//cond1 = cond1.And("T_Title", T_title)
@@ -402,8 +378,7 @@ func Read_Warning_Backups(user_ Account.Admin, T_year string, T_month string, T_
 
 }
 
-//
-func Read_Warning_ALL_T_Bind_TIME_1d_Count(user_ Account.Admin, T_sn string) int {
+func Read_Warning_ALL_T_Bind_TIME_1d_Count(T_pid int, T_sn string) int {
 	o := orm.NewOrm()
 	var maps_z []orm2.ParamsList
 
@@ -415,9 +390,7 @@ func Read_Warning_ALL_T_Bind_TIME_1d_Count(user_ Account.Admin, T_sn string) int
 	timeStr := now.Format("2006-01-02") + " 00:00:00"
 	timeStr1 := now.Format("2006-01-02") + " 23:59:59"
 
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-
-	sql := "SELECT * FROM Warning WHERE t__title NOT LIKE '%恢复%' AND t__title NOT LIKE '%任务%' AND t__ut > '" + timeStr + "' AND t__ut < '" + timeStr1 + "' AND t__bind LIKE '%" + T_Bind + "%' AND t_sn  LIKE '%" + T_sn + "%' group by t_sn"
+	sql := "SELECT * FROM Warning WHERE t__title NOT LIKE '%恢复%' AND t__title NOT LIKE '%任务%' AND t__ut > '" + timeStr + "' AND t__ut < '" + timeStr1 + "' AND t_pid = '" + strconv.Itoa(T_pid) + "%' AND t_sn  LIKE '%" + T_sn + "%' group by t_sn"
 	fmt.Println(sql)
 	_, err := o.Raw(sql).ValuesList(&maps_z)
 	if err != nil {

+ 3 - 6
models/Warning/WarningSand.go

@@ -2,7 +2,6 @@ package Warning
 
 import (
 	"Cold_Api/models/Account"
-	"Cold_Api/models/Admin"
 	"fmt"
 	"github.com/beego/beego/v2/adapter/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
@@ -31,7 +30,7 @@ type WarningSand struct {
 	T_Bind string    `orm:"size(256);null"`        //设备绑定 Uid  (这里单独改没有,要在 设备里面加入)
 
 	T_Filter   int       `orm:"size(200);null"`                                        // 过滤次数
-	T_Send_x   int       `orm:"type(text);size(256);null"`                             //   发送记录
+	T_Send_x   int       `orm:"type(text);size(256);null"`                             // 发送记录
 	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 等待发送 2 发送成功
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
@@ -64,12 +63,12 @@ func Read_WarningWx_ById(id int) (r WarningSand) {
 func Add_WarningHand(m WarningSand) {
 	warningWxList := Read_DeviceWarning(m)
 	if len(warningWxList) == 0 {
-		Add_Warning(m)
+		Add_WarningHand(m)
 	}
 }
 
 // 添加
-func Add_Warning(m WarningSand) (id int64, err error) {
+func Add_WarningSand(m WarningSand) (id int64, err error) {
 	o := orm.NewOrm()
 	id, err = o.Insert(&m)
 	//if err != nil {
@@ -109,7 +108,6 @@ func ColAdd_DeviceWarningBy_ID(id int) {
 	return
 }
 
-//
 func Read_WarningSand_ALL_T_sn_TIME_Count(T_sn string) (cnt int) {
 	o := orm.NewOrm()
 	var maps_z []orm2.ParamsList
@@ -132,7 +130,6 @@ func Read_WarningSand_ALL_T_sn_TIME_Count(T_sn string) (cnt int) {
 	return key
 }
 
-//
 func Read_WarningSand_ALL_T_Bind_TIME_Count(user_ Account.Admin, T_sn string) (cnt int) {
 	o := orm.NewOrm()
 	var maps_z []orm2.ParamsList

+ 28 - 17
routers/Data.go

@@ -1,23 +1,34 @@
 package routers
 
-import (
-	"Cold_Api/controllers"
-	beego "github.com/beego/beego/v2/server/web"
-)
-
 func init() {
-	var version = "/v3"
-	// 数据展示
-	beego.Router(version+"/Data/List", &controllers.DataController{}, "*:V2_Device_Sensor_Data_More") // 获取未读消息
-	beego.Router(version+"/Data/Excel", &controllers.DataController{}, "*:Device_Sensor_Data_Excel")  // 获取未读消息
-	beego.Router(version+"/Data/PDF", &controllers.DataController{}, "*:Device_Sensor_Data_PDF")      // 获取未读消息
-
-	// 2D
+	//var version = conf.Version
+	//// 数据展示
+	//beego.Router(version+"/Data/List", &controllers.DataController{}, "*:Device_Sensor_Data_More")   // 获取未读消息
+	//beego.Router(version+"/Data/Excel", &controllers.DataController{}, "*:Device_Sensor_Data_Excel") // 获取未读消息
+	//beego.Router(version+"/Data/PDF", &controllers.DataController{}, "*:Device_Sensor_Data_PDF")     // 获取未读消息
+	//
+	//// 2D
+	////beego.Router(version+"/Data/DataView3d_html", &controllers.DataController{}, "*:DataView3d_html")
+	////beego.Router(version+"/Data/UpDataView3d", &controllers.DataController{}, "*:UpDataView3d")
+	//// 3D
+	//beego.Router(version+"/Data/DataView3d_html", &controllers.DataController{}, "*:DataView3d_html")
+	//beego.Router(version+"/Data/UpDataView3d", &controllers.DataController{}, "*:UpDataView3d")
+	//// 执行 SQL
+	//beego.Router(version+"/Data/Raw", &controllers.RawSqlController{}, "*:Rawv3") // 执行 SQL
+	//
+	//// 获取 基本信息
+	////beego.Router(version+"/Data/Device_Sensor_Data", &controllers.DataController{}, "*:Device_Sensor_Data")                      // 设置 设备参数
+	//beego.Router(version+"/Data/Device_Sensor_Data_Excel", &controllers.DataController{}, "*:Device_Sensor_Data_Excel")     // 设置 设备参数
+	//beego.Router(version+"/Data/Device_Sensor_Data_Excel_m", &controllers.DataController{}, "*:Device_Sensor_Data_Excel_m") // 设置 设备参数
+	//beego.Router(version+"/Data/Device_Sensor_Data_PDF", &controllers.DataController{}, "*:Device_Sensor_Data_PDF")         // 设置 设备参数
+	//beego.Router(version+"/Data/DataPlane", &controllers.DataController{}, "*:DataPlane")                                   // 设置 设备参数
+	//
+	//beego.Router(version+"/Data/DataScreen_Data", &controllers.DataController{}, "*:DataScreen_Data")                 // 设置 设备参数
+	//beego.Router(version+"/Data/DeviceSensor_Data_Print", &controllers.DataController{}, "*:DeviceSensor_Data_Print") // 设置 设备参数
+	//beego.Router(version+"/Data/DataScreen_Map", &controllers.DataController{}, "*:DataScreen_Map")                   // 设置 设备参数
+	//
+	////beego.Router("/Data/Raw", &controllers.DataController{}, "*:Raw") // 设置 设备参数
+	//// 3D
 	//beego.Router(version+"/Data/DataView3d_html", &controllers.DataController{}, "*:DataView3d_html")
 	//beego.Router(version+"/Data/UpDataView3d", &controllers.DataController{}, "*:UpDataView3d")
-	// 3D
-	beego.Router(version+"/Data/DataView3d_html", &controllers.DataController{}, "*:DataView3d_html")
-	beego.Router(version+"/Data/UpDataView3d", &controllers.DataController{}, "*:UpDataView3d")
-	// 执行 SQL
-	beego.Router(version+"/Data/Raw", &controllers.RawSqlController{}, "*:Rawv3") // 执行 SQL
 }

+ 33 - 38
routers/Device.go

@@ -1,58 +1,53 @@
 package routers
 
-import (
-	"Cold_Api/controllers"
-	beego "github.com/beego/beego/v2/server/web"
-)
-
 func init() {
-	var version = "/v3"
+	//var version = conf.Version
 	//---------------------------------- 设备管理
 
 	// 设备
-	beego.Router(version+"/Device/List", &controllers.DeviceController{}, "*:Device_v2_List")                                      //
-	beego.Router(version+"/Device/Add", &controllers.DeviceController{}, "*:Device_Post")                                          //
-	beego.Router(version+"/Device/Edit", &controllers.DeviceController{}, "*:Device_Edit")                                         //
-	beego.Router(version+"/Device/Del", &controllers.DeviceController{}, "*:Device_Del")                                           //
-	beego.Router(version+"/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_v2_DeviceSensorParameter") //
-	beego.Router(version+"/Device/DeviceTask_Post", &controllers.DeviceController{}, "*:DeviceTask_Post")                          //
-	beego.Router(version+"/Device/Log", &controllers.DeviceController{}, "*:V2DeviceLogs")                                         //
+	//beego.Router(version+"/Device/List", &controllers.DeviceController{}, "*:Device_List")                                         //
+	//beego.Router(version+"/Device/Add", &controllers.DeviceController{}, "*:Device_Post")                                          //
+	//beego.Router(version+"/Device/Edit", &controllers.DeviceController{}, "*:Device_Edit")                                         //
+	//beego.Router(version+"/Device/Del", &controllers.DeviceController{}, "*:Device_Del")                                           //
+	//beego.Router(version+"/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_v2_DeviceSensorParameter") //
+	//beego.Router(version+"/Device/DeviceTask_Post", &controllers.DeviceController{}, "*:DeviceTask_Post")                          //
+	//beego.Router(version+"/Device/Log", &controllers.DeviceController{}, "*:V2DeviceLogs") //
 
-	beego.Router(version+"/Device/Parameter_List", &controllers.DeviceController{}, "*:Device_v2_Parameter_List") //
-	beego.Router(version+"/Device/Parameter_Pu", &controllers.DeviceController{}, "*:Device_v2_Parameter_Pu")     //
+	//beego.Router(version+"/Device/Parameter_List", &controllers.DeviceController{}, "*:Device_Parameter_List") // 参数列表
+	//beego.Router(version+"/Device/Parameter_Pu", &controllers.DeviceController{}, "*:Device_Parameter_Pu")     //
 
 	// 权限绑定
-	beego.Router(version+"/Device/Bind_Add", &controllers.DeviceController{}, "*:V2_DeviceBind_Add") //
-	beego.Router(version+"/Device/Bind_Del", &controllers.DeviceController{}, "*:V2_DeviceBind_Del") //
+	//beego.Router(version+"/Device/Bind_Add", &controllers.DeviceController{}, "*:V2_DeviceBind_Add") //
+	//beego.Router(version+"/Device/Bind_Del", &controllers.DeviceController{}, "*:V2_DeviceBind_Del") //
 	// 设备任务列表
-	beego.Router(version+"/DeviceTask/List", &controllers.DeviceController{}, "*:V2_DeviceTask_List")
-
-	// 设备-传感器
-	beego.Router(version+"/DeviceSensor/List", &controllers.DeviceController{}, "*:DeviceSensor_v2_List") //
-	beego.Router(version+"/DeviceSensor/Edit", &controllers.DeviceController{}, "*:DeviceSensor_Edit")    //
-	beego.Router(version+"/DeviceSensor/Del", &controllers.DeviceController{}, "*:DeviceSensor_Del")      //
+	//beego.Router(version+"/DeviceTask/List", &controllers.DeviceController{}, "*:V2_DeviceTask_List")
 
-	beego.Router(version+"/DeviceSensor/Parameter_List", &controllers.DeviceController{}, "*:DeviceSensor_v2_Parameter_List") //
-	beego.Router(version+"/DeviceSensor/Parameter_Pu", &controllers.DeviceController{}, "*:DeviceSensor_v2_Parameter_Pu")     //
+	//// 设备-传感器
+	//beego.Router(version+"/DeviceSensor/List", &controllers.DeviceController{}, "*:DeviceSensor_v2_List") //
+	//beego.Router(version+"/DeviceSensor/Edit", &controllers.DeviceController{}, "*:DeviceSensor_Edit")    //
+	//beego.Router(version+"/DeviceSensor/Del", &controllers.DeviceController{}, "*:DeviceSensor_Del")      //
+	//
+	//beego.Router(version+"/DeviceSensor/Parameter_List", &controllers.DeviceController{}, "*:DeviceSensor_Parameter_List") // 传感器列表
+	//beego.Router(version+"/DeviceSensor/Parameter_Pu", &controllers.DeviceController{}, "*:DeviceSensor_v2_Parameter_Pu")  //
 
 	//分类绑定
-	beego.Router(version+"/Class/List", &controllers.DeviceController{}, "*:V2_Class_List") // 获取未读消息
-	beego.Router(version+"/Class/Get", &controllers.DeviceController{}, "*:V2_Class_Get")   // 获取未读消息
-	beego.Router(version+"/Class/Add", &controllers.DeviceController{}, "*:V2_Class_Add")   // 获取未读消息
-	beego.Router(version+"/Class/Edit", &controllers.DeviceController{}, "*:V2_Class_Edit") // 获取未读消息
-	beego.Router(version+"/Class/Del", &controllers.DeviceController{}, "*:V2_Class_Del")   // 获取未读消息
-	// 绑定
-	beego.Router(version+"/Class/Bind_Del", &controllers.DeviceController{}, "*:V2_ClassBind_Del") // 获取未读消息
-	beego.Router(version+"/Class/Bind_Add", &controllers.DeviceController{}, "*:V2_ClassBind_Add") // 获取未读消息
+	//beego.Router(version+"/Class/List", &controllers.DeviceController{}, "*:V2_Class_List") // 获取未读消息
+	//beego.Router(version+"/Class/Get", &controllers.DeviceController{}, "*:V2_Class_Get")   // 获取未读消息
+	//beego.Router(version+"/Class/Add", &controllers.DeviceController{}, "*:V2_Class_Add")   // 获取未读消息
+	//beego.Router(version+"/Class/Edit", &controllers.DeviceController{}, "*:V2_Class_Edit") // 获取未读消息
+	//beego.Router(version+"/Class/Del", &controllers.DeviceController{}, "*:V2_Class_Del")   // 获取未读消息
+	//// 绑定
+	//beego.Router(version+"/Class/Bind_Del", &controllers.DeviceController{}, "*:V2_ClassBind_Del") // 获取未读消息
+	//beego.Router(version+"/Class/Bind_Add", &controllers.DeviceController{}, "*:V2_ClassBind_Add") // 获取未读消息
 	//二维码
 	//beego.Router("/Device/Get_DeviceClassId_QRCode", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode")   // 获取未读消息
 	//beego.Router("/Device/Get_DeviceClassId_QRCode2", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode2") // 获取未读消息
 
 	// 设备报警
-	beego.Router(version+"/DeviceWarning/List", &controllers.DeviceController{}, "*:V2_DeviceWarning_List")          // 获取未读消息
-	beego.Router(version+"/DeviceWarning/Get", &controllers.DeviceController{}, "*:V2_DeviceWarning_Get")            // 获取未读消息
-	beego.Router(version+"/DeviceWarning/Edit", &controllers.DeviceController{}, "*:V2_DeviceWarning_Post")          // 获取未读消息
-	beego.Router(version+"/DeviceWarning/Del", &controllers.DeviceController{}, "*:V2_DeviceWarning_Del")            // 获取未读消息
-	beego.Router(version+"/DeviceWarning/ToExcel", &controllers.DeviceController{}, "*:V2_DeviceWarning_Data_Excel") // 获取未读消息
+	//beego.Router(version+"/DeviceWarning/List", &controllers.DeviceController{}, "*:V2_DeviceWarning_List")          // 获取未读消息
+	//beego.Router(version+"/DeviceWarning/Get", &controllers.DeviceController{}, "*:V2_DeviceWarning_Get")            // 获取未读消息
+	//beego.Router(version+"/DeviceWarning/Edit", &controllers.DeviceController{}, "*:V2_DeviceWarning_Post")          // 获取未读消息
+	//beego.Router(version+"/DeviceWarning/Del", &controllers.DeviceController{}, "*:V2_DeviceWarning_Del")            // 获取未读消息
+	//beego.Router(version+"/DeviceWarning/ToExcel", &controllers.DeviceController{}, "*:V2_DeviceWarning_Data_Excel") // 获取未读消息
 
 }

+ 9 - 14
routers/GoodsOrder.go

@@ -1,19 +1,14 @@
 package routers
 
-import (
-	"Cold_Api/controllers"
-	beego "github.com/beego/beego/v2/server/web"
-)
-
 func init() {
-	var version = "/v3"
-
-	// 订单管理
-	beego.Router(version+"/GoodsOrder/List", &controllers.GoodsOrderController{}, "*:GoodsOrder_List") // 获取未读消息
-	beego.Router(version+"/GoodsOrder/Get", &controllers.GoodsOrderController{}, "*:GoodsOrder_Get")   // 获取未读消息
-	beego.Router(version+"/GoodsOrder/Add", &controllers.GoodsOrderController{}, "*:GoodsOrder_Add")   // 获取未读消息
-	beego.Router(version+"/GoodsOrder/Edit", &controllers.GoodsOrderController{}, "*:GoodsOrder_Edit") // 获取未读消息
-	beego.Router(version+"/GoodsOrder/Del", &controllers.GoodsOrderController{}, "*:GoodsOrder_Del")   // 获取未读消息
-	beego.Router(version+"/GoodsOrder/PDF", &controllers.GoodsOrderController{}, "*:GoodsOrder_PDF")   // 获取未读消息
+	//var version = conf.Version
+	//
+	//// 订单管理
+	//beego.Router(version+"/GoodsOrder/List", &controllers.GoodsOrderController{}, "*:GoodsOrder_List") // 获取未读消息
+	//beego.Router(version+"/GoodsOrder/Get", &controllers.GoodsOrderController{}, "*:GoodsOrder_Get")   // 获取未读消息
+	//beego.Router(version+"/GoodsOrder/Add", &controllers.GoodsOrderController{}, "*:GoodsOrder_Add")   // 获取未读消息
+	//beego.Router(version+"/GoodsOrder/Edit", &controllers.GoodsOrderController{}, "*:GoodsOrder_Edit") // 获取未读消息
+	//beego.Router(version+"/GoodsOrder/Del", &controllers.GoodsOrderController{}, "*:GoodsOrder_Del")   // 获取未读消息
+	//beego.Router(version+"/GoodsOrder/PDF", &controllers.GoodsOrderController{}, "*:GoodsOrder_PDF")   // 获取未读消息
 
 }

+ 31 - 17
routers/User.go

@@ -1,33 +1,47 @@
 package routers
 
 import (
+	"Cold_Api/conf"
 	"Cold_Api/controllers"
 	beego "github.com/beego/beego/v2/server/web"
 )
 
 func init() {
-	var version = "/v3"
+	var version = conf.Version
 
 	//---------------------------------- 用户管理
 	// 用户
 	beego.Router(version+"/Login_verification", &controllers.AdminController{}, "*:Login_verification")
-	beego.Router(version+"/User/Info", &controllers.UserController{}, "*:User_v2_Info")   // 用户列表
-	beego.Router(version+"/User/List", &controllers.UserController{}, "*:V2_User_List")   // 用户列表
-	beego.Router(version+"/User/Get", &controllers.UserController{}, "*:User_v2_Get")     // 获取用户信息
-	beego.Router(version+"/User/Add", &controllers.UserController{}, "*:User_v2_Add")     //
-	beego.Router(version+"/User/Edit", &controllers.UserController{}, "*:User_v2_Edit")   //
-	beego.Router(version+"/User/AEdit", &controllers.UserController{}, "*:User_v2_AEdit") //
-	beego.Router(version+"/User/ADel", &controllers.UserController{}, "*:V2_User_Del")    //
-	beego.Router(version+"/User/Entry", &controllers.UserController{}, "*:V2_User_Entry") // 获取未读消息
-	// 用户日志
-	beego.Router(version+"/User/LogsClass", &controllers.LogsController{}, "*:V2_UserLogsClass") // 获取未读消息
-	beego.Router(version+"/User/LogsList", &controllers.LogsController{}, "*:V2_UserLogs")       // 获取未读消息
+	beego.Router(version+"/User/List", &controllers.UserController{}, "*:User_List") // 用户列表
+	beego.Router(version+"/User/Info", &controllers.UserController{}, "*:User_Info") // 当前登录用户信息
+	beego.Router(version+"/User/Get", &controllers.UserController{}, "*:User_Get")   // 获取用户信息
+	beego.Router(version+"/User/Add", &controllers.UserController{}, "*:User_Add")   // 增加用户
+	beego.Router(version+"/User/Edit", &controllers.UserController{}, "*:User_Edit") // 编辑用户
+	beego.Router(version+"/User/Del", &controllers.UserController{}, "*:User_Del")   // 删除用户
+
+	beego.Router(version+"/Admin/List", &controllers.UserController{}, "*:Admin_List")                 // 内部用户列表
+	beego.Router(version+"/Admin/Get", &controllers.UserController{}, "*:Admin_Get")                   // 获取内部用户信息
+	beego.Router(version+"/Admin/Add", &controllers.UserController{}, "*:Admin_Add")                   // 增加内部用户
+	beego.Router(version+"/Admin/Edit", &controllers.UserController{}, "*:Admin_Edit")                 // 编辑内部用户
+	beego.Router(version+"/Admin/Del", &controllers.UserController{}, "*:Admin_Del")                   // 删除内部用户
+	beego.Router(version+"/Admin/Bind_Company", &controllers.UserController{}, "*:Admin_Bind_Company") // 内部用户绑定公司
 
 	// 权限
-	beego.Router(version+"/Power/List", &controllers.UserController{}, "*:Power_List")    //
-	beego.Router(version+"/Power/Get", &controllers.UserController{}, "*:Power_Get")      //
-	beego.Router(version+"/Power/Add", &controllers.UserController{}, "*:Power_v2_Add")   //
-	beego.Router(version+"/Power/Edit", &controllers.UserController{}, "*:Power_v2_Edit") //
-	beego.Router(version+"/Power/Del", &controllers.UserController{}, "*:Power_v2_Del")   //
+	beego.Router(version+"/Power/List", &controllers.UserController{}, "*:Power_List")         // 权限列表
+	beego.Router(version+"/Power/List_All", &controllers.UserController{}, "*:Power_List_All") // 所有权限列表
+	beego.Router(version+"/Power/Get", &controllers.UserController{}, "*:Power_Get")           // 获取权限
+	beego.Router(version+"/Power/Add", &controllers.UserController{}, "*:Power_Add")           // 添加权限
+	beego.Router(version+"/Power/Edit", &controllers.UserController{}, "*:Power_Edit")         // 编辑权限
+	beego.Router(version+"/Power/Del", &controllers.UserController{}, "*:Power_Del")           // 删除权限
+
+	// 菜单
+	beego.Router(version+"/Menu/List", &controllers.UserController{}, "*:Menu_List")           //
+	beego.Router(version+"/Menu/Bind_List", &controllers.UserController{}, "*:Bind_Menu_List") //
+
+	// 公司管理
+	beego.Router(version+"/Company/List", &controllers.UserController{}, "*:Company_List") //公司列表
+	beego.Router(version+"/Company/Add", &controllers.UserController{}, "*:Company_Add")   //添加公司
+	beego.Router(version+"/Company/Edit", &controllers.UserController{}, "*:Company_Edit") //修改公司
+	beego.Router(version+"/Company/Del", &controllers.UserController{}, "*:Company_Del")   //删除公司
 
 }

+ 73 - 0
routers/filter.go

@@ -0,0 +1,73 @@
+package routers
+
+import (
+	"Cold_Api/conf"
+	"Cold_Api/controllers/lib"
+	"Cold_Api/models/Account"
+	"github.com/beego/beego/v2/server/web/context"
+	"strings"
+)
+
+var (
+	version                    = conf.Version
+	filterExcludeURLMap        = make(map[string]int)
+	filterOnlyLoginCheckURLMap = make(map[string]int)
+)
+
+var InitSetFilterUrl = func() {
+	excludeUrl := conf.FilterExcludeURL
+	if len(excludeUrl) > 0 {
+		excludeUrlSlice := strings.Split(excludeUrl, ",")
+		if len(excludeUrlSlice) > 0 {
+			for _, v := range excludeUrlSlice {
+				filterExcludeURLMap[version+v] = 1
+			}
+		}
+	}
+	checkLoginUrl := conf.FilterOnlyLoginCheckURL
+	if len(checkLoginUrl) > 0 {
+		checkLoginUrlSlice := strings.Split(checkLoginUrl, ",")
+		if len(checkLoginUrlSlice) > 0 {
+			for _, v := range checkLoginUrlSlice {
+				filterOnlyLoginCheckURLMap[version+v] = 1
+			}
+		}
+	}
+}
+
+func FilterRBAC(ctx *context.Context) {
+	//判断URL是否排除
+	if _, ok := filterExcludeURLMap[ctx.Request.URL.Path]; ok {
+		return
+	}
+
+	b_, admin := lib.Verification(ctx.GetCookie("User_tokey"), "")
+	if !b_ {
+		ctx.Output.JSON(lib.JSONS{Code: 201, Msg: "请重新登陆!"}, true, false)
+
+	}
+	//判断是否只验证登录的URL
+	if _, ok := filterOnlyLoginCheckURLMap[ctx.Request.URL.Path]; b_ && ok {
+		return
+	}
+
+	power, _ := Account.Read_Power_ById(admin.T_power)
+
+	if power.T_Menu_Bind == "*" {
+		return
+	}
+
+	api := Account.Read_API_List_ByPower_Id(power.Id, power.T_Menu_Bind)
+	flag := false
+	for _, v := range api {
+		if version+v.T_uri == ctx.Request.URL.Path {
+			flag = true
+			break
+		}
+	}
+	if !flag {
+		data := lib.JSONS{Code: 201, Msg: "无权访问!"}
+		ctx.Output.JSON(data, true, false)
+	}
+
+}

+ 7 - 3
routers/router.go

@@ -1,20 +1,24 @@
 package routers
 
 import (
+	"Cold_Api/conf"
 	"Cold_Api/controllers"
-	"Cold_Api/controllers/WebSocket"
 	beego "github.com/beego/beego/v2/server/web"
 )
 
 func init() {
-	var version = "/v3"
+	var version = conf.Version
 
 	// 公共
-	beego.Router(version+"/ws/join", &WebSocket.WebSocketController{}, "get:Join")
 	beego.Router(version+"/UpFile", &controllers.UpFileController{}, "*:UpFile")
 
 	// 系统日志
 	beego.Router(version+"/System/LogsClass", &controllers.LogsController{}, "*:LogsClass") // 获取未读消息
 	beego.Router(version+"/System/LogsList", &controllers.LogsController{}, "*:LogsList")   // 获取未读消息
 
+	//初始化配置 不鉴权的URL和只鉴权登录的URL
+	InitSetFilterUrl()
+	//过滤器,拦截所有请求
+	//beego.InsertFilter("/*", beego.BeforeRouter, FilterRBAC)
+
 }

+ 122 - 164
routers/v2.go

@@ -1,85 +1,71 @@
 package routers
 
-import (
-	"Cold_Api/controllers"
-	"Cold_Api/controllers/WebSocket"
-	beego "github.com/beego/beego/v2/server/web"
-)
-
 func init() {
-	//   -----------网关接口-----------
-	// 添加网关
-	//beego.Router("/API/A_Device_List", &controllers.DeviceController{}, "*:A_Device_List") // *全部;  get,post:
+	////   -----------网关接口-----------
 	//// 添加网关
-	//beego.Router("/API/Add_A_Device", &controllers.DeviceController{}, "*:Add_A_Device") // *全部;  get,post:
-	//// 修改网关
-	//beego.Router("/API/Up_A_Device", &controllers.DeviceController{}, "*:Up_A_Device") // *全部;  get,post:
-	//// 删除网关
-	//beego.Router("/API/Delete_A_Device", &controllers.DeviceController{}, "*:Delete_A_Device") // *全部;  get,post:
-	// 用户 - 微信授权
-	beego.Router("/", &controllers.AdminController{}, "*:Login")
-	// 网关 WebSocket
-	beego.Router("/ws/join", &WebSocket.WebSocketController{}, "get:Join")
-
-	beego.Router("/UpFile", &controllers.UpFileController{}, "*:UpFile") // *全部;  get,post:
-
-	beego.Router("/Login", &controllers.AdminController{}, "*:Login")                           // *全部;  get,post:
-	beego.Router("/Login_verification", &controllers.AdminController{}, "*:Login_verification") // *全部;  get,post:
-
-	beego.Router("/Index", &controllers.AdminController{}, "*:Index")
-	beego.Router("/Home", &controllers.AdminController{}, "*:Home")
-	beego.Router("/User/Info", &controllers.AdminController{}, "*:Info")
-
-	beego.Router("/Nows_rend", &controllers.AdminController{}, "*:Nows_rend") // 获取未读消息
-	// 日志
-	beego.Router("/System/Logs", &controllers.LogsController{}, "*:List") // 获取未读消息
-
-	// 微信服务端
-	//beego.Router("/Wx/Wx_handler", &controllers.WxController{}, "*:Wx_handler")  // 获取未读消息
-	//beego.Router("/Wx/Wx_handler", &controllers.WxController{}, "*:Wx")  // 获取未读消息
-
-	beego.Router("/RawSql/Raw_html", &controllers.RawSqlController{}, "*:RawSql_html")   // 获取未读消息
-	beego.Router("/RawSql/Raw__html", &controllers.RawSqlController{}, "*:RawSql__html") // 获取未读消息
-	beego.Router("/RawSql/List_Post", &controllers.RawSqlController{}, "*:List_Post")    // 获取未读消息
-	beego.Router("/RawSql/List_Del", &controllers.RawSqlController{}, "*:List_Del")      // 获取未读消息
-
-	//   -----------3、用户管理
-	//3.1用户账户只可以由管理员添加。
-	//3.2管理员账户只可以有一个。
-	//3.3用户可添加和删除子账号。
-	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
-	//-----------
-
-	beego.Router("/User/Admin_html", &controllers.UserController{}, "*:Admin_html") // 获取未读消息
-	beego.Router("/User/Admin_", &controllers.UserController{}, "*:Admin_")         // 获取未读消息
-	beego.Router("/User/Admin_Post", &controllers.UserController{}, "*:Admin_Post") // 获取未读消息
-	beego.Router("/User/Admin_Del", &controllers.UserController{}, "*:Admin_Del")   // 获取未读消息
-
-	beego.Router("/User/User_html", &controllers.UserController{}, "*:User_html")   // 获取未读消息
-	beego.Router("/User/User_", &controllers.UserController{}, "*:User_")           // 获取未读消息
-	beego.Router("/User/User_Get", &controllers.UserController{}, "*:User_Get")     // 获取未读消息
-	beego.Router("/User/User_Info", &controllers.UserController{}, "*:User_Info")   // 获取未读消息
-	beego.Router("/User/User_Info_", &controllers.UserController{}, "*:User_Info_") // 获取未读消息
-	beego.Router("/User/User_Post", &controllers.UserController{}, "*:User_Post")   // 获取未读消息
-	beego.Router("/User/User_Del", &controllers.UserController{}, "*:User_Del")     // 获取未读消息
-	beego.Router("/User/User_Entry", &controllers.UserController{}, "*:User_Entry") // 获取未读消息
-
-	beego.Router("/User/Power", &controllers.UserController{}, "*:Power_html")      // 获取未读消息
-	beego.Router("/User/Power_", &controllers.UserController{}, "*:Power_")         // 获取未读消息
-	beego.Router("/User/Power_Post", &controllers.UserController{}, "*:Power_Post") // 获取未读消息
-	beego.Router("/User/Power_Del", &controllers.UserController{}, "*:Power_Del")   // 获取未读消息
-
-	beego.Router("/User/Panel_plan_Syn", &controllers.UserController{}, "*:Panel_plan_Syn") // 获取未读消息
-	beego.Router("/User/InspectTokey", &controllers.UserController{}, "*:InspectTokey")     // 获取未读消息
-
-	// 日志
-	beego.Router("/User/UserLogs", &controllers.LogsController{}, "*:UserLogs") // 获取未读消息
-
-	beego.Router("/GoodsOrder/GoodsOrder_html", &controllers.GoodsOrderController{}, "*:GoodsOrder_html")   // 获取未读消息
-	beego.Router("/GoodsOrder/GoodsOrder__html", &controllers.GoodsOrderController{}, "*:GoodsOrder__html") // 获取未读消息
-	beego.Router("/GoodsOrder/List_Post", &controllers.GoodsOrderController{}, "*:List_Post")               // 获取未读消息
-	beego.Router("/GoodsOrder/List_Del", &controllers.GoodsOrderController{}, "*:List_Del")                 // 获取未读消息
-	beego.Router("/GoodsOrder/Data_PDF", &controllers.GoodsOrderController{}, "*:Data_PDF")                 // 获取未读消息
+	////beego.Router("/API/A_Device_List", &controllers.DeviceController{}, "*:A_Device_List") // *全部;  get,post:
+	////// 添加网关
+	////beego.Router("/API/Add_A_Device", &controllers.DeviceController{}, "*:Add_A_Device") // *全部;  get,post:
+	////// 修改网关
+	////beego.Router("/API/Up_A_Device", &controllers.DeviceController{}, "*:Up_A_Device") // *全部;  get,post:
+	////// 删除网关
+	////beego.Router("/API/Delete_A_Device", &controllers.DeviceController{}, "*:Delete_A_Device") // *全部;  get,post:
+	//// 用户 - 微信授权
+	//beego.Router("/", &controllers.AdminController{}, "*:Login")
+	//
+	//beego.Router("/UpFile", &controllers.UpFileController{}, "*:UpFile") // *全部;  get,post:
+	//
+	//beego.Router("/Login", &controllers.AdminController{}, "*:Login")                           // *全部;  get,post:
+	//beego.Router("/Login_verification", &controllers.AdminController{}, "*:Login_verification") // *全部;  get,post:
+	//
+	//beego.Router("/User/Info", &controllers.AdminController{}, "*:Info")
+	//
+	//// 日志
+	//beego.Router("/System/Logs", &controllers.LogsController{}, "*:List") // 获取未读消息
+	//
+	//// 微信服务端
+	////beego.Router("/Wx/Wx_handler", &controllers.WxController{}, "*:Wx_handler")  // 获取未读消息
+	////beego.Router("/Wx/Wx_handler", &controllers.WxController{}, "*:Wx")  // 获取未读消息
+	//
+	//beego.Router("/RawSql/Raw_html", &controllers.RawSqlController{}, "*:RawSql_html")   // 获取未读消息
+	//beego.Router("/RawSql/Raw__html", &controllers.RawSqlController{}, "*:RawSql__html") // 获取未读消息
+	//beego.Router("/RawSql/List_Post", &controllers.RawSqlController{}, "*:List_Post")    // 获取未读消息
+	//beego.Router("/RawSql/List_Del", &controllers.RawSqlController{}, "*:List_Del")      // 获取未读消息
+	//
+	////   -----------3、用户管理
+	////3.1用户账户只可以由管理员添加。
+	////3.2管理员账户只可以有一个。
+	////3.3用户可添加和删除子账号。
+	////3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
+	////-----------
+	//
+	//beego.Router("/User/Admin_html", &controllers.UserController{}, "*:Admin_html") // 获取未读消息
+	//beego.Router("/User/Admin_", &controllers.UserController{}, "*:Admin_")         // 获取未读消息
+	//beego.Router("/User/Admin_Post", &controllers.UserController{}, "*:Admin_Post") // 获取未读消息
+	//beego.Router("/User/Admin_Del", &controllers.UserController{}, "*:Admin_Del")   // 获取未读消息
+	//
+	//beego.Router("/User/User_", &controllers.UserController{}, "*:User_")           // 获取未读消息
+	//beego.Router("/User/User_Get", &controllers.UserController{}, "*:User_Get")     // 获取未读消息
+	//beego.Router("/User/User_Info", &controllers.UserController{}, "*:User_Info")   // 获取未读消息
+	//beego.Router("/User/User_Info_", &controllers.UserController{}, "*:User_Info_") // 获取未读消息
+	//beego.Router("/User/User_Post", &controllers.UserController{}, "*:User_Post")   // 获取未读消息
+	//beego.Router("/User/User_Del", &controllers.UserController{}, "*:User_Del")     // 获取未读消息
+	//beego.Router("/User/User_Entry", &controllers.UserController{}, "*:User_Entry") // 获取未读消息
+	//
+	//beego.Router("/User/Power", &controllers.UserController{}, "*:Power_html")      // 获取未读消息
+	//beego.Router("/User/Power_", &controllers.UserController{}, "*:Power_")         // 获取未读消息
+	//beego.Router("/User/Power_Post", &controllers.UserController{}, "*:Power_Post") // 获取未读消息
+	//beego.Router("/User/Power_Del", &controllers.UserController{}, "*:Power_Del")   // 获取未读消息
+	//
+	//beego.Router("/User/Panel_plan_Syn", &controllers.UserController{}, "*:Panel_plan_Syn") // 获取未读消息
+	//beego.Router("/User/InspectTokey", &controllers.UserController{}, "*:InspectTokey")     // 获取未读消息
+	//
+	//// 日志
+	//beego.Router("/User/UserLogs", &controllers.LogsController{}, "*:UserLogs") // 获取未读消息
+	//
+	//beego.Router("/GoodsOrder/List_Post", &controllers.GoodsOrderController{}, "*:List_Post") // 获取未读消息
+	//beego.Router("/GoodsOrder/List_Del", &controllers.GoodsOrderController{}, "*:List_Del")   // 获取未读消息
+	//beego.Router("/GoodsOrder/Data_PDF", &controllers.GoodsOrderController{}, "*:Data_PDF")   // 获取未读消息
 
 	//   -----------3、用户管理
 	//3.1用户账户只可以由管理员添加。
@@ -88,70 +74,48 @@ func init() {
 	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
 	//-----------
 	// 设备日志
-	beego.Router("/Device/DeviceLogs", &controllers.DeviceController{}, "*:DeviceLogs") // 获取未读消息
+	//beego.Router("/Device/DeviceLogs", &controllers.DeviceController{}, "*:DeviceLogs") // 获取未读消息
 
-	beego.Router("/Device/Read_DeviceParameter", &controllers.DeviceController{}, "*:Read_DeviceParameter")             // 获取 基本信息
-	beego.Router("/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_DeviceSensorParameter") // 获取 基本信息
+	//beego.Router("/Device/Read_DeviceParameter", &controllers.DeviceController{}, "*:Read_DeviceParameter")             // 获取 基本信息
+	//beego.Router("/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_DeviceSensorParameter") // 获取 基本信息
 	//beego.Router("/Device/Read_DeviceParameter", &controllers.DeviceController{}, "*:Read_DeviceParameter")           // 获取 基本信息
-	beego.Router("/Device/Pu_DeviceParameter", &controllers.DeviceController{}, "*:Pu_DeviceParameter")               // 设置 设备参数
-	beego.Router("/Device/Pu_DeviceParameter_Sensor", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor") // 设置 传感器参数
+	//beego.Router("/Device/Pu_DeviceParameter", &controllers.DeviceController{}, "*:Pu_DeviceParameter")               // 设置 设备参数
+	//beego.Router("/Device/Pu_DeviceParameter_Sensor", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor") // 设置 传感器参数
 	//beego.Router("/Device/Pu_DeviceParameter_Sensor_Cache", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor_Cache") // 设置 传感器参数
-	beego.Router("/Device/Pu_DeviceParameter_T_l_p", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_l_p")   // 设置 传感器参数
-	beego.Router("/Device/Pu_DeviceParameter_T_give", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_give") // 设置 传感器参数
-
-	beego.Router("/Device/Device_html", &controllers.DeviceController{}, "*:Device_html")                       // 获取未读消息
-	beego.Router("/Device/Device_", &controllers.DeviceController{}, "*:Device_")                               // 获取未读消息
-	beego.Router("/Device/Device_Post", &controllers.DeviceController{}, "*:Device_Post")                       // 获取未读消息
-	beego.Router("/Device/Device_Add", &controllers.DeviceController{}, "*:Device_Post")                        // 获取未读消息
-	beego.Router("/Device/Device_Del", &controllers.DeviceController{}, "*:Device_Del")                         // 获取未读消息
-	beego.Router("/Device/DeviceBind_html", &controllers.DeviceController{}, "*:DeviceBind_html")               // 获取未读消息
-	beego.Router("/Device/DeviceBind_List", &controllers.DeviceController{}, "*:DeviceBind_List")               // 获取未读消息
-	beego.Router("/Device/DeviceBind_Sensor_List", &controllers.DeviceController{}, "*:DeviceBind_Sensor_List") // 获取未读消息
-	beego.Router("/Device/DeviceBind_Del", &controllers.DeviceController{}, "*:DeviceBind_Del")                 // 获取未读消息
-	beego.Router("/Device/DeviceBind_Add", &controllers.DeviceController{}, "*:DeviceBind_Add")                 // 获取未读消息
-	beego.Router("/Device/DeviceBind_Add_All", &controllers.DeviceController{}, "*:DeviceBind_Add_All")         // 获取未读消息
-	beego.Router("/Device/DeviceBind_html_", &controllers.DeviceController{}, "*:DeviceBind_html_")             // 获取未读消息
-
-	beego.Router("/Device/DeviceClass_html", &controllers.DeviceController{}, "*:DeviceClass_html") // 获取未读消息
-	beego.Router("/Device/DeviceClass_", &controllers.DeviceController{}, "*:DeviceClass_")         // 获取未读消息
-	beego.Router("/Device/DeviceClass_Syn", &controllers.DeviceController{}, "*:DeviceClass_Syn")   // 获取未读消息
-	beego.Router("/Device/DeviceClass_Post", &controllers.DeviceController{}, "*:DeviceClass_Post") // 获取未读消息
-	beego.Router("/Device/DeviceClass_Del", &controllers.DeviceController{}, "*:DeviceClass_Del")   // 获取未读消息
-
-	beego.Router("/Device/DeviceClassBind_html", &controllers.DeviceController{}, "*:DeviceClassBind_html_") // 获取未读消息
-	beego.Router("/Device/DeviceClassBind_List", &controllers.DeviceController{}, "*:DeviceClassBind_List")  // 获取未读消息
-	beego.Router("/Device/DeviceClassBind_Del", &controllers.DeviceController{}, "*:DeviceClassBind_Del")    // 获取未读消息
-	beego.Router("/Device/DeviceClassBind_Add", &controllers.DeviceController{}, "*:DeviceClassBind_Add")    // 获取未读消息
-
-	beego.Router("/Device/Get_DeviceClassId_QRCode", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode")   // 获取未读消息
-	beego.Router("/Device/Get_DeviceClassId_QRCode2", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode2") // 获取未读消息
-	beego.Router("/Device/Get_DeviceClassId", &controllers.DeviceController{}, "*:Get_DeviceClassId")                 // 获取未读消息
-
-	beego.Router("/Device/Device_List", &controllers.DeviceController{}, "*:Device_List")                                 // 获取未读消息
-	beego.Router("/Device/Device_Parameter", &controllers.DeviceController{}, "*:Device_Parameter_html")                  // 获取未读消息
-	beego.Router("/Device/Device_Parameter_Del", &controllers.DeviceController{}, "*:Device_Parameter_Del")               // 获取未读消息
-	beego.Router("/Device/Device_Parameter_Del_Device", &controllers.DeviceController{}, "*:Device_Parameter_Del_Device") // 获取未读消息
-	beego.Router("/Device/DeviceSensor_List", &controllers.DeviceController{}, "*:DeviceSensor_List")                     // 获取未读消息
-	beego.Router("/Device/DeviceSensor_List_html", &controllers.DeviceController{}, "*:DeviceSensor_List_html")           // 获取未读消息
-	beego.Router("/Device/DeviceWarning_List_html", &controllers.DeviceController{}, "*:DeviceWarning_List_html")         // 获取未读消息
-	beego.Router("/Device/DeviceWarning_List", &controllers.DeviceController{}, "*:DeviceWarning_List")                   // 获取未读消息
-	beego.Router("/Device/DeviceWarning_", &controllers.DeviceController{}, "*:DeviceWarning_")                           // 获取未读消息
-	beego.Router("/Device/DeviceWarning_log", &controllers.DeviceController{}, "*:DeviceWarning_log")                     // 获取未读消息
-	beego.Router("/Device/DeviceWarning_M", &controllers.DeviceController{}, "*:DeviceWarning_M")                         // 获取未读消息
-	beego.Router("/Device/DeviceWarning_Post", &controllers.DeviceController{}, "*:DeviceWarning_Post")                   // 获取未读消息
-	beego.Router("/Device/DeviceWarning_Data_Excel", &controllers.DeviceController{}, "*:DeviceWarning_Data_Excel")       // 获取未读消息
-	beego.Router("/Device/DeviceWarning_Del", &controllers.DeviceController{}, "*:DeviceWarning_Del")                     // 获取未读消息
-	beego.Router("/Device/DeviceWarningListT_Tips", &controllers.DeviceController{}, "*:DeviceWarningList_T_Tips")        // 获取未读消息
-
-	beego.Router("/Device/UpDeviceSensor_Tsort", &controllers.DeviceController{}, "*:UpDeviceSensor_Tsort")     // 获取未读消息
-	beego.Router("/Device/UpDeviceSensor_T3dview", &controllers.DeviceController{}, "*:UpDeviceSensor_T3dview") // 获取未读消息
-	// 获取未读消息
-	beego.Router("/Device/UpDeviceSensor_T_datashow", &controllers.DeviceController{}, "*:UpDeviceSensor_T_datashow") // 获取未读消息
-
-	beego.Router("/Device/DeviceTask_List", &controllers.DeviceController{}, "*:DeviceTask_List") // 设置 设备参数
-	beego.Router("/Device/DeviceTask_Post", &controllers.DeviceController{}, "*:DeviceTask_Post") // 设置 设备参数
-
-	beego.Router("/Device/DeviceData_Add", &controllers.DeviceController{}, "*:DeviceData_Add") // 设置 设备参数
+	//beego.Router("/Device/Pu_DeviceParameter_T_l_p", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_type")  // 设置 传感器参数
+	//beego.Router("/Device/Pu_DeviceParameter_T_give", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_give") // 设置 传感器参数
+
+	//beego.Router("/Device/Device_Post", &controllers.DeviceController{}, "*:Device_Post")                       // 获取未读消息
+	//beego.Router("/Device/Device_Add", &controllers.DeviceController{}, "*:Device_Post")                        // 获取未读消息
+	//beego.Router("/Device/Device_Del", &controllers.DeviceController{}, "*:Device_Del")                         // 获取未读消息
+	//beego.Router("/Device/DeviceClassBind_List", &controllers.DeviceController{}, "*:DeviceClassBind_List") // 获取未读消息
+
+	//beego.Router("/Device/Get_DeviceClassId_QRCode", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode")   // 获取未读消息
+	//beego.Router("/Device/Get_DeviceClassId_QRCode2", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode2") // 获取未读消息
+
+	//beego.Router("/Device/Device_List", &controllers.DeviceController{}, "*:Device_List") // 获取未读消息
+	//beego.Router("/Device/Device_Parameter", &controllers.DeviceController{}, "*:Device_Parameter_html")                  // 获取未读消息
+	//beego.Router("/Device/Device_Parameter_Del", &controllers.DeviceController{}, "*:Device_Parameter_Del")               // 获取未读消息
+	//beego.Router("/Device/Device_Parameter_Del_Device", &controllers.DeviceController{}, "*:Device_Parameter_Del_Device") // 获取未读消息
+	//beego.Router("/Device/DeviceSensor_List", &controllers.DeviceController{}, "*:DeviceSensor_List")                     // 获取未读消息
+	//beego.Router("/Device/DeviceWarning_List", &controllers.DeviceController{}, "*:DeviceWarning_List")             // 获取未读消息
+	//beego.Router("/Device/DeviceWarning_", &controllers.DeviceController{}, "*:DeviceWarning_")                     // 获取未读消息
+	//beego.Router("/Device/DeviceWarning_log", &controllers.DeviceController{}, "*:DeviceWarning_log")               // 获取未读消息
+	//beego.Router("/Device/DeviceWarning_M", &controllers.DeviceController{}, "*:DeviceWarning_M")                   // 获取未读消息
+	//beego.Router("/Device/DeviceWarning_Post", &controllers.DeviceController{}, "*:DeviceWarning_Post")             // 获取未读消息
+	//beego.Router("/Device/DeviceWarning_Data_Excel", &controllers.DeviceController{}, "*:DeviceWarning_Data_Excel") // 获取未读消息
+	//beego.Router("/Device/DeviceWarning_Del", &controllers.DeviceController{}, "*:DeviceWarning_Del")               // 获取未读消息
+	//beego.Router("/Device/DeviceWarningListT_Tips", &controllers.DeviceController{}, "*:DeviceWarningList_T_Tips")  // 获取未读消息
+
+	//beego.Router("/Device/UpDeviceSensor_Tsort", &controllers.DeviceController{}, "*:UpDeviceSensor_Tsort")     // 获取未读消息
+	//beego.Router("/Device/UpDeviceSensor_T3dview", &controllers.DeviceController{}, "*:UpDeviceSensor_T3dview") // 获取未读消息
+	//// 获取未读消息
+	//beego.Router("/Device/UpDeviceSensor_T_datashow", &controllers.DeviceController{}, "*:UpDeviceSensor_T_datashow") // 获取未读消息
+
+	//beego.Router("/Device/DeviceTask_List", &controllers.DeviceController{}, "*:DeviceTask_List") // 设置 设备参数
+	//beego.Router("/Device/DeviceTask_Post", &controllers.DeviceController{}, "*:DeviceTask_Post") // 设置 设备参数
+
+	//beego.Router("/Device/DeviceData_Add", &controllers.DeviceController{}, "*:DeviceData_Add") // 设置 设备参数
 
 	//   -----------3、用户管理
 	//3.1用户账户只可以由管理员添加。
@@ -159,29 +123,23 @@ func init() {
 	//3.3用户可添加和删除子账号。
 	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
 	//-----------
-	beego.Router("/Data/Device_Sensor", &controllers.DataController{}, "*:Device_Sensor") // 设置 设备参数
-
-	beego.Router("/Data/DataReal_html", &controllers.DataController{}, "*:DataReal_html")                                // 获取 基本信息
-	beego.Router("/Data/DataRealCalss_html", &controllers.DataController{}, "*:DataRealCalss_html")                      // 获取 基本信息
-	beego.Router("/Data/DataList_html", &controllers.DataController{}, "*:DataList_html")                                // 获取 基本信息
-	beego.Router("/Data/DataLine_html", &controllers.DataController{}, "*:DataLine_html")                                // 获取 基本信息
-	beego.Router("/Data/DataMap_html", &controllers.DataController{}, "*:DataMap_html")                                  // 获取 基本信息
-	beego.Router("/Data/Device_Sensor_List", &controllers.DataController{}, "*:Device_Sensor_List")                      // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data", &controllers.DataController{}, "*:Device_Sensor_Data")                      // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_More", &controllers.DataController{}, "*:Device_Sensor_Data_More")            // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_More_ColdVerify", &controllers.DataController{}, "*:Device_Sensor_Data_More") // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_Excel", &controllers.DataController{}, "*:Device_Sensor_Data_Excel")          // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_Excel_m", &controllers.DataController{}, "*:Device_Sensor_Data_Excel_m")      // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_PDF", &controllers.DataController{}, "*:Device_Sensor_Data_PDF")              // 设置 设备参数
-	beego.Router("/Data/DataPlane", &controllers.DataController{}, "*:DataPlane")                                        // 设置 设备参数
-
-	beego.Router("/Data/DataScreen", &controllers.DataController{}, "*:DataScreen")                           // 设置 设备参数
-	beego.Router("/Data/DataScreen_Data", &controllers.DataController{}, "*:DataScreen_Data")                 // 设置 设备参数
-	beego.Router("/Data/DeviceSensor_Data_Print", &controllers.DataController{}, "*:DeviceSensor_Data_Print") // 设置 设备参数
-	beego.Router("/Data/DataScreen_Map", &controllers.DataController{}, "*:DataScreen_Map")                   // 设置 设备参数
-
-	//beego.Router("/Data/Raw", &controllers.DataController{}, "*:Raw") // 设置 设备参数
-	// 3D
-	beego.Router("/Data/DataView3d_html", &controllers.DataController{}, "*:DataView3d_html")
-	beego.Router("/Data/UpDataView3d", &controllers.DataController{}, "*:UpDataView3d")
+	//beego.Router("/Data/Device_Sensor", &controllers.DataController{}, "*:Device_Sensor") // 设置 设备参数
+	//// 获取 基本信息
+	//beego.Router("/Data/Device_Sensor_List", &controllers.DataController{}, "*:Device_Sensor_List")                      // 设置 设备参数
+	//beego.Router("/Data/Device_Sensor_Data", &controllers.DataController{}, "*:Device_Sensor_Data")                      // 设置 设备参数
+	//beego.Router("/Data/Device_Sensor_Data_More", &controllers.DataController{}, "*:Device_Sensor_Data_More")            // 设置 设备参数
+	//beego.Router("/Data/Device_Sensor_Data_More_ColdVerify", &controllers.DataController{}, "*:Device_Sensor_Data_More") // 设置 设备参数
+	//beego.Router("/Data/Device_Sensor_Data_Excel", &controllers.DataController{}, "*:Device_Sensor_Data_Excel")          // 设置 设备参数
+	//beego.Router("/Data/Device_Sensor_Data_Excel_m", &controllers.DataController{}, "*:Device_Sensor_Data_Excel_m")      // 设置 设备参数
+	//beego.Router("/Data/Device_Sensor_Data_PDF", &controllers.DataController{}, "*:Device_Sensor_Data_PDF")              // 设置 设备参数
+	//beego.Router("/Data/DataPlane", &controllers.DataController{}, "*:DataPlane")                                        // 设置 设备参数
+	//
+	//beego.Router("/Data/DataScreen_Data", &controllers.DataController{}, "*:DataScreen_Data")                 // 设置 设备参数
+	//beego.Router("/Data/DeviceSensor_Data_Print", &controllers.DataController{}, "*:DeviceSensor_Data_Print") // 设置 设备参数
+	//beego.Router("/Data/DataScreen_Map", &controllers.DataController{}, "*:DataScreen_Map")                   // 设置 设备参数
+	//
+	////beego.Router("/Data/Raw", &controllers.DataController{}, "*:Raw") // 设置 设备参数
+	//// 3D
+	//beego.Router("/Data/DataView3d_html", &controllers.DataController{}, "*:DataView3d_html")
+	//beego.Router("/Data/UpDataView3d", &controllers.DataController{}, "*:UpDataView3d")
 }

+ 91 - 0
routers/v3.go

@@ -0,0 +1,91 @@
+package routers
+
+import (
+	"Cold_Api/conf"
+	"Cold_Api/controllers"
+	beego "github.com/beego/beego/v2/server/web"
+)
+
+func init() {
+	var version = conf.Version
+	//设备
+	beego.Router(version+"/Device/List", &controllers.DeviceController{}, "*:Device_List")                                        // 设备列表
+	beego.Router(version+"/Device/Add", &controllers.DeviceController{}, "*:Device_Post")                                         // 添加设备
+	beego.Router(version+"/Device/Del", &controllers.DeviceController{}, "*:Device_Del")                                          // 删除设备
+	beego.Router(version+"/Device/Edit", &controllers.DeviceController{}, "*:Device_Edit")                                        // 修改设备
+	beego.Router(version+"/Device/Parameter_List", &controllers.DeviceController{}, "*:Device_Parameter_List")                    // 设备参数列表
+	beego.Router(version+"/Device/Parameter_Pu", &controllers.DeviceController{}, "*:Device_Parameter_Pu")                        // 修改设备参数
+	beego.Router(version+"/Device/Device_Parameter_Del_Device", &controllers.DeviceController{}, "*:Device_Parameter_Del_Device") // 删除此设备
+
+	// 修改设备参数
+	beego.Router(version+"/Device/Pu_DeviceParameter_T_l_p", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_type")  // 设置设备参数
+	beego.Router(version+"/Device/Pu_DeviceParameter_T_give", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_give") // 设备是否弃用
+
+	// 设备传感器
+	//beego.Router(version+"/Device/Pu_DeviceParameter_Sensor", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor")   // 设置传感器参数
+	beego.Router(version+"/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_DeviceSensorParameter") // 获取传感器参数
+
+	// 设备-传感器
+	beego.Router(version+"/DeviceSensor/List", &controllers.DeviceController{}, "*:DeviceSensor_List")                     // 传感器列表
+	beego.Router(version+"/DeviceSensor/Edit", &controllers.DeviceController{}, "*:DeviceSensor_Edit")                     // 修改传感器
+	beego.Router(version+"/DeviceSensor/Del", &controllers.DeviceController{}, "*:DeviceSensor_Del")                       // 删除传感器
+	beego.Router(version+"/DeviceSensor/Parameter_List", &controllers.DeviceController{}, "*:DeviceSensor_Parameter_List") // 传感器参数列表
+	beego.Router(version+"/DeviceSensor/Parameter_Pu", &controllers.DeviceController{}, "*:DeviceSensor_Parameter_Pu")     // 修改传感器参数
+
+	beego.Router(version+"/Device/UpDeviceSensor_Tsort", &controllers.DeviceController{}, "*:UpDeviceSensor_Tsort")           // 传感器排序
+	beego.Router(version+"/Device/UpDeviceSensor_T3dview", &controllers.DeviceController{}, "*:UpDeviceSensor_T3dview")       // 传感器3D视图
+	beego.Router(version+"/Device/UpDeviceSensor_T_datashow", &controllers.DeviceController{}, "*:UpDeviceSensor_T_datashow") // 传感器屏蔽数据展示
+
+	// 设备任务
+	beego.Router(version+"/DeviceTask/List", &controllers.DeviceController{}, "*:DeviceTask_List")        // 任务列表
+	beego.Router(version+"/Device/DeviceTask_Post", &controllers.DeviceController{}, "*:DeviceTask_Post") // 添加任务
+
+	// 设备告警
+	beego.Router(version+"/DeviceWarning/List", &controllers.DeviceController{}, "*:DeviceWarning_List")                   // 告警列表
+	beego.Router(version+"/DeviceWarning/Get", &controllers.DeviceController{}, "*:DeviceWarning_Get")                     // 获取告警
+	beego.Router(version+"/DeviceWarning/Edit", &controllers.DeviceController{}, "*:DeviceWarning_Post")                   // 修改告警
+	beego.Router(version+"/DeviceWarning/Del", &controllers.DeviceController{}, "*:DeviceWarning_Del")                     // 删除告警
+	beego.Router(version+"/DeviceWarning/ToExcel", &controllers.DeviceController{}, "*:DeviceWarning_Data_Excel")          // 导出excel
+	beego.Router(version+"/Device/DeviceWarningListT_Tips", &controllers.DeviceController{}, "*:DeviceWarningList_T_Tips") // 获取未读消息
+
+	//分类管理
+	beego.Router(version+"/CompanyClass/List", &controllers.DeviceController{}, "*:CompanyClass_List") // 分类列表
+	beego.Router(version+"/CompanyClass/All", &controllers.DeviceController{}, "*:CompanyClass_All")   // 所有分类列表
+	beego.Router(version+"/CompanyClass/Get", &controllers.DeviceController{}, "*:CompanyClass_Get")   // 获取分类
+	beego.Router(version+"/CompanyClass/Add", &controllers.DeviceController{}, "*:CompanyClass_Add")   // 添加分类
+	beego.Router(version+"/CompanyClass/Edit", &controllers.DeviceController{}, "*:CompanyClass_Edit") // 修改分类
+	beego.Router(version+"/CompanyClass/Del", &controllers.DeviceController{}, "*:CompanyClass_Del")   // 删除分类
+	// 分类绑定
+	beego.Router(version+"/Device/DeviceClassBind_List", &controllers.DeviceController{}, "*:DeviceClassBind_List") // 设备分类绑定列表
+	beego.Router(version+"/Class/Bind_Add", &controllers.DeviceController{}, "*:ClassBind_Add")                     // 添加分类设备绑定
+	beego.Router(version+"/Class/Bind_Del", &controllers.DeviceController{}, "*:ClassBind_Del")                     // 删除分类设备绑定
+	// 分类二维码
+	beego.Router(version+"/Device/Get_DeviceClassId_QRCode", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode")   // 获取未读消息
+	beego.Router(version+"/Device/Get_DeviceClassId_QRCode2", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode2") // 获取未读消息
+
+	//通知管理
+	beego.Router(version+"/CompanyNotice/List", &controllers.DeviceController{}, "*:CompanyNotice_List")            // 分类通知
+	beego.Router(version+"/CompanyNotice/All", &controllers.DeviceController{}, "*:CompanyNotice_All")              // 所有通知列表
+	beego.Router(version+"/CompanyNotice/Get", &controllers.DeviceController{}, "*:CompanyNotice_Get")              // 获取通知
+	beego.Router(version+"/CompanyNotice/Add", &controllers.DeviceController{}, "*:CompanyNotice_Add")              // 添加通知
+	beego.Router(version+"/CompanyNotice/Edit", &controllers.DeviceController{}, "*:CompanyNotice_Edit")            // 修改通知
+	beego.Router(version+"/CompanyNotice/Del", &controllers.DeviceController{}, "*:CompanyNotice_Del")              // 删除通知
+	beego.Router(version+"/Device/DeviceClassBind_List", &controllers.DeviceController{}, "*:DeviceClassBind_List") // 设备通知绑定列表
+	beego.Router(version+"/Notice/Bind_Add", &controllers.DeviceController{}, "*:NoticeBind_Add")                   // 添加通知设备绑定
+	beego.Router(version+"/Notice/Bind_Del", &controllers.DeviceController{}, "*:NoticeBind_Del")                   // 删除通知设备绑定
+
+	// 添加设备数据 由mqtt服务添加
+	//beego.Router(version+"/Device/DeviceData_Add", &controllers.DeviceController{}, "*:DeviceData_Add") // 设置 设备参数
+
+	// 设备日志
+	beego.Router(version+"/Device/Log", &controllers.DeviceController{}, "*:DeviceLogs") // 谁呗日志
+
+	beego.Router(version+"/Data/Device_Sensor", &controllers.DataController{}, "*:Device_Sensor_Get")                       // 获取传感器
+	beego.Router(version+"/Data/Device_Sensor_List", &controllers.DataController{}, "*:Device_Sensor_List")                 // 传感器列表
+	beego.Router(version+"/Data/Device_Sensor_Data", &controllers.DataController{}, "*:Device_Sensor_Data")                 // 传感器数据
+	beego.Router(version+"/Data/Device_Sensor_Data_Excel", &controllers.DataController{}, "*:Device_Sensor_Data_Excel")     // 导出传感器数据
+	beego.Router(version+"/Data/Device_Sensor_Data_Excel_m", &controllers.DataController{}, "*:Device_Sensor_Data_Excel_m") // 导出传感器数据
+
+	beego.Router(version+"/Data/List", &controllers.DataController{}, "*:Device_Sensor_Data_More") // 传感器设备列表
+
+}

+ 0 - 1342
views/Data/DataLine.html

@@ -1,1342 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.cookie.min.js"></script>
-    <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-    <script src="https://osscold.baozhida.cn/js/echarts.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-
-</head>
-
-<body>
-<div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-                <a><cite>宝智达</cite></a>
-            </span>
-    <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right"
-       onclick="location.reload()" title="刷新">
-        <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-    </a>
-</div>
-<div class="layui-fluid">
-    <div class="layui-row">
-        <!-- // 传感器 选择-->
-        <div style="width: 395px;float: left">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-                    <form class="layui-form layui-col-space5" οnsubmit="return false;">
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="" type="text" id="D_T_sn" name="D_T_sn" placeholder="请输入 SN"
-                                   autocomplete="off"
-                                   class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="" type="text" id="D_Name" name="D_Name" placeholder="请输入 传感器名称"
-                                   autocomplete="off"
-                                   class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <select id="Class_1" name="Class_1">
-                                <option value=0>所有分类</option>
-                                {{range $index, $elem := .Class_List}}
-                                <option value={{$elem.Id}}>{{$elem.T_name}}
-                                </option>
-
-                                {{end}}
-
-
-                            </select>
-                        </div>
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="get_DeviceSensor_list(0)">
-                                <i class="layui-icon">&#xe615;</i></div>
-                        </div>
-                    </form>
-                    <hr>
-                </div>
-                <div class="layui-card-body "  style="margin-top: -20px">
-                    <div id="DeviceSensor_list" style="width: 98%; overflow: hidden;max-height: 616px;overflow-y: auto">
-                        <div style="color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px">加载中...</div>
-                        <!--                        <div class="layui-col"-->
-                        <!--                             style="height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;">-->
-                        <!--                            <img style="float: left;width: 50px;margin: 0px 10px" src="https://osscold.baozhida.cn/images/温湿度传感器-1.png"-->
-                        <!--                                 height="50"-->
-                        <!--                                 width="40"/>-->
-                        <!--                            <div style="float: left;">-->
-                        <!--                                <div style="margin-top: 4px;font-size: 14px">士大夫撒地方递四方速递</div>-->
-                        <!--                                <div style="margin-top: -3px;font-size: 12px">SN:KF20210510143443 [1]</div>-->
-                        <!--                            </div>-->
-                        <!--                            <div class="layui-card-header"-->
-                        <!--                                 style="float: right;padding-left: 0px;padding-top: 6px;color: #1E9FFF">-->
-                        <!--                                》-->
-                        <!--                            </div>-->
-                        <!--                        </div>-->
-                    </div>
-                </div>
-                <div class="layui-card-body ">
-                    <div style="height: 70px">
-                        <div class="layui-card-body " style="text-align: center">
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="Checkboxs_All()">
-                                    <i class="layui-icon">全选择</i>
-                                </div>
-                            </div>
-
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="Checkboxs_Allno()">
-                                    <i class="layui-icon">全取消</i>
-                                </div>
-                            </div>
-
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="Checkboxs_Allto()">
-                                    <i class="layui-icon">反选</i>
-                                </div>
-                            </div>
-                            <div style="color: #1E9FFF;text-align: center" id="DeviceSensor_list_Pages_x"></div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-
-
-        <!-- // 传感器 选择-->
-        <div  style="width: calc(100% - 395px);float: left">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-                    <form class="layui-form layui-col-space5" οnsubmit="return false;">
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="quick_1()">
-                                <i class="layui-icon">今天</i>
-                            </div>
-                        </div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="quick_2()">
-                                <i class="layui-icon">近3天</i>
-                            </div>
-                        </div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="quick_3()">
-                                <i class="layui-icon">近5天</i>
-                            </div>
-                        </div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="quick_4()">
-                                <i class="layui-icon">近7天</i>
-                            </div>
-                        </div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            自定义时间:
-                        </div>
-                        <div class="layui-inline layui-show-xs-block">
-
-                            <input class="layui-input" autocomplete="off" placeholder="开始日" name="Time_start" id="Time_start" lay-key="1"></div>
-                        <div class="layui-inline layui-show-xs-block">
-                            <input class="layui-input" autocomplete="off" placeholder="截止日" name="Time_end" id="Time_end" lay-key="2"></div>
-
-
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="get_DeviceSensor_data_M()">
-                                <i class="layui-icon">&#xe615;</i>
-                            </div>
-                        </div>
-                    </form>
-                    <hr>
-                </div>
-                <div class="layui-card-body " >
-                    <div  style="width: 99%;height:35px;">
-                        <h2 id="T_myChart_time" style="text-align: center"></h2>
-                    </div>
-                    <div id="T_myChart_1" style="width: 99%;height:335px;"></div>
-                    <div style="width: 99%;height:35px;">
-                        <h3 id="T_myChart_1_title" style="text-align: center;color: #0bace6;"></h3>
-                    </div>
-                    <div id="T_myChart_2" style="width: 99%;height:335px;"></div>
-                    <div  style="width: 99%;height:35px;">
-                        <h3 id="T_myChart_2_title" style="text-align: center;color: #0bace6;"></h3>
-                    </div>
-
-
-
-
-                </div>
-            </div>
-        </div>
-
-
-    </div>
-
-
-
-
-</div>
-
-</div>
-</body>
-<script>
-    //获取GET
-    function getPar(par) {
-        //获取当前URL
-        var local_url = document.location.href;
-        //获取要取得的get参数位置
-        var get = local_url.indexOf(par + "=")
-        ;
-        if (get == -1) {
-            return false;
-        }
-        //截取字符串
-        //截取字符串
-        var get_par = local_url.slice(par.length + get + 1);
-        //判断截取后的字符串是否还有其他get参数
-        var nextPar = get_par.indexOf("&")
-        ;
-        if (nextPar != -1) {
-            get_par = get_par.slice(0, nextPar);
-        }
-        return get_par;
-    }
-
-    layui.use(['laydate', 'form'],
-        function () {
-            var laydate = layui.laydate;
-
-            //执行一个laydate实例
-            laydate.render({
-                elem: '#Time_start' //指定元素
-                ,type: 'datetime'
-            });
-
-            //执行一个laydate实例
-            laydate.render({
-                elem: '#Time_end' //指定元素
-                ,type: 'datetime'
-            });
-
-
-
-        });
-
-    var T_name = ""
-    var T_sn = ""
-    var T_class_id = 0
-    var Admin_rh = "{{$.Admin_r.Admin_rh}}"
-    var T_id = 0
-    var T_sn_T_id = ""
-    var Time_start = ""
-    var Time_end = ""
-
-    var DeviceSensor_snid_list  = ""
-    var DeviceSensor_lite = []
-    var DeviceSensor_data  = []
-
-    /// ---------------   传感器列表
-    // 页面 加载完成后执行
-    window.onload = function () {
-        console.log("页面 加载完成后执行")
-        quick_1()
-        get_DeviceSensor_list(0)
-
-    }
-    function ChangeDiv(e) {
-        var divs = document.getElementsByClassName("ChangeDiv");
-        var len = divs.length;
-        for(var i=0;i<len;i++){
-            divs[i].style.border = "1px solid #ffffff";
-        }
-        e.parentNode.style.border = "1px solid #ed0000";
-        get_DeviceSensor_data_M()
-    }
-
-    // 今天
-    function quick_1() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_start").val(Time_start)
-        $("#Time_end").val(Time_end)
-
-        get_DeviceSensor_data_M()
-    }
-    // 近一周
-    function quick_2() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_end").val(Time_end)
-
-        myDate=myDate.setDate(myDate.getDate() - 2);
-        myDate=new Date(myDate);
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        $("#Time_start").val(Time_start)
-
-        get_DeviceSensor_data_M()
-    }
-    // 近一月
-    function quick_3() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_end").val(Time_end)
-
-        myDate=myDate.setDate(myDate.getDate() - 4);
-        myDate=new Date(myDate);
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        $("#Time_start").val(Time_start)
-
-        get_DeviceSensor_data_M()
-    }
-    // 近一季度
-    function quick_4() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_end").val(Time_end)
-
-        myDate=myDate.setDate(myDate.getDate() - 6);
-        myDate=new Date(myDate);
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        $("#Time_start").val(Time_start)
-
-        get_DeviceSensor_data_M()
-    }
-
-
-
-
-
-    //获取div中所有的复选框  .value
-    var checkboxs = document.getElementsByClassName("checkboxxx");
-    function Checkboxs_All () {
-        for(var i = 0;i < checkboxs.length; i++){
-            checkboxs[i].checked = true
-        }
-    }
-    function Checkboxs_Allno () {
-        for(var i = 0;i < checkboxs.length; i++){
-            checkboxs[i].checked = false
-        }
-    }
-    function Checkboxs_Allto () {
-        for(var i = 0;i < checkboxs.length; i++){
-            if(checkboxs[i].checked){
-                checkboxs[i].checked = false
-            }else {
-                checkboxs[i].checked = true
-            }
-        }
-    }
-    function Checkboxs_GetAll () {
-        DeviceSensor_snid_list = ""
-        for(var i = 0;i < checkboxs.length; i++){
-            if(checkboxs[i].checked){
-                DeviceSensor_snid_list =  DeviceSensor_snid_list + checkboxs[i].value + "|"
-            }
-        }
-    }
-
-
-
-    function get_DeviceSensor_list(page) {
-        T_sn = $("#D_T_sn").val();
-        T_name = $("#D_Name").val();
-        T_class_id = $("#Class_1").val();
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Sensor_List',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                T_sn: T_sn,
-                T_name: T_name,
-                T_class_id: parseInt(T_class_id),
-                page: page,
-                page_z: 100,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-
-                    if(page == 0)
-                        $('#DeviceSensor_list').html("")
-                    // $('#DeviceSensor_list_Pages').html("")
-                    // $('#DeviceSensor_list_Pages_x').html("")
-                    DeviceSensor_lite = result.Data.DeviceSensor_lite
-                    if (DeviceSensor_lite.length == 0) {
-                        $('#DeviceSensor_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有设备</div>")
-                        return
-                    }
-                    Add_DeviceSensor_list(result.Data.DeviceSensor_lite) // 列表
-                    // Add_DeviceSensor_list_Pages(result.Data.Pages) // 分页
-                    $('#DeviceSensor_list_Pages_x').html(" 传感器 总数:" + result.Data.Num);
-
-
-                    if(result.Data.Page_size > result.Data.Page ){
-                        get_DeviceSensor_list(result.Data.Page+1)
-                    }
-
-
-
-                } else {
-
-                }
-            }
-        });
-        return false
-    }
-    function Add_DeviceSensor_list(DS_lite) {
-        for (let i = 0; i < DS_lite.length; i++) {
-            // if(T_id == 0){
-            //     T_id = DS_lite[i].T_id;
-            //     T_sn_T_id = DS_lite[i].T_sn;
-            //     T_name = DS_lite[i].T_name;
-            //     // get_DeviceSensor_data(0)
-            // }
-            //
-            $('#DeviceSensor_list').append("" +
-                "<div class=\"layui-col ChangeDiv\"   \n" +
-                "        style=\"border: 1px solid #ffffff;height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;margin-top: 6px;\">\n" +
-                "        <input type=\"checkbox\" name='checkboxxx' class='checkboxxx' onclick='get_DeviceSensor_data_M()' value='" + DS_lite[i].T_sn + "," + DS_lite[i].T_id + "'  style='float: left;width: 18px;height: 18px;margin-top: 16px;margin-left: 10px;'/>" +
-                "           <img style=\"float: left;width: 50px;margin: 0px 10px\" src=\"https://osscold.baozhida.cn/images/温湿度传感器-1.png\"\n" +
-                "            height=\"50\"\n" +
-                "            width=\"40\"/>\n" +
-                "       <div style=\"float: left;\"  >\n" +
-                "           <div style=\"margin-top: 4px;font-size: 14px;height: 24px;\">" + DS_lite[i].T_name + "</div>\n" +
-                "           <div style=\"margin-top: -3px;font-size: 12px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;width: 200px;\">SN:" + DS_lite[i].T_sn + " [" + DS_lite[i].T_id + "]</div>\n" +
-                "       </div>\n" +
-                "       <div class=\"layui-card-header\" style=\"float: right;padding-left: 0px;padding-top: 6px;color: #1E9FFF\">\n" +
-                "           \n" +
-                "       </div>\n" +
-                "   </div>")
-        }
-
-    }
-
-    function get_DeviceSensor_data(page) {
-
-        if($("#Time_start").val().length > 0){
-            Time_start = $("#Time_start").val();
-
-        }else {
-            Time_start = ""
-        }
-
-        if($("#Time_end").val().length > 0){
-            Time_end = $("#Time_end").val();
-        }else {
-            Time_end = ""
-        }
-
-        if(T_sn_T_id.length == 0){
-            return ;
-        }
-        $("#T_myChart_time").html(T_name+"["+T_id+"]:" + $("#Time_start").val() + '~' + $("#Time_end").val())
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Sensor_Data',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                Time_start:Time_start,
-                Time_end:Time_end,
-                T_sn: T_sn_T_id,
-                T_id: T_id,
-                page: 0,
-                page_z: 9000,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-
-                    DeviceSensor_data = result.Data.DeviceSensor_data
-                    console.log(result.Data.Num)
-                    if(result.Data.Num == 0){
-                        // alert("当前没有数据,请尝试一下其他时间段");
-                        layer.msg('当前没有数据,请尝试一下其他时间段');
-                        return
-                    }
-                    $("#T_myChart_2").show()
-                    $("#T_myChart_2_title").show()
-                    if(Admin_rh == 0 && T_sn_T_id.indexOf("YD") != -1){
-                        $("#T_myChart_2").hide()
-                        $("#T_myChart_2_title").hide()
-                    }
-
-                    T_fhand(result.Data.DeviceSensor_data)
-
-
-                } else {
-
-                }
-            }
-        });
-        return false
-    }
-    function get_DeviceSensor_data_M() {
-
-        if($("#Time_start").val().length > 0){
-            Time_start = $("#Time_start").val();
-        }else {
-            Time_start = ""
-        }
-
-        if($("#Time_end").val().length > 0){
-            Time_end = $("#Time_end").val();
-        }else {
-            Time_end = ""
-        }
-
-        Checkboxs_GetAll()
-        $("#T_myChart_time").html($("#Time_start").val() + '~' + $("#Time_end").val())
-        console.log("DeviceSensor_snid_list:",DeviceSensor_snid_list)
-        // KF202201241934253,50|
-        if(DeviceSensor_snid_list.length < 3) return
-        DeviceSensor_snid_list_split = DeviceSensor_snid_list.split("|")
-        var loading = layer.load(0, {
-            shade: false,
-            time: 99*1000
-        });
-
-        f_myChart_todata_inte() // 初始化数据
-        for(var i = 0;i < DeviceSensor_snid_list_split.length ;i++){
-            if(DeviceSensor_snid_list_split[i].length < 3) continue
-            snid_split = DeviceSensor_snid_list_split[i].split(",")
-            console.log("snid_split:",snid_split)
-            M_T_n_max = 0
-            M_T_n_min = 100
-            M_T_n_ave_num = 0
-            M_T_n_ave_sum = 0
-            M_T_n_overtime = 0
-            M_T_n_overtime_a = 0
-            M_H_n_max = 0
-            M_H_n_min = 100
-            M_H_n_ave_num = 0
-            M_H_n_ave_sum = 0
-            M_H_n_overtime = 0
-            M_H_n_overtime_a = 0
-
-            $.ajax({
-                type: 'POST',
-                url: 'Device_Sensor_Data',//发送请求
-                data: {
-                    User_tokey: $.cookie("User_tokey"),
-                    Time_start:Time_start,
-                    Time_end:Time_end,
-                    T_sn: snid_split[0],
-                    T_id: snid_split[1],
-                    page: 0,
-                    page_z: 9000,
-                },
-                success: function (result) {
-                    console.log(result)
-                    if (result.Code == 200) {
-                        console.log(result.Data.Num)
-                        if(result.Data.Num == 0){
-                            // alert("当前没有数据,请尝试一下其他时间段");
-                            layer.msg('当前没有数据,请尝试一下其他时间段');
-                            return
-                        }
-                        // T_fhand(result.Data.DeviceSensor_data)
-
-                        f_Data_to_myChart(result.Data.DeviceSensor_data)
-                        layer.close(loading)
-
-
-                    } else {
-
-                    }
-                }
-            });
-        }
-
-
-        return false
-    }
-
-    var T_myChart = echarts.init(document.getElementById('T_myChart_1'));
-    var H_myChart = echarts.init(document.getElementById('T_myChart_2'));
-</script>
-
-
-<!-- 多个 图表-->
-<script>
-
-    // 最高温度、最低温度、平均温度、超标温度累积时长
-    var T_myChart_List_M = []
-    var H_myChart_List_M = []
-
-    function f_myChart_todata_inte() {
-        T_myChart_List_M = [] // 清空
-        H_myChart_List_M = [] // 清空
-        T_myChart.dispose()
-        H_myChart.dispose()
-        $("#T_myChart_2").show()
-        $("#T_myChart_2_title").show()
-        T_myChart = echarts.init(document.getElementById('T_myChart_1'));
-        H_myChart = echarts.init(document.getElementById('T_myChart_2'));
-        $("#T_myChart_1_title").html("")
-        $("#T_myChart_2_title").html("")
-
-    }
-
-    var M_T_n_max = 0
-    var M_T_n_min = 0
-    var M_T_n_ave_num = 0
-    var M_T_n_ave_sum = 0
-    var M_T_n_overtime = 0
-    var M_T_n_overtime_a = 0
-
-    var M_H_n_max = 0
-    var M_H_n_min = 0
-    var M_H_n_ave_num = 0
-    var M_H_n_ave_sum = 0
-    var M_H_n_overtime = 0
-    var M_H_n_overtime_a = 0
-
-    function f_Data_to_myChart(data) {
-        data_1 = []
-        data_2 = []
-
-
-
-        for (let i = 0; i < data.length; i++) {
-            // 温度
-            data_1.unshift([data[i].T_time,data[i].T_t])
-            if(data[i].T_t > M_T_n_max){
-                M_T_n_max = data[i].T_t
-            }
-            if(data[i].T_t < M_T_n_min){
-                M_T_n_min = data[i].T_t
-            }
-            M_T_n_ave_num += 1
-            M_T_n_ave_sum += data[i].T_t
-
-            if(data[i].T_t <= data[i].T_Tlower || data[i].T_t >= data[i].T_Tupper){
-                if(M_T_n_overtime_a == 0){
-                    console.log(new Date(data[i].T_time),data[i].T_time)
-                    M_T_n_overtime_a = new Date(data[i].T_time)
-                }
-            }else {
-                if(M_T_n_overtime_a > 0){
-                    M_T_n_overtime += M_T_n_overtime_a - new Date(data[i].T_time)
-                    M_T_n_overtime_a = 0
-                }
-
-            }
-
-
-            // 湿度
-            data_2.unshift([data[i].T_time,data[i].T_rh])
-
-            if(data[i].T_rh > M_H_n_max){
-                M_H_n_max = data[i].T_rh
-            }
-            if(data[i].T_rh < M_H_n_min){
-                M_H_n_min = data[i].T_rh
-            }
-
-            M_H_n_ave_num += 1
-            M_H_n_ave_sum += data[i].T_rh
-
-            if(data[i].T_rh <= data[i].T_RHlower || data[i].T_rh >= data[i].T_RHupper){
-                if(M_H_n_overtime_a == 0){
-                    console.log(new Date(data[i].T_time),data[i].T_time)
-                    M_H_n_overtime_a = new Date(data[i].T_time)
-                }
-
-            }else {
-                if(M_H_n_overtime_a > 0){
-                    M_H_n_overtime += M_H_n_overtime_a - new Date(data[i].T_time)
-                    M_H_n_overtime_a = 0
-                }
-
-            }
-        }
-
-        $("#T_myChart_1_title").html("最高温度:"+M_T_n_max.toFixed(2)+"℃ &nbsp 最低温度"+M_T_n_min.toFixed(2)+"℃ &nbsp 平均温度:"+(M_T_n_ave_sum/M_T_n_ave_num).toFixed(2)+"℃ &nbsp 超标温度累积时长:"+formatSeconds(M_T_n_overtime/10000)+"")
-
-
-        $("#T_myChart_2_title").html("最高湿度:"+M_H_n_max.toFixed(2)+"%  &nbsp  最低湿度"+M_H_n_min.toFixed(2)+"% &nbsp 平均湿度:"+(M_H_n_ave_sum/M_H_n_ave_num).toFixed(2)+"% &nbsp 超标湿度累积时长:"+formatSeconds(M_H_n_overtime/10000)+"")
-
-
-
-        T_myChart_List_M.push({
-            name: data[0].T_name,
-            type: 'line',
-            // stack: 'Total',
-            smooth: true,
-            data: data_1,
-            markLine: {
-                data: [
-                    {
-                        silent:true,             //鼠标悬停事件  true没有,false有
-                        lineStyle:{               //警戒线的样式  ,虚实  颜色
-                            type:"solid",
-                            color:"#FF4200",
-                            width: 3,
-                        },
-                        label:{
-                            position:'end',
-                            formatter:"下限("+data[0].T_Tlower+"℃)"
-                        },
-                        yAxis:data[0].T_Tlower
-                    },
-                    {
-                        silent:true,             //鼠标悬停事件  true没有,false有
-                        lineStyle:{               //警戒线的样式  ,虚实  颜色
-                            type:"solid",
-                            color:"#FF4200",
-                            width: 3,
-                        },
-                        label:{
-                            position:'end',
-                            formatter:"上限("+data[0].T_Tupper+"℃)"
-                        },
-                        yAxis:data[0].T_Tupper
-                    }
-                ]
-            }
-        })
-
-
-        H_myChart_List_M.push({
-            name: data[0].T_name,
-            type: 'line',
-            // stack: 'Total',
-            smooth: true,
-            data: data_2,
-            markLine: {
-                data: [
-                    {
-                        silent:true,             //鼠标悬停事件  true没有,false有
-                        lineStyle:{               //警戒线的样式  ,虚实  颜色
-                            type:"solid",
-                            color:"#FF4200",
-                            width: 3,
-                        },
-                        label:{
-                            position:'end',
-                            formatter:"下限("+data[0].T_RHlower+"℃)"
-                        },
-                        yAxis:data[0].T_RHlower
-                    },
-                    {
-                        silent:true,             //鼠标悬停事件  true没有,false有
-                        lineStyle:{               //警戒线的样式  ,虚实  颜色
-                            type:"solid",
-                            color:"#FF4200",
-                            width: 3,
-                        },
-                        label:{
-                            position:'end',
-                            formatter:"上限("+data[0].T_RHupper+"℃)"
-                        },
-                        yAxis:data[0].T_RHupper
-                    }
-                ]
-            }
-        })
-
-
-
-
-        var T_myChart_option_1 = {
-            // title: {
-            //     top: '50px',
-            //     text: T_name+"["+T_id+"]:" + $("#Time_start").val() + '~' + $("#Time_end").val(),
-            //     textStyle:{
-            //         fontSize:14,
-            //     }
-            // },
-            tooltip: {
-                trigger: 'axis'
-            },
-
-            toolbox: {
-                show: true,
-                feature: {
-                    dataZoom: {
-                        yAxisIndex: 'none'
-                    },
-                    dataView: { readOnly: false },
-                    magicType: { type: ['line', 'bar'] },
-                    restore: {},
-                    saveAsImage: {}
-                }
-            },
-            grid: {
-                top: '40px',
-                left: '0px',
-                right: '70px',
-                bottom: '50px',
-                containLabel: true
-            },
-            legend: {
-                textStyle:{
-                    color:"#7c7c7c"
-                }
-            },
-            xAxis: {
-                type: 'time',
-                boundaryGap: false,
-
-            },
-            yAxis: {
-                type: 'value',
-                axisLabel: {
-                    formatter: '{value} °C'
-                },
-                boundaryGap: [0, '100%'],
-                // max:80,
-                // min:-10,
-            },
-
-            dataZoom: [
-                {
-                    type: 'inside',
-                    start: 0,
-                    end: 100
-                },
-                {
-                    start: 0,
-                    end: 100
-                }
-            ],
-            markPoint: {
-                // data: [ {
-                //     name: '最大值',
-                //     type: 'max'
-                // },{
-                //     name: '最小值',
-                //     type: 'min'
-                // }
-                // ]
-            },
-
-            series: T_myChart_List_M
-        };
-
-        // 初始化 图表
-        T_myChart.setOption(T_myChart_option_1);
-
-
-
-
-        var T_myChart_option_2 = {
-            // title: {
-            //     top: '50px',
-            //     text: T_name+"["+T_id+"]:" + $("#Time_start").val() + '~' + $("#Time_end").val(),
-            //     textStyle:{
-            //         fontSize:14,
-            //     }
-            // },
-            tooltip: {
-                trigger: 'axis'
-            },
-
-            toolbox: {
-                show: true,
-                feature: {
-                    dataZoom: {
-                        yAxisIndex: 'none'
-                    },
-                    dataView: { readOnly: false },
-                    magicType: { type: ['line', 'bar'] },
-                    restore: {},
-                    saveAsImage: {}
-                }
-            },
-            grid: {
-                top: '40px',
-                left: '0px',
-                right: '70px',
-                bottom: '50px',
-                containLabel: true
-            },
-            legend: {
-                textStyle:{
-                    color:"#7c7c7c"
-                }
-            },
-            xAxis: {
-                type: 'time',
-                boundaryGap: false,
-            },
-            yAxis: {
-                type: 'value',
-                axisLabel: {
-                    formatter: '{value} %'
-                },
-                boundaryGap: [0, '100%'],
-                // max:100,
-                // min:0,
-            },
-
-            dataZoom: [
-                {
-                    type: 'inside',
-                    start: 0,
-                    end: 100
-                },
-                {
-                    start: 0,
-                    end: 100
-                }
-            ],
-            markPoint: {
-                // data: [ {
-                //     name: '最大值',
-                //     type: 'max'
-                // },{
-                //     name: '最小值',
-                //     type: 'min'
-                // }
-                // ]
-            },
-
-            series: H_myChart_List_M
-        };
-
-        // 初始化 图表
-        H_myChart.setOption(T_myChart_option_2);
-
-    }
-
-    
-    
-
-    //
-    // function f_Refresh_T_myChart_1() {
-    //     T_myChart_1.clear();
-    //     //
-    //     // T_myChart_option_1.title.text =
-    //     T_myChart_option_1.series = T_myChart_List_1
-    //     T_myChart_option_1.yAxis.max = T_myChart_max_1
-    //     T_myChart_option_1.yAxis.min = T_myChart_min_1
-    //     T_myChart_option_1.yAxis.axisLabel.formatter = '{value} ℃'
-    //     T_myChart_1.setOption(T_myChart_option_1);
-    // }
-
-</script>
-
-
-<!-- 单个 图表-->
-<script>
-
-
-
-    function T_fhand(data) {
-
-        T_myChart.dispose()
-        H_myChart.dispose()
-        T_myChart = echarts.init(document.getElementById('T_myChart_1'));
-        H_myChart = echarts.init(document.getElementById('T_myChart_2'));
-
-        var T_time = []
-        var T_data = []
-        var T_waring = []
-        var T_Tlower = 0
-        var T_Tupper = 0
-        var T_max = -999
-        var T_min = 999
-
-        var T_n_max = 0
-        var T_n_min = 0
-        var T_n_ave_num = 0
-        var T_n_ave_sum = 0
-        var T_n_overtime = 0
-        var T_n_overtime_a = 0
-
-        var H_time = []
-        var H_data = []
-        var H_waring = []
-        var H_Tlower = 0
-        var H_Tupper = 0
-        var H_max = 0
-        var H_min = 99
-
-        var H_n_max = 0
-        var H_n_min = 0
-        var H_n_ave_num = 0
-        var H_n_ave_sum = 0
-        var H_n_overtime = 0
-        var H_n_overtime_a = 0
-
-
-        T_Tlower = data[0].T_Tlower
-        T_Tupper = data[0].T_Tupper
-
-        H_Tlower = data[0].T_RHlower
-        H_Tupper = data[0].T_RHupper
-        var dataZoomstart = 0 //缩放比例
-        dataZoomstart = 100 - (30 / (data.length / 100))
-
-
-        for (let i = 0; i < data.length; i++) {
-            // 温度
-            T_time.unshift(data[i].T_time)
-            T_data.unshift(data[i].T_t)
-            if(data[i].T_t > T_max){
-                T_max = data[i].T_t
-                T_n_max = data[i].T_t
-            }
-            if(data[i].T_t < T_min){
-                T_min = data[i].T_t
-                T_n_min = data[i].T_t
-            }
-            T_n_ave_num += 1
-            T_n_ave_sum += data[i].T_t
-
-            if(data[i].T_t <= data[i].T_Tlower || data[i].T_t >= data[i].T_Tupper){
-                T_waring.unshift({ name: '周最低', value: data[i].T_t, xAxis: data.length-i-1, yAxis: data[i].T_t })
-                if(T_n_overtime_a == 0){
-                    console.log(new Date(data[i].T_time),data[i].T_time)
-                    T_n_overtime_a = new Date(data[i].T_time)
-                }
-            }else {
-                if(T_n_overtime_a > 0){
-                    T_n_overtime += T_n_overtime_a - new Date(data[i].T_time)
-                    T_n_overtime_a = 0
-                }
-
-            }
-
-            // 湿度
-            H_time.unshift(data[i].T_time)
-            H_data.unshift(data[i].T_rh)
-
-            if(data[i].T_rh > H_max){
-                H_max = data[i].T_rh
-                H_n_max = data[i].T_rh
-            }
-            if(data[i].T_rh < H_min){
-                H_min = data[i].T_rh
-                H_n_min = data[i].T_rh
-            }
-            if(data[i].T_rh <= data[i].T_RHlower || data[i].T_rh >= data[i].T_RHupper){
-                H_waring.unshift({ name: '周最低', value: data[i].T_rh, xAxis: data.length-i-1, yAxis: data[i].T_rh })
-
-                if(H_n_overtime_a == 0){
-                    console.log(new Date(data[i].T_time),data[i].T_time)
-                    H_n_overtime_a = new Date(data[i].T_time)
-                }
-
-            }else {
-                if(H_n_overtime_a > 0){
-                    H_n_overtime += H_n_overtime_a - new Date(data[i].T_time)
-                    H_n_overtime_a = 0
-                }
-
-            }
-
-            H_n_ave_num += 1
-            H_n_ave_sum += data[i].T_rh
-
-        }
-
-        $("#T_myChart_1_title").html("最高温度:"+T_n_max.toFixed(2)+"℃ &nbsp 最低温度"+T_n_min.toFixed(2)+"℃ &nbsp 平均温度:"+(T_n_ave_sum/T_n_ave_num).toFixed(2)+"℃ &nbsp 超标温度累积时长:"+formatSeconds(T_n_overtime/10000)+"")
-        $("#T_myChart_2_title").html("最高湿度:"+H_n_max.toFixed(2)+"%  &nbsp  最低湿度"+H_n_min.toFixed(2)+"% &nbsp 平均湿度:"+(H_n_ave_sum/H_n_ave_num).toFixed(2)+"% &nbsp 超标湿度累积时长:"+formatSeconds(H_n_overtime/10000)+"")
-        console.log("T_max:",T_max,"T_min:",T_min)
-
-
-        if(T_Tupper > T_max){
-            T_max = T_Tupper
-        }
-        if(T_Tlower < T_min){
-            T_min = T_Tlower
-        }
-        T_max += 1
-        T_min -= 1
-
-        console.log("H_max:",H_max,"H_min:",H_min)
-        if(H_Tupper > H_max){
-            H_max = H_Tupper
-        }
-        if(H_Tlower < H_min){
-            H_min = H_Tlower
-        }
-        H_max += 1
-        H_min -= 1
-
-        T_option = {
-            title: {
-                text: T_name+"["+T_id+"]:" + $("#Time_start").val() + '~' + $("#Time_end").val(),
-                textStyle:{
-                    fontSize:14,
-                }
-            },
-            tooltip: {
-                trigger: 'axis'
-            },
-            legend: {},
-            toolbox: {
-                show: true,
-                feature: {
-                    dataZoom: {
-                        yAxisIndex: 'none'
-                    },
-                    dataView: { readOnly: false },
-                    magicType: { type: ['line', 'bar'] },
-                    restore: {},
-                    saveAsImage: {}
-                }
-            },
-            grid: {
-                top: '40px',
-                left: '0px',
-                right: '70px',
-                bottom: '50px',
-                containLabel: true
-            },
-            xAxis: {
-                type: 'category',
-                boundaryGap: false,
-                data: T_time, //['1', '2', '3', '4', '5', '6', '7'],
-            },
-            yAxis: {
-                type: 'value',
-                axisLabel: {
-                    formatter: '{value} °C'
-                },
-                max:T_max,
-                min:T_min,
-
-            },
-            dataZoom: [
-                {
-                    type: 'inside',
-                    start: 0,
-                    end: 100
-                },
-                {
-                    start: 0,
-                    end: 100
-                }
-            ],
-            series: [
-                {
-                    // name: '温度',
-                    type: 'line',
-                    data: T_data, //[1, -2, -1, 5, 3, 2, 0],
-                    markPoint: {
-                        data: T_waring,
-                        // [
-                        //     { name: '周最低', value: -2, xAxis: 1, yAxis: -1.5 }
-                        //     ,{ name: '周最低', value: -1, xAxis: 2, yAxis: -1 }
-                        // ]
-                    },
-                    markLine: {
-                        data: [
-                            {
-                                silent:true,             //鼠标悬停事件  true没有,false有
-                                lineStyle:{               //警戒线的样式  ,虚实  颜色
-                                    type:"solid",
-                                    color:"#FF4200",
-                                    width: 3,
-                                },
-                                label:{
-                                    position:'end',
-                                    formatter:"下限("+T_Tlower+"℃)"
-                                },
-                                yAxis:T_Tlower
-                            },
-                            {
-                                silent:true,             //鼠标悬停事件  true没有,false有
-                                lineStyle:{               //警戒线的样式  ,虚实  颜色
-                                    type:"solid",
-                                    color:"#FF4200",
-                                    width: 3,
-                                },
-                                label:{
-                                    position:'end',
-                                    formatter:"上限("+T_Tupper+"℃)"
-
-                                },
-                                yAxis:T_Tupper
-                            }
-                        ]
-                    }
-                },
-
-            ]
-        };
-        T_myChart.setOption(T_option);
-
-
-        H_option = {
-            title: {
-                text: T_name+"["+T_id+"]:" + $("#Time_start").val() + '~' + $("#Time_end").val(),
-                textStyle:{
-                    fontSize:14,
-                }
-            },
-            tooltip: {
-                trigger: 'axis'
-            },
-            legend: {},
-            toolbox: {
-                show: true,
-                feature: {
-                    dataZoom: {
-                        yAxisIndex: 'none'
-                    },
-                    dataView: { readOnly: false },
-                    magicType: { type: ['line', 'bar'] },
-                    restore: {},
-                    saveAsImage: {}
-                }
-            },
-            grid: {
-                top: '40px',
-                left: '0px',
-                right: '70px',
-                bottom: '50px',
-                containLabel: true
-            },
-            xAxis: {
-                type: 'category',
-                boundaryGap: false,
-                data: H_time, //['1', '2', '3', '4', '5', '6', '7'],
-            },
-            yAxis: {
-                type: 'value',
-                axisLabel: {
-                    formatter: '{value} %'
-                },
-                max:H_max,
-                min:H_min,
-            },
-            dataZoom: [
-                {
-                    type: 'inside',
-                    start: 0,
-                    end: 100
-                },
-                {
-                    start: 0,
-                    end: 100
-                }
-            ],
-            series: [
-                {
-                    // name: '湿度',
-                    type: 'line',
-                    data: H_data, //[1, -2, -1, 5, 3, 2, 0],
-                    markPoint: {
-                        data: H_waring,
-                        // [
-                        //     { name: '周最低', value: -2, xAxis: 1, yAxis: -1.5 }
-                        //     ,{ name: '周最低', value: -1, xAxis: 2, yAxis: -1 }
-                        // ]
-                    },
-                    markLine: {
-                        data: [
-                            {
-                                silent:true,             //鼠标悬停事件  true没有,false有
-                                lineStyle:{               //警戒线的样式  ,虚实  颜色
-                                    type:"solid",
-                                    color:"#FF4200",
-                                    width: 3,
-                                },
-                                label:{
-                                    position:'end',
-                                    formatter:"下限("+H_Tlower+"%)"
-                                },
-                                yAxis:H_Tlower
-                            },
-                            {
-                                silent:true,             //鼠标悬停事件  true没有,false有
-                                lineStyle:{               //警戒线的样式  ,虚实  颜色
-                                    type:"solid",
-                                    color:"#FF4200",
-                                    width: 3,
-                                },
-                                label:{
-                                    position:'end',
-                                    formatter:"上限("+H_Tupper+"%)",
-                                },
-                                yAxis:H_Tupper
-                            }
-                        ]
-                    }
-                }
-            ]
-        };
-        H_myChart.setOption(H_option);
-    }
-
-
-
-    function formatSeconds(value) {
-        var theTime = parseInt(value);// 秒
-        var theTime1 = 0;// 分
-        var theTime2 = 0;// 小时
-// alert(theTime);
-        if(theTime > 60) {
-            theTime1 = parseInt(theTime/60);
-            theTime = parseInt(theTime%60);
-// alert(theTime1+"-"+theTime);
-            if(theTime1 > 60) {
-                theTime2 = parseInt(theTime1/60);
-                theTime1 = parseInt(theTime1%60);
-            }
-        }
-        var result = ""+parseInt(theTime)+"秒";
-        if(theTime1 > 0) {
-            result = ""+parseInt(theTime1)+"分"+result;
-        }
-        if(theTime2 > 0) {
-            result = ""+parseInt(theTime2)+"小时"+result;
-        }
-        return result;
-    }
-
-
-
-</script>
-
-
-
-</html>

+ 0 - 780
views/Data/DataLine_.html

@@ -1,780 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.cookie.min.js"></script>
-    <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-    <script src="https://osscold.baozhida.cn/js/echarts.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-
-</head>
-
-<body>
-<div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-                <a><cite>宝智达</cite></a>
-            </span>
-    <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right"
-       onclick="location.reload()" title="刷新">
-        <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-    </a>
-</div>
-<div class="layui-fluid">
-    <div class="layui-row">
-        <!-- // 传感器 选择-->
-        <div class="layui-col-md4">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-                    <form class="layui-form layui-col-space5" οnsubmit="return false;">
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="" type="text" id="D_T_sn" name="D_T_sn" placeholder="请输入 SN"
-                                   autocomplete="off"
-                                   class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="" type="text" id="D_Name" name="D_Name" placeholder="请输入 传感器名称"
-                                   autocomplete="off"
-                                   class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <select id="Class_1" name="Class_1">
-                                <option value=0>所有分类</option>
-                                {{range $index, $elem := .Class_List}}
-                                <option value={{$elem.Id}}>{{$elem.T_name}}
-                                </option>
-
-                                {{end}}
-
-
-                            </select>
-                        </div>
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="get_DeviceSensor_list(0)">
-                                <i class="layui-icon">&#xe615;</i></div>
-                        </div>
-                    </form>
-                    <hr>
-                </div>
-                <div class="layui-card-body " style="margin-top: -20px">
-                    <div id="DeviceSensor_list" style="width: 98%; overflow: hidden;max-height: 616px;overflow-y: auto">
-                        <div style="color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px">加载中...</div>
-                        <!--                        <div class="layui-col"-->
-                        <!--                             style="height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;">-->
-                        <!--                            <img style="float: left;width: 50px;margin: 0px 10px" src="https://osscold.baozhida.cn/images/温湿度传感器-1.png"-->
-                        <!--                                 height="50"-->
-                        <!--                                 width="40"/>-->
-                        <!--                            <div style="float: left;">-->
-                        <!--                                <div style="margin-top: 4px;font-size: 14px">士大夫撒地方递四方速递</div>-->
-                        <!--                                <div style="margin-top: -3px;font-size: 12px">SN:KF20210510143443 [1]</div>-->
-                        <!--                            </div>-->
-                        <!--                            <div class="layui-card-header"-->
-                        <!--                                 style="float: right;padding-left: 0px;padding-top: 6px;color: #1E9FFF">-->
-                        <!--                                》-->
-                        <!--                            </div>-->
-                        <!--                        </div>-->
-                    </div>
-                </div>
-                <div class="layui-card-body ">
-                    <div style="height: 70px">
-                        <div class="layui-card-body " style="text-align: center">
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="Checkboxs_All()">
-                                    <i class="layui-icon">全选择</i>
-                                </div>
-                            </div>
-
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="Checkboxs_Allno()">
-                                    <i class="layui-icon">全取消</i>
-                                </div>
-                            </div>
-
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="Checkboxs_Allto()">
-                                    <i class="layui-icon">反选</i>
-                                </div>
-                            </div>
-                            <div style="color: #1E9FFF;text-align: center" id="DeviceSensor_list_Pages_x"></div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-
-
-        <!-- // 传感器 选择-->
-        <div class="layui-col-md8">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-                    <form class="layui-form layui-col-space5" οnsubmit="return false;">
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="quick_1()">
-                                <i class="layui-icon">今天</i>
-                            </div>
-                        </div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="quick_2()">
-                                <i class="layui-icon">近一周</i>
-                            </div>
-                        </div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="quick_3()">
-                                <i class="layui-icon">近一月</i>
-                            </div>
-                        </div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="quick_4()">
-                                <i class="layui-icon">近一季度</i>
-                            </div>
-                        </div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            自定义时间:
-                        </div>
-                        <div class="layui-inline layui-show-xs-block">
-
-                            <input class="layui-input" autocomplete="off" placeholder="开始日" name="Time_start" id="Time_start" lay-key="1"></div>
-                        <div class="layui-inline layui-show-xs-block">
-                            <input class="layui-input" autocomplete="off" placeholder="截止日" name="Time_end" id="Time_end" lay-key="2"></div>
-
-
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="get_DeviceSensor_data(0)">
-                                <i class="layui-icon">&#xe615;</i>
-                            </div>
-                        </div>
-                    </form>
-                    <hr>
-                </div>
-                <div class="layui-card-body " >
-                    <div id="T_main" style="width: 99%;height:335px;"></div>
-                    <div id="H_main" style="width: 99%;height:335px;"></div>
-
-
-
-
-                </div>
-            </div>
-        </div>
-
-
-    </div>
-
-
-
-
-</div>
-
-</div>
-</body>
-<script>
-    //获取GET
-    function getPar(par) {
-        //获取当前URL
-        var local_url = document.location.href;
-        //获取要取得的get参数位置
-        var get = local_url.indexOf(par + "=")
-        ;
-        if (get == -1) {
-            return false;
-        }
-        //截取字符串
-        //截取字符串
-        var get_par = local_url.slice(par.length + get + 1);
-        //判断截取后的字符串是否还有其他get参数
-        var nextPar = get_par.indexOf("&")
-        ;
-        if (nextPar != -1) {
-            get_par = get_par.slice(0, nextPar);
-        }
-        return get_par;
-    }
-
-    layui.use(['laydate', 'form'],
-        function () {
-            var laydate = layui.laydate;
-
-            //执行一个laydate实例
-            laydate.render({
-                elem: '#Time_start' //指定元素
-                ,type: 'datetime'
-            });
-
-            //执行一个laydate实例
-            laydate.render({
-                elem: '#Time_end' //指定元素
-                ,type: 'datetime'
-            });
-
-
-
-        });
-
-    var T_name = ""
-    var T_sn = ""
-    var T_class_id = 0
-
-    var T_id = 0
-    var T_sn_T_id = ""
-    var Time_start = ""
-    var Time_end = ""
-
-    var DeviceSensor_lite = []
-    var DeviceSensor_data  = []
-
-    /// ---------------   传感器列表
-    // 页面 加载完成后执行
-    window.onload = function () {
-        console.log("页面 加载完成后执行")
-        quick_1()
-        get_DeviceSensor_list(0)
-
-    }
-    function ChangeDiv(e) {
-        var divs = document.getElementsByClassName("ChangeDiv");
-        var len = divs.length;
-        for(var i=0;i<len;i++){
-            divs[i].style.border = "1px solid #ffffff";
-        }
-        e.style.border = "1px solid #ed0000";
-    }
-    // 今天
-    function quick_1() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_start").val(Time_start)
-        $("#Time_end").val(Time_end)
-
-        get_DeviceSensor_data(0)
-    }
-    // 近一周
-    function quick_2() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_end").val(Time_end)
-
-        myDate=myDate.setDate(myDate.getDay() - 6);
-        myDate=new Date(myDate);
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        $("#Time_start").val(Time_start)
-
-        get_DeviceSensor_data(0)
-    }
-    // 近一月
-    function quick_3() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_end").val(Time_end)
-
-        myDate=myDate.setDate(myDate.getDate() - 30);
-        myDate=new Date(myDate);
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        $("#Time_start").val(Time_start)
-
-        get_DeviceSensor_data(0)
-    }
-    // 近一季度
-    function quick_4() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_end").val(Time_end)
-
-        myDate=myDate.setDate(myDate.getDate() - 30 * 3);
-        myDate=new Date(myDate);
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        $("#Time_start").val(Time_start)
-
-        get_DeviceSensor_data(0)
-    }
-
-
-
-
-
-    //获取div中所有的复选框  .value
-    var checkboxs = document.getElementsByClassName("checkboxxx");
-    function Checkboxs_All () {
-        for(var i = 0;i < checkboxs.length; i++){
-            checkboxs[i].checked = true
-        }
-    }
-    function Checkboxs_Allno () {
-        for(var i = 0;i < checkboxs.length; i++){
-            checkboxs[i].checked = false
-        }
-    }
-    function Checkboxs_Allto () {
-        for(var i = 0;i < checkboxs.length; i++){
-            if(checkboxs[i].checked){
-                checkboxs[i].checked = false
-            }else {
-                checkboxs[i].checked = true
-            }
-        }
-    }
-    function Checkboxs_GetAll () {
-        DeviceSensor_snid_list = ""
-        for(var i = 0;i < checkboxs.length; i++){
-            if(checkboxs[i].checked){
-                DeviceSensor_snid_list =  DeviceSensor_snid_list + checkboxs[i].value + "|"
-            }
-        }
-    }
-
-
-
-    function get_DeviceSensor_list(page) {
-        T_sn = $("#D_T_sn").val();
-        T_name = $("#D_Name").val();
-        T_class_id = $("#Class_1").val();
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Sensor_List',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                T_sn: T_sn,
-                T_name: T_name,
-                T_class_id: parseInt(T_class_id),
-                page: page,
-                page_z: 100,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-
-                    if(page == 0)
-                        $('#DeviceSensor_list').html("")
-                    // $('#DeviceSensor_list_Pages').html("")
-                    // $('#DeviceSensor_list_Pages_x').html("")
-                    DeviceSensor_lite = result.Data.DeviceSensor_lite
-                    if (DeviceSensor_lite.length == 0) {
-                        $('#DeviceSensor_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有设备</div>")
-                        return
-                    }
-                    Add_DeviceSensor_list(result.Data.DeviceSensor_lite) // 列表
-                    // Add_DeviceSensor_list_Pages(result.Data.Pages) // 分页
-                    $('#DeviceSensor_list_Pages_x').html(" 传感器 总数:" + result.Data.Num);
-
-
-                    if(result.Data.Page_size > result.Data.Page ){
-                        get_DeviceSensor_list(result.Data.Page+1)
-                    }
-
-
-
-                } else {
-
-                }
-            }
-        });
-        return false
-    }
-    function Add_DeviceSensor_list(DS_lite) {
-        for (let i = 0; i < DS_lite.length; i++) {
-            if(T_id == 0){
-                T_id = DS_lite[i].T_id;
-                T_sn_T_id = DS_lite[i].T_sn;
-                get_DeviceSensor_data(0)
-            }
-
-
-
-
-            $('#DeviceSensor_list').append("" +
-                "<div class=\"layui-col ChangeDiv\"  onclick=\"ChangeDiv(this);T_id = " + DS_lite[i].T_id + ";T_sn_T_id = '" + DS_lite[i].T_sn + "';\"  \n" +
-                "        style=\"border: 1px solid #ffffff;height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;margin-top: 6px;\">\n" +
-                "        <input type=\"checkbox\" name='checkboxxx' class='checkboxxx' value='" + S_lite[i].T_sn + "," + DS_lite[i].T_idD + "'  style='float: left;width: 18px;height: 18px;margin-top: 16px;margin-left: 10px;'/>" +
-                "           <img style=\"float: left;width: 50px;margin: 0px 10px\" src=\"https://osscold.baozhida.cn/images/温湿度传感器-1.png\"\n" +
-                "            height=\"50\"\n" +
-                "            width=\"40\"/>\n" +
-                "       <div style=\"float: left;\">\n" +
-                "           <div style=\"margin-top: 4px;font-size: 14px;height: 24px;\">" + DS_lite[i].T_name + "</div>\n" +
-                "           <div style=\"margin-top: -3px;font-size: 12px\">SN:" + DS_lite[i].T_sn + " [" + DS_lite[i].T_id + "]</div>\n" +
-                "       </div>\n" +
-                "       <div class=\"layui-card-header\"\n" +
-                "            style=\"float: right;padding-left: 0px;padding-top: 6px;color: #1E9FFF\">\n" +
-                "           \n" +
-                "       </div>\n" +
-                "   </div>")
-        }
-
-    }
-
-
-    function get_DeviceSensor_data(page) {
-
-        if($("#Time_start").val().length > 0){
-            Time_start = $("#Time_start").val();
-
-        }else {
-            Time_start = ""
-        }
-
-        if($("#Time_end").val().length > 0){
-            Time_end = $("#Time_end").val();
-        }else {
-            Time_end = ""
-        }
-
-        if(T_sn_T_id.length == 0){
-            return ;
-        }
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Sensor_Data',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                Time_start:Time_start,
-                Time_end:Time_end,
-                T_sn: T_sn_T_id,
-                T_id: T_id,
-                page: 0,
-                page_z: 9000,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-
-
-                    DeviceSensor_data = result.Data.DeviceSensor_data
-                    console.log(result.Data.Num)
-                    if(result.Data.Num == 0){
-                        // alert("当前没有数据,请尝试一下其他时间段");
-                        layer.msg('当前没有数据,请尝试一下其他时间段');
-                        return
-                    }
-                    T_fhand(result.Data.DeviceSensor_data)
-
-                } else {
-
-                }
-            }
-        });
-        return false
-    }
-
-
-    var T_myChart = echarts.init(document.getElementById('T_main'));
-    var H_myChart = echarts.init(document.getElementById('H_main'));
-
-    function T_fhand(data) {
-        var T_time = []
-        var T_data = []
-        var T_waring = []
-        var T_Tlower = 0
-        var T_Tupper = 0
-        var T_max = -999
-        var T_min = 999
-
-        var H_time = []
-        var H_data = []
-        var H_waring = []
-        var H_Tlower = 0
-        var H_Tupper = 0
-        var H_max = 0
-        var H_min = 99
-
-
-
-        T_Tlower = data[0].T_Tlower
-        T_Tupper = data[0].T_Tupper
-
-        H_Tlower = data[0].T_RHlower
-        H_Tupper = data[0].T_RHupper
-        var dataZoomstart = 0 //缩放比例
-        dataZoomstart = 100 - (30 / (data.length / 100))
-
-
-
-        for (let i = 0; i < data.length; i++) {
-            // 温度
-            T_time.unshift(data[i].T_time)
-            T_data.unshift(data[i].T_t)
-            if(data[i].T_t > T_max){
-                T_max = data[i].T_t
-            }
-            if(data[i].T_t < T_min){
-                T_min = data[i].T_t
-            }
-
-            if(data[i].T_t <= data[i].T_Tlower || data[i].T_t >= data[i].T_Tupper){
-                T_waring.unshift({ name: '周最低', value: data[i].T_t, xAxis: data.length-i-1, yAxis: data[i].T_t })
-            }
-
-            // 湿度
-            H_time.unshift(data[i].T_time)
-            H_data.unshift(data[i].T_rh)
-
-            if(data[i].T_rh > H_max){
-                H_max = data[i].T_rh
-            }
-            if(data[i].T_rh < H_min){
-                H_min = data[i].T_rh
-            }
-            if(data[i].T_rh <= data[i].T_RHlower || data[i].T_rh >= data[i].T_RHupper){
-                H_waring.unshift({ name: '周最低', value: data[i].T_rh, xAxis: data.length-i-1, yAxis: data[i].T_rh })
-            }
-        }
-
-        console.log("T_max:",T_max,"T_min:",T_min)
-
-
-        if(T_Tupper > T_max){
-            T_max = T_Tupper
-        }
-        if(T_Tlower < T_min){
-            T_min = T_Tlower
-        }
-        T_max += 1
-        T_min -= 1
-
-        console.log("H_max:",H_max,"H_min:",H_min)
-        if(H_Tupper > H_max){
-            H_max = H_Tupper
-        }
-        if(H_Tlower < H_min){
-            H_min = H_Tlower
-        }
-        H_max += 1
-        H_min -= 1
-
-        T_option = {
-            title: {
-                text: T_name+"["+T_id+"]:" + $("#Time_start").val() + '~' + $("#Time_end").val(),
-                textStyle:{
-                    fontSize:14,
-                }
-            },
-            tooltip: {
-                trigger: 'axis'
-            },
-            legend: {},
-            toolbox: {
-                show: true,
-                feature: {
-                    dataZoom: {
-                        yAxisIndex: 'none'
-                    },
-                    dataView: { readOnly: false },
-                    magicType: { type: ['line', 'bar'] },
-                    restore: {},
-                    saveAsImage: {}
-                }
-            },
-            xAxis: {
-                type: 'category',
-                boundaryGap: false,
-                data: T_time, //['1', '2', '3', '4', '5', '6', '7'],
-            },
-            yAxis: {
-                type: 'value',
-                axisLabel: {
-                    formatter: '{value} °C'
-                },
-                max:T_max,
-                min:T_min,
-
-            },
-            dataZoom:[{
-                type: 'slider',//图表下方的伸缩条
-                show : true, //是否显示
-                realtime : true, //拖动时,是否实时更新系列的视图
-                start : dataZoomstart, //伸缩条开始位置(1-100),可以随时更改
-                end : 100, //伸缩条结束位置(1-100),可以随时更改
-            }],
-            series: [
-                {
-                    // name: '温度',
-                    type: 'line',
-                    data: T_data, //[1, -2, -1, 5, 3, 2, 0],
-                    markPoint: {
-                        data: T_waring,
-                            // [
-                            //     { name: '周最低', value: -2, xAxis: 1, yAxis: -1.5 }
-                            //     ,{ name: '周最低', value: -1, xAxis: 2, yAxis: -1 }
-                            // ]
-                    },
-                    markLine: {
-                        data: [
-                            {
-                                silent:true,             //鼠标悬停事件  true没有,false有
-                                lineStyle:{               //警戒线的样式  ,虚实  颜色
-                                    type:"solid",
-                                    color:"#FF4200",
-                                    width: 3,
-                                },
-                                label:{
-                                    position:'end',
-                                    formatter:"下限("+T_Tlower+"℃)"
-                                },
-                                yAxis:T_Tlower
-                            },
-                            {
-                                silent:true,             //鼠标悬停事件  true没有,false有
-                                lineStyle:{               //警戒线的样式  ,虚实  颜色
-                                    type:"solid",
-                                    color:"#FF4200",
-                                    width: 3,
-                                },
-                                label:{
-                                    position:'end',
-                                    formatter:"上限("+T_Tupper+"℃)"
-
-                                },
-                                yAxis:T_Tupper
-                            }
-                        ]
-                    }
-                },
-
-            ]
-        };
-        T_myChart.setOption(T_option);
-
-
-        H_option = {
-            title: {
-                text: T_name+"["+T_id+"]:" + $("#Time_start").val() + '~' + $("#Time_end").val(),
-                textStyle:{
-                    fontSize:14,
-                }
-            },
-            tooltip: {
-                trigger: 'axis'
-            },
-            legend: {},
-            toolbox: {
-                show: true,
-                feature: {
-                    dataZoom: {
-                        yAxisIndex: 'none'
-                    },
-                    dataView: { readOnly: false },
-                    magicType: { type: ['line', 'bar'] },
-                    restore: {},
-                    saveAsImage: {}
-                }
-            },
-            xAxis: {
-                type: 'category',
-                boundaryGap: false,
-                data: H_time, //['1', '2', '3', '4', '5', '6', '7'],
-            },
-            yAxis: {
-                type: 'value',
-                axisLabel: {
-                    formatter: '{value} °%'
-                },
-                max:H_max,
-                min:H_min,
-            },
-            dataZoom:[{
-                type: 'slider',//图表下方的伸缩条
-                show : true, //是否显示
-                realtime : true, //拖动时,是否实时更新系列的视图
-                start : dataZoomstart, //伸缩条开始位置(1-100),可以随时更改
-                end : 100, //伸缩条结束位置(1-100),可以随时更改
-            }],
-            series: [
-                {
-                    // name: '湿度',
-                    type: 'line',
-                    data: H_data, //[1, -2, -1, 5, 3, 2, 0],
-                    markPoint: {
-                        data: H_waring,
-                            // [
-                            //     { name: '周最低', value: -2, xAxis: 1, yAxis: -1.5 }
-                            //     ,{ name: '周最低', value: -1, xAxis: 2, yAxis: -1 }
-                            // ]
-                    },
-                    markLine: {
-                        data: [
-                            {
-                                silent:true,             //鼠标悬停事件  true没有,false有
-                                lineStyle:{               //警戒线的样式  ,虚实  颜色
-                                    type:"solid",
-                                    color:"#FF4200",
-                                    width: 3,
-                                },
-                                label:{
-                                    position:'end',
-                                    formatter:"下限("+H_Tlower+"%)"
-                                },
-                                yAxis:H_Tlower
-                            },
-                            {
-                                silent:true,             //鼠标悬停事件  true没有,false有
-                                lineStyle:{               //警戒线的样式  ,虚实  颜色
-                                    type:"solid",
-                                    color:"#FF4200",
-                                    width: 3,
-                                },
-                                label:{
-                                    position:'end',
-                                    formatter:"上限("+H_Tupper+"%)",
-                                },
-                                yAxis:H_Tupper
-                            }
-                        ]
-                    }
-                }
-            ]
-        };
-        H_myChart.setOption(H_option);
-    }
-
-
-
-
-
-
-
-</script>
-
-</html>

+ 0 - 772
views/Data/DataList.html

@@ -1,772 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.cookie.min.js"></script>
-    <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-</head>
-
-<body>
-<div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-                <a><cite>宝智达</cite></a>
-            </span>
-    <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right"
-       onclick="location.reload()" title="刷新">
-        <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-    </a>
-</div>
-<div class="layui-fluid">
-    <div class="layui-row">
-        <!-- // 传感器 选择-->
-        <div  style="width: 395px;float: left">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-                    <form class="layui-form layui-col-space5" οnsubmit="return false;">
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="" type="text" id="D_T_sn" name="D_T_sn" placeholder="请输入 SN"
-                                   autocomplete="off"
-                                   class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="" type="text" id="D_Name" name="D_Name" placeholder="请输入 传感器名称"
-                                   autocomplete="off"
-                                   class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <select id="Class_1" name="Class_1">
-                                <option value=0>所有分类</option>
-                                {{range $index, $elem := .Class_List}}
-                                <option value={{$elem.Id}}>{{$elem.T_name}}
-                                </option>
-
-                                {{end}}
-
-
-                            </select>
-                        </div>
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="get_DeviceSensor_list(0)">
-                                <i class="layui-icon">&#xe615;</i></div></div>
-                    </form>
-                    <hr>
-                </div>
-                <div class="layui-card-body " style="margin-top: -20px">
-<!--                    <div class="layui-progress " >-->
-<!--                        <div id="progress" class="layui-progress-bar layui-bg-blue" lay-percent="80%"></div>-->
-<!--                    </div>-->
-                    <div id="DeviceSensor_list" style="width: 98%; overflow: hidden;max-height: 616px;overflow-y: auto">
-                        <div style="color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px">加载中...</div>
-<!--                            <div class="layui-col"-->
-<!--                                 style="height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;">-->
-<!--                                <img style="float: left;width: 50px;margin: 0px 10px" src="https://osscold.baozhida.cn/images/温湿度传感器-1.png"-->
-<!--                                     height="50"-->
-<!--                                     width="40"/>-->
-<!--                                <div style="float: left;">-->
-<!--                                    <div style="margin-top: 4px;font-size: 14px">士大夫撒地方递四方速递</div>-->
-<!--                                    <div style="margin-top: -3px;font-size: 12px">SN:KF20210510143443 [1]</div>-->
-<!--                                </div>-->
-<!--                                <div class="layui-card-header"-->
-<!--                                     style="float: right;padding-left: 0px;padding-top: 6px;color: #1E9FFF">-->
-<!--                                    》-->
-<!--                                </div>-->
-<!--                            </div>-->
-                    </div>
-                </div>
-                <div class="layui-card-body ">
-
-                    <div style="height: 70px">
-                        <div class="layui-card-body " style="text-align: center">
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="Checkboxs_All()">
-                                    <i class="layui-icon">全选择</i>
-                                </div>
-                            </div>
-
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="Checkboxs_Allno()">
-                                    <i class="layui-icon">全取消</i>
-                                </div>
-                            </div>
-
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="Checkboxs_Allto()">
-                                    <i class="layui-icon">反选</i>
-                                </div>
-                            </div>
-                            <div style="color: #1E9FFF;text-align: center" id="DeviceSensor_list_Pages_x"></div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-
-
-        <!-- // 传感器 选择-->
-        <div  style="width: calc(100% - 395px);float: left">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-                    <form class="layui-form layui-col-space5" οnsubmit="return false;">
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="quick_1()">
-                                <i class="layui-icon">今天</i>
-                            </div>
-                        </div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="quick_2()">
-                                <i class="layui-icon">近一周</i>
-                            </div>
-                        </div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="quick_3()">
-                                <i class="layui-icon">近一月</i>
-                            </div>
-                        </div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="quick_4()">
-                                <i class="layui-icon">近一季度</i>
-                            </div>
-                        </div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            自定义时间:
-                        </div>
-
-                        <div class="layui-inline layui-show-xs-block">
-                            <input class="layui-input" autocomplete="off" placeholder="开始日" name="Time_start" id="Time_start" lay-key="1"></div>
-                        <div class="layui-inline layui-show-xs-block">
-                            <input class="layui-input" autocomplete="off" placeholder="截止日" name="Time_end" id="Time_end" lay-key="2"></div>
-
-
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="get_DeviceSensor_data(0)">
-                                <i class="layui-icon">&#xe615;</i></div></div>
-
-
-                        <div class="layui-input-inline layui-show-xs-block" style="float: right">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="get_DeviceSensor_PDF()">
-                                <i class="layui-icon">导出PDF</i>
-                            </div>
-                        </div>
-
-                        <div class="layui-input-inline layui-show-xs-block" style="float: right">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="get_DeviceSensor_Excel()">
-                                <i class="layui-icon">导出Excel</i>
-                            </div>
-                        </div>
-                    </form>
-                    <hr>
-                </div>
-                <div class="layui-card-body ">
-
-                    <table class="layui-table layui-form">
-                        <thead>
-                        <tr>
-                            <th>传感器名称</th>
-                            <th>温度℃</th>
-                            <th>湿度%</th>
-                            <th>温度范围 ℃</th>
-                            <th>湿度范围 %</th>
-                            <th ondblclick="get_DeviceSensor_Excel_m()">记录时间</th>
-                        </tr>
-                        </thead>
-                        <tbody id="DeviceSensor_data" >
-                        <!--                        <tr>-->
-                        <!--                            <td>14.6</td>-->
-                        <!--                            <td>59</td>-->
-                        <!--                            <td>11~33</td>-->
-                        <!--                            <td>11~33</td>-->
-                        <!--                            <td>0001-01-01T00:00:00Z</td>-->
-                        <!--                        </tr>-->
-
-                        <!--                        <div style="color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px;">加载中...</div>-->
-                        </tbody>
-                    </table>
-                </div>
-                <div class="layui-card-body ">
-                    <div style="height: 70px">
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div id="DeviceSensor_data_Pages">
-
-
-                                    <!--                                    <a class="prev" href="">&lt;&lt;</a>-->
-
-                                    <!--                                    <a class="num" href="">1222</a>-->
-
-                                    <!--                                    <span class="current">111</span>-->
-
-                                    <!--                                    <a class="num" href="">444</a>-->
-                                    <!--                                    <a class="next" href="">&gt;&gt;</a>-->
-
-                                </div>
-
-                            </div>
-                            <div style="color: #1E9FFF;text-align: center" id="DeviceSensor_data_Pages_x"></div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-
-
-
-
-</div>
-
-</div>
-</body>
-<script>
-    //获取GET
-    function getPar(par) {
-        //获取当前URL
-        var local_url = document.location.href;
-        //获取要取得的get参数位置
-        var get = local_url.indexOf(par + "=")
-        ;
-        if (get == -1) {
-            return false;
-        }
-        //截取字符串
-        //截取字符串
-        var get_par = local_url.slice(par.length + get + 1);
-        //判断截取后的字符串是否还有其他get参数
-        var nextPar = get_par.indexOf("&")
-        ;
-        if (nextPar != -1) {
-            get_par = get_par.slice(0, nextPar);
-        }
-        return get_par;
-    }
-    function ChangeDiv(e) {
-        // var divs = document.getElementsByClassName("ChangeDiv");
-        // var len = divs.length;
-        // for(var i=0;i<len;i++){
-        //     divs[i].style.border = "1px solid #ffffff";
-        // }
-        // e.style.border = "1px solid #ed0000";
-    }
-    // 今天
-    function quick_1() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_start").val(Time_start)
-        $("#Time_end").val(Time_end)
-
-        get_DeviceSensor_data(0)
-    }
-    // 近一周
-    function quick_2() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_end").val(Time_end)
-
-        myDate=myDate.setDate(myDate.getDate() - 6);
-        myDate=new Date(myDate);
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        $("#Time_start").val(Time_start)
-
-        get_DeviceSensor_data(0)
-    }
-    // 近一月
-    function quick_3() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_end").val(Time_end)
-
-        myDate=myDate.setDate(myDate.getDate() - 30);
-        myDate=new Date(myDate);
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        $("#Time_start").val(Time_start)
-
-        get_DeviceSensor_data(0)
-    }
-    // 近一季度
-    function quick_4() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_end").val(Time_end)
-
-        myDate=myDate.setDate(myDate.getDate() - 30 * 3);
-        myDate=new Date(myDate);
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        $("#Time_start").val(Time_start)
-
-        get_DeviceSensor_data(0)
-    }
-    layui.use(['laydate', 'form', 'element'],
-        function () {
-            var laydate = layui.laydate;
-
-            //执行一个laydate实例
-            laydate.render({
-                elem: '#Time_start' //指定元素
-                ,type: 'datetime'
-            });
-
-            //执行一个laydate实例
-            laydate.render({
-                elem: '#Time_end' //指定元素
-                ,type: 'datetime'
-            });
-            var element = layui.element;
-            element.length = 30
-
-        });
-
-    var T_name = ""
-    var T_sn = ""
-    var T_class_id = 0
-
-    var T_id = 0
-    var T_sn_T_id = ""
-    var Time_start = ""
-    var Time_end = ""
-
-    var DeviceSensor_lite = []
-    var DeviceSensor_data  = []
-    var DeviceSensor_snid_list  = ""
-    /// ---------------   传感器列表
-    // 页面 加载完成后执行
-    window.onload = function () {
-        console.log("页面 加载完成后执行")
-        quick_1()
-        get_DeviceSensor_list(0)
-
-    }
-
-    //获取div中所有的复选框  .value
-    var checkboxs = document.getElementsByClassName("checkboxxx");
-    function Checkboxs_All () {
-        for(var i = 0;i < checkboxs.length; i++){
-            checkboxs[i].checked = true
-        }
-    }
-    function Checkboxs_Allno () {
-        for(var i = 0;i < checkboxs.length; i++){
-            checkboxs[i].checked = false
-        }
-    }
-    function Checkboxs_Allto () {
-        for(var i = 0;i < checkboxs.length; i++){
-            if(checkboxs[i].checked){
-                checkboxs[i].checked = false
-            }else {
-                checkboxs[i].checked = true
-            }
-        }
-    }
-    function Checkboxs_GetAll () {
-        DeviceSensor_snid_list = ""
-        for(var i = 0;i < checkboxs.length; i++){
-            if(checkboxs[i].checked){
-                DeviceSensor_snid_list =  DeviceSensor_snid_list + checkboxs[i].value + "|"
-            }
-        }
-    }
-
-    function get_DeviceSensor_list(page) {
-        T_sn = $("#D_T_sn").val();
-        T_name = $("#D_Name").val();
-        T_class_id = $("#Class_1").val();
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Sensor_List',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                T_sn: T_sn,
-                T_name: T_name,
-                T_class_id: parseInt(T_class_id),
-                page: page,
-                page_z: 100,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-
-                    if(page == 0)
-                        $('#DeviceSensor_list').html("")
-                    // $('#DeviceSensor_list_Pages').html("")
-                    // $('#DeviceSensor_list_Pages_x').html("")
-                    DeviceSensor_lite = result.Data.DeviceSensor_lite
-                    if (DeviceSensor_lite.length == 0) {
-                        $('#DeviceSensor_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有设备</div>")
-                        return
-                    }
-                    Add_DeviceSensor_list(result.Data.DeviceSensor_lite) // 列表
-                    // Add_DeviceSensor_list_Pages(result.Data.Pages) // 分页
-                    $('#DeviceSensor_list_Pages_x').html(" 传感器 总数:" + result.Data.Num);
-
-
-                    if(result.Data.Page_size > result.Data.Page ){
-                        get_DeviceSensor_list(result.Data.Page+1)
-                    }
-
-
-
-                } else {
-
-                }
-            }
-        });
-        return false
-    }
-    function Add_DeviceSensor_list(DS_lite) {
-        for (let i = 0; i < DS_lite.length; i++) {
-            if(T_id == 0){
-                T_id = DS_lite[i].T_id;
-                T_sn_T_id = DS_lite[i].T_sn;
-                get_DeviceSensor_data(0)
-            }
-
-
-
-
-            $('#DeviceSensor_list').append("" +
-                "<div  class=\"layui-col ChangeDiv\"  onclick=\"ChangeDiv(this);T_id = " + DS_lite[i].T_id + ";T_sn_T_id = '" + DS_lite[i].T_sn + "';\"  \n" +
-                "        style=\"border: 1px solid #ffffff;height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;margin-top: 6px;\">\n" +
-                "        <input type=\"checkbox\" name='checkboxxx' class='checkboxxx' onclick='get_DeviceSensor_data(0)' value='" + DS_lite[i].T_sn + "," + DS_lite[i].T_id + "'  style='float: left;width: 18px;height: 18px;margin-top: 16px;margin-left: 10px;'/>" +
-                "           <img style=\"float: left;width: 50px;margin: 0px 10px\" src=\"https://osscold.baozhida.cn/images/温湿度传感器-1.png\"\n" +
-                "            height=\"50\"\n" +
-                "            width=\"40\"/>\n" +
-                "       <div style=\"float: left;\">\n" +
-                "           <div style=\"margin-top: 4px;font-size: 14px;height: 24px;\">" + DS_lite[i].T_name + "</div>\n" +
-                "           <div style=\"margin-top: -3px;font-size: 12px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;width: 200px;\">SN:" + DS_lite[i].T_sn + " [" + DS_lite[i].T_id + "]</div>\n" +
-                "       </div>\n" +
-                "       <div class=\"layui-card-header\"\n" +
-                "            style=\"float: right;padding-left: 0px;padding-top: 6px;color: #1E9FFF\">\n" +
-                "           \n" +
-                "       </div>\n" +
-                "   </div>")
-        }
-
-    }
-
-
-    function get_DeviceSensor_data(page) {
-
-        if($("#Time_start").val().length > 0){
-            Time_start = $("#Time_start").val();
-
-        }else {
-            Time_start = ""
-        }
-
-        if($("#Time_end").val().length > 0){
-            Time_end = $("#Time_end").val();
-        }else {
-            Time_end = ""
-        }
-
-        Checkboxs_GetAll()
-        var loading = layer.load(0, {
-            shade: false,
-            time: 99*1000
-        });
-
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Sensor_Data_More',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                Time_start:Time_start,
-                Time_end:Time_end,
-                T_snid: DeviceSensor_snid_list,
-                page: page,
-                page_z: 15,
-            },
-            success: function (result) {
-                console.log(result)
-                layer.close(loading)
-                if (result.Code == 200) {
-                    $('#DeviceSensor_data').html("")
-                    $('#DeviceSensor_data_Pages').html("")
-                    $('#DeviceSensor_data_Pages_x').html("")
-                    DeviceSensor_data = result.Data.DeviceSensor_data
-                    if (DeviceSensor_data.length == 0) {
-                        $('#DeviceSensor_data').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有数据</div>")
-                        return
-                    }
-                    Add_DeviceSensor_data(result.Data.DeviceSensor_data) // 列表
-                    Add_DeviceSensor_data_Pages(result.Data.Pages) // 分页
-                    $('#DeviceSensor_data_Pages_x').append("页数:" + result.Data.Page + "/" + result.Data.Page_size + "  总数:" + result.Data.Num);
-
-                } else {
-
-                }
-            }
-        });
-        return false
-    }
-
-    var Admin_rh = "{{$.Admin_r.Admin_rh}}"
-    function Add_DeviceSensor_data(DS_lite) {
-        for (let i = 0; i < DS_lite.length; i++) {
-
-            style_s = ""
-            if(DS_lite[i].T_t <=  DS_lite[i].T_Tlower || DS_lite[i].T_t >=  DS_lite[i].T_Tupper){
-                style_s = " style='background-color: #ff8585' "
-            }
-            if(Admin_rh == 0 && DS_lite[i].T_sn.indexOf("YD") != -1){
-
-            }else {
-                if(DS_lite[i].T_rh < DS_lite[i].T_RHlower || DS_lite[i].T_rh >= DS_lite[i].T_RHupper){
-                    style_s = " style='background-color: #ff8585' "
-                }
-            }
-
-
-            hidden = ""
-            if(Admin_rh == 0 && DS_lite[i].T_sn.indexOf("YD") != -1){
-                hidden = "hidden"
-            }
-            $('#DeviceSensor_data').append("" +
-                "<tr "+style_s+">\n" +
-                // "    <td>"+DS_lite[i].T_sn+"</td>\n" +
-                "    <td>"+DS_lite[i].T_name+"["+DS_lite[i].T_id+"]</td>\n" +
-                "    <td>"+DS_lite[i].T_t+"</td>\n" +
-                "    <td> <span "+hidden+">"+DS_lite[i].T_rh+"</span></td>\n" +
-                "    <td>"+DS_lite[i].T_Tlower+"~"+DS_lite[i].T_Tupper+"</td>\n" +
-                "    <td > <span "+hidden+">"+DS_lite[i].T_RHlower+"~"+DS_lite[i].T_RHupper+"</span></td>\n" +
-                "    <td>"+DS_lite[i].T_time+"</td>\n" +
-                "</tr>")
-        }
-    }
-    function Add_DeviceSensor_data_Pages(Pages) {
-        for (let i = 0; i < Pages.length; i++) {
-            elem = Pages[i]
-            switch (elem.A) {
-                case 1:
-                    $('#DeviceSensor_data_Pages').append("<a class=\"prev\" onclick='get_DeviceSensor_data(" + elem.V + ")' >&lt;&lt;</a>\n");
-                    break;
-                case 2:
-                    $('#DeviceSensor_data_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_data(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 3:
-                    $('#DeviceSensor_data_Pages').append("<span class=\"current\">" + elem.V + "</span>\n");
-                    break;
-                case 4:
-                    $('#DeviceSensor_data_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_data(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 5:
-                    $('#DeviceSensor_data_Pages').append("<a class=\"next\" onclick='get_DeviceSensor_data(" + elem.V + ")' >&gt;&gt;</a>\n");
-                    break;
-            }
-        }
-    }
-
-
-
-    function get_DeviceSensor_Excel() {
-
-        if($("#Time_start").val().length > 0){
-            Time_start = $("#Time_start").val();
-
-        }else {
-            Time_start = ""
-        }
-
-        if($("#Time_end").val().length > 0){
-            Time_end = $("#Time_end").val();
-        }else {
-            Time_end = ""
-        }
-
-        Checkboxs_GetAll()
-        var loading = layer.load(0, {
-            shade: false,
-            time: 99*1000
-        });
-        if (DeviceSensor_snid_list.length == 0){
-            return
-        }
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Sensor_Data_Excel',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                Time_start:Time_start,
-                Time_end:Time_end,
-                T_snid: DeviceSensor_snid_list,
-
-            },
-            success: function (result) {
-                console.log(result)
-                layer.close(loading)
-                if (result.Code != 200) {
-                    layer.msg(result.Msg);
-                    return
-                }
-                window.location.href = result.Data;
-            }
-        });
-        return false
-    }
-    function get_DeviceSensor_PDF() {
-
-        if($("#Time_start").val().length > 0){
-            Time_start = $("#Time_start").val();
-
-        }else {
-            Time_start = ""
-        }
-
-        if($("#Time_end").val().length > 0){
-            Time_end = $("#Time_end").val();
-        }else {
-            Time_end = ""
-        }
-
-        Checkboxs_GetAll()
-        var loading = layer.load(0, {
-            shade: false,
-            time: 99*1000
-        });
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Sensor_Data_PDF',//发送请求
-            data: {
-                Time_start:Time_start,
-                Time_end:Time_end,
-                T_snid: DeviceSensor_snid_list,
-            },
-            success: function (result) {
-                console.log(result)
-                layer.close(loading)
-                if (result.Code != 200) {
-                    layer.msg(result.Msg);
-                    return
-                }
-                window.parent.location.href = result.Data;
-                // // window.open(result.Data,"_blank");
-                // var form = document.createElement("form");
-                //
-                // form.action = result.Data;
-                //
-                // form.target = "_blank";
-                //
-                // form.method = "POST";
-                //
-                // document.body.appendChild(form);
-                //
-                // form.submit();
-            }
-        });
-        return false
-    }
-    function get_DeviceSensor_Excel_m() {
-
-        if($("#Time_start").val().length > 0){
-            Time_start = $("#Time_start").val();
-
-        }else {
-            Time_start = ""
-        }
-
-        if($("#Time_end").val().length > 0){
-            Time_end = $("#Time_end").val();
-        }else {
-            Time_end = ""
-        }
-
-        Checkboxs_GetAll()
-        var loading = layer.load(0, {
-            shade: false,
-            time: 99*1000
-        });
-        if (DeviceSensor_snid_list.length == 0){
-            return
-        }
-        layer.prompt({
-            formType: 0,
-            value: '3',
-            title: '补数据条数(1分钟)',
-            area: ['800px', '350px'] //自定义文本域宽高
-        }, function(value, index, elem){
-            layer.close(index);
-
-            $.ajax({
-                type: 'POST',
-                url: 'Device_Sensor_Data_Excel_m',//发送请求
-                data: {
-                    User_tokey: $.cookie("User_tokey"),
-                    Time_start:Time_start,
-                    Time_end:Time_end,
-                    T_snid: DeviceSensor_snid_list,
-                    t_x: parseInt(value),
-
-                },
-                success: function (result) {
-                    console.log(result)
-                    layer.close(loading)
-                    if (result.Code != 200) {
-                        layer.msg(result.Msg);
-                        return
-                    }
-                    window.location.href = result.Data;
-                }
-            });
-        });
-
-
-
-        return false
-    }
-
-</script>
-
-
-
-
-</html>

+ 0 - 825
views/Data/DataMap.html

@@ -1,825 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.cookie.min.js"></script>
-    <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-    <script src="https://osscold.baozhida.cn/js/echarts.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-
-    <style>
-        .nav_mine {
-            height: 40px;
-            display: flex;
-            align-items: center;
-            overflow-y: hidden;
-            overflow-x: hidden;
-            flex-wrap: nowrap;
-            white-space:nowrap;
-        }
-
-    </style>
-</head>
-
-<body>
-<div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-              <a><cite>宝智达</cite></a>
-            </span>
-    <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right"
-       onclick="location.reload()" title="刷新">
-        <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-    </a>
-</div>
-<div class="layui-fluid">
-    <div class="layui-row">
-        <!-- // 传感器 选择-->
-        <div   style="width: 395px;float: left">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-                    <form class="layui-form layui-col-space5" οnsubmit="return false;">
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="" type="text" id="D_T_sn" name="D_T_sn" placeholder="请输入 SN"
-                                   autocomplete="off"
-                                   class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="" type="text" id="D_Name" name="D_Name" placeholder="请输入 传感器名称"
-                                   autocomplete="off"
-                                   class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <select id="Class_1" name="Class_1">
-                                <option value=0>所有分类</option>
-                                {{range $index, $elem := .Class_List}}
-                                <option value={{$elem.Id}}>{{$elem.T_name}}
-                                </option>
-
-                                {{end}}
-
-
-                            </select>
-                        </div>
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="get_DeviceSensor_list(0)">
-                                <i class="layui-icon">&#xe615;</i></div>
-                        </div>
-                    </form>
-                    <hr>
-                </div>
-                <div class="layui-card-body " style="margin-top: -20px">
-                    <div id="DeviceSensor_list" style="width: 98%; overflow: hidden;">
-                        <div style="color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px">加载中...</div>
-                        <!--                        <div class="layui-col"-->
-                        <!--                             style="height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;">-->
-                        <!--                            <img style="float: left;width: 50px;margin: 0px 10px" src="https://osscold.baozhida.cn/images/温湿度传感器-1.png"-->
-                        <!--                                 height="50"-->
-                        <!--                                 width="40"/>-->
-                        <!--                            <div style="float: left;">-->
-                        <!--                                <div style="margin-top: 4px;font-size: 14px">士大夫撒地方递四方速递</div>-->
-                        <!--                                <div style="margin-top: -3px;font-size: 12px">SN:KF20210510143443 [1]</div>-->
-                        <!--                            </div>-->
-                        <!--                            <div class="layui-card-header"-->
-                        <!--                                 style="float: right;padding-left: 0px;padding-top: 6px;color: #1E9FFF">-->
-                        <!--                                》-->
-                        <!--                            </div>-->
-                        <!--                        </div>-->
-                    </div>
-                </div>
-                <div class="layui-card-body ">
-                    <div style="height: 70px">
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div id="DeviceSensor_list_Pages">
-
-
-                                    <!--                                    <a class="prev" href="">&lt;&lt;</a>-->
-
-                                    <!--                                    <a class="num" href="">1222</a>-->
-
-                                    <!--                                    <span class="current">111</span>-->
-
-                                    <!--                                    <a class="num" href="">444</a>-->
-                                    <!--                                    <a class="next" href="">&gt;&gt;</a>-->
-
-                                </div>
-
-                            </div>
-                            <div style="color: #1E9FFF;text-align: center" id="DeviceSensor_list_Pages_x"></div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-
-
-        <!-- // 传感器 选择-->
-        <div style="width: calc(100% - 395px);float: left">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-                    <form class="layui-form layui-col-space5" οnsubmit="return false;">
-                        <div class="layui-input-inline layui-show-xs-block">
-                            历史任务查询:
-                        </div>
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="quick_1()">
-                                    <i class="layui-icon">今天</i>
-                                </div>
-                            </div>
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="quick_2()">
-                                    <i class="layui-icon">近一周</i>
-                                </div>
-                            </div>
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="quick_3()">
-                                    <i class="layui-icon">近两周</i>
-                                </div>
-                            </div>
-
-
-<!--                        <div class="layui-input-inline layui-show-xs-block">-->
-<!--                            <div class="layui-btn layui-btn-normal"-->
-<!--                                 onclick="quick_4()">-->
-<!--                                <i class="layui-icon">近一季度</i>-->
-<!--                            </div>-->
-<!--                        </div>-->
-                        <div style="float: right">
-                            <div class="layui-input-inline layui-show-xs-block">
-                                自定义时间查询:
-                            </div>
-                            <div class="layui-inline layui-show-xs-block">
-                                <input class="layui-input" autocomplete="off" placeholder="开始日" name="Time_start" id="Time_start" lay-key="1"></div>
-                            <div class="layui-inline layui-show-xs-block">
-                                <input class="layui-input" autocomplete="off" placeholder="截止日" name="Time_end" id="Time_end" lay-key="2"></div>
-
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="on_get_DeviceSensor_data()">
-                                    <i class="layui-icon">&#xe615;</i>
-                                </div>
-                            </div>
-                        </div>
-
-                    </form>
-                    <hr>
-                    <div id="DeviceTask_List"  class="nav_mine">
-
-                        <div class="layui-btn" style="height: 60px;padding-top: 8px">
-                            <div style="height: 15px;">2022-5-11 00:00:00</div>
-                            <div style="height: 15px;">2022-5-11 23:59:59</div>
-                        </div>
-
-                        <button type="button" class="layui-btn layui-btn-xs">一个标准的按钮</button>
-
-                    </div>
-                    <script>
-                        let container = document.querySelector(".nav_mine");
-                        container.addEventListener("wheel", (event) => {
-                            event.preventDefault();
-                            container.scrollLeft += event.deltaY;
-                        })
-                    </script>
-                    <hr>
-                </div>
-                <div class="layui-card-body "  >
-                    <div id="container" style="width: 100%;height:735px;"></div>
-
-
-
-                </div>
-            </div>
-        </div>
-
-
-    </div>
-
-
-
-
-</div>
-
-</div>
-</body>
-<script>
-    //获取GET
-    function getPar(par) {
-        //获取当前URL
-        var local_url = document.location.href;
-        //获取要取得的get参数位置
-        var get = local_url.indexOf(par + "=")
-        ;
-        if (get == -1) {
-            return false;
-        }
-        //截取字符串
-        //截取字符串
-        var get_par = local_url.slice(par.length + get + 1);
-        //判断截取后的字符串是否还有其他get参数
-        var nextPar = get_par.indexOf("&")
-        ;
-        if (nextPar != -1) {
-            get_par = get_par.slice(0, nextPar);
-        }
-        return get_par;
-    }
-
-    layui.use(['laydate', 'form'],
-        function () {
-            var laydate = layui.laydate;
-
-            //执行一个laydate实例
-            laydate.render({
-                elem: '#Time_start' //指定元素
-                ,type: 'datetime'
-            });
-
-            //执行一个laydate实例
-            laydate.render({
-                elem: '#Time_end' //指定元素
-                ,type: 'datetime'
-            });
-
-
-
-        });
-
-    var T_name = ""
-    var T_sn = ""
-    var T_class_id = 0
-    var Admin_rh = "{{$.Admin_r.Admin_rh}}"
-    var T_id = 0
-    var T_sn_T_id = ""
-    var Time_start = ""
-    var Time_end = ""
-
-    var DeviceSensor_lite = []
-    var DeviceSensor_data  = []
-
-    /// ---------------   传感器列表
-    // 页面 加载完成后执行
-    window.onload = function () {
-        console.log("页面 加载完成后执行")
-        quick_1()
-        get_DeviceSensor_list(0)
-        // var map = new AMap.Map('container', {
-        //     resizeEnable: true, //是否监控地图容器尺寸变化
-        //     zoom:11, //初始化地图层级
-        //     center: [116.397428, 39.90923] //初始化地图中心点
-        // });
-    }
-    function ChangeDiv(e) {
-        var divs = document.getElementsByClassName("ChangeDiv");
-        var len = divs.length;
-        for(var i=0;i<len;i++){
-            divs[i].style.border = "1px solid #ffffff";
-        }
-        e.style.border = "1px solid #ed0000";
-
-
-    }
-    // 今天
-    function quick_1() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_start").val(Time_start)
-        $("#Time_end").val(Time_end)
-
-        f_DeviceTask_List()
-    }
-    // 近一周
-    function quick_2() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_end").val(Time_end)
-
-        myDate=myDate.setDate(myDate.getDate() - 7);
-        myDate=new Date(myDate);
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        $("#Time_start").val(Time_start)
-
-        f_DeviceTask_List()
-    }
-    // 近一月
-    function quick_3() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_end").val(Time_end)
-
-        myDate=myDate.setDate(myDate.getDate() - 14);
-        myDate=new Date(myDate);
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        $("#Time_start").val(Time_start)
-
-        f_DeviceTask_List()
-    }
-    // 近一季度
-    function quick_4() {
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-        $("#Time_end").val(Time_end)
-
-        myDate=myDate.setDate(myDate.getDate() - 30 * 3);
-        myDate=new Date(myDate);
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        $("#Time_start").val(Time_start)
-
-        f_DeviceTask_List()
-    }
-
-
-    // 获取任务列表
-    function f_DeviceTask_List() {
-
-        $('#DeviceTask_List').html("")
-        $.ajax({
-            type: 'POST',
-            url: '../../Device/DeviceTask_List',//发送请求
-            data: {
-                T_sn:T_sn_T_id,
-                Time_start: $("#Time_start").val().replace("+", ' ') ,
-                Time_end:  $("#Time_end").val().replace("+", ' '),
-            },
-            success: function (result) {
-                console.log(result)
-                if(result.Data.length == 0){
-                    layer.msg('时间段内 没有找到任务!',{time: 500});
-                }
-                if(result.Data.length > 10){
-                    layer.msg('只能显示 时间段 10次任务!');
-                }
-
-                Add_DeviceTask_List(result.Data)
-            }
-        });
-    }
-
-    T_Ut_start = ""
-    T_Ut_end = ""
-    function Add_DeviceTask_List(DS_lite) {
-        for (let i = 0; i < DS_lite.length; i++) {
-            if(i >= 10){
-                return
-            }
-            T_Ut_start = dateChangeFormat('YYYY-mm-dd HH:MM:SS', DS_lite[i].T_Ut_start)
-            T_Ut_end = dateChangeFormat('YYYY-mm-dd HH:MM:SS', DS_lite[i].T_Ut_end)
-            $('#DeviceTask_List').append("" +
-                "<div class=\"layui-btn layui-border-blue\" style=\"height: 60px;padding-top: 8px;background-color: #02b51e;\" " +
-                "onclick=\" T_Ut_start = '" + T_Ut_start + "';T_Ut_end = '" + T_Ut_end + "';get_DeviceSensor_data()\" >\n" +
-                "    <div style=\"height: 15px;\">"+T_Ut_start+"</div>\n" +
-                "    <div style=\"height: 15px;\">"+T_Ut_end+"</div>\n" +
-                "</div>")
-        }
-
-    }
-
-
-    function get_DeviceSensor_list(page) {
-        T_sn = $("#D_T_sn").val();
-        T_name = $("#D_Name").val();
-        T_class_id = $("#Class_1").val();
-
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Sensor_List',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                T_sn: T_sn,
-                T_name: T_name,
-                T_class_id: parseInt(T_class_id),
-                page: page,
-                SN_type: "YD",
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    $('#DeviceSensor_list').html("")
-                    $('#DeviceSensor_list_Pages').html("")
-                    $('#DeviceSensor_list_Pages_x').html("")
-                    DeviceSensor_lite = result.Data.DeviceSensor_lite
-                    if (DeviceSensor_lite.length == 0) {
-                        $('#DeviceSensor_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有设备</div>")
-                        return
-                    }
-                    Add_DeviceSensor_list(result.Data.DeviceSensor_lite) // 列表
-                    Add_DeviceSensor_list_Pages(result.Data.Pages) // 分页
-                    $('#DeviceSensor_list_Pages_x').append("页数:" + result.Data.Page + "/" + result.Data.Page_size + "  总数:" + result.Data.Num);
-
-                } else {
-
-                }
-            }
-        });
-        return false
-    }
-    function Add_DeviceSensor_list(DS_lite) {
-        for (let i = 0; i < DS_lite.length; i++) {
-            if(T_id == 0){
-                T_id = DS_lite[i].T_id;
-                T_sn_T_id = DS_lite[i].T_sn;
-
-                f_DeviceTask_List()
-            }
-            $('#DeviceSensor_list').append("" +
-                "<div class=\"layui-col ChangeDiv\" onclick=\"ChangeDiv(this); T_id = " + DS_lite[i].T_id + ";T_sn_T_id = '" + DS_lite[i].T_sn + "';f_DeviceTask_List()\"  \n" +
-                "        style=\"border: 1px solid #ffffff;height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;margin-top: 6px\">\n" +
-                "       <img style=\"float: left;width: 50px;margin: 0px 10px\" src=\"https://osscold.baozhida.cn/images/温湿度传感器-1.png\"\n" +
-                "            height=\"50\"\n" +
-                "            width=\"40\"/>\n" +
-                "       <div style=\"float: left;\">\n" +
-                "           <div style=\"margin-top: 4px;font-size: 14px;height: 24px;\">" + DS_lite[i].T_name + "</div>\n" +
-                "           <div style=\"margin-top: -3px;font-size: 12px\">SN:" + DS_lite[i].T_sn + " [" + DS_lite[i].T_id + "]</div>\n" +
-                "       </div>\n" +
-                "       <div class=\"layui-card-header\"\n" +
-                "            style=\"float: right;padding-left: 0px;padding-top: 6px;color: #1E9FFF\">\n" +
-                "           》\n" +
-                "       </div>\n" +
-                "   </div>")
-        }
-
-    }
-    function Add_DeviceSensor_list_Pages(Pages) {
-        for (let i = 0; i < Pages.length; i++) {
-            elem = Pages[i]
-            switch (elem.A) {
-                case 1:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"prev\" onclick='get_DeviceSensor_list(" + elem.V + ")' >&lt;&lt;</a>\n");
-                    break;
-                case 2:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 3:
-                    $('#DeviceSensor_list_Pages').append("<span class=\"current\">" + elem.V + "</span>\n");
-                    break;
-                case 4:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 5:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"next\" onclick='get_DeviceSensor_list(" + elem.V + ")' >&gt;&gt;</a>\n");
-                    break;
-            }
-        }
-    }
-    function on_get_DeviceSensor_data() {
-        T_Ut_start = $("#Time_start").val().replace("+", ' ');
-        T_Ut_end = $("#Time_end").val().replace("+", ' ');
-        get_DeviceSensor_data()
-    }
-    function get_DeviceSensor_data() {
-
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Sensor_Data',//发送请求
-            data: {
-                Time_start:T_Ut_start,
-                Time_end:T_Ut_end,
-                T_sn: T_sn_T_id,
-                T_id: T_id,
-                page: 0,
-                page_z: 9000,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-
-
-                    DeviceSensor_data = result.Data.DeviceSensor_data
-                    T_fhand(result.Data.DeviceSensor_data)
-
-
-
-                } else {
-
-                }
-            }
-        });
-        return false
-    }
-
-    ////    ---------  地图
-    var graspRoad;
-
-
-
-    function T_fhand(data) {
-        var map = new AMap.Map('container', {
-            resizeEnable: true,
-            center: [104.101765,41.561402],
-            zoom: 4
-        });
-        var lineArr = [
-            // ['75.757904', '38.118117'],
-            // ['117.375719', '24.598057']
-        ];
-        if(!data) {
-            return
-        }
-        for (let i = 0; i < data.length; i++) {
-            // 026.5610665,106.6644807
-
-            if(data[i].T_site.length < 5){
-                continue;
-            }
-            T_site_split = data[i].T_site.split(",")
-            // 地理经纬度坐标
-            var lon = parseFloat(T_site_split[1]);
-            var lat = parseFloat(T_site_split[0]);
-
-            // console.log(data,lon,lat)
-            lineArr.unshift(new AMap.LngLat(lon,lat))  //unshift  push
-
-
-        }
-        console.log("lineArr:",lineArr)
-
-        if(!graspRoad) {
-            graspRoad = new AMap.GraspRoad()
-        }
-        // 坐标转换
-        AMap.convertFrom(lineArr, 'gps', function (status, result) {
-
-
-            if (result.info === 'ok') {
-                var path2 = result.locations;
-                console.log("path2:",path2)
-                var polyline = new AMap.Polyline({
-                    path: path2,
-                    isOutline: true,
-                    outlineColor: '#ffeeff',
-                    borderWeight: 3,
-                    strokeColor: "#3366FF",
-                    strokeOpacity: 1,
-                    strokeWeight: 6,
-                    // 折线样式还支持 'dashed'
-                    strokeStyle: "solid",
-                    // strokeStyle是dashed时有效
-                    strokeDasharray: [10, 5],
-                    lineJoin: 'round',
-                    lineCap: 'round',
-                    zIndex: 50,
-                })
-                // 创建一个 icon
-                var endIcon = new AMap.Icon({
-                    size: new AMap.Size(25, 34),
-                    image: 'https://osscold.baozhida.cn/images/dir-marker.png',
-                    imageSize: new AMap.Size(135, 40),
-                    imageOffset: new AMap.Pixel(-95, -3)
-                });
-
-                // 将 icon 传入 marker
-                var endMarker = new AMap.Marker({
-                    position: new AMap.LngLat(path2[path2.length-1].lng,path2[path2.length-1].lat),
-                    icon: endIcon,
-                    offset: new AMap.Pixel(-13, -30)
-                });
-                if(Admin_rh == 0 && T_sn_T_id.indexOf("YD") != -1){
-                    data[0].T_rh = "-"
-                }
-                AMap.event.addListener(endMarker, 'click', function () {
-                    //创建信息窗口
-                    infoWindow = new AMap.InfoWindow({
-                        isCustom: true,  //使用自定义窗体
-                        content: "<div style='height: 28px;background-color: "+style_s+";border: 1px solid #ccc;padding: 2px;float: contour'>" +
-                            "<div style='background-color: #69d1ff;position: absolute;top: -15px;left: 1px;padding: 0px 4px'>终点</div>" +
-                            "<span style='background-color: #FF9E9E;padding: 0px 2px;line-height'>温度:"+data[0].T_t+"</span>"+
-                            "<span style='background-color: #52FEEC;margin-left: 6px;padding:  0px 2px;line-height'>湿度:"+data[0].T_rh+"</span><br>"+
-                            "<span style='line-height'>"+data[0].T_time+"</span></div>",
-                        offset: new AMap.Pixel(0, -30)
-                    });
-                    //打开信息窗口
-                    infoWindow.open(map, [path2[path2.length-1].lng,path2[path2.length-1].lat]); //后面的参数指的是经纬度,在此显示窗口
-                });
-
-                // 创建一个 Icon
-                var startIcon = new AMap.Icon({
-                    // 图标尺寸
-                    size: new AMap.Size(25, 34),
-                    // 图标的取图地址
-                    image: 'https://osscold.baozhida.cn/images/dir-marker.png',
-                    // 图标所用图片大小
-                    imageSize: new AMap.Size(135, 40),
-                    // 图标取图偏移量
-                    imageOffset: new AMap.Pixel(-9, -3)
-                });
-
-                // 创建一个 Icon
-                var dianIcon = new AMap.Icon({
-
-                    // 图标的取图地址
-                    image: 'https://osscold.baozhida.cn/images/poi-marker-default.png',
-                    size: new AMap.Size(22, 28),  //图标所处区域大小
-                    imageSize: new AMap.Size(22,28) //图标大小
-                });
-
-                // 将 icon 传入 marker
-                var startMarker = new AMap.Marker({
-                    position: new AMap.LngLat(path2[0].lng,path2[0].lat),
-                    icon: startIcon,
-                    offset: new AMap.Pixel(-13, -30)
-                });
-                if(Admin_rh == 0 && T_sn_T_id.indexOf("YD") != -1){
-                    data[data.length - 1].T_rh = "-"
-                }
-                AMap.event.addListener(startMarker, 'click', function () {
-                    //创建信息窗口
-                    infoWindow = new AMap.InfoWindow({
-                        isCustom: true,  //使用自定义窗体
-                        content: "<div style='height: 28px;background-color: "+style_s+";border: 1px solid #ccc;padding: 2px;float: contour'>" +
-                            "<div style='background-color: #69d1ff;position: absolute;top: -15px;left: 1px;padding: 0px 4px'>起点</div>" +
-                            "<span style='background-color: #FF9E9E;padding: 0px 2px;line-height'>温度:"+data[data.length - 1].T_t+"</span>"+
-                            "<span style='background-color: #52FEEC;margin-left: 6px;padding:  0px 2px;line-height'>湿度:"+data[data.length - 1].T_rh+"</span><br>"+
-                            "<span style='line-height'>"+data[data.length - 1].T_time+"</span></div>",
-                        offset: new AMap.Pixel(0, -30)
-                    });
-                    //打开信息窗口
-                    infoWindow.open(map, [path2[0].lng,path2[0].lat]); //后面的参数指的是经纬度,在此显示窗口
-                });
-
-                list_marker = []
-                // 所有 标记点  信息
-                for (let ix = 0; ix < path2.length; ix++) {
-                    if(ix == 0 || ix == path2.length - 1){
-                        continue
-                    }
-                    var marker = new AMap.Marker({
-                        position: new AMap.LngLat(path2[ix].lng,path2[ix].lat),
-                        icon: dianIcon,
-                    });
-                    list_marker.push(marker)
-                    ddid = data.length - ix - 1  // -
-                    style_s = "#ffffff"
-                    if(data[ddid].T_t <  data[ddid].T_Tlower || data[ddid].T_rh < data[ddid].T_RHlower){
-                        style_s = "#ff7070"
-                    }
-                    if(data[ddid].T_t >  data[ddid].T_Tupper || data[ddid].T_rh > data[ddid].T_RHupper){
-                        style_s = "#ff7070"
-                    }
-
-                    // label默认蓝框白底左上角显示,样式className为:amap-marker-label
-                    // marker.setLabel({
-                    //     offset: new AMap.Pixel(10, 0),  //设置文本标注偏移量
-                    //     content: "<spen style='background: transparent;'>"+ddid+"</spen>", //设置文本标注内容
-                    //     direction: 'center' //设置文本标注方位
-                    // });
-
-                    if(Admin_rh == 0 && T_sn_T_id.indexOf("YD") != -1){
-                        data[ddid].T_rh = "-"
-                    }
-
-                    AMap.event.addListener(list_marker[list_marker.length - 1], 'click', function () {
-                        console.log("ix:",ix)
-                        ddid = data.length - ix - 1
-                        //创建信息窗口
-                        infoWindow = new AMap.InfoWindow({
-                            isCustom: true,  //使用自定义窗体
-                            content: "<div style='height: 28px;background-color: "+style_s+";border: 1px solid #ccc;padding: 2px;float: contour'>" +
-                                "<div style='background-color: #69d1ff;position: absolute;top: -15px;left: 1px;padding: 0px 4px'>"+ddid+"</div>" +
-                                "<span style='background-color: #FF9E9E;padding: 0px 2px;line-height'>温度:"+data[ddid].T_t+"</span>"+
-                                "<span style='background-color: #52FEEC;margin-left: 6px;padding:  0px 2px;line-height'>湿度:"+data[ddid].T_rh+"</span><br>"+
-                                "<span style='line-height'>"+data[ddid].T_time+"</span></div>",
-                            offset: new AMap.Pixel(0, -30)
-                        });
-                        //打开信息窗口
-                        infoWindow.open(map, [path2[ix].lng,path2[ix].lat]); //后面的参数指的是经纬度,在此显示窗口
-                    });
-
-
-                    marker.setMap(map);
-
-
-                }
-
-                // 条纹
-                var polyline1 = new AMap.Polyline({
-                    path:path2,
-                    strokeWeight:8,
-                    strokeOpacity:0.8,
-                    strokeColor:'#426dff',
-                    showDir:true
-                });
-                polyline1.setMap(map);
-
-
-                map.add([ startMarker, endMarker]);
-                map.setFitView(null, false, [150, 60, 100, 60]);
-
-                //
-                // // 轨迹纠偏
-                // map.getCenter();
-                // if(!graspRoad) {
-                //     graspRoad = new AMap.GraspRoad()
-                // }
-                // var pathParam = []
-                // for(var i=0;i<path2.length;i+=1){
-                //     pathParam.push({"x":path2[i].R,"y":path2[i].Q,"sp":1,"ag":1, "tm":1})
-                // }
-                // console.log("pathParam:",pathParam)
-                // graspRoad.driving(pathParam,function(error,result) {
-                //     if (!error) {
-                //         var path3 = [];
-                //         var newPath = result.data.points;
-                //         console.log("newPath:",newPath)
-                //         for (var i = 0; i < newPath.length; i += 1) {
-                //             path3.push([newPath[i].x, newPath[i].y])
-                //         }
-                //         var newLine = new AMap.Polyline({
-                //             path: path3,
-                //             strokeWeight: 8,
-                //             strokeOpacity: 0.8,
-                //             strokeColor: '#0091ea',
-                //             showDir: true
-                //         })
-                //         map.add(newLine)
-                //         map.setFitView()
-                //     }else {
-                //         console.log(error)
-                //     }
-                //
-                // })
-                //
-
-            }
-        });
-
-
-
-
-
-
-    }
-
-
-    function dateChangeFormat(format, date) {
-        date = new Date(date);
-        const dataItem = {
-            'Y+': date.getFullYear().toString(),
-            'm+': (date.getMonth() + 1).toString(),
-            'd+': date.getDate().toString(),
-            'H+': date.getHours().toString(),
-            'M+': date.getMinutes().toString(),
-            'S+': date.getSeconds().toString(),
-        };
-        Object.keys(dataItem).forEach((item) => {
-            const ret = new RegExp(`(${item})`).exec(format);
-            if (ret) {
-                format = format.replace(ret[1], ret[1].length === 1 ? dataItem[item] : dataItem[item].padStart(ret[1].length, '0'));
-            }
-        });
-        return format;
-    }
-
-
-
-</script>
-<script src="https://webapi.amap.com/maps?v=1.4.15&key=f41c8fbdd908f420f6babe5ab38bf574&callback=init&plugin=AMap.GraspRoad"></script>
-<style>
-    .amap-marker-label{
-        background: transparent;
-    }
-    .layui-card-body{
-        line-height: 16px;
-    }
-    #container .amap-marker-label{border:0 none;white-space: nowrap; margin: 0px;padding: 0px}
-</style>
-</html>

+ 0 - 52
views/Data/DataPlane.html

@@ -1,52 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.cookie.min.js"></script>
-    <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-    <script src="https://osscold.baozhida.cn/js/echarts.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-</head>
-
-<body>
-<div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-                <a><cite>宝智达</cite></a>
-            </span>
-    <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right"
-       onclick="location.reload()" title="刷新">
-        <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-    </a>
-</div>
-<div class="layui-fluid">
-    <div class="layui-row">
-        <!-- // 传感器 选择-->
-        <div class="layui-col-md12">
-
-
-            <img src="https://osscold.baozhida.cn/images/平面图.png" width="100%"/></div>
-
-
-    </div>
-
-
-
-
-</div>
-
-</div>
-</body>
-
-
-</html>

+ 0 - 672
views/Data/DataReal.html

@@ -1,672 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm" style="overflow-y: hidden;">
-
-<head>
-    <meta charset="UTF-8">
-
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-    <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.cookie.min.js"></script>
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]--></head>
-    <style>
-        .text_limit{
-            overflow:hidden;
-            text-overflow:ellipsis;
-            white-space:nowrap
-        }
-    </style>
-<body>
-<div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-    <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right"
-       onclick="location.reload()" title="刷新">
-        <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-    </a>
-</div>
-<div class="layui-fluid" style="padding: 15px;">
-    <div class="layui-row">
-        <!-- // 传感器 选择-->
-        <div class="layui-col-md4">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-                    <div class="layui-row" style="margin: 0px 10px">
-                        <div class="layui-col">
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <input value="" type="text" id="D_Name" name="D_Name" placeholder="请输入 名称"
-                                       autocomplete="off"
-                                       class="layui-input"></div>
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <input value="" type="text" id="D_T_sn" name="D_T_sn" placeholder="请输入 SN"
-                                       autocomplete="off"
-                                       class="layui-input"></div>
-                            <div class="layui-input-inline layui-show-xs-block">
-                                <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach"
-                                        onclick="get_Device_list(0)">
-                                    <i class="layui-icon">&#xe615;</i></button>
-                            </div>
-                            <div w id="Device_list" style="width: 98%; overflow: hidden;margin-top: 10px">
-                                <!--<div class="layui-col"style="height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;">-->
-                                <!--    <img style="float: left;width: 50px;margin: 0px 10px" src="https://osscold.baozhida.cn/images/设备管理-1.png" height="50"-->
-                                <!--         width="40"/>-->
-                                <!--    <div style="float: left;">-->
-                                <!--        <div style="margin-top: 4px;font-size: 15px">SN:KF20210510143443</div>-->
-                                <!--        <div style="margin-top: 1px;font-size: 15px">主机名称:士大夫撒地方递四方速递</div>-->
-                                <!--    </div>-->
-                                <!--    <div class="layui-card-header" style="float: right;">-->
-                                <!--        <button class="layui-btn  layui-btn-normal" style="float: right;margin-top: 11px"-->
-                                <!--                onclick="">-->
-                                <!--            <i class="iconfont" style="margin-right: 4px">&#xe6f7;</i> 绑定-->
-                                <!--        </button>-->
-                                <!--    </div>-->
-                                <!--</div>-->
-                            </div>
-
-                            <div style="height: 70px">
-                                <div class="layui-card-body ">
-                                    <div class="page">
-                                        <div id="Device_list_Pages">
-
-                                            <!--                                    <a class="prev" href="">&lt;&lt;</a>-->
-
-                                            <!--                                    <a class="num" href="">1222</a>-->
-
-                                            <!--                                    <span class="current">111</span>-->
-
-                                            <!--                                    <a class="num" href="">444</a>-->
-                                            <!--                                    <a class="next" href="">&gt;&gt;</a>-->
-
-                                        </div>
-
-                                    </div>
-                                    <div style="color: #1E9FFF;text-align: center" id="Device_list_Pages_x"></div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <div class="layui-col-md8">
-
-            <div class="layui-card" style="padding: 10px">
-                <div style="margin: 10px" >
-                    <span id="T_time" style="font-size: 14px">更新时间:等待同步中.....</span><img style="margin-left: 2px"
-                                                                 src="https://osscold.baozhida.cn/images/等待.gif" height="20"
-                                                                 width="20"/>
-                </div>
-                <div class="layui-col" id="DeviceSensor_list" style="max-height: 663px;overflow-y: auto" >
-
-
-                </div>
-            </div>
-
-        </div>
-
-
-    </div>
-
-
-</div>
-<script>
-
-    function ChangeDiv(e) {
-        var divs = document.getElementsByClassName("ChangeDiv");
-        var len = divs.length;
-        for(var i=0;i<len;i++){
-            divs[i].style.border = "1px solid #ffffff";
-        }
-        e.style.border = "1px solid #ed0000";
-    }
-    //获取url中的参数
-    function getQueryString(name) {
-        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
-        var r = window.location.search.substr(1).match(reg);
-        if (r != null)
-            return decodeURIComponent(r[2]);
-        return null;
-    }
-    function timestampToTime(timestamp) {
-        if(timestamp == undefined){
-            return "<img src=\"https://osscold.baozhida.cn/images/等待.gif\" style='float: left' height=\"16\" width=\"16\"/>"
-        }
-        var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
-        Y = date.getFullYear() + '-';
-        M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
-        D = date.getDate() + ' ';
-        h = date.getHours() + ':';
-        m = date.getMinutes() + ':';
-        s = date.getSeconds();
-        return Y + M + D + h + m + s;
-    }
-    function dateChangeFormat(format, date) {
-        date = new Date(date);
-        const dataItem = {
-            'Y+': date.getFullYear().toString(),
-            'm+': (date.getMonth() + 1).toString(),
-            'd+': date.getDate().toString(),
-            'H+': date.getHours().toString(),
-            'M+': date.getMinutes().toString(),
-            'S+': date.getSeconds().toString(),
-        };
-        Object.keys(dataItem).forEach((item) => {
-            const ret = new RegExp(`(${item})`).exec(format);
-            if (ret) {
-                format = format.replace(ret[1], ret[1].length === 1 ? dataItem[item] : dataItem[item].padStart(ret[1].length, '0'));
-            }
-        });
-        return format;
-    }
-    function dateChangeFormat_x(format, date) {
-        date = new Date(date*1000);
-        const dataItem = {
-            'Y+': date.getFullYear().toString(),
-            'm+': (date.getMonth() + 1).toString(),
-            'd+': date.getDate().toString(),
-            'H+': date.getHours().toString(),
-            'M+': date.getMinutes().toString(),
-            'S+': date.getSeconds().toString(),
-        };
-        Object.keys(dataItem).forEach((item) => {
-            const ret = new RegExp(`(${item})`).exec(format);
-            if (ret) {
-                format = format.replace(ret[1], ret[1].length === 1 ? dataItem[item] : dataItem[item].padStart(ret[1].length, '0'));
-            }
-        });
-        return format;
-    }
-    // 时间比较
-    function dateChangeFormat_xiangcha( date) {
-        // console.log("===========")
-        a_t = (new Date(dateChangeFormat('YYYY-mm-dd HH:MM:SS', date)).getTime()/1000)
-        b_t = ((new Date()) / 1000)
-
-        // console.log("a_t:",a_t,"b_t:",b_t,">",b_t - a_t)
-        return  parseInt(b_t - a_t) ;
-    }
-    function To_str(data) {
-        if(data == undefined){
-            return "<img src=\"https://osscold.baozhida.cn/images/等待.gif\" style='float: left' height=\"16\" width=\"16\"/>"
-        }
-        if(data+"".length > 5){
-            return data+"".slice(0,5);
-        }
-        return data;
-    }
-    function To_unm(data) {
-        if(data == undefined){
-            return "<img src=\"https://osscold.baozhida.cn/images/等待.gif\" style='float: left' height=\"16\" width=\"16\"/>"
-        }
-
-        return data.toFixed(1);
-    }
-
-    layui.use(['form', 'layer', "layedit"],
-
-        function () {
-            $ = layui.jquery;
-            var form = layui.form,
-                layer = layui.layer;
-            var layedit = layui.layedit
-
-            layedit.set({
-                uploadImage: {
-                    url: '/UpFile' //接口url
-                }
-            });
-
-            //构建一个默认的编辑器
-            var index = layedit.build('T_text', {
-                height: 580 //设置编辑器高度,
-
-            });
-            //监听提交
-            form.on('submit(add)',
-                function (data) {
-                    console.log("=== submit(add) ==");
-                    // loading = layer.load(0, {
-                    //     shade: false,
-                    //     time: 99 * 1000
-                    // });
-                    console.log(data);
-                    T_enwarning = 0
-                    if (data.field.enwarning != undefined) {
-                        T_enwarning = 1
-                    }
-
-
-                    return false;
-                });
-
-            // //监听指定开关
-            // form.on('switch(switchTest)', function(data){
-            //     layer.msg('开关checked:'+ (this.checked ? 'true' : 'false'), {
-            //         offset: '6px'
-            //     });
-            //     layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF', data.othis)
-            // });
-
-            //表单取值
-            // layui.$('#LAY-component-form-getval').on('click', function(){
-            //     var data = form.val('example');
-            //     alert(JSON.stringify(data));
-            // });
-
-            // var loading = layer.load(0, {
-            //     shade: false,
-            //     time: 99 * 1000
-            // });
-
-
-
-
-        });
-
-
-    var Device_list = []
-    var Device_Sn = ""
-    var timestamp_V = (new Date()) / 1000;
-
-    /// 设备库
-    get_Device_list(0)
-
-    function get_Device_list(page) {
-
-        $.ajax({
-            type: 'POST',
-            url: '/Device/DeviceBind_List',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                Admin_uuid: "",
-                // Class_1: $("#D_Name").val(),
-                T_sn: $("#D_T_sn").val(),
-                Name: $("#D_Name").val(),
-                page: page,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    $('#Device_list').html("")
-                    $('#Device_list_Pages').html("")
-                    $('#Device_list_Pages_x').html("")
-                    Device_list = result.Data.Device_lite
-                    if (Device_list.length == 0) {
-                        $('#Device_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px \">没有设备</div>")
-                        return
-                    }
-
-                    Add_Device_list(result.Data.Device_lite) // 列表
-                    Add_Device_list_Pages(result.Data.Pages) // 分页
-                    $('#Device_list_Pages_x').append("页数:" + result.Data.Page + "/" + result.Data.Page_size + "  总数:" + result.Data.Num);
-
-
-                } else {
-
-
-                }
-            }
-        });
-
-
-    }
-    function Add_Device_list(Device_lite) {
-        Device_Sn = Device_lite[0].T_sn
-        console.log(Device_Sn)
-        for (let i = 0; i < Device_lite.length; i++) {
-
-            $('#Device_list').append("" +
-                "<div onclick=\"ChangeDiv(this);f_Sand('" + Device_lite[i].T_sn + "')\" class=\"layui-col ChangeDiv\"style=\"border: 1px solid #ffffff;height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;margin-top: 6px\">\n" +
-                "     <img style=\"float: left;width: 50px;margin: 0px 10px\" src=\"https://osscold.baozhida.cn/images/设备管理-1.png\" height=\"50\"\n" +
-                "          width=\"40\"/>\n" +
-                "     <div style=\"float: left;width: 69%\">\n" +
-                "         <div style=\"margin-top: 4px;font-size: 15px;\" >SN:" + Device_lite[i].T_sn + "</div>\n" +
-                "         <div style=\"margin-top: 1px;font-size: 15px;\">主机名称:" + Device_lite[i].T_devName + "</div>\n" +
-                "     </div>\n" +
-                "     <div class=\"layui-card-header\" style=\"float: right;margin-top: 6px;color: #1E9FFF\">\n" +
-                "         》\n" +
-                "     </div>\n" +
-                " </div>")
-        }
-
-    }
-    function Add_Device_list_Pages(Pages) {
-
-
-        for (let i = 0; i < Pages.length; i++) {
-            elem = Pages[i]
-            switch (elem.A) {
-                case 1:
-                    $('#Device_list_Pages').append("<a class=\"prev\" onclick='get_Device_list(" + elem.V + ")' >&lt;&lt;</a>\n");
-                    break;
-                case 2:
-                    $('#Device_list_Pages').append("<a class=\"num\" onclick='get_Device_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 3:
-                    $('#Device_list_Pages').append("<span class=\"current\">" + elem.V + "</span>\n");
-                    break;
-                case 4:
-                    $('#Device_list_Pages').append("<a class=\"num\" onclick='get_Device_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 5:
-                    $('#Device_list_Pages').append("<a class=\"next\" onclick='get_Device_list(" + elem.V + ")' >&gt;&gt;</a>\n");
-                    break;
-            }
-        }
-    }
-
-
-    function Add_DeviceSensor_list_DeviceSensor_List(page){
-
-        $.ajax({
-            type: 'POST',
-            url: '../Device/DeviceSensor_List',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                Sn:Device_Sn,
-                page: page,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    if(page == 0)
-                        $('#DeviceSensor_list').html("")
-
-                    Add_DeviceSensor_list_g(result.Data.DeviceSensor_lite)
-
-                    if(result.Data.Page_size > result.Data.Page ){
-                        Add_DeviceSensor_list_DeviceSensor_List(result.Data.Page+1)
-                    }
-
-                } else {
-
-                }
-            }
-        });
-    }
-    function Add_DeviceSensor_list_g(data) {
-        for (let i = 0; i < data.length; i++) {
-            // console.log(i," "+data[i].name)
-
-            src_img = "温湿度传感器-1.png"
-            Ds = data[i]
-            x_ = dateChangeFormat_xiangcha(Ds.T_time)
-            outtime = 60 * 5
-
-            if(( 0 ==  Ds.T_Tlower && 0 == Ds.T_RHlower) && ( 0 ==  Ds.T_Tupper && 0 == Ds.T_RHupper) ){
-                if(x_ < outtime)  {
-                    // 传感器正常
-                    src_img = "温湿度传感器-1.png"
-                }else {
-                    // 传感器超时
-                    src_img = "温湿度传感器-2.png"
-                }
-            }else if (x_ < outtime) {
-                if(Ds.T_t <  Ds.T_Tlower || Ds.T_rh < Ds.T_RHlower || Ds.T_t >  Ds.T_Tupper || Ds.T_rh > Ds.T_RHupper ){
-                    // 传感器 超标
-                    src_img = "温湿度传感器-3.png"
-                }else {
-                    // 传感器正常
-                    src_img = "温湿度传感器-1.png"
-                }
-            }else {
-                // 传感器超时
-                src_img = "温湿度传感器-2.png"
-            }
-
-
-            $('#DeviceSensor_list').append("" +
-                "<div name='"+data[i].T_sn+"' class=\"layui-col-xs6 layui-col-sm4 layui-col-md3 layui-col-lg3\" style=\"height: 104px; \" >\n" +
-                "    <div  name='"+data[i].T_id+"' style=\"margin: 4px;height: 96px; border-radius:5px;background-color:#f1f1f1;\"\n" +
-                "         >\n" +
-                "        <div class=\"layui-row\" style=\"text-align: center;font-size: 15px;background-color: #8ecbff;border-radius:5px;\">\n" +
-                "            <span style=\"float: left;background-color: #69d1ff;padding: 0px 2px;border-radius:5px;\">"+data[i].T_id+"</span>"+To_str(data[i].T_name)+"\n" +
-                "        </div>\n" +
-                "        <div class=\"layui-row\" >\n" +
-                "            <div class=\" layui-col-md4 \">\n" +
-                "                <img  name='T_img' src=\"https://osscold.baozhida.cn/images/"+src_img+"\" height=\"50\" width=\"50\"/>\n" +
-                "            </div>\n" +
-                "            <div class=\"layui-col-md8\" style=\"margin-top: 3px;white-space:nowrap\">\n" +
-                "                <div style=\"width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;\">\n" +
-                "                    <span name='T_t' style=\"width: 48px;float: left\">"+To_unm(data[i].T_t)+"℃</span>\n" +
-                "                    <span name='T_T' style=\"font-size: 10px;float: left;margin-top: 4px;\">"+data[i].T_Tlower+"~"+data[i].T_Tupper+"</span>\n" +
-                "                </div>\n" +
-                "                <div style=\"width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;\">\n" +
-                "                    <span name='T_rh' style=\"width: 48px;float: left\">"+To_unm(data[i].T_rh)+"%</span>\n" +
-                "                    <span name='T_RH' style=\"font-size: 10px;float: left;margin-top: 4px;\">"+data[i].T_RHlower+"~"+data[i].T_RHupper+"</span>\n" +
-                "                </div>\n" +
-                "            </div>\n" +
-                "            <div  class=\" layui-col-md12 \" style=\"padding-top: -2px;font-size: 16px;text-align: center;margin-top: -2px;border-top:1px solid  #000\">\n" +
-                "              <span name='T_time'>"+dateChangeFormat('YYYY-mm-dd HH:MM:SS', data[i].T_time)+"</span>\n" +
-                "            </div>\n" +
-                "        </div>\n" +
-                "    </div>\n" +
-                "</div>")
-        }
-
-    }
-    function Pu_DeviceSensor_list_g(sn,data) {
-
-        for (let i = 0; i < data.length; i++) {
-            // console.log(i," "+data[i].name)
-            sn_ = $("div[name='"+sn+"']")
-            // console.log("sn_:",sn_.length)
-            if(sn_.length > 0){
-                id_ = sn_.find("div[name='"+data[i].id+"']")
-                // console.log("id_:",sn_.length)
-                if(id_.length > 0){
-                    rc_img = "温湿度传感器-1.png"
-                    Ds = data[i]
-                    x_ = dateChangeFormat_xiangcha(dateChangeFormat_x('YYYY-mm-dd HH:MM:SS', data[i].UT))
-                    outtime = 60 * 5
-
-                    if(( 0 ==  Ds.Tlower && 0 == Ds.RHlower) && ( 0 ==  Ds.Tupper && 0 == Ds.RHupper) ){
-                        if(x_ < outtime)  {
-                            // 传感器正常
-                            src_img = "温湿度传感器-1.png"
-                        }else {
-                            // 传感器超时
-                            src_img = "温湿度传感器-2.png"
-                        }
-                    }else if (x_ < outtime) {
-                        if(Ds.T <  Ds.Tlower || Ds.RH < Ds.RHlower || Ds.T >  Ds.Tupper || Ds.RH > Ds.RHupper ){
-                            // 传感器 超标
-                            src_img = "温湿度传感器-3.png"
-                        }else {
-                            // 传感器正常
-                            src_img = "温湿度传感器-1.png"
-                        }
-                    }else {
-                        // 传感器超时
-                        src_img = "温湿度传感器-2.png"
-                    }
-
-                    id_.find("img")[0].src = "https://osscold.baozhida.cn/images/"+src_img
-
-
-
-                    id_.find("span")[1].innerHTML = To_unm(data[i].T)+"℃"
-                    id_.find("span")[2].innerHTML = data[i].Tlower+"~"+data[i].Tupper
-                    id_.find("span")[3].innerHTML = To_unm(data[i].RH)+"%"
-                    id_.find("span")[4].innerHTML = data[i].RHlower+"~"+data[i].RHupper
-                    id_.find("span")[5].innerHTML = dateChangeFormat_x('YYYY-mm-dd HH:MM:SS', data[i].UT)
-                }
-
-
-            }
-
-
-        }
-
-    }
-
-    function Add_DeviceSensor_list(data) {
-        $('#DeviceSensor_list').html("")
-
-        for (let i = 0; i < data.length; i++) {
-            // console.log(i," "+data[i].name)
-            $('#DeviceSensor_list').append("" +
-                "<div class=\"layui-col-xs6 layui-col-sm4 layui-col-md3 layui-col-lg3\" style=\"height: 104px; \" >\n" +
-                "    <div style=\"margin: 4px;height: 96px; border-radius:5px;background-color:#f1f1f1;\"\n" +
-                "         >\n" +
-                "        <div class=\"layui-row\" style=\"text-align: center;font-size: 15px;background-color: #8ecbff;border-radius:5px;\">\n" +
-                "            <span style=\"float: left;background-color: #69d1ff;padding: 0px 2px;border-radius:5px;\">"+data[i].id+"</span>"+To_str(data[i].name)+"\n" +
-                "        </div>\n" +
-                "        <div class=\"layui-row\" >\n" +
-                "            <div class=\" layui-col-md4 \">\n" +
-                "                <img src=\"https://osscold.baozhida.cn/images/温湿度传感器-1.png\" height=\"50\" width=\"50\"/>\n" +
-                "            </div>\n" +
-                "            <div class=\"layui-col-md8\" style=\"margin-top: 3px;white-space:nowrap\">\n" +
-                "                <div style=\"width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;\">\n" +
-                "                    <span style=\"width: 48px;float: left\">"+To_unm(data[i].T)+"℃</span>\n" +
-                "                    <span style=\"font-size: 10px;float: left;margin-top: 4px;\">"+data[i].Tlower+"~"+data[i].Tupper+"</span>\n" +
-                "                </div>\n" +
-                "                <div style=\"width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;\">\n" +
-                "                    <span style=\"width: 48px;float: left\">"+To_unm(data[i].RH)+"%</span>\n" +
-                "                    <span style=\"font-size: 10px;float: left;margin-top: 4px;\">"+data[i].RHlower+"~"+data[i].RHlower+"</span>\n" +
-                "                </div>\n" +
-                "            </div>\n" +
-                "            <div class=\" layui-col-md12 \" style=\"padding-top: -2px;font-size: 16px;text-align: center;margin-top: -2px;border-top:1px solid  #000\">\n" +
-                "                "+timestampToTime(data[i].UT)+"\n" +
-                "            </div>\n" +
-                "        </div>\n" +
-                "    </div>\n" +
-                "</div>")
-        }
-
-    }
-    // 页面 加载完成后执行
-    window.onload = function () {
-        console.log("页面 加载完成后执行")
-
-        setTimeout(function(){
-            console.log("等待执行")
-
-            f_Sand(Device_Sn)
-            //要执行的代码
-        },2000);
-    }
-    function f_Sand(sn) {
-        console.log(sn)
-        Device_Sn = sn
-
-        $('#DeviceSensor_list').html("<img src=\"https://osscold.baozhida.cn/images/等待.gif\" style='margin: 20px auto;' height=\"36\" width=\"36\"/>")
-        Add_DeviceSensor_list_DeviceSensor_List(0)
-        websocket.send("{\"Sn\":\"" + sn + "\"}");
-    }
-
-
-    var websocket = null;
-
-    //判断当前浏览器是否支持WebSocket
-    run_WebSocket()
-    function run_WebSocket() {
-        console.log("run_WebSocket");
-        if ('WebSocket' in window) {
-            url = window.location.host
-            if(url.indexOf("127.0.0.1") != -1){
-                websocket = new WebSocket("ws://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
-            }else {
-                websocket = new WebSocket("wss://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
-            }
-
-        } else {
-            alert('Dont support websocket')
-        }
-    }
-
-    //连接成功建立的回调方法
-    websocket.onopen = function () {
-        console.log("open");
-        // send("{\"Sn\":\"" + getQueryString("Sn") + "\"}")
-    };
-
-    //接收到消息的回调方法
-    websocket.onmessage = function (event) {
-        // console.log(event.data)
-        var obj = JSON.parse(event.data);
-        // console.log(obj.type)
-        if(obj.sn != Device_Sn){
-            console.log(obj.sn,"跳过。。  Device_Sn = ",Device_Sn)
-            return
-        }
-        console.log(obj.sn,"进入。。  Device_Sn = ",Device_Sn)
-        if (obj.type == 0 ) {
-            console.log("data.length:",obj.sensor.length)
-            console.log("data:",obj.sensor)
-
-            Pu_DeviceSensor_list_g(obj.sn,obj.sensor)
-
-            if(obj.type == 0 ){
-                if(Math.abs(timestamp_V - obj.sensor[0].UT).toFixed(0) > 0){
-                    $("#T_time").html("刷新时间:" + timestampToTime(obj.sensor[0].UT) + "   上传刷新间隔:" + Math.abs(timestamp_V - obj.sensor[0].UT).toFixed(0) + "s")
-
-                    // console.log(timestamp_V, obj.sensor[0].UT, "   刷新间隔:" + (timestamp_V - obj.sensor[0].UT) + "s")
-                    timestamp_V = obj.sensor[0].UT
-                }
-
-
-            }
-
-
-        }
-
-
-    };
-
-    //连接关闭的回调方法
-    websocket.onclose = function () {
-        console.log("close");
-        setTimeout(function(){
-            //要执行的代码
-            run_WebSocket();
-        },2000);
-
-
-    };
-
-    //连接发生错误的回调方法
-    websocket.onerror = function () {
-        console.log("error");
-        setTimeout(function(){
-            //要执行的代码
-            run_WebSocket();
-        },2000);
-    };
-
-    //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
-    window.onbeforeunload = function () {
-        websocket.close();
-        console.log("窗口关闭事件");
-    };
-    //关闭连接
-    function closeWebSocket() {
-        websocket.close();
-        console.log("onbeforeunload");
-        window.clearInterval(intervalId);
-    }
-
-    //发送消息
-    function send(message) {
-        websocket.send(message);
-    }
-</script>
-
-</body>
-
-</html>

+ 0 - 614
views/Data/DataRealCalss-.html

@@ -1,614 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.cookie.min.js"></script>
-    <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-</head>
-
-<body>
-<div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-    <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right"
-       onclick="location.reload()" title="刷新">
-        <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-    </a>
-</div>
-<div class="layui-fluid">
-    <div class="layui-row">
-        <!-- // 传感器 选择-->
-        <div class="layui-col-md12">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-                    <form class="layui-form layui-col-space5" οnsubmit="return false;">
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="" type="text" id="D_T_sn" name="D_T_sn" placeholder="请输入 SN"
-                                   autocomplete="off"
-                                   class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="" type="text" id="D_Name" name="D_Name" placeholder="请输入 传感器名称"
-                                   autocomplete="off"
-                                   class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <select id="Class_1" name="Class_1">
-                                <option value=0>所有分类</option>
-                                {{range $index, $elem := .Class_List}}
-                                <option value={{$elem.Id}}>{{$elem.T_name}}
-                                </option>
-
-                                {{end}}
-
-
-                            </select>
-                        </div>
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="get_DeviceSensor_list(0)">
-                                <i class="layui-icon">&#xe615;</i></div>
-                        </div>
-                    </form>
-                    <hr>
-                </div>
-                <div class="layui-card-body " style="margin-top: -20px">
-                    <div id="DeviceSensor_list" style="width: 98%; overflow: hidden;">
-                        <div style="color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px">加载中...</div>
-                        <!--                        <div class="layui-col"-->
-                        <!--                             style="height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;">-->
-                        <!--                            <img style="float: left;width: 50px;margin: 0px 10px" src="https://osscold.baozhida.cn/images/温湿度传感器-1.png"-->
-                        <!--                                 height="50"-->
-                        <!--                                 width="40"/>-->
-                        <!--                            <div style="float: left;">-->
-                        <!--                                <div style="margin-top: 4px;font-size: 14px">士大夫撒地方递四方速递</div>-->
-                        <!--                                <div style="margin-top: -3px;font-size: 12px">SN:KF20210510143443 [1]</div>-->
-                        <!--                            </div>-->
-                        <!--                            <div class="layui-card-header"-->
-                        <!--                                 style="float: right;padding-left: 0px;padding-top: 6px;color: #1E9FFF">-->
-                        <!--                                》-->
-                        <!--                            </div>-->
-                        <!--                        </div>-->
-                    </div>
-                </div>
-                <div class="layui-card-body " >
-                    <div style="height: 100px">
-
-                        <div >
-                            <span id="T_time" style="font-size: 14px">更新时间:等待同步中.....</span><img style="margin-left: 2px"
-                                                                                                 src="https://osscold.baozhida.cn/images/等待.gif" height="20"
-                                                                                                 width="20"/>
-                        </div>
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div id="DeviceSensor_list_Pages">
-
-
-                                    <!--                                    <a class="prev" href="">&lt;&lt;</a>-->
-
-                                    <!--                                    <a class="num" href="">1222</a>-->
-
-                                    <!--                                    <span class="current">111</span>-->
-
-                                    <!--                                    <a class="num" href="">444</a>-->
-                                    <!--                                    <a class="next" href="">&gt;&gt;</a>-->
-
-                                </div>
-
-                            </div>
-                            <div style="color: #1E9FFF;text-align: center" id="DeviceSensor_list_Pages_x"></div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-
-
-    </div>
-
-
-
-
-</div>
-
-</div>
-</body>
-<script>
-
-    layui.use(['laydate', 'form'],
-        function () {
-            var laydate = layui.laydate;
-
-
-        });
-
-    var T_name = ""
-    var T_sn = ""
-    var T_class_id = 0
-
-    var T_id = 0
-    var T_sn_T_id = ""
-    var Time_start = ""
-    var Time_end = ""
-
-    var T_sn_list = []
-    var DeviceSensor_lite = []
-    var DeviceSensor_data  = []
-    var timestamp_V = (new Date()) / 1000;
-    var Out_time = 999;
-
-    /// ---------------   传感器列表
-    // 页面 加载完成后执行
-    window.onload = function () {
-        console.log("页面 加载完成后执行")
-        setInterval(function(){
-            //要执行的代码
-            // console.log("setInterval=====  1S")
-            xx = $("span[name='time_x']")
-            for (let i = 0; i < xx.length; i++) {
-                if(xx[i].innerHTML == "N"){
-                    continue;
-                }
-                if(xx[i].innerHTML > Out_time ){
-                    xx[i].innerHTML = "N"
-                }
-
-                xx[i].innerHTML = parseInt(xx[i].innerHTML) + 1
-
-            }
-
-            var now = new Date();
-
-            $("#T_time").html("当期时间:"+now.getFullYear()+"-"+(now.getMonth()+1)+"-"+getNow(now.getDate())+" "+getNow(now.getHours())+":"+getNow(now.getMinutes())+":"+getNow(now.getSeconds())+"")
-        },1000);
-        //
-        setInterval(function(){
-            get_DeviceSensor_list(-1)
-        },3000);
-    }
-    function getNow(s) {
-        return s < 10 ? '0' + s : s;
-    }
-    T_page = 0
-    function get_DeviceSensor_list(page) {
-        if(page == -1){
-            page = T_page
-        }
-        T_page = page
-
-
-        T_sn = $("#D_T_sn").val();
-        T_name = $("#D_Name").val();
-        T_class_id = $("#Class_1").val();
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Sensor_List',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                T_sn: T_sn,
-                T_name: T_name,
-                T_class_id: parseInt(T_class_id),
-                page: page,
-                page_z: 30,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    $('#DeviceSensor_list').html("")
-                    $('#DeviceSensor_list_Pages').html("")
-                    $('#DeviceSensor_list_Pages_x').html("")
-                    DeviceSensor_lite = result.Data.DeviceSensor_lite
-                    if (DeviceSensor_lite.length == 0) {
-                        $('#DeviceSensor_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有设备</div>")
-                        return
-                    }
-                    Add_DeviceSensor_list(result.Data.DeviceSensor_lite) // 列表
-                    Add_DeviceSensor_list_Pages(result.Data.Pages) // 分页
-                    $('#DeviceSensor_list_Pages_x').append("页数:" + result.Data.Page + "/" + result.Data.Page_size + "  总数:" + result.Data.Num);
-
-                } else {
-
-                }
-            }
-        });
-        return false
-    }
-    function Add_DeviceSensor_list(data) {
-        $('#DeviceSensor_list').html("")
-        for (let i = 0; i < data.length; i++) {
-
-            // if(T_sn_list.indexOf(data[i].T_sn) == -1 ){
-            //     websocket.send("{\"Sn\":\"" + data[i].T_sn + "\"}");
-            //     T_sn_list.push(data[i].T_sn)
-            // }
-            src_img = "记录.png"
-            Ds = data[i]
-            x_ = dateChangeFormat_xiangcha(Ds.T_time)
-            outtime = 60 * 60 * 1
-            while (true){
-                // 初始化状态
-                src_img = "记录.png"
-                // 传感器正常
-                if(Ds.T_sn.indexOf("YD") != -1){
-                    if(Ds.T_monitor == 0 ){
-                        src_img = "停止.png"
-                    }
-                }
-
-                // 是否 超时
-                if(x_ > outtime)  {
-                    // 传感器超时
-                    src_img = "离线-线.png"
-                    if(Ds.T_sn.indexOf("YD") != -1){
-                       src_img = "离线.png"
-                    }
-                    break;
-                }
-
-
-                // 是否 超标
-                if(!(( 0 ==  Ds.T_Tlower && 0 == Ds.T_RHlower) && ( 0 ==  Ds.T_Tupper && 0 == Ds.T_RHupper))){
-                    if(Ds.T_t <  Ds.T_Tlower || Ds.T_rh < Ds.T_RHlower || Ds.T_t >  Ds.T_Tupper || Ds.T_rh > Ds.T_RHupper ){
-                        // 传感器 超标
-                        src_img = "报警.png"
-                    }
-                }
-
-                break;
-            }
-            DeviceTask_on = ""
-            if(Ds.T_sn.indexOf("YD") != -1){
-                DeviceTask_on = "onclick='DeviceTask_Post("+i+")'"
-            }
-
-
-            $('#DeviceSensor_list').append("" +
-                "<div name='"+data[i].T_sn+"' class=\"layui-col-xs5 layui-col-sm3 layui-col-md2 layui-col-lg2\" style=\"height: 104px; \" >\n" +
-                "    <div  name='"+data[i].T_id+"' style=\"margin: 4px;height: 96px; border-radius:5px;background-color:#f1f1f1;\"\n" +
-                "         >\n" +
-                "        <div class=\"layui-row\" style=\"text-align: center;font-size: 15px;background-color: #8ecbff;border-radius:5px;\">\n" +
-                "               <span style=\"float: left;background-color: #69d1ff;padding: 0px 2px;border-radius:5px;\" >"+data[i].T_id+"</span>"+
-                "               <span style=\"float: right;background-color: #AFFF005E;padding: 0px 2px;border-radius:5px;\" name='time_x' >"+To_time(data[i].T_time)+"</span>"+To_str(data[i].T_name)+"\n" +
-                "        </div>\n" +
-                "        <div class=\"layui-row\" >\n" +
-                "            <div class=\" layui-col-md4 \" style='padding-top: 3px;padding-left: 6px;' "+DeviceTask_on+">\n" +
-                "                <img  name='T_img' src=\"https://osscold.baozhida.cn/img/"+src_img+"\" height=\"35\" width=\"35\"/>\n" +
-                "            </div>\n" +
-                "            <div class=\"layui-col-md8\" style=\"margin-top: 3px;white-space:nowrap\">\n" +
-                "                <div style=\"width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;\">\n" +
-                "                    <span name='T_t' style=\"width: 48px;float: left\">"+To_unm(data[i].T_t)+"℃</span>\n" +
-                "                    <span name='T_T' style=\"font-size: 10px;float: left;margin-top: 1px;\">"+data[i].T_Tlower+"~"+data[i].T_Tupper+"</span>\n" +
-                "                </div>\n" +
-                "                <div style=\"width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;\">\n" +
-                "                    <span name='T_rh' style=\"width: 48px;float: left\">"+To_unm(data[i].T_rh)+"%</span>\n" +
-                "                    <span name='T_RH' style=\"font-size: 10px;float: left;margin-top: 1px;\">"+data[i].T_RHlower+"~"+data[i].T_RHupper+"</span>\n" +
-                "                </div>\n" +
-                "            </div>\n" +
-                "            <div  class=\" layui-col-md12 \" style=\"padding-top: -2px;font-size: 16px;text-align: center;margin-top: -2px;border-top:1px solid  #000\">\n" +
-                "              <span name='T_time'>"+dateChangeFormat('YYYY-mm-dd HH:MM:SS', data[i].T_time)+"</span>\n" +
-                "            </div>\n" +
-                "        </div>\n" +
-                "    </div>\n" +
-                "</div>")
-        }
-
-    }
-    function Add_DeviceSensor_list_Pages(Pages) {
-        for (let i = 0; i < Pages.length; i++) {
-            elem = Pages[i]
-            switch (elem.A) {
-                case 1:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"prev\" onclick='get_DeviceSensor_list(" + elem.V + ")' >&lt;&lt;</a>\n");
-                    break;
-                case 2:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 3:
-                    $('#DeviceSensor_list_Pages').append("<span class=\"current\">" + elem.V + "</span>\n");
-                    break;
-                case 4:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 5:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"next\" onclick='get_DeviceSensor_list(" + elem.V + ")' >&gt;&gt;</a>\n");
-                    break;
-            }
-        }
-    }
-    function Pu_DeviceSensor_list_g(sn,data) {
-
-        for (let i = 0; i < data.length; i++) {
-            // console.log(i," "+data[i].name)
-            sn_ = $("div[name='"+sn+"']")
-            // console.log("sn_:",sn_.length)
-            if(sn_.length > 0){
-                id_ = sn_.find("div[name='"+data[i].id+"']")
-                // console.log("id_:",sn_.length)
-                if(id_.length > 0){
-                    src_img = "温湿度传感器-1.png"
-                    Ds = data[i]
-                    x_ = dateChangeFormat_xiangcha(dateChangeFormat_x('YYYY-mm-dd HH:MM:SS', data[i].UT))
-                    outtime = 60 * 5
-
-
-                    // id_.find("img")[0].src = "https://osscold.baozhida.cn/images/"+src_img
-                    //
-
-
-                    id_.find("span")[1].innerHTML = "0"
-                    id_.find("span")[2].innerHTML = To_unm(data[i].T)+"℃"
-                    id_.find("span")[3].innerHTML = data[i].Tlower+"~"+data[i].Tupper
-                    id_.find("span")[4].innerHTML = To_unm(data[i].RH)+"%"
-                    id_.find("span")[5].innerHTML = data[i].RHlower+"~"+data[i].RHupper
-                    id_.find("span")[6].innerHTML = dateChangeFormat_x('YYYY-mm-dd HH:MM:SS', data[i].UT)
-
-                    console.log("更新:"+sn+">"+data[i].id)
-                }
-
-
-            }
-
-
-        }
-
-    }
-</script>
-
-
-<script>
-
-    function DeviceTask_Post(i) {
-        console.log(DeviceSensor_lite[i])
-        confirm_str = "停止"
-        T_task = "stop"
-        if(DeviceSensor_lite[i].T_monitor == 0){
-            confirm_str = "开始"
-            T_task = "start"
-        }
-
-        layer.confirm("确定"+confirm_str+"记录?", {
-            btn: ['确定'] //可以无限个按钮
-            ,btn1: function(index, layero){
-                $.ajax({
-                    type: 'POST',
-                    url: '../../Device/DeviceTask_Post',//发送请求
-                    data: {
-
-                        T_sn: DeviceSensor_lite[i].T_sn,
-                        T_task: T_task,
-                    },
-                    success: function (result) {
-                        console.log(result)
-                        layer.msg('提示:'+confirm_str+"记录 发送成功!请 等待同步显示",{time: 3000});
-                    }
-                });
-                return false
-            }
-        });
-
-
-
-    }
-
-</script>
-
-<script>
-
-    var websocket = null;
-
-    //判断当前浏览器是否支持WebSocket
-    run_WebSocket()
-    function run_WebSocket() {
-        console.log("run_WebSocket");
-        if ('WebSocket' in window) {
-            url = window.location.host
-            if(url.indexOf("127.0.0.1") != -1){
-                websocket = new WebSocket("ws://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
-            }else {
-                websocket = new WebSocket("wss://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
-            }
-
-        } else {
-            alert('Dont support websocket')
-        }
-    }
-
-
-
-
-    //连接成功建立的回调方法
-    websocket.onopen = function () {
-        console.log("open");
-        get_DeviceSensor_list(0)
-        // send("{\"Sn\":\"" + getQueryString("Sn") + "\"}")
-    };
-
-    //接收到消息的回调方法
-    websocket.onmessage = function (event) {
-        console.log(event.data)
-        var obj = JSON.parse(event.data);
-        // console.log(obj.type)
-        // if(obj.sn != Device_Sn){
-        //     console.log(obj.sn,"跳过。。  Device_Sn = ",Device_Sn)
-        //     return
-        // }
-        // console.log(obj.sn,"进入。。  Device_Sn = ",Device_Sn)
-        if (obj.type == 0 ) {
-            // console.log("data.length:",obj.sensor.length)
-
-            // Pu_DeviceSensor_list_g(obj.sn,obj.sensor)
-
-            if(obj.type == 0 ){
-                // $("#T_time").html("刷新时间:" + dateChangeFormat_x('YYYY-mm-dd HH:MM:SS', obj.sensor[0].UT) + "   上传刷新间隔:" + Math.abs(timestamp_V - obj.sensor[0].UT).toFixed(0) + "s")
-
-                // console.log(timestamp_V, obj.sensor[0].UT, "   刷新间隔:" + (timestamp_V - obj.sensor[0].UT) + "s")
-                timestamp_V = obj.sensor[0].UT
-
-            }
-
-
-        }
-
-
-    };
-
-    //连接关闭的回调方法
-    websocket.onclose = function () {
-        console.log("close");
-        setTimeout(function(){
-            //要执行的代码
-            run_WebSocket();
-        },2000);
-
-
-    };
-
-    //连接发生错误的回调方法
-    websocket.onerror = function () {
-        console.log("error");
-        setTimeout(function(){
-            //要执行的代码
-            run_WebSocket();
-        },2000);
-    };
-
-    //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
-    window.onbeforeunload = function () {
-        websocket.close();
-        console.log("窗口关闭事件");
-    };
-
-    //关闭连接
-    function closeWebSocket() {
-        websocket.close();
-        console.log("onbeforeunload");
-        window.clearInterval(intervalId);
-    }
-
-    //发送消息
-    function send(message) {
-        console.log(message)
-        websocket.send(message);
-    }
-</script>
-
-<script>
-    //获取GET
-    function getPar(par) {
-        //获取当前URL
-        var local_url = document.location.href;
-        //获取要取得的get参数位置
-        var get = local_url.indexOf(par + "=")
-        ;
-        if (get == -1) {
-            return false;
-        }
-        //截取字符串
-        //截取字符串
-        var get_par = local_url.slice(par.length + get + 1);
-        //判断截取后的字符串是否还有其他get参数
-        var nextPar = get_par.indexOf("&")
-        ;
-        if (nextPar != -1) {
-            get_par = get_par.slice(0, nextPar);
-        }
-        return get_par;
-    }
-
-    function timestampToTime(timestamp) {
-        if(timestamp == undefined){
-            return "<img src=\"https://osscold.baozhida.cn/images/等待.gif\" style='float: left' height=\"16\" width=\"16\"/>"
-        }
-        var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
-        Y = date.getFullYear() + '-';
-        M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
-        D = date.getDate() + ' ';
-        h = date.getHours() + ':';
-        m = date.getMinutes() + ':';
-        s = date.getSeconds();
-        return Y + M + D + h + m + s;
-    }
-    function dateChangeFormat(format, date) {
-        date = new Date(date);
-        const dataItem = {
-            'Y+': date.getFullYear().toString(),
-            'm+': (date.getMonth() + 1).toString(),
-            'd+': date.getDate().toString(),
-            'H+': date.getHours().toString(),
-            'M+': date.getMinutes().toString(),
-            'S+': date.getSeconds().toString(),
-        };
-        Object.keys(dataItem).forEach((item) => {
-            const ret = new RegExp(`(${item})`).exec(format);
-            if (ret) {
-                format = format.replace(ret[1], ret[1].length === 1 ? dataItem[item] : dataItem[item].padStart(ret[1].length, '0'));
-            }
-        });
-        return format;
-    }
-    function dateChangeFormat_x(format, date) {
-        date = new Date(date*1000);
-        const dataItem = {
-            'Y+': date.getFullYear().toString(),
-            'm+': (date.getMonth() + 1).toString(),
-            'd+': date.getDate().toString(),
-            'H+': date.getHours().toString(),
-            'M+': date.getMinutes().toString(),
-            'S+': date.getSeconds().toString(),
-        };
-        Object.keys(dataItem).forEach((item) => {
-            const ret = new RegExp(`(${item})`).exec(format);
-            if (ret) {
-                format = format.replace(ret[1], ret[1].length === 1 ? dataItem[item] : dataItem[item].padStart(ret[1].length, '0'));
-            }
-        });
-        return format;
-    }
-    // 时间比较
-    function dateChangeFormat_xiangcha( date) {
-        console.log("===========")
-        a_t = (new Date(dateChangeFormat('YYYY-mm-dd HH:MM:SS', date)).getTime()/1000)
-        b_t = ((new Date()) / 1000)
-
-        console.log("a_t:",a_t,"b_t:",b_t,">",b_t - a_t)
-        return  parseInt(b_t - a_t) ;
-    }
-
-    function To_str(data) {
-        if(data == undefined){
-            return "<img src=\"https://osscold.baozhida.cn/images/等待.gif\" style='float: left' height=\"16\" width=\"16\"/>"
-        }
-        if(data+"".length > 5){
-            return data+"".slice(0,5);
-        }
-        return data;
-    }
-    function To_unm(data) {
-        if(data == undefined){
-            return "<img src=\"https://osscold.baozhida.cn/images/等待.gif\" style='float: left' height=\"16\" width=\"16\"/>"
-        }
-
-        return data.toFixed(1);
-    }
-
-    function To_time(data) {
-        xx = dateChangeFormat_xiangcha(data)
-        if(xx > Out_time){
-            return "N";
-        }
-        return xx;
-    }
-</script>
-</html>

+ 0 - 624
views/Data/DataRealCalss.html

@@ -1,624 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.cookie.min.js"></script>
-    <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-
-    <style>
-        .text-overflow{
-            overflow: hidden;
-            text-overflow: ellipsis;
-            white-space: nowrap;
-
-        }
-
-    </style>
-</head>
-
-<body>
-<div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-    <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right"
-       onclick="location.reload()" title="刷新">
-        <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-    </a>
-</div>
-<div class="layui-fluid">
-    <div class="layui-row">
-        <!-- // 传感器 选择-->
-        <div class="layui-col-md12">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-                    <form class="layui-form layui-col-space5" οnsubmit="return false;">
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="" type="text" id="D_T_sn" name="D_T_sn" placeholder="请输入 SN"
-                                   autocomplete="off"
-                                   class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="" type="text" id="D_Name" name="D_Name" placeholder="请输入 传感器名称"
-                                   autocomplete="off"
-                                   class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <select id="Class_1" name="Class_1">
-                                <option value=0>所有分类</option>
-                                {{range $index, $elem := .Class_List}}
-                                    <option value={{$elem.Id}}>{{$elem.T_name}}
-                                    </option>
-
-                                {{end}}
-
-
-                            </select>
-                        </div>
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="get_DeviceSensor_list(0)">
-                                <i class="layui-icon">&#xe615;</i></div>
-                        </div>
-                    </form>
-                    <hr>
-                </div>
-                <div class="layui-card-body " style="margin-top: -20px">
-                    <div id="DeviceSensor_list" style="width: 98%; overflow: hidden;">
-                        <div style="color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px">加载中...</div>
-                        <!--                        <div class="layui-col"-->
-                        <!--                             style="height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;">-->
-                        <!--                            <img style="float: left;width: 50px;margin: 0px 10px" src="https://osscold.baozhida.cn/images/温湿度传感器-1.png"-->
-                        <!--                                 height="50"-->
-                        <!--                                 width="40"/>-->
-                        <!--                            <div style="float: left;">-->
-                        <!--                                <div style="margin-top: 4px;font-size: 14px">士大夫撒地方递四方速递</div>-->
-                        <!--                                <div style="margin-top: -3px;font-size: 12px">SN:KF20210510143443 [1]</div>-->
-                        <!--                            </div>-->
-                        <!--                            <div class="layui-card-header"-->
-                        <!--                                 style="float: right;padding-left: 0px;padding-top: 6px;color: #1E9FFF">-->
-                        <!--                                》-->
-                        <!--                            </div>-->
-                        <!--                        </div>-->
-                    </div>
-                </div>
-                <div class="layui-card-body " >
-                    <div style="height: 100px">
-
-                        <div >
-                            <span id="T_time" style="font-size: 14px">更新时间:等待同步中.....</span><img style="margin-left: 2px"
-                                                                                                 src="https://osscold.baozhida.cn/images/等待.gif" height="20"
-                                                                                                 width="20"/>
-                        </div>
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div id="DeviceSensor_list_Pages">
-
-
-                                    <!--                                    <a class="prev" href="">&lt;&lt;</a>-->
-
-                                    <!--                                    <a class="num" href="">1222</a>-->
-
-                                    <!--                                    <span class="current">111</span>-->
-
-                                    <!--                                    <a class="num" href="">444</a>-->
-                                    <!--                                    <a class="next" href="">&gt;&gt;</a>-->
-
-                                </div>
-
-                            </div>
-                            <div style="color: #1E9FFF;text-align: center" id="DeviceSensor_list_Pages_x"></div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-
-
-    </div>
-
-
-
-
-</div>
-
-</div>
-</body>
-<script>
-
-    layui.use(['laydate', 'form'],
-        function () {
-            var laydate = layui.laydate;
-
-
-        });
-
-    var T_name = ""
-    var Admin_rh = "{{$.Admin_r.Admin_rh}}"
-    var T_sn = ""
-    var T_class_id = 0
-
-    var T_id = 0
-    var T_sn_T_id = ""
-    var Time_start = ""
-    var Time_end = ""
-
-    var T_sn_list = []
-    var DeviceSensor_lite = []
-    var DeviceSensor_data  = []
-    var timestamp_V = (new Date()) / 1000;
-    var Out_time = 999;
-
-    /// ---------------   传感器列表
-    // 页面 加载完成后执行
-    window.onload = function () {
-        console.log("页面 加载完成后执行")
-        setInterval(function(){
-            //要执行的代码
-            // console.log("setInterval=====  1S")
-            xx = $("span[name='time_x']")
-            for (let i = 0; i < xx.length; i++) {
-                if(xx[i].innerHTML == "N"){
-                    continue;
-                }
-                if(xx[i].innerHTML > Out_time ){
-                    xx[i].innerHTML = "N"
-                }
-
-                xx[i].innerHTML = parseInt(xx[i].innerHTML) + 1
-
-            }
-
-            var now = new Date();
-
-            $("#T_time").html("当期时间:"+now.getFullYear()+"-"+(now.getMonth()+1)+"-"+getNow(now.getDate())+" "+getNow(now.getHours())+":"+getNow(now.getMinutes())+":"+getNow(now.getSeconds())+"")
-        },1000);
-        //
-        setInterval(function(){
-            get_DeviceSensor_list(-1)
-        },3000);
-    }
-    function getNow(s) {
-        return s < 10 ? '0' + s : s;
-    }
-    T_page = 0
-    function get_DeviceSensor_list(page) {
-        if(page == -1){
-            page = T_page
-        }
-        T_page = page
-
-        T_sn = $("#D_T_sn").val();
-        T_name = $("#D_Name").val();
-        T_class_id = $("#Class_1").val();
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Sensor_List',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                T_sn: T_sn,
-                T_name: T_name,
-                T_class_id: parseInt(T_class_id),
-                page: page,
-                page_z: 30,
-            },
-            success: function (result) {
-                // console.log(result)
-                if (result.Code == 200) {
-                    $('#DeviceSensor_list').html("")
-                    $('#DeviceSensor_list_Pages').html("")
-                    $('#DeviceSensor_list_Pages_x').html("")
-                    DeviceSensor_lite = result.Data.DeviceSensor_lite
-                    if (DeviceSensor_lite.length == 0) {
-                        $('#DeviceSensor_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有设备</div>")
-                        return
-                    }
-                    Add_DeviceSensor_list(result.Data.DeviceSensor_lite) // 列表
-                    Add_DeviceSensor_list_Pages(result.Data.Pages) // 分页
-                    $('#DeviceSensor_list_Pages_x').append("页数:" + result.Data.Page + "/" + result.Data.Page_size + "  总数:" + result.Data.Num);
-
-                } else {
-
-                }
-            }
-        });
-        return false
-    }
-    function Add_DeviceSensor_list(data) {
-        $('#DeviceSensor_list').html("")
-        for (let i = 0; i < data.length; i++) {
-
-            if(T_sn_list.indexOf(data[i].T_sn) == -1 ){
-                websocket.send("{\"Sn\":\"" + data[i].T_sn + "\"}");
-                T_sn_list.push(data[i].T_sn)
-            }
-            src_img = "记录.png"
-            Ds = data[i]
-            x_ = dateChangeFormat_xiangcha(Ds.T_time)
-            outtime = 60 * 40
-            while (true){
-                // 初始化状态
-                src_img = "记录.png"
-
-                // if(Ds.T_sn == "YD062289057646669" || Ds.T_sn == "KF868131063451706" ){
-                //     var myDate = new Date();
-                //     timexx= myDate.getFullYear() + "-" + (myDate.getMonth()+1) + "-" + myDate.getDate()
-                //     if(!timeX.isDuringDate(timexx+' 05:00', timexx+' 17:00')){
-                //         src_img = "离线.png"
-                //         break;
-                //     }
-                //
-                // }
-
-                // 是否 离线
-                if(Ds.T_online > 1)  {
-                    // 传感器超时
-                    src_img = "离线-线.png"
-                    if(Ds.T_sn.indexOf("YD") != -1){
-                        src_img = "离线.png"
-                    }
-                    break;
-                }
-
-                // 传感器正常
-                if(Ds.T_sn.indexOf("YD") != -1){
-                    if(Ds.T_monitor == 0 ){
-                        src_img = "停止.png"
-                    }
-                    break;
-                }
-
-                // 是否 超时
-                if(x_ > outtime)  {
-                    // 传感器超时
-                    src_img = "离线-线.png"
-                    if(Ds.T_sn.indexOf("YD") != -1){
-                       src_img = "离线.png"
-                    }
-                    break;
-                }
-
-
-                // 是否 超标
-                if(!(( 0 ==  Ds.T_Tlower && 0 == Ds.T_RHlower) && ( 0 ==  Ds.T_Tupper && 0 == Ds.T_RHupper))){
-                    if(Ds.T_t <=  Ds.T_Tlower || Ds.T_rh <= Ds.T_RHlower || Ds.T_t >=  Ds.T_Tupper || Ds.T_rh >= Ds.T_RHupper ){
-                        // 传感器 超标
-                        src_img = "报警.png"
-                    }
-                }
-
-                break;
-            }
-            DeviceTask_on = ""
-            if(Ds.T_sn.indexOf("YD") != -1){
-                DeviceTask_on = "onclick='DeviceTask_Post()'"
-            }
-
-            hidden = ""
-            hidden_top = ""
-            if(Admin_rh == 0 && data[i].T_sn.indexOf("YD") != -1){
-                hidden = "hidden"
-                hidden_top = "margin-top: 10px;"
-            }
-
-            $('#DeviceSensor_list').append("" +
-                "<div name='"+data[i].T_sn+"' class=\"layui-col-xs5 layui-col-sm3 layui-col-md2 layui-col-lg2\" style=\"height: 104px; \" >\n" +
-                "    <div  name='"+data[i].T_id+"' style=\"margin: 4px;height: 96px; border-radius:5px;background-color:#f1f1f1;\"\n" +
-                "         >\n" +
-                "        <div class=\"layui-row text-overflow\" style=\"text-align: center;font-size: 15px;background-color: #8ecbff;border-radius:5px;\">\n" +
-                "               <span style=\"float: left;background-color: #69d1ff;padding: 0px 2px;border-radius:5px;\" >"+data[i].T_id+"</span>"+
-                "               "+To_str(data[i].T_name)+"\n" +
-                "        </div>\n" +
-                "        <div class=\"layui-row\" >\n" +
-                "            <div class=\" layui-col-md4 \" style='padding-top: 3px;padding-left: 6px;' "+DeviceTask_on+">\n" +
-                "                <img  name='T_img' src=\"https://osscold.baozhida.cn/img/"+src_img+"\" height=\"35\" width=\"35\"/>\n" +
-                "            </div>\n" +
-                "            <div class=\"layui-col-md8\" style=\"margin-top: 3px;white-space:nowrap\">\n" +
-                "                <div style=\""+hidden_top+"width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;\">\n" +
-                "                    <span name='T_t' style=\"width: 48px;float: left\">"+To_unm(data[i].T_t)+"℃</span>\n" +
-                "                    <span name='T_T' style=\"font-size: 10px;float: left;margin-top: 1px;\">"+data[i].T_Tlower+"~"+data[i].T_Tupper+"</span>\n" +
-                "                </div>\n" +
-                "                <div "+hidden+" style=\"width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;\">\n" +
-                "                    <span name='T_rh' style=\"width: 48px;float: left\">"+To_unm(data[i].T_rh)+"%</span>\n" +
-                "                    <span name='T_RH' style=\"font-size: 10px;float: left;margin-top: 1px;\">"+data[i].T_RHlower+"~"+data[i].T_RHupper+"</span>\n" +
-                "                </div>\n" +
-                "            </div>\n" +
-                "            <div  class=\" layui-col-md12 \" style=\"padding-top: -2px;font-size: 16px;text-align: center;margin-top: 6px;border-top:1px solid  #000\">\n" +
-                "              <span name='T_time'>"+dateChangeFormat('YYYY-mm-dd HH:MM:SS', data[i].T_time)+"</span>\n" +
-                "            </div>\n" +
-                "        </div>\n" +
-                "    </div>\n" +
-                "</div>")
-        }
-
-    }
-    function Add_DeviceSensor_list_Pages(Pages) {
-        for (let i = 0; i < Pages.length; i++) {
-            elem = Pages[i]
-            switch (elem.A) {
-                case 1:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"prev\" onclick='get_DeviceSensor_list(" + elem.V + ")' >&lt;&lt;</a>\n");
-                    break;
-                case 2:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 3:
-                    $('#DeviceSensor_list_Pages').append("<span class=\"current\">" + elem.V + "</span>\n");
-                    break;
-                case 4:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 5:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"next\" onclick='get_DeviceSensor_list(" + elem.V + ")' >&gt;&gt;</a>\n");
-                    break;
-            }
-        }
-    }
-    function Pu_DeviceSensor_list_g(sn,data) {
-
-        for (let i = 0; i < data.length; i++) {
-            // console.log(i," "+data[i].name)
-            sn_ = $("div[name='"+sn+"']")
-            // console.log("sn_:",sn_.length)
-            if(sn_.length > 0){
-                id_ = sn_.find("div[name='"+data[i].id+"']")
-                // console.log("id_:",sn_.length)
-                if(id_.length > 0){
-                    src_img = "温湿度传感器-1.png"
-                    Ds = data[i]
-                    x_ = dateChangeFormat_xiangcha(dateChangeFormat_x('YYYY-mm-dd HH:MM:SS', data[i].UT))
-                    outtime = 60 * 5
-
-
-                    // id_.find("img")[0].src = "https://osscold.baozhida.cn/images/"+src_img
-                    //
-
-
-                    id_.find("span")[1].innerHTML = "0"
-                    id_.find("span")[2].innerHTML = To_unm(data[i].T)+"℃"
-                    id_.find("span")[3].innerHTML = data[i].Tlower+"~"+data[i].Tupper
-                    id_.find("span")[4].innerHTML = To_unm(data[i].RH)+"%"
-                    id_.find("span")[5].innerHTML = data[i].RHlower+"~"+data[i].RHupper
-                    id_.find("span")[6].innerHTML = dateChangeFormat_x('YYYY-mm-dd HH:MM:SS', data[i].UT)
-
-                    console.log("更新:"+sn+">"+data[i].id)
-                }
-
-
-            }
-
-
-        }
-
-    }
-</script>
-
-
-<script>
-
-    function DeviceTask_Post() {
-        layer.msg('远程启停 请到设备管理里面操作!');
-
-
-    }
-
-</script>
-
-<!--websocket 通讯-->
-<script>
-    // websocket.send("{\"Sn\":\"" + data[i].T_sn + "\"}");
-    var websocket = null;
-
-    //判断当前浏览器是否支持WebSocket
-    run_WebSocket()
-    function run_WebSocket() {
-        console.log("run_WebSocket");
-        T_sn_list = []
-        if ('WebSocket' in window) {
-            url = window.location.host
-            console.log("url:",url)
-            if(url.indexOf("baozhida") != -1){
-                websocket = new WebSocket("wss://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
-            }else {
-                websocket = new WebSocket("ws://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
-            }
-        } else {
-            alert('Dont support websocket')
-        }
-    }
-
-
-
-
-    //连接成功建立的回调方法
-    websocket.onopen = function () {
-        console.log("open");
-        get_DeviceSensor_list(0)
-        // send("{\"Sn\":\"" + getQueryString("Sn") + "\"}")
-    };
-
-    //接收到消息的回调方法
-    websocket.onmessage = function (event) {
-        console.log(event.data)
-
-    };
-
-    //连接关闭的回调方法
-    websocket.onclose = function () {
-        console.log("close");
-        setTimeout(function(){
-            //要执行的代码
-            run_WebSocket();
-        },2000);
-
-
-    };
-
-    //连接发生错误的回调方法
-    websocket.onerror = function () {
-        console.log("error");
-        setTimeout(function(){
-            //要执行的代码
-            run_WebSocket();
-        },2000);
-    };
-
-    //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
-    window.onbeforeunload = function () {
-        websocket.close();
-        console.log("窗口关闭事件");
-    };
-
-    //关闭连接
-    function closeWebSocket() {
-        websocket.close();
-        console.log("onbeforeunload");
-        window.clearInterval(intervalId);
-    }
-
-    //发送消息
-    function send(message) {
-        console.log(message)
-        websocket.send(message);
-    }
-</script>
-
-<script>
-    //获取GET
-    function getPar(par) {
-        //获取当前URL
-        var local_url = document.location.href;
-        //获取要取得的get参数位置
-        var get = local_url.indexOf(par + "=");
-        if (get == -1) {
-            return false;
-        }
-        //截取字符串
-        //截取字符串
-        var get_par = local_url.slice(par.length + get + 1);
-        //判断截取后的字符串是否还有其他get参数
-        var nextPar = get_par.indexOf("&")
-        ;
-        if (nextPar != -1) {
-            get_par = get_par.slice(0, nextPar);
-        }
-        return get_par;
-    }
-
-    function timestampToTime(timestamp) {
-        if(timestamp == undefined){
-            return "<img src=\"https://osscold.baozhida.cn/images/等待.gif\" style='float: left' height=\"16\" width=\"16\"/>"
-        }
-        var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
-        Y = date.getFullYear() + '-';
-        M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
-        D = date.getDate() + ' ';
-        h = date.getHours() + ':';
-        m = date.getMinutes() + ':';
-        s = date.getSeconds();
-        return Y + M + D + h + m + s;
-    }
-    function dateChangeFormat(format, date) {
-        date = new Date(date);
-        const dataItem = {
-            'Y+': date.getFullYear().toString(),
-            'm+': (date.getMonth() + 1).toString(),
-            'd+': date.getDate().toString(),
-            'H+': date.getHours().toString(),
-            'M+': date.getMinutes().toString(),
-            'S+': date.getSeconds().toString(),
-        };
-        Object.keys(dataItem).forEach((item) => {
-            const ret = new RegExp(`(${item})`).exec(format);
-            if (ret) {
-                format = format.replace(ret[1], ret[1].length === 1 ? dataItem[item] : dataItem[item].padStart(ret[1].length, '0'));
-            }
-        });
-        return format;
-    }
-    function dateChangeFormat_x(format, date) {
-        date = new Date(date*1000);
-        const dataItem = {
-            'Y+': date.getFullYear().toString(),
-            'm+': (date.getMonth() + 1).toString(),
-            'd+': date.getDate().toString(),
-            'H+': date.getHours().toString(),
-            'M+': date.getMinutes().toString(),
-            'S+': date.getSeconds().toString(),
-        };
-        Object.keys(dataItem).forEach((item) => {
-            const ret = new RegExp(`(${item})`).exec(format);
-            if (ret) {
-                format = format.replace(ret[1], ret[1].length === 1 ? dataItem[item] : dataItem[item].padStart(ret[1].length, '0'));
-            }
-        });
-        return format;
-    }
-    // 时间比较
-    function dateChangeFormat_xiangcha( date) {
-        // console.log("===========")
-        a_t = (new Date(dateChangeFormat('YYYY-mm-dd HH:MM:SS', date)).getTime()/1000)
-        b_t = ((new Date()) / 1000)
-
-        // console.log("a_t:",a_t,"b_t:",b_t,">",b_t - a_t)
-        return  parseInt(b_t - a_t) ;
-    }
-
-    function To_str(data) {
-        if(data == undefined){
-            return "<img src=\"https://osscold.baozhida.cn/images/等待.gif\" style='float: left' height=\"16\" width=\"16\"/>"
-        }
-        if(data+"".length > 5){
-            return data+"".slice(0,5);
-        }
-        return data;
-    }
-    function To_unm(data) {
-        if(data == undefined){
-            return "<img src=\"https://osscold.baozhida.cn/images/等待.gif\" style='float: left' height=\"16\" width=\"16\"/>"
-        }
-
-        return data.toFixed(1);
-    }
-
-    function To_time(data) {
-        xx = dateChangeFormat_xiangcha(data)
-        if(xx > Out_time){
-            return "N";
-        }
-        return xx;
-    }
-    /**
-     * [isDuringDate 比较当前时间是否在指定时间段内]
-     * @author dongsir
-     * @DateTime 2019-08-21
-     * @version  1.0
-     * @param    date   [beginDateStr] [开始时间]
-     * @param    date   [endDateStr]   [结束时间]
-     * @return   Boolean
-     */
-    var timeX = {
-        isDuringDate: function(beginDateStr, endDateStr) {
-            var curDate = new Date(),
-                beginDate = new Date(beginDateStr),
-                endDate = new Date(endDateStr);
-            if (curDate >= beginDate && curDate <= endDate) {
-                return true;
-            }
-            return false;
-        },
-    };
-
-</script>
-</html>

+ 0 - 1301
views/Data/DataScreen.html

@@ -1,1301 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta http-equiv="X-UA-Compatible" content="ie=edge">
-    <title>地图数据可视化</title>
-<!--    https://osscold.baozhida.cn/-->
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/essjksh/css/index.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/essjksh/fonts/icomoon.css">
-    <script src="https://osscold.baozhida.cn/js/jquery.cookie.min.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/js/echarts.js"></script>
-    <script src="https://osscold.baozhida.cn/essjksh/js/index.js"></script>
-    <script src="https://osscold.baozhida.cn/essjksh/js/china.js"></script>
-    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" />
-    <script src="https://webapi.amap.com/maps?v=1.4.15&key=f41c8fbdd908f420f6babe5ab38bf574&callback=init&plugin=AMap.GraspRoad"></script>
-
-</head>
-
-<body>
-    <div class="viewport">
-        <div class="column">
-            <!--概览-->
-            <div class="overview panel">
-                <div class="inner">
-                    <div class="item">
-                        <h4 id="KF_Count" style="height: 1.7rem;margin-bottom: 0.0rem;margin-left: 0.8rem;">0</h4>
-                        <span>
-                            <i class="icon-dot" style="color: #006cff"></i>
-                            仓库端总数
-                        </span>
-                    </div>
-                    <div class="item">
-                        <h4 id="KF_Warning_Count"  style="height: 1.7rem;margin-bottom: 0.0rem;margin-left: 0.8rem;">0</h4>
-                        <span>
-                            <i class="icon-dot" style="color: #ed3f35"></i>
-                            仓库报备数
-                        </span>
-                    </div>
-                    <div class="item">
-                        <h4 id="YD_Count"  style="height: 1.7rem;margin-bottom: 0.0rem;margin-left: 0.8rem;">0</h4>
-                        <span>
-                            <i class="icon-dot" style="color: #6acca3"></i>
-                            运输端总数
-                        </span>
-                    </div>
-                    <div class="item">
-                        <h4 id="YD_Warning_Count"  style="height: 1.7rem;margin-bottom: 0.0rem;margin-left: 0.8rem;">0</h4>
-                        <span>
-                            <i class="icon-dot" style="color: #ed3f35"></i>
-                            运输报警数
-                        </span>
-                    </div>
-                </div>
-            </div>
-            <!--仓库端分公司数据统计-->
-            <div class="monitor panel">
-                <div class="inner">
-                    <div class="tabs">
-                        <a href="javascript:;" data-index="0" class="active">仓库端分公司数据统计</a>
-                    </div>
-                    <div class="content" style="display: block;">
-                        <div class="head">
-                            <span class="col" style="width: 100px">分公司名称</span>
-                            <span class="col" style="width: 50px">终端总数</span>
-                            <span class="col" style="width: 70px">报警设备数</span>
-                            <span class="col" style="width: 70px">设备报警率</span>
-                        </div>
-                        <div class="marquee-view">
-                            <div id="KF_list" class="marquee">
-
-                            </div>
-                        </div>
-                    </div>
-
-                </div>
-            </div>
-            <!--分公司仓库报警占比-->
-            <div class="point panel">
-                <div class="inner">
-                    <h3>分公司仓库报警占比</h3>
-                    <div class="chart">
-                        <div class="pie" style="width: 24rem;"></div>
-<!--                        <div class="data" style="  margin-top: 12.5rem;">-->
-<!--&lt;!&ndash;                            <div class="item">&ndash;&gt;-->
-<!--&lt;!&ndash;                                <h4>320,11</h4>&ndash;&gt;-->
-<!--&lt;!&ndash;                                <span>&ndash;&gt;-->
-<!--&lt;!&ndash;                                    <i class="icon-dot" style="color: #ed3f35"></i>&ndash;&gt;-->
-<!--&lt;!&ndash;                                    点位总数&ndash;&gt;-->
-<!--&lt;!&ndash;                                </span>&ndash;&gt;-->
-<!--&lt;!&ndash;                            </div>&ndash;&gt;-->
-<!--                            <div class="item">-->
-<!--                                <h4 id="YD_KF_Warning_Count">418</h4>-->
-<!--                                <span>-->
-<!--                                    <i class="icon-dot" style="color: #eacf19"></i>-->
-<!--                                    总报警次数-->
-<!--                                </span>-->
-<!--                            </div>-->
-<!--                        </div>-->
-                    </div>
-                </div>
-            </div>
-        </div>
-        <div class="column">
-            <!-- 地图 -->
-            <div class="map">
-                <h3>
-                    <span class="icon-cube"></span>
-                    移动端实时地图
-                </h3>
-                <div class="chart">
-                    <div class="geo" id="container"></div>
-                </div>
-            </div>
-            <!-- 分公司报警率排名 -->
-            <div class="users panel">
-                <div class="inner">
-                    <h3>分公司报警率排名</h3>
-                    <div class="chart">
-                        <div class="bar" style="width: 29.5rem;"></div>
-
-                    </div>
-                </div>
-            </div>
-        </div>
-        <div class="column">
-            <!-- 运输端数据统计  -->
-            <div class="order panel">
-                <div class="inner">
-                    <!-- 筛选 -->
-                    <div class="filter">
-                        <a href="javascript:;" data-key="t1" class="active">物流端</a>
-                        <a href="javascript:;" data-key="t2">药店端</a>
-                    </div>
-                    <!-- 数据 -->
-                    <div class="data" style="margin-top: 0.0rem;">
-                        <div class="item">
-                            <h4 style="margin-bottom: 0.0rem;margin-left: 0.8rem;">0</h4>
-                            <span>
-                                <i class="icon-dot" style="color: #008cff;"></i>
-                                设备总数
-                            </span>
-                        </div>
-                        <div class="item">
-                            <h4  style="margin-bottom: 0.0rem;margin-left: 0.8rem;">0</h4>
-                            <span>
-                                <i class="icon-dot" style="color: #eacf19;"></i>
-                                使用数量
-                            </span>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <!-- 每个时间段使用数量走势(物流曲线/药店曲线) -->
-            <div class="sales panel">
-                <div class="inner">
-                    <div class="caption">
-                        <h3>使用数量走势</h3>
-                        <a href="javascript:;" class="active" data-type="Day">日</a>
-                        <a href="javascript:;" data-type="Month">月</a>
-                        <a href="javascript:;" data-type="Year">年</a>
-                    </div>
-                    <div class="chart"  onmouseover="f_onmouseover()" onmouseout = "f_onmoseout()" >
-                        <div class="label">单位:次</div>
-                        <div class="line"></div>
-                    </div>
-                </div>
-            </div>
-            <!-- 物流端使用占比  药店端使用占比 -->
-            <div class="wrap">
-                <div class="channel panel">
-                    <div class="inner">
-                        <h3>物流端使用占比</h3>
-                        <div class="chart">
-                            <div class="pie" style="height: 6.8rem"></div>
-                        </div>
-                    </div>
-                </div>
-                <div class="quarter panel">
-                    <div class="inner">
-                        <h3>药店端使用占比</h3>
-
-                        <div class="chart" style="padding-top: 0px;">
-                            <div class="pie" style="height: 6.8rem"></div>
-                        </div>
-
-                    </div>
-                </div>
-            </div>
-            <!-- 仓库端分公司数据统计 -->
-            <div class="monitor panel" style="height: 11.8rem;">
-                <div class="inner">
-                    <div class="tabs">
-                        <a href="javascript:;" data-index="0" class="active">运输端分公司数据统计</a>
-                    </div>
-                    <div class="content" style="display: block;">
-                        <div class="head">
-                            <span class="col" style="width: 100px">分公司名称</span>
-                            <span class="col" style="width: 50px">终端总数</span>
-                            <span class="col" style="width: 70px">报警设备数</span>
-                            <span class="col" style="width: 70px">设备报警率</span>
-                        </div>
-                        <div class="marquee-view">
-                            <div id="YD_list" class="marquee">
-
-                            </div>
-                        </div>
-                    </div>
-
-                </div>
-
-
-
-            </div>
-        </div>
-    </div>
-</body>
-<!--<script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script>-->
-<!--<script src="https://www.jq22.com/jquery/echarts-4.2.1.min.js"></script>-->
-
-
-<script>
-    // 页面 加载完成后执行
-    window.onload = function () {
-        console.log("页面 加载完成后执行")
-        DataScreen_Data()
-        Amap_inte()
-        DataScreen_Map()
-        // 开始更新
-        setInterval(function(){
-            //要执行的代码
-            DataScreen_Map()
-        },10000);
-        // 开始更新
-        setInterval(function(){
-            //要执行的代码
-            DataScreen_Data()
-        },11000);
-    }
-
-</script>
-<!-- 数据-->
-<script>
-    // 获取数据
-    function DataScreen_Data() {
-        $.ajax({
-            type: 'POST',
-            url: 'DataScreen_Data',//发送请求
-            data: {
-
-                // Admin_uuid: Admin_uuid,
-                // T_sn: $("#D_T_sn").val(),
-                // Name: $("#D_Name").val(),
-            },
-            success: function (result) {
-
-                console.log(result)
-                if (result.Code != 200) {
-                    layer.msg(result.Msg);
-                    return
-                }
-
-                DataScreen_Data_Handle(result.Data)
-
-            }
-        });
-    }
-    // 获取数据
-    function DataScreen_Data_Handle(Data) {
-
-        $("#KF_Count").html(Data.KF_Count)
-        $("#YD_Count").html(Data.YD_Count)
-        $("#KF_Warning_Count").html(Data.KF_Warning_Count)
-        $("#YD_Warning_Count").html(Data.YD_Warning_Count)
-        $("#YD_KF_Warning_Count").html(Data.YD_Warning_Count+Data.KF_Warning_Count)
-
-        // 仓库端分公司数据统计  - 列表
-        $('#KF_list').html("")
-        for (let i = 0; i < Data.KF_list.length; i++) {
-            $('#KF_list').append("" +
-                "<div class=\"row\">\n" +
-                "    <span class=\"col\"  style=\"width: 100px\" >"+Data.KF_list[i].Name+"</span>\n" +
-                "    <span class=\"col\"  style=\"width: 50px;text-align: center\" >"+Data.KF_list[i].Device_Count+"</span>\n" +
-                "    <span class=\"col\"  style=\"width: 60px;text-align: center\" >"+Data.KF_list[i].Warning_Count+"</span>\n" +
-                "    <span class=\"col\"  style=\"width: 60px;text-align: center\" >"+Data.KF_list[i].Ratio+"%</span>\n" +
-                "    <span class=\"icon-dot\"></span>\n" +
-                "</div>")
-        }
-        //运输端分公司数据统计   - 列表
-        $('#YD_list').html("")
-        for (let i = 0; i < Data.YD_list.length; i++) {
-            $('#YD_list').append("" +
-                "<div class=\"row\">\n" +
-                "    <span class=\"col\"  style=\"width: 100px\" >"+Data.YD_list[i].Name+"</span>\n" +
-                "    <span class=\"col\"  style=\"width: 50px;text-align: center\" >"+Data.YD_list[i].Device_Count+"</span>\n" +
-                "    <span class=\"col\"  style=\"width: 60px;text-align: center\" >"+Data.YD_list[i].Warning_Count+"</span>\n" +
-                "    <span class=\"col\"  style=\"width: 60px;text-align: center\" >"+Data.YD_list[i].Ratio+"%</span>\n" +
-                "    <span class=\"icon-dot\"></span>\n" +
-                "</div>")
-        }
-        // 仓库报警占比 - 饼状图
-        KF_pie(Data.KF_list)
-
-
-        // 报警率排名
-        Warning_KF_YD_list(Data.Warning_KF_YD_list)
-
-
-        // 每个时间段使用数量走势(物流曲线/药店曲线)
-        T_l_p_Line(Data)
-
-        // 各公司物流端使用次数占比 - 饼状图
-        YD_1_pie(Data.YD_pie_1)
-
-        // 各公司药店端使用次数占比 - 饼状图
-        YD_2_pie(Data.YD_pie_2)
-
-        YD_1_2(Data.YD_1_2)
-    }
-    function dateChangeFormat(format, date) {
-        date = new Date(date);
-        const dataItem = {
-            'Y+': date.getFullYear().toString(),
-            'm+': (date.getMonth() + 1).toString(),
-            'd+': date.getDate().toString(),
-            'H+': date.getHours().toString(),
-            'M+': date.getMinutes().toString(),
-            'S+': date.getSeconds().toString(),
-        };
-        Object.keys(dataItem).forEach((item) => {
-            const ret = new RegExp(`(${item})`).exec(format);
-            if (ret) {
-                format = format.replace(ret[1], ret[1].length === 1 ? dataItem[item] : dataItem[item].padStart(ret[1].length, '0'));
-            }
-        });
-        return format;
-    }
-    // 仓库报警占比 - 饼状图
-    function KF_pie(Data) {
-        datax = []
-        var myechart = echarts.init($('.pie')[0]);
-        for (let i = 0; i < Data.length; i++) {
-            datax.push({ value: Data[i].Ratio, name: Data[i].Name })
-        }
-
-        console.log("datax:",datax)
-        option = {
-            // 控制提示
-            tooltip: {
-                // 非轴图形,使用item的意思是放到数据对应图形上触发提示
-                trigger: 'item',
-                // 格式化提示内容:
-                // a 代表图表名称 b 代表数据名称 c 代表数据  d代表  当前数据/总数据的比例
-                formatter: "{b} : {c} ({d}%)"
-            },
-            // 控制图表
-            series: [
-                {
-                    // 图表名称
-                    name: '地区',
-                    // 图表类型
-                    type: 'pie',
-                    // 南丁格尔玫瑰图 有两个圆  内圆半径10%  外圆半径70%
-                    // 百分比基于  图表DOM容器的半径
-                    radius: ['10%', '70%'],
-                    // 图表中心位置 left 50%  top 50% 距离图表DOM容器
-                    center: ['50%', '50%'],
-                    // 半径模式,另外一种是 area 面积模式
-                    roseType: 'radius',
-                    // 数据集 value 数据的值 name 数据的名称
-                    data: datax,
-                    //文字调整
-                    label: {
-                        fontSize: 10
-                    },
-                    //引导线
-                    labelLine: {
-                        length: 8,
-                        length2: 10
-                    }
-                }
-            ],
-            color: ['#006cff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff']
-        };
-        myechart.setOption(option);
-    }
-
-    // 报警率排名
-    function Warning_KF_YD_list(Data) {
-        data_list = []
-        for (let i = 0; i < Data.length; i++) {
-            data_list.push(  {Name: Data[i].Name, Ratio: Data[i].Ratio})
-
-        }
-
-        data_list.sort(function(a, b) {
-            // boolean false == 0; true == 1
-            return a.Ratio < b.Ratio;
-        });
-        console.log("Warning_KF_YD_list  data_list:",data_list);
-
-
-        data_x = []
-        data_y = []
-        for (let i = 0; i < data_list.length; i++) {
-            // 限制 数量
-            if(i > 4){
-                break
-            }
-            data_x.push(data_list[i].Name)
-            data_y.push(data_list[i].Ratio)
-
-        }
-
-        // 中间省略的数据  准备三项
-        var item = {
-            name: '',
-            value: 1200,
-            // 柱子颜色
-            itemStyle: {
-                color: '#254065'
-            },
-            // 鼠标经过柱子颜色
-            emphasis: {
-                itemStyle: {
-                    color: '#254065'
-                }
-            },
-            // 工具提示隐藏
-            tooltip: {
-                extraCssText: 'opacity:0'
-            }
-        };
-        option = {
-            // 工具提示
-            tooltip: {
-                // 触发类型  经过轴触发axis  经过轴触发item
-                trigger: 'item',
-                // 轴触发提示才有效
-                axisPointer: {
-                    // 默认为直线,可选为:'line' 线效果 | 'shadow' 阴影效果
-                    type: 'shadow'
-                }
-            },
-            // 图表边界控制
-            grid: {
-                // 距离 上右下左 的距离
-                left: '0',
-                right: '0%',
-                bottom: '3%',
-                top: '5%',
-                // 大小是否包含文本【类似于boxsizing】
-                containLabel: true,
-                //显示边框
-                show: true,
-                //边框颜色
-                borderColor: 'rgba(0, 240, 255, 0.3)'
-            },
-            // 控制x轴
-            xAxis: [
-                {
-                    // 使用类目,必须有data属性
-                    type: 'category',
-                    // 使用 data 中的数据设为刻度文字
-                    data: data_x,//['上海', '广州', '北京', '深圳', '合肥', '', '......', '', '杭州', '厦门', '济南', '成都', '重庆'],
-                    // 刻度设置
-                    axisTick: {
-                        // true意思:图形在刻度中间
-                        // false意思:图形在刻度之间
-                        alignWithLabel: false,
-                        show: false
-                    },
-                    //文字
-                    axisLabel: {
-                        color: '#4c9bfd'
-                    }
-                }
-            ],
-            // 控制y轴
-            yAxis: [
-                {
-                    // 使用数据的值设为刻度文字
-                    type: 'value',
-                    axisTick: {
-                        // true意思:图形在刻度中间
-                        // false意思:图形在刻度之间
-                        alignWithLabel: false,
-                        show: false
-                    },
-                    //文字
-                    axisLabel: {
-                        color: '#4c9bfd'
-                    },
-                    splitLine: {
-                        lineStyle: {
-                            color: 'rgba(0, 240, 255, 0.3)'
-                        }
-                    },
-                }
-            ],
-            // 控制x轴
-            series: [
-
-                {
-                    // series配置
-                    // 颜色
-                    itemStyle: {
-                        // 提供的工具函数生成渐变颜色
-                        color: new echarts.graphic.LinearGradient(
-                            // (x1,y2) 点到点 (x2,y2) 之间进行渐变
-                            0, 0, 0, 1,
-                            [
-                                { offset: 0, color: '#00fffb' }, // 0 起始颜色
-                                { offset: 1, color: '#0061ce' }  // 1 结束颜色
-                            ]
-                        )
-                    },
-                    // 图表数据名称
-                    name: '用户统计',
-                    // 图表类型
-                    type: 'bar',
-                    // 柱子宽度
-                    barWidth: '60%',
-                    // 数据
-                    data: data_y ,//[2100, 1900, 1700, 1560, 1400, item, item, item, 900, 750, 600, 480, 240]
-                }
-            ]
-        };
-        var myechart = echarts.init($('.users .bar')[0]);
-        myechart.setOption(option);
-    }
-
-    // 每个时间段使用数量走势(物流曲线/药店曲线)
-    function T_l_p_Line(Data) {
-
-
-
-        var option = {
-            //鼠标提示工具
-            tooltip: {
-                trigger: 'axis'
-            },
-            xAxis: {
-                // 类目类型
-                type: 'category',
-                // x轴刻度文字
-                data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
-                axisTick: {
-                    show: false//去除刻度线
-                },
-                axisLabel: {
-                    color: '#4c9bfd'//文本颜色
-                },
-                axisLine: {
-                    show: false//去除轴线
-                },
-                boundaryGap: false//去除轴内间距
-            },
-            yAxis: {
-                // 数据作为刻度文字
-                type: 'value',
-                axisTick: {
-                    show: false//去除刻度线
-                },
-                axisLabel: {
-                    color: '#4c9bfd'//文本颜色
-                },
-                axisLine: {
-                    show: false//去除轴线
-                },
-                boundaryGap: false//去除轴内间距
-            },
-            //图例组件
-            legend: {
-                textStyle: {
-                    color: '#4c9bfd' // 图例文字颜色
-
-                },
-                right: '10%'//距离右边10%
-            },
-            // 设置网格样式
-            grid: {
-                show: true,// 显示边框
-                top: '20%',
-                left: '3%',
-                right: '4%',
-                bottom: '3%',
-                borderColor: '#012f4a',// 边框颜色
-                containLabel: true // 包含刻度文字在内
-            },
-            series: [{
-                name: '物流端',
-                // 数据
-                data: [24, 40, 101, 134, 90, 230, 210, 230, 120, 230, 210, 120],
-                // 图表类型
-                type: 'line',
-                // 圆滑连接
-                smooth: true,
-                itemStyle: {
-                    color: '#00f2f1'  // 线颜色
-                }
-            },
-                {
-                    name: '药店端',
-                    // 数据
-                    data: [40, 64, 191, 324, 290, 330, 310, 213, 180, 200, 180, 79],
-                    // 图表类型
-                    type: 'line',
-                    // 圆滑连接
-                    smooth: true,
-                    itemStyle: {
-                        color: '#c88bff'  // 线颜色
-                    }
-                }]
-        };
-        //将值设置到 图表中
-        option.series[0].data = Data.Sales_Day_z_list_1;
-        option.series[1].data = Data.Sales_Day_z_list_2;
-        option.xAxis.data = []
-        for (var i=0; i<24;i++){
-            option.xAxis.data.push(i+"h")
-        }
-        var myechart = echarts.init($('.line')[0]);
-        myechart.setOption(option);
-
-
-        $('.sales ').on('click', '.caption a', function () {
-            $(this).addClass('active').siblings('a').removeClass('active');
-            //option series   data
-            //获取自定义属性值
-            var key = $(this).attr('data-type');
-            //取出对应的值
-
-            switch (key) {
-                case "Day": //日
-                    //将值设置到 图表中
-                    option.series[0].data = Data.Sales_Day_z_list_1;
-                    option.series[1].data = Data.Sales_Day_z_list_2;
-                    option.xAxis.data = []
-                    for (var i=0; i<24;i++){
-                        option.xAxis.data.push(i+"h")
-                    }
-                    break
-                case "Month": //月
-                    //将值设置到 图表中
-                    option.series[0].data = Data.Sales_Month_z_list_1;
-                    option.series[1].data = Data.Sales_Month_z_list_2;
-                    option.xAxis.data = []
-                    for (var i=1; i < Data.Sales_Month_z_list_1.length+1;i++){
-                        option.xAxis.data.push(i)
-                    }
-                    break
-                case "Year": //年
-                    //将值设置到 图表中
-                    option.series[0].data = Data.Sales_Year_z_list_1;
-                    option.series[1].data = Data.Sales_Year_z_list_2;
-                    option.xAxis.data = []
-                    for (var i=1; i<13;i++){
-                        option.xAxis.data.push(i)
-                    }
-                    break
-            }
-
-            //再次调用才能在页面显示
-            myechart.setOption(option);
-        });
-
-
-
-    }
-
-    function f_onmouseover() {
-        console.log("f_onmouseover")
-        index_timer = false;
-    }
-    function f_onmoseout() {
-        console.log("onmoseout")
-        index_timer = true;
-    }
-
-
-    //定时器
-    var index = 0;
-    var index_timer = true;
-    var timer = setInterval(function () {
-        if(index_timer){
-            index++;
-            if (index > 2) {
-                index = 0;
-            };
-            $('.sales .caption a').eq(index).click();
-        }
-
-    }, 3000);
-
-
-    // 各公司物流端使用次数占比 - 饼状图
-    function YD_1_pie(Data) {
-        if(Data == null) return
-        datax = []
-        var myechart = echarts.init($('.pie')[1]);
-        for (let i = 0; i < Data.length; i++) {
-            datax.push({ value: Data[i].Ratio, name: Data[i].Name })
-        }
-
-        console.log("YD_1_pie  datax:",datax)
-        option = {
-            // 控制提示
-            tooltip: {
-                // 非轴图形,使用item的意思是放到数据对应图形上触发提示
-                trigger: 'item',
-                // 格式化提示内容:
-                // a 代表图表名称 b 代表数据名称 c 代表数据  d代表  当前数据/总数据的比例
-                formatter: "{b} : {c} ({d}%)"
-            },
-            // 控制图表
-            series: [
-                {
-
-                    // 图表类型
-                    type: 'pie',
-                    // 南丁格尔玫瑰图 有两个圆  内圆半径10%  外圆半径70%
-                    // 百分比基于  图表DOM容器的半径
-                    radius: ['10%', '70%'],
-                    // 图表中心位置 left 50%  top 50% 距离图表DOM容器
-                    center: ['50%', '50%'],
-                    // 半径模式,另外一种是 area 面积模式
-                    roseType: 'radius',
-
-                    itemStyle: {
-                        borderRadius: 5
-                    },
-                    label: {
-                        show: false
-                    },
-                    emphasis: {
-                        label: {
-                            show: true
-                        }
-                    },
-
-                    // 数据集 value 数据的值 name 数据的名称
-                    data: datax,
-                }
-            ],
-            color: ['#006cff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff']
-        };
-        myechart.setOption(option);
-    }
-
-    // 各公司药店端使用次数占比 - 饼状图
-    function YD_2_pie(Data) {
-        datax = []
-        var myechart = echarts.init($('.pie')[2]);
-        for (let i = 0; i < Data.length; i++) {
-            datax.push({ value: Data[i].Ratio, name: Data[i].Name })
-        }
-
-        console.log("datax:",datax)
-        option = {
-            // 控制提示
-            tooltip: {
-                // 非轴图形,使用item的意思是放到数据对应图形上触发提示
-                trigger: 'item',
-                // 格式化提示内容:
-                // a 代表图表名称 b 代表数据名称 c 代表数据  d代表  当前数据/总数据的比例
-                formatter: "{b} : {c} ({d}%)"
-            },
-            // 控制图表
-            series: [
-                {
-
-                    // 图表类型
-                    type: 'pie',
-                    // 南丁格尔玫瑰图 有两个圆  内圆半径10%  外圆半径70%
-                    // 百分比基于  图表DOM容器的半径
-                    radius: ['10%', '70%'],
-                    // 图表中心位置 left 50%  top 50% 距离图表DOM容器
-                    center: ['50%', '50%'],
-                    // 半径模式,另外一种是 area 面积模式
-                    roseType: 'radius',
-
-                    itemStyle: {
-                        borderRadius: 5
-                    },
-                    label: {
-                        show: false
-                    },
-                    emphasis: {
-                        label: {
-                            show: true
-                        }
-                    },
-
-                    // 数据集 value 数据的值 name 数据的名称
-                    data: datax,
-                }
-            ],
-            color: ['#006cff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff', '#60cda0', '#ed8884', '#ff9f7f', '#0096ff', '#9fe6b8', '#32c5e9', '#1d9dff']
-        };
-        myechart.setOption(option);
-    }
-
-    // 运输端数据统计
-    var setInterval_x
-    function YD_1_2(Data) {
-        console.log("YD_1_2:",Data)
-        var data = {
-            t1: { orders: Data.Device_YD_1_Count , amount: Data.Device_YD_1_Count_use },
-            t2: { orders: Data.Device_YD_2_Count , amount: Data.Device_YD_2_Count_use }
-        }
-        //停止 t 定时器
-        if(setInterval_x != undefined){
-            clearTimeout(setInterval_x)
-        }
-
-        $('.order .item h4:eq(0)').text(Data.Device_YD_1_Count);
-        $('.order .item h4:eq(1)').text(Data.Device_YD_1_Count_use);
-        //点击事件
-        $('.order').on('click', '.filter a', function () {
-            //点击之后加类名
-            $(this).addClass('active').siblings().removeClass('active');
-            // 先获取点击a的 data-key自定义属性
-            var key = $(this).attr('data-key');
-            //获取自定义属性
-            // data{}==>data.shuxing data['shuxing]
-            key = data[key];//
-            $('.order .item h4:eq(0)').text(key.orders);
-            $('.order .item h4:eq(1)').text(key.amount);
-        });
-        //定时器
-        var index = 0;
-        var aclick = $('.order a');
-        setInterval_x = setInterval(function () {
-            index++;
-            if (index > 1) {
-                index = 0;
-            }
-            //每san秒调用点击事件
-            aclick.eq(index).click();
-        }, 3000);
-    }
-</script>
-
-<!--地图-->
-<script>
-    var map
-    var Map_list = new Map();
-    function Amap_inte() {
-        map = new AMap.Map('container', {
-            resizeEnable: true,////是否监控地图容器尺寸变化
-            center: [104.101765,41.561402],
-            zoom: 4,
-            features: ['bg', 'road', 'building', 'point'], // 设置地图显示要素(Features)  区域面(bg)  道路(road)  建筑物(building)  标注(point)
-            // showLabel: false //不显示地图文字标记
-        });
-
-        // 样式
-        var styleName = "amap://styles/normal";
-        map.setMapStyle(styleName);
-
-        //map_list.get("sn1").T_Marker.setPosition([116.474203,39.970199])
-        //map_list.get("sn1").T_info.setContent(info_content("2222"))
-    }
-
-    // 获取数据
-    function DataScreen_Map() {
-        $.ajax({
-            type: 'POST',
-            url: 'DataScreen_Map',//发送请求
-            data: {
-
-            },
-            success: function (result) {
-
-                console.log(result)
-                if (result.Code != 200) {
-                    layer.msg(result.Msg);
-                    return
-                }
-                var map_sn = new Map()
-                for (let i = 0; i < result.Data.length; i++) {
-                    if(result.Data[i].T_Site == undefined){
-                        console.log("undefined 跳过 ",result.Data[i].T_sn,result.Data[i].T_Site)
-                        continue
-                    }
-                    if(result.Data[i].T_Site.length < 7){
-                        console.log("T_Site 跳过 ",result.Data[i].T_sn,result.Data[i].T_Site)
-                        continue
-                    }
-                    if(result.Data[i].T_id != 1){
-                        console.log("T_id 跳过 ",result.Data[i].T_sn)
-                        continue
-                    }
-                    if(map_sn.has(result.Data[i].T_sn)){
-                        console.log("map_sn 跳过 ",result.Data[i].T_sn)
-                        continue
-                    }
-                    map_sn.set(result.Data[i].T_sn,"1")
-                    T_site_split = result.Data[i].T_Site.split(",")
-                    // 地理经纬度坐标
-                    var lon = parseFloat(T_site_split[1]);
-                    var lat = parseFloat(T_site_split[0]);
-
-                    waring = 1
-                    if(result.Data[i].T_t <  result.Data[i].T_Tlower || result.Data[i].T_rh < result.Data[i].T_RHlower){
-                        waring = 2
-                    }
-                    if(result.Data[i].T_t >  result.Data[i].T_Tupper || result.Data[i].T_rh > result.Data[i].T_RHupper){
-                        waring = 2
-                    }
-
-                    P_ = {
-                        T_sn:result.Data[i].T_sn,
-                        T_name:result.Data[i].T_name,
-                        T_t:result.Data[i].T_t,
-                        T_rh:result.Data[i].T_rh,
-                        T_waring:waring,
-                        T_Tlower:result.Data[i].T_Tlower,
-                        T_Tupper:result.Data[i].T_Tupper,
-                        T_RHlower:result.Data[i].T_RHlower,
-                        T_RHupper:result.Data[i].T_RHupper,
-                        T_time:result.Data[i].T_time,
-                        T_l_p:result.Data[i].T_l_p,
-                        T_Marker: {},
-                        T_info:{},
-                        T_Position:[lon,lat],
-                        T_Dattery:result.Data[i].T_Dattery,
-                    }
-                    Hand_dian(P_)
-
-                }
-
-
-            }
-        });
-    }
-
-    //  获取点  轨迹
-    function get_DeviceSensor_data(T_sn) {
-
-        // 今天
-        var myDate = new Date();
-        y = myDate.getFullYear();        //获取当前年份(2位)
-        m = myDate.getMonth()+1;       //获取当前月份(0-11,0代表1月)
-        d = myDate.getDate();        //获取当前日(1-31)
-        console.log(y+"-"+m+"-"+d)
-
-        Time_start = y+"-"+m+"-"+d + " 00:00:00"
-        Time_end = y+"-"+m+"-"+d + " 23:59:59"
-
-
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Sensor_Data',//发送请求
-            data: {
-
-                Time_start:Time_start,
-                Time_end:Time_end,
-                T_sn: T_sn,
-                T_id: 1,
-                page: 0,
-                page_z: 9000,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-
-                    T_fhand(result.Data.DeviceSensor_data)
-
-                } else {
-
-                }
-            }
-        });
-        return false
-    }
-    // 轨迹
-    list_marker = []  // 条纹
-    var marker_line  // 点
-    var startMarker_line  // 开始
-    function T_fhand(data) {
-        var lineArr = [
-            // ['75.757904', '38.118117'],
-            // ['117.375719', '24.598057']
-        ];
-        if(!data) {
-            return
-        }
-        for (let i = 0; i < data.length; i++) {
-            // 026.5610665,106.6644807
-
-            if(data[i].T_site.length < 5){
-                continue;
-            }
-            T_site_split = data[i].T_site.split(",")
-            // 地理经纬度坐标
-            var lon = parseFloat(T_site_split[1]);
-            var lat = parseFloat(T_site_split[0]);
-
-            // console.log(data,lon,lat)
-            lineArr.unshift(new AMap.LngLat(lon,lat))  //unshift  push
-
-
-        }
-        console.log("lineArr:",lineArr)
-        // 清楚所有
-        map.remove(list_marker);
-        // 坐标转换
-        AMap.convertFrom(lineArr, 'gps', function (status, result) {
-            if (result.info === 'ok') {
-                var path2 = result.locations;
-                console.log("path2:",path2)
-
-                ///   -------------  开始点
-                // 创建一个 Icon
-                var startIcon = new AMap.Icon({
-                    // 图标尺寸
-                    size: new AMap.Size(25, 34),
-                    // 图标的取图地址
-                    image: 'https://osscold.baozhida.cn/images/dir-marker.png',
-                    // 图标所用图片大小
-                    imageSize: new AMap.Size(135, 40),
-                    // 图标取图偏移量
-                    imageOffset: new AMap.Pixel(-9, -3)
-                });
-                // 创建一个 Icon
-                var dianIcon = new AMap.Icon({
-                    // 图标的取图地址
-                    image: 'https://osscold.baozhida.cn/images/poi-marker-default.png',
-                    size: new AMap.Size(22, 28),  //图标所处区域大小
-                    imageSize: new AMap.Size(22,28) //图标大小
-                });
-                // 将 icon 传入 marker
-                startMarker_line = new AMap.Marker({
-                    position: new AMap.LngLat(path2[0].lng,path2[0].lat),
-                    icon: startIcon,
-                    map: map,
-                    offset: new AMap.Pixel(-13, -30)
-                });
-                AMap.event.addListener(startMarker_line, 'click', function () {
-                    //创建信息窗口
-                    infoWindow = new AMap.InfoWindow({
-                        isCustom: true,  //使用自定义窗体
-                        content: info_content_list(data[data.length - 1]),
-                        offset: new AMap.Pixel(0, -30)
-                    });
-                    //打开信息窗口
-                    infoWindow.open(map, [path2[0].lng,path2[0].lat]); //后面的参数指的是经纬度,在此显示窗口
-                });
-                list_marker.push(startMarker_line)
-                //  ------线条
-
-                // 所有 标记点  信息
-                for (let ix = 0; ix < path2.length; ix++) {
-                    if(ix == 0 || ix == path2.length - 1){
-                        continue
-                    }
-                    var marker_line = new AMap.Marker({
-                        position: new AMap.LngLat(path2[ix].lng,path2[ix].lat),
-                        icon: dianIcon,
-                        map: map,
-                    });
-
-                    ddid = data.length - ix - 1  // -
-                    style_s = "#ffffff"
-                    if(data[ddid].T_t <  data[ddid].T_Tlower || data[ddid].T_rh < data[ddid].T_RHlower){
-                        style_s = "#ff7070"
-                    }
-                    if(data[ddid].T_t >  data[ddid].T_Tupper || data[ddid].T_rh > data[ddid].T_RHupper){
-                        style_s = "#ff7070"
-                    }
-
-                    // label默认蓝框白底左上角显示,样式className为:amap-marker-label
-                    // marker.setLabel({
-                    //     offset: new AMap.Pixel(10, 0),  //设置文本标注偏移量
-                    //     content: "<spen style='background: transparent;'>"+ddid+"</spen>", //设置文本标注内容
-                    //     direction: 'center' //设置文本标注方位
-                    // });
-                    AMap.event.addListener(marker_line, 'click', function () {
-                        console.log("ix:",ix)
-                        ddid = data.length - ix - 1
-                        //创建信息窗口
-                        infoWindow = new AMap.InfoWindow({
-                            isCustom: true,  //使用自定义窗体
-                            content: info_content_list(data[ddid]),
-                            offset: new AMap.Pixel(0, -30)
-                        });
-                        //打开信息窗口
-                        infoWindow.open(map, [path2[ix].lng,path2[ix].lat]); //后面的参数指的是经纬度,在此显示窗口
-                    });
-
-                    list_marker.push(marker_line)
-
-
-
-
-                }
-
-                // 条纹
-                polyline1 = new AMap.Polyline({
-                    path:path2,
-                    strokeWeight:8,
-                    strokeOpacity:0.8,
-                    strokeColor:'#9991ea',
-                    showDir:true,
-                    map: map,
-                });
-                list_marker.push(polyline1)
-                map.setFitView(null, false, [150, 60, 100, 60]);
-
-            }
-        });
-
-
-
-
-
-
-    }
-
-
-    // 处理 标点
-    function Hand_dian(P_){
-        if(Map_list == undefined){
-            Add_dian(P_)
-            return
-        }
-        if(Map_list.get(P_.T_sn) == undefined){
-            Add_dian(P_)
-            return;
-        }
-        M_T_sn = Map_list.get(P_.T_sn)
-        P_.T_Marker = M_T_sn.T_Marker
-        P_.T_info = M_T_sn.T_info
-        PU_convertFrom(P_)
-    }
-
-    // 创建一个点
-    function Add_dian(P_) {
-        // 添加
-        // 将 icon 传入 marker
-        var Marker_ = new AMap.Marker({
-            position: [0,0],
-            icon: Icon_1_1,
-            offset: new AMap.Pixel(0, 0)
-        });
-        infoW_ = new AMap.InfoWindow({
-            isCustom: true,  //使用自定义窗体
-            content: info_content(P_),
-            offset: new AMap.Pixel(20, 0)
-        });
-
-        Add_convertFrom(P_)
-        map.add(Marker_);
-        P_.T_Marker = Marker_
-        P_.T_info = infoW_
-        Map_list.set(P_.T_sn, P_)
-        console.log("添加 ",P_.T_sn)
-    }
-
-    // 坐标转换
-    function Add_convertFrom(P_){
-        console.log("Add_convertFrom:",P_)
-        AMap.convertFrom(P_.T_Position, 'gps', function (status, result) {
-            if (result.info === 'ok') {
-                var resLnglat = result.locations[0];
-                console.log(resLnglat)
-                P_.T_Marker.setPosition([resLnglat.lng,resLnglat.lat])
-
-                f_Icon(P_) // 判断 图标
-
-                AMap.event.addListener(P_.T_Marker, 'click', function () {
-                    console.log("click'",P_.T_sn)
-
-                    get_DeviceSensor_data(P_.T_sn)
-                    //打开信息窗口
-                    P_.T_info.open(map, [resLnglat.lng,resLnglat.lat]); //后面的参数指的是经纬度,在此显示窗口
-                });
-
-            }
-            map.setFitView(null, false, [150, 60, 100, 60]);
-        });
-    }
-    // 坐标转换
-    function PU_convertFrom(P_){
-        AMap.convertFrom(P_.T_Position, 'gps', function (status, result) {
-            if (result.info === 'ok') {
-                var resLnglat = result.locations[0];
-                console.log(resLnglat)
-                P_.T_Marker.setPosition([resLnglat.lng,resLnglat.lat])
-
-
-                f_Icon(P_) // 判断 图标
-                P_.T_info.setContent(info_content(P_))
-                P_.T_info.setPosition([resLnglat.lng,resLnglat.lat])
-
-            }
-        });
-    }
-    // 判断 图标
-    function f_Icon(P_) {
-
-        if(P_.T_l_p == 1){
-            if(f_Icon.T_waring == 1){
-                P_.T_Marker.setIcon( Icon_1_1 )
-            }else if(P_.T_waring == 2){
-                P_.T_Marker.setIcon(Icon_1_2)
-            }
-        }else if(P_.T_l_p == 2) {
-            if(P_.T_waring == 1){
-                P_.T_Marker.setIcon(Icon_2_1)
-            }else if(P_.T_waring == 2){
-                P_.T_Marker.setIcon(Icon_2_2)
-            }
-        }
-    }
-    // 消息串口模板
-    function info_content_list(P_) {
-        return "" +
-            "<div style='height: 3.5rem;padding: 5px;background-color: #478EE6;opacity:0.8;border-radius:5px;box-shadow: 0px 0px 5px #62adff;border: 1px solid #006ad0;padding: 2px;float: contour;'>" +
-            "<div style='margin-left: 4px;font-size: 15px;color: #ffffff;text-align: center;height: 1rem;'>"+P_.T_name+"</div>"+
-            "<div style='margin-left: 4px;font-size: 12px;color: #ffffff'> <span style='width: 65px;display: inline-block;'>温度:"+P_.T_t+"</span> <span style='width: 65px;display: inline-block;' > 湿度:"+P_.T_rh+"</span></div>"+
-            "<div style='margin: 0px 4px;font-size: 14px;color: #ffffff'>"+dateChangeFormat('YYYY-mm-dd HH:MM:SS', P_.T_time)+"</div>" +
-            "</div>"
-    }
-    // 消息串口模板
-    function info_content(P_) {
-        style_s = "正常"
-        if(P_.T_waring == 1){
-            style_s = "正常"
-        }else if(P_.T_waring == 2){
-            style_s = "异常"
-        }
-        return "" +
-            "<div style='height: 83px;padding: 5px;background-color: #478EE6;opacity:0.8;border-radius:5px;box-shadow: 0px 0px 5px #62adff;border: 1px solid #006ad0;padding: 2px;float: contour;'>" +
-            "<div style='margin-left: 4px;font-size: 15px;color: #ffffff;text-align: center;height: 1rem;'>"+P_.T_name+"</div>"+
-            "<div style='margin-left: 4px;font-size: 12px;color: #ffffff'> <span style='width: 65px;display: inline-block;'>温度:"+P_.T_t+"</span> <span style='width: 65px;display: inline-block;' > 湿度:"+P_.T_rh+"</span></div>"+
-            "<div style='margin-left: 4px;font-size: 12px;color: #ffffff'><span style='width: 65px;display: inline-block;'>状态:"+style_s+"</span> <span style='width: 65px;display: inline-block;' > 电量:"+P_.T_Dattery+"%</span></div>"+
-            "<div style='margin: 0px 4px;font-size: 14px;color: #ffffff'>"+dateChangeFormat('YYYY-mm-dd HH:MM:SS', P_.T_time)+"</div>" +
-            "</div>"
-    }
-    // 创建一个 Icon
-    var Icon_1_1 = new AMap.Icon({
-        // 图标尺寸
-        size: new AMap.Size(60, 60),
-        // 图标的取图地址
-        image: 'https://osscold.baozhida.cn/images/救护车.png',
-        // 图标所用图片大小
-        imageSize: new AMap.Size(40, 40),
-        // 图标取图偏移量
-        //imageOffset: new AMap.Pixel(-9, -3)
-    });
-    var Icon_1_2 = new AMap.Icon({
-        // 图标尺寸
-        size: new AMap.Size(60, 60),
-        // 图标的取图地址
-        image: 'https://osscold.baozhida.cn/images/救护车1.png',
-        // 图标所用图片大小
-        imageSize: new AMap.Size(40, 40),
-        // 图标取图偏移量
-        //imageOffset: new AMap.Pixel(-9, -3)
-    });
-    var Icon_2_1 = new AMap.Icon({
-        // 图标尺寸
-        size: new AMap.Size(60, 60),
-        // 图标的取图地址
-        image: 'https://osscold.baozhida.cn/images/药箱.png',
-        // 图标所用图片大小
-        imageSize: new AMap.Size(40, 40),
-        // 图标取图偏移量
-        //imageOffset: new AMap.Pixel(-9, -3)
-    });
-    var Icon_2_2 = new AMap.Icon({
-        // 图标尺寸
-        size: new AMap.Size(60, 60),
-        // 图标的取图地址
-        image: 'https://osscold.baozhida.cn/images/药箱1.png',
-        // 图标所用图片大小
-        imageSize: new AMap.Size(40, 40),
-        // 图标取图偏移量
-        //imageOffset: new AMap.Pixel(-9, -3)
-    });
-</script>
-<style>
-
-    .amap-logo {
-        right: 0 !important;
-        left: auto !important;
-        display: none !important;
-    }
-
-    .amap-copyright {
-        right: 70px !important;
-        left: auto !important;
-        opacity:0 !important;
-    }
-</style>
-</html>

+ 0 - 2
views/Data/DataView3d.html

@@ -1,2 +0,0 @@
-<!DOCTYPE html>
-{{str2html .Htmlv3d}}

+ 0 - 139
views/Data/DataView3dE.html

@@ -1,139 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.cookie.min.js"></script>
-    <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-
-    <style>
-
-    </style>
-</head>
-
-<body>
-
-<div class="layui-fluid" style="height: 100%">
-    <div class="layui-row">
-        <span class="layui-btn" onclick="f_UpDataView3d()" style="float: left;margin-right: 100px">发布</span>
-
-        <span class="layui-btn" onclick="f_Project_Add()" style="float: left;margin-right: 30px;">新建3D</span>
-        <input type="text" id="ProjectId" placeholder="请输入ProjectId" autocomplete="off" class="layui-input" style="width: 180px;float: left">
-        <input type="text" id="ProjectKey" placeholder="请输入ProjectKey" autocomplete="off" class="layui-input"  style="width: 300px;float: left;margin-right: 4px;">
-        <span class="layui-btn" onclick="f_open_editor()" style="float: left;margin-right: 20px;">编辑3D</span>
-
-
-        <span class="layui-btn" style="float: right" onclick="window.open('?v=0') ">预览</span>
-    </div>
-    <div class="layui-row" style="margin-top: 10px;height: 841px;">
-        <div class="layui-tab layui-tab-card">
-            <ul class="layui-tab-title">
-                <li class="layui-this">主页</li>
-                <li>1</li>
-                <li>2</li>
-                <li>3</li>
-                <li>4</li>
-                <li>5</li>
-            </ul>
-            <div class="layui-tab-content" style="height: 841px;">
-                <div class="layui-tab-item layui-show">
-                    <textarea id="View3dHtml" style="width: 100%;height: 841px;" placeholder="请输入HTML" class="layui-textarea">{{.Admin_r.Admin_panel_v3d}}</textarea>
-                </div>
-                <div class="layui-tab-item">
-                    <textarea id="View3dHtml1" style="width: 100%;height: 841px;" placeholder="请输入HTML" class="layui-textarea">{{.Admin_r.Admin_panel_v3d1}}</textarea>
-                </div>
-                <div class="layui-tab-item">
-                    <textarea id="View3dHtml2" style="width: 100%;height: 841px;" placeholder="请输入HTML" class="layui-textarea">{{.Admin_r.Admin_panel_v3d2}}</textarea>
-                </div>
-                <div class="layui-tab-item">
-                    <textarea id="View3dHtml3" style="width: 100%;height: 841px;" placeholder="请输入HTML" class="layui-textarea">{{.Admin_r.Admin_panel_v3d3}}</textarea>
-                </div>
-                <div class="layui-tab-item">
-                    <textarea id="View3dHtml4" style="width: 100%;height: 841px;" placeholder="请输入HTML" class="layui-textarea">{{.Admin_r.Admin_panel_v3d4}}</textarea>
-                </div>
-                <div class="layui-tab-item">
-                    <textarea id="View3dHtml5" style="width: 100%;height: 841px;" placeholder="请输入HTML" class="layui-textarea">{{.Admin_r.Admin_panel_v3d5}}</textarea>
-                </div>
-            </div>
-        </div>
-
-    </div>
-</div>
-<script>
-    function f_UpDataView3d() {
-        $.ajax({
-            type: 'POST',
-            url: '../../../Data/UpDataView3d',//发送请求
-            data: {
-                View3dHtml:$("#View3dHtml").val(),
-                View3dHtml1:$("#View3dHtml1").val(),
-                View3dHtml2:$("#View3dHtml2").val(),
-                View3dHtml3:$("#View3dHtml3").val(),
-                View3dHtml4:$("#View3dHtml4").val(),
-                View3dHtml5:$("#View3dHtml5").val(),
-            },
-            success: function(result) {
-                console.log(result)
-                if(result.Code == 200){
-                    layer.msg("操作成功,可点击右上方阅览", {
-                        icon: 1,
-                        time: 2000
-                    });
-
-                }else {
-                    layer.msg("错误:"+result.Msg, {
-                        icon: 2,
-                        time: 2000
-                    });
-                }
-            }
-        });
-
-    }
-
-    var objv3d = JSON.parse("{{.Admin_r.Admin_panel_v3d}}");
-    console.log(objv3d)
-
-    function f_Project_Add() {
-        var settings = {
-            "url": "https://iot3d.baozhida.cn/Project/Add",
-            "method": "POST",
-            "timeout": 0,
-            "headers": {
-                "Content-Type": "application/x-www-form-urlencoded"
-            },
-            "data": {
-                "T_name": "冷链3D视图{{.Admin_r.Admin_name}}",
-                "T_class": "3"
-            }
-        };
-
-        $.ajax(settings).done(function (response) {
-            console.log(response);
-
-            $("#ProjectId").val(response.Data.T_ProjectId)
-            $("#ProjectKey").val(response.Data.T_ProjectKey)
-        });
-    }
-
-    function f_open_editor() {
-
-        window.open('https://iot3d.baozhida.cn/editor/index?ProjectID='+ $("#ProjectId").val() +'&ProjectKEY='+$("#ProjectKey").val() +'&T_uuid=Cold')
-
-
-    }
-
-</script>
-
-</body>
-</html>

+ 0 - 218
views/Data/Template-.html

@@ -1,218 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="../favicon.ico">
-        <link rel="bookmark" href="../favicon.ico">
-        <link rel="stylesheet" href="../css/font.css">
-        <link rel="stylesheet" href="../css/xadmin.css">
-        <link rel="stylesheet" href="../layui/css/layui.css">
-        <script type="text/javascript" src="../layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="../js/xadmin.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-            <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-            <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]--></head>
-    
-    <body>
-        <div class="layui-fluid">
-            <div class="layui-row">
-                <form class="layui-form">
-
-                    <div class="layui-form-item">
-                        <label class="layui-form-label">
-                            <span class="x-red">*</span>图片</label>
-                        <div class="layui-input-inline">
-                            <div class="layui-upload">
-                                <button type="button" class="layui-btn" id="test1">上传图片</button>
-                                <div class="layui-upload-list">
-                                    <img {{if gt .id 0 }}
-                                         src="{{.Date.T_img}}"
-                                         {{end}}  style="max-height: 100px;height: 100px" class="layui-upload-img" id="demo1">
-                                    <p id="demoText"></p>
-                                </div>
-                            </div>
-
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label for="T_name" class="layui-form-label">
-                            <span class="x-red">*</span>名称</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }}
-                                   value="{{.Date.Id}}"
-                                   {{end}}  type="text" id="T_name" name="T_name" required="" lay-verify="required" autocomplete="off" class="layui-input"></div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label class="layui-form-label">
-                            <span class="x-red">*</span>分类</label>
-                        <div class="layui-input-inline">
-                            <select  lay-filter="T_class" id="T_class" name="T_class" class="valid" >
-                                {{range $index, $elem := .Class_List}}
-                                    <option value="{{$elem.Id}}" {{if gt $.id 0 }}
-                                                {{if eq $.Date.T_class $elem.Id }}
-                                                selected
-                                                {{end}}
-                                            {{end}}
-                                             >{{$elem.T_name}}</option>
-                                {{end}}
-
-                            </select>
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label for="T_int" class="layui-form-label">
-                            <span class="x-red">*</span>数字</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }}
-                                        value="{{.Date.T_int}}"
-                                   {{end}} type="text" id="T_int" name="T_int" placeholder="¥" autocomplete="off" class="layui-input">
-                        </div>
-                        <div class="layui-form-mid layui-word-aux">
-                            <span class="x-red">*</span>
-                        </div>
-                    </div>
-                    <div class="layui-form-item layui-form-text">
-                        <label for="T_text" class="layui-form-label">描述</label>
-                        <div class="layui-input-block">
-                           <textarea class="layui-textarea" id="T_text" style="display: none" >
-                              {{if gt .id 0 }}
-                                   {{.Date.T_text}}
-                                   {{end}}
-                            </textarea>
-                        </div>
-                    </div>
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-<!--                        <label for="L_repass" class="layui-form-label"></label>-->
-                        <button class="layui-btn  layui-btn-normal" lay-filter="add" lay-submit="">提交</button></div>
-                </form>
-            </div>
-        </div>
-        <script>
-            layui.use(['form', 'layer',"layedit"],
-
-                function() {
-                    $ = layui.jquery;
-                    var form = layui.form,
-                    layer = layui.layer;
-                    var layedit = layui.layedit
-
-                    layedit.set({
-                        uploadImage: {
-                            url: '/UpFile' //接口url
-                        }
-                    });
-
-                    //构建一个默认的编辑器
-                    var index = layedit.build('T_text', {
-                        height: 580 //设置编辑器高度,
-
-                    });
-                    //监听提交
-                    form.on('submit(add)',
-                        function(data) {
-                            console.log("=== submit(add) ==");
-                            console.log(data);
-
-                            $.ajax({
-                                type: 'POST',
-                                url: 'List_Post',//发送请求
-                                data: {
-                                    id:"{{.id}}",
-                                    T_name:data.field.T_name,
-                                    T_class:data.field.T_class,
-                                    T_int:data.field.T_int,
-                                    T_img:T_img,
-                                    T_text:layedit.getContent(index),
-                                },
-                                success: function(result) {
-                                    console.log(result)
-                                    if(result.Code == 200){
-                                        layer.msg("操作成功", {
-                                            icon: 1,
-                                            time: 2000
-                                        });
-                                    }else {
-                                        layer.msg("错误:"+result.Msg, {
-                                            icon: 2,
-                                            time: 2000
-                                        });
-                                    }
-
-                                    //
-                                    //关闭当前frame
-                                    parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                    parent.location.reload();
-
-                                    form.render('select');
-                                    // return false;
-                                }
-                            });
-
-                            return false;
-                        });
-
-                });
-        </script>
-        <script>
-
-            T_img = "{{.Date.T_img}}"
-
-
-            layui.use('upload', function(){
-                var $ = layui.jquery
-                    ,upload = layui.upload;
-
-                //普通图片上传
-                var uploadInst = upload.render({
-                    elem: '#test1'
-                    ,url: '/UpFile' //改成您自己的上传接口
-                    ,before: function(obj){
-                        //预读本地文件示例,不支持ie8
-                        obj.preview(function(index, file, result){
-                            $('#demo1').attr('src', result); //图片链接(base64)
-                        });
-                    }
-                    ,done: function(res){
-
-                        console.log(res)
-                        //如果上传失败
-                        if(res.code != 0){
-                            return layer.msg('上传失败');
-                        }
-                        T_img = res.data.src
-                        console.log(T_img)
-                        //上传成功
-                    }
-                    ,error: function(){
-                        console.log("error")
-
-                        //演示失败状态,并实现重传
-                        var demoText = $('#demoText');
-                        demoText.html('<span style="color: #ff5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
-                        demoText.find('.demo-reload').on('click', function(){
-                            uploadInst.upload();
-                        });
-                    }
-                });
-
-                //绑定原始文件域
-                upload.render({
-                    elem: '#test20'
-                    ,url: 'https://httpbin.org/post' //改成您自己的上传接口
-                    ,done: function(res){
-                        layer.msg('上传成功');
-                        console.log(res)
-                    }
-                });
-
-            });
-        </script>
-    </body>
-
-</html>

+ 0 - 176
views/Device/Device-.html

@@ -1,176 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm" style="overflow-y: hidden;">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-        <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <script src="https://osscold.baozhida.cn/js/text_buqua/dist/horsey.js"></script>
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/js/text_buqua/dist/horsey.css">
-
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-            <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-            <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]--></head>
-    
-    <body>
-        <div class="layui-fluid">
-            <div class="layui-row">
-                <form class="layui-form">
-
-
-                    <div class="layui-form-item" style="margin-top: 20px">
-                        <label for="T_sn" class="layui-form-label">
-                            <span class="x-red">*</span>SN</label>
-                        <div class="layui-input-inline">
-                            <input type="text" id="T_sn" name="T_sn" required="" lay-verify="required" autocomplete="off" class="layui-input"></div>
-                    </div>
-                    <div class="layui-form-item" style="margin-top: 20px">
-                        <label for="T_sn" class="layui-form-label">
-                          MSISDN</label>
-                        <div class="layui-input-inline">
-                            <input type="text" id="T_MSISDN" name="T_MSISDN" required="" autocomplete="off" class="layui-input"></div>
-                    </div>
-
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-<!--                        <label for="L_repass" class="layui-form-label"></label>-->
-                        <button class="layui-btn  layui-btn-normal" lay-filter="add" lay-submit="">提交</button></div>
-                </form>
-            </div>
-        </div>
-
-        <script>
-            var suggestions = []
-
-
-            horsey(document.querySelector('#T_sn'), {
-                suggestions: [{{range $index, $elem := .DeviceSnOld_List}}{{ $elem.T_sn }},{{end}}]
-            });
-
-
-            layui.use(['form', 'layer',"layedit"],
-
-                function() {
-                    $ = layui.jquery;
-                    var form = layui.form,
-                    layer = layui.layer;
-                    var layedit = layui.layedit
-
-                    layedit.set({
-                        uploadImage: {
-                            url: '/UpFile' //接口url
-                        }
-                    });
-
-                    //构建一个默认的编辑器
-                    var index = layedit.build('T_text', {
-                        height: 580 //设置编辑器高度,
-
-                    });
-                    //监听提交
-                    form.on('submit(add)',
-                        function(data) {
-                            console.log("=== submit(add) ==");
-                            console.log(data);
-                            var loading = layer.load(0, {
-                                shade: false,
-                                time: 99*1000
-                            });
-                            $.ajax({
-                                type: 'POST',
-                                url: 'Device_Add',//发送请求
-                                data: {
-                                    T_sn:data.field.T_sn,
-                                    T_MSISDN:data.field.T_MSISDN,
-                                },
-                                success: function(result) {
-                                    console.log(result)
-                                    layer.close(loading)
-                                    if(result.Code == 200){
-                                        layer.msg("操作成功", {
-                                            icon: 1,
-                                            time: 2000
-                                        });
-                                        parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                        parent.location.reload();
-                                    }else {
-                                        layer.msg("错误:"+result.Msg, {
-                                            icon: 2,
-                                            time: 2000
-                                        });
-                                    }
-                                }
-                            });
-
-                            return false;
-                        });
-
-                });
-        </script>
-
-        <script>
-
-            T_img = "{{.Date.T_img}}"
-
-
-            layui.use('upload', function(){
-                var $ = layui.jquery
-                    ,upload = layui.upload;
-
-                //普通图片上传
-                var uploadInst = upload.render({
-                    elem: '#test1'
-                    ,url: '/UpFile' //改成您自己的上传接口
-                    ,before: function(obj){
-                        //预读本地文件示例,不支持ie8
-                        obj.preview(function(index, file, result){
-                            $('#demo1').attr('src', result); //图片链接(base64)
-                        });
-                    }
-                    ,done: function(res){
-
-                        console.log(res)
-                        //如果上传失败
-                        if(res.code != 0){
-                            return layer.msg('上传失败');
-                        }
-                        T_img = res.data.src
-                        console.log(T_img)
-                        //上传成功
-                    }
-                    ,error: function(){
-                        console.log("error")
-
-                        //演示失败状态,并实现重传
-                        var demoText = $('#demoText');
-                        demoText.html('<span style="color: #ff5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
-                        demoText.find('.demo-reload').on('click', function(){
-                            uploadInst.upload();
-                        });
-                    }
-                });
-
-                //绑定原始文件域
-                upload.render({
-                    elem: '#test20'
-                    ,url: 'https://httpbin.org/post' //改成您自己的上传接口
-                    ,done: function(res){
-                        layer.msg('上传成功');
-                        console.log(res)
-                    }
-                });
-
-            });
-        </script>
-    </body>
-
-</html>

+ 0 - 333
views/Device/Device.html

@@ -1,333 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-
-        <script src="https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js"></script>
-    </head>
-    
-    <body>
-        <div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-            <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-                <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-            </a>
-        </div>
-        <div class="layui-fluid">
-            <div class="layui-row layui-col-space15">
-                <div class="layui-col-md12">
-                    <div class="layui-card">
-                        <div class="layui-card-body ">
-                            <form class="layui-form layui-col-space5">
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <input value="{{.Name}}" type="text" name="Name" placeholder="请输入 名称" autocomplete="off" class="layui-input"></div>
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <input value="{{.T_sn}}" type="text" name="T_sn" placeholder="请输入 SN" autocomplete="off" class="layui-input"></div>
-
-
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach">
-                                        <i class="layui-icon">&#xe615;</i></button>
-                                </div>
-                            </form>
-                        </div>
-                        {{if eq 1 $.Admin_Power.Power_Device_a }}
-                        <div class="layui-card-header">
-<!--                            <button class="layui-btn layui-btn-danger" onclick="delAll()">-->
-<!--                                <i class="layui-icon"></i>批量删除</button>-->
-                            <button class="layui-btn  layui-btn-normal" onclick="xadmin.open('添加','Device_',450,300,false);">
-                                <i class="layui-icon"></i>添加</button>
-                            <button class="layui-btn  layui-btn-normal" style="float: right;color: #ffffff" onclick="f_tishi();">
-                                <i class="layui-icon">&#xe705;</i>  说明</button>
-                        </div>
-                        {{end}}
-                        <div class="layui-card-body ">
-                            {{range $index, $elem := .Device_lite}}
-                            <div class="layui-row" style="margin-bottom: 20px;border-radius:5px;">
-                                <div class="layui-col" style="height: 40px;background-color: #f1f1f1;border-radius:5px;padding-top: 10px;padding-left: 10px">
-                                    <img style="float: left" src="https://osscold.baozhida.cn/images/设备管理-1.png" height="30" width="30"/>
-                                    <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">SN:{{$elem.T_sn}}</div>
-                                    <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">主机名称:{{$elem.T_devName}} {{if eq 0 $elem.T_give }}<span style="background-color: #ff8d8d">弃用设备</span>{{end}}</div>
-                                    <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">传感器数量:{{$elem.T_sensor}}</div>
-                                    <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">连接状态:
-                                        {{if eq 1 $elem.T_online }}
-                                        <span style="color: #00FF00">通讯正常 </span>
-                                        {{else}}
-                                            {{if eq 2 $elem.T_online }}
-                                            <span style="color: #ff7d7d">设备已关机 </span>
-                                            {{else}}
-                                            <span style="color: #ff7d7d">设备无网络</span>
-                                            {{end}}
-                                        {{end}}
-                                        {{if eq 1 $elem.T_online_4g }}
-                                            <span style="color: #00FF00">[4G] </span>
-                                        {{end}}
-                                        {{if eq 2 $elem.T_online_4g }}
-                                            <span style="color: #d2d2d2">[4G] </span>
-                                        {{end}}
-                                        {{if eq 3 $elem.T_online_4g }}
-                                        <span style="color: #ff7d7d">[4G] </span>
-                                        {{end}}
-                                    </div>
-                                    <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">监控状态:
-                                        {{if eq 1 $elem.T_online }}
-                                            {{if eq 1 $elem.T_monitor }}
-                                            <span style="color: #00FF00">监控状态 </span>
-                                            {{else}}
-                                            <span style="color: #ff7d7d">未监控</span>
-                                            {{end}}
-                                        {{else}}
-                                            {{if eq 2 $elem.T_online }}
-                                            <span style="color: #ff7d7d">未监控 </span>
-                                            {{else}}
-                                            <span style="color: #ff7d7d">未知状态</span>
-                                            {{end}}
-                                        {{end}}
-                                    </div>
-<!--                                    <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">电量状态:-->
-<!--                                        {-{$elem.T_Dattery }}-->
-
-<!--                                    </div>-->
-                                    <div style="float: left;margin-left: 20px;margin-top: 4px;font-size: 15px">MSISDN(物联网卡号):{{$elem.T_MSISDN}}</div>
-
-
-
-
-                                    <div class="layui-card-header" style="border-bottom-width: 0px;">
-                                        <!--                            <button class="layui-btn layui-btn-danger" onclick="delAll()">-->
-                                        <!--                                <i class="layui-icon"></i>批量删除</button>-->
-
-
-
-                                        <button class="layui-btn  layui-btn-normal" style="float: right;margin-top: 2px;margin-left: 20px"
-                                                onclick="xadmin.open('设备日志','DeviceLogs?T_sn={{$elem.T_sn}}',700,'',false);"
-                                        >
-                                            <i class="layui-icon" style="margin-right: 4px">&#xe63c;</i> 设备日志</button>
-
-                                        {{if eq 1 $.Admin_Power.Power_Device_Parameter_e }}
-                                       ` <button class="layui-btn  layui-btn-normal" style="float: right;margin-top: 2px"
-                                                onclick="xadmin.open('设备管理','Device_Parameter?Sn={{$elem.T_sn}}','',800,false);"
-                                                >
-                                            <i class="iconfont" style="margin-right: 4px">&#xe6ae;</i> 设备管理</button>`
-                                        {{end}}
-
-                                    </div>
-
-                                </div>
-                                <div class="layui-col" style="margin-left: 40px;max-height: 163px;overflow-y: auto" >
-                                    {{range $index, $elem_s := $elem.T_sensor_list}}
-                                        <div class="layui-col-xs6 layui-col-sm4 layui-col-md2 layui-col-lg2" style="height: 104px; " >
-                                            <div style="margin: 4px;height: 96px; border-radius:5px;{{if eq 0 $elem_s.T_datashow }}background-color:#c4c4c4;{{else}} background-color:#f1f1f1;{{end}}"
-                                                 {{if eq 1 $.Admin_Power.Power_DeviceSensor_Parameter_e }}
-                                                 onclick="xadmin.open('传感器管理','DeviceSensor_List_html?Sn={{$elem.T_sn}}&Id={{$elem_s.T_id}}&Sn_name={{$elem.T_devName}}','',770,false);"
-                                                 {{end}}
-                                            >
-                                                <div class="layui-row" style="text-align: center;font-size: 15px;background-color: #8ecbff;border-radius:5px;">
-                                                   <span style="float: left;background-color: #69d1ff;padding: 0px 2px;border-radius:5px;">{{$elem_s.T_id}}</span>  {{$elem_s.T_name}}
-
-
-                                                </div>
-                                                <div class="layui-row" >
-
-                                                    <div class=" layui-col-md4 ">
-
-                                                        <img src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png" height="50" width="50"/>
-
-
-                                                    </div>
-                                                    <div class="layui-col-md8" style="margin-top: 3px;white-space:nowrap">
-
-                                                        <div style="{{if and (eq 1 ($elem.T_sn | IsYD)) (eq 0 $.Admin_r.Admin_rh)}}margin-top: 10px;{{end}} width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;">
-                                                            <span style="width: 48px;float: left" > <span class="ChangeDivNum">{{$elem_s.T_t}}</span>℃</span>
-                                                            <span style="font-size: 10px;float: left" >{{$elem_s.T_Tlower}}~{{$elem_s.T_Tupper}}</span>
-                                                        </div>
-                                                        {{if or (eq 0 ($elem.T_sn | IsYD)) (eq 1 $.Admin_r.Admin_rh)}}
-                                                            <div style="width: 98%;height:20px;float: left;font-size: 15px;text-overflow:ellipsis; overflow:hidden;">
-                                                                <span style="width: 48px;float: left" ><span class="ChangeDivNum">{{$elem_s.T_rh}}</span>%</span>
-                                                                <span style="font-size: 10px;float: left">{{$elem_s.T_RHlower}}~{{$elem_s.T_RHupper}}</span>
-                                                            </div>
-
-                                                        {{end}}
-                                                    </div>
-                                                    <div class=" layui-col-md12 " style="padding-top: -2px;font-size: 16px;text-align: center;margin-top: -2px;border-top:1px solid  #000">
-                                                        {{ $elem_s.T_time}}
-                                                    </div>
-                                                </div>
-
-                                            </div>
-
-                                        </div>
-
-                                    {{end}}
-                                </div>
-                            </div>
-
-
-
-                            {{end}}
-                        </div>
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div>
-
-                                    {{range $index, $elem := .Pages}}
-                                        {{if eq $elem.A 1}}
-                                        <a class="prev" href="?page={{$elem.V}}&Name={{$.Name}}&T_sn={{$.T_sn}}&Class_1={{$.Class_1}}">&lt;&lt;</a>
-                                        {{end}}
-                                        {{if eq $elem.A 2}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&T_sn={{$.T_sn}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 3}}
-                                        <span class="current">{{$elem.V}}</span>
-                                        {{end}}
-                                        {{if eq $elem.A 4}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&T_sn={{$.T_sn}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 5}}
-                                        <a class="next" href="?page={{$elem.V}}&Name={{$.Name}}&T_sn={{$.T_sn}}&Class_1={{$.Class_1}}">&gt;&gt;</a>
-                                        {{end}}
-
-
-
-                                    {{end}}
-
-
-
-                                </div>
-                                Page:{{.Page}}-
-                                Page_size:{{.Page_size}}-
-                                cnt:{{.cnt}}
-                            </div>
-                        </div>
-
-
-                    </div>
-                </div>
-            </div>
-        </div>
-    </body>
-    <script>
-        // 页面 加载完成后执行
-        window.onload = function () {
-            console.log("页面 加载完成后执行")
-            ChangeDiv()
-        }
-        function ChangeDiv() {
-            var divs = document.getElementsByClassName("ChangeDivNum");
-            var len = divs.length;
-            for(var i=0;i<len;i++){
-                console.log(divs[i])
-                divs[i].textContent = parseFloat(divs[i].textContent).toFixed(1)
-            }
-        }
-
-        layui.use(['laydate', 'form', 'layer'],
-            function() {
-                var laydate = layui.laydate;
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#start' //指定元素
-                });
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#end' //指定元素
-                });
-
-
-                // 鼠标悬浮提示文字
-                var tip_html = "<p>12312312312313123123</p>";
-                var tip_index = 0;
-
-
-
-        });
-
-        $(document).on('mouseenter', '.tishi_lianj', function(){  // 监听鼠标移入事件
-            console.log("mouseenter")
-            tip_index = layer.tips(tip_html, '#tableTopLeft', {
-                tips: [1, "#"],  //1-4表示上右下左四个方向,# 可带背景色
-                area: ['450px', 'auto'], // 提示框宽高
-                time: 0  //自动关闭所需毫秒,0表示不自动关闭
-            });
-        }).on('mouseleave', '#tableTopLeft', function(){ // 监听鼠标移出事件
-            console.log("mouseleave")
-            layer.close(tip_index);
-        });
-
-
-
-        /*用户-删除*/
-        function member_del(obj, id) {
-            layer.confirm('确认要删除吗?',
-            function(index) {
-                //发异步删除数据
-                $(obj).parents("tr").remove();
-
-                $.ajax({
-                    type: 'POST',
-                    url: 'Device_Del',//发送请求
-                    data: {Id:id},
-                    success: function(result) {
-                        console.log(result)
-                        if (result.Code == 200 ){
-                            layer.msg('已删除!', {
-                                icon: 1,
-                                time: 2000
-                            });
-                            window.location.reload();
-                        }else {
-                            layer.msg('删除失败!', {
-                                time: 2000
-                            });
-                        }
-
-                    }
-                });
-
-
-
-            });
-        }
-    </script>
-    <script>
-
-    function f_tishi() {
-        layer.open({
-            title: '说明'
-            ,content: '<h2 style="color: #d80000">设备管理里面 温湿度 不是实时数据</h2>' +
-                '<h2>连接状态:</h2>' +
-                '<p>1、通讯正常</p>' +
-                '<p>2、设备已关机</p>' +
-                '<p>3、设备无网络(设备信号弱,或无信号)</p>' +
-                '<p>[4G]标签:</p>' +
-                '<p>[4G] 不显示,代表没有4G备用网络 </p>' +
-                '<p><span style="color: #00FF00">[4G] </span> 绿色,连接正常</p>' +
-                '<p><span style="color: #d2d2d2">[4G] </span> 灰色,连接断开</p>' +
-                '<p><span style="color: #ff7d7d">[4G] </span> 红色,连接异常</p>' +
-                '<h2>监控状态:</h2>' +
-                '<p>1、监控状态</p>' +
-                '<p>2、未监控</p>' +
-                '<p>3、未知状态(由于设备异常断开网络,请以设备实际显示为准)</p>'+
-                '<h2>弃用设备:</h2>' +
-                '<p>1、本设备所有探头 在数据展示中将会隐藏,可以通过指定SN搜索到历史数据</p>'
-        });
-    }
-
-    </script>
-</html>
-

+ 0 - 467
views/Device/DeviceBind-.html

@@ -1,467 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-    <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.cookie.min.js"></script>
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]--></head>
-
-<body>
-<div class="layui-fluid">
-
-    <!--    <div class="layui-inline" style="margin-top: 20px">-->
-    <!--        &lt;!&ndash;        <label class="layui-form-label" style="width: 28px;">用户</label>&ndash;&gt;-->
-    <!--        <div class="layui-input-inline" style="margin-left: 20px">-->
-    <!--            <input class="layui-input layui-disabled" type="text" value="发发发" autocomplete="off" class="layui-input">-->
-    <!--        </div>-->
-    <!--        <div class="layui-input-inline" style="width: 80px">-->
-    <!--            <input class="layui-input layui-disabled" type="text" value="施工人员" autocomplete="off" class="layui-input">-->
-    <!--        </div>-->
-    <!--    </div>-->
-    <div class="layui-row">
-        <div class="layui-col-xs6" style="overflow: hidden;">
-            <div class="layui-row" style="margin: 0px 10px">
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                    <legend>已设备绑定</legend>
-                </fieldset>
-                <div class="layui-col">
-                    <div class="layui-input-inline layui-show-xs-block">
-                        <input value="" type="text" id="B_Name" name="B_Name" placeholder="请输入 主机名称" autocomplete="off"
-                               class="layui-input"></div>
-                    <div class="layui-input-inline layui-show-xs-block">
-                        <input value="" type="text" id="B_T_sn" name="B_T_sn" placeholder="请输入 主机SN" autocomplete="off"
-                               class="layui-input"></div>
-                    <div class="layui-input-inline layui-show-xs-block">
-                        <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach"
-                                onclick="get_Device_bind_list(0)">
-                            <i class="layui-icon">&#xe615;</i></button>
-                    </div>
-                    <div w id="Device_bind_list" style="width: 98%; overflow: hidden;margin-top: 10px">
-                        <!--                        <div class="layui-col"style="height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;">-->
-                        <!--                            <img style="float: left;width: 50px;margin: 0px 10px" src="https://osscold.baozhida.cn/images/设备管理-1.png" height="50"-->
-                        <!--                                 width="40"/>-->
-                        <!--                            <div style="float: left;">-->
-                        <!--                                <div style="margin-top: 4px;font-size: 15px">SN:KF20210510143443</div>-->
-                        <!--                                <div style="margin-top: 1px;font-size: 15px">主机名称:士大夫撒地方递四方速递</div>-->
-                        <!--                            </div>-->
-                        <!--                            <div class="layui-card-header" style="float: right;">-->
-                        <!--                                <button class="layui-btn  layui-btn-normal" style="float: right;margin-top: 11px"-->
-                        <!--                                        onclick="">-->
-                        <!--                                    <i class="iconfont" style="margin-right: 4px">&#xe6f7;</i> 绑定-->
-                        <!--                                </button>-->
-                        <!--                            </div>-->
-                        <!--                        </div>-->
-                    </div>
-
-                    <div style="height: 70px">
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div id="Device_bind_list_Pages">
-
-<!--                                    <a class="prev" href="">&lt;&lt;</a>-->
-
-<!--                                    <a class="num" href="">1222</a>-->
-
-<!--                                    <span class="current">111</span>-->
-
-<!--                                    <a class="num" href="">444</a>-->
-<!--                                    <a class="next" href="">&gt;&gt;</a>-->
-
-                                </div>
-
-                            </div>
-                            <div style="color: #1E9FFF;text-align: center" id="Device_bind_list_Pages_x"></div>
-                        </div>
-                    </div>
-                </div>
-
-            </div>
-        </div>
-        <div class="layui-col-xs6" style="overflow: hidden;">
-            <div class="layui-row" style="margin: 0px 10px">
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                    <legend>设备库</legend>
-                </fieldset>
-                <div class="layui-col">
-                    <div class="layui-input-inline layui-show-xs-block">
-                        <input value="" type="text" id="D_Name" name="D_Name" placeholder="请输入 主机名称" autocomplete="off"
-                               class="layui-input"></div>
-                    <div class="layui-input-inline layui-show-xs-block">
-                        <input value="" type="text" id="D_T_sn" name="D_T_sn" placeholder="请输入 主机SN" autocomplete="off"
-                               class="layui-input"></div>
-                    <div class="layui-input-inline layui-show-xs-block">
-                        <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach"
-                                onclick="get_Device_list(0)">
-                            <i class="layui-icon">&#xe615;</i></button>
-                    </div>
-                    <div class="layui-input-inline layui-show-xs-block"  style="float: right">
-                        <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach"
-                                onclick="DeviceBind_Add_All()">
-                            <img src="https://osscold.baozhida.cn/images/同步.png" height="15"
-                                                                   width="15"/> 导入</button>
-                    </div>
-                    <div w id="Device_list" style="width: 98%; overflow: hidden;margin-top: 10px">
-                        <!--                        <div class="layui-col"style="height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;">-->
-                        <!--                            <img style="float: left;width: 50px;margin: 0px 10px" src="https://osscold.baozhida.cn/images/设备管理-1.png" height="50"-->
-                        <!--                                 width="40"/>-->
-                        <!--                            <div style="float: left;">-->
-                        <!--                                <div style="margin-top: 4px;font-size: 15px">SN:KF20210510143443</div>-->
-                        <!--                                <div style="margin-top: 1px;font-size: 15px">主机名称:士大夫撒地方递四方速递</div>-->
-                        <!--                            </div>-->
-                        <!--                            <div class="layui-card-header" style="float: right;">-->
-                        <!--                                <button class="layui-btn  layui-btn-normal" style="float: right;margin-top: 11px"-->
-                        <!--                                        onclick="">-->
-                        <!--                                    <i class="iconfont" style="margin-right: 4px">&#xe6f7;</i> 绑定-->
-                        <!--                                </button>-->
-                        <!--                            </div>-->
-                        <!--                        </div>-->
-                    </div>
-
-                    <div style="height: 70px">
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div id="Device_list_Pages">
-
-<!--                                    <a class="prev" href="">&lt;&lt;</a>-->
-
-<!--                                    <a class="num" href="">1222</a>-->
-
-<!--                                    <span class="current">111</span>-->
-
-<!--                                    <a class="num" href="">444</a>-->
-<!--                                    <a class="next" href="">&gt;&gt;</a>-->
-
-                                </div>
-
-                            </div>
-                            <div style="color: #1E9FFF;text-align: center" id="Device_list_Pages_x"></div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-<script>
-    layui.use(['form', 'layer', "layedit"],
-
-        function () {
-            $ = layui.jquery;
-            var form = layui.form,
-                layer = layui.layer;
-            var layedit = layui.layedit
-
-            //构建一个默认的编辑器
-            var index = layedit.build('T_text', {
-                height: 580 //设置编辑器高度,
-
-            });
-
-
-        });
-
-    //获取GET
-    function getPar(par) {
-        //获取当前URL
-        var local_url = document.location.href;
-        //获取要取得的get参数位置
-        var get = local_url.indexOf(par + "=")
-        ;
-        if (get == -1) {
-            return false;
-        }
-        //截取字符串
-        //截取字符串
-        var get_par = local_url.slice(par.length + get + 1);
-        //判断截取后的字符串是否还有其他get参数
-        var nextPar = get_par.indexOf("&")
-        ;
-        if (nextPar != -1) {
-            get_par = get_par.slice(0, nextPar);
-        }
-        return get_par;
-    }
-
-    var Admin_uuid = getPar("Admin_uuid")
-
-
-
-    var Device_list = []
-    var Device_bind_list = []
-
-
-    /// 设备库
-    get_Device_list(0)
-
-    function get_Device_list(page) {
-
-            $.ajax({
-                type: 'POST',
-                url: 'DeviceBind_List',//发送请求
-                data: {
-                    User_tokey: $.cookie("User_tokey"),
-                    Admin_uuid: "",
-                    // Class_1: $("#D_Name").val(),
-                    T_sn: $("#D_T_sn").val(),
-                    Name: $("#D_Name").val(),
-                    page: page,
-                },
-                success: function (result) {
-                    console.log(result)
-                    if (result.Code == 200) {
-                        $('#Device_list').html("")
-                        $('#Device_list_Pages').html("")
-                        $('#Device_list_Pages_x').html("")
-                        Device_list = result.Data.Device_lite
-                        if (Device_list.length == 0){
-                            $('#Device_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px \">没有数据</div>")
-                            return
-                        }
-                        Add_Device_list(result.Data.Device_lite) // 列表
-                        Add_Device_list_Pages(result.Data.Pages) // 分页
-                        $('#Device_list_Pages_x').append("页数:" + result.Data.Page +"/"+ result.Data.Page_size +"  总数:"+result.Data.Num );
-
-
-                    } else {
-
-
-                    }
-                }
-            });
-
-
-    }
-    function Add_Device_list(Device_lite) {
-        for (let i = 0; i < Device_lite.length; i++) {
-            $('#Device_list').append("" +
-                "<div class=\"layui-col\"style=\"height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;margin-top: 6px\">\n" +
-                "     <img style=\"float: left;width: 50px;margin: 0px 10px\" src=\"https://osscold.baozhida.cn/images/设备管理-1.png\" height=\"50\"\n" +
-                "          width=\"40\"/>\n" +
-                "     <div style=\"float: left;\">\n" +
-                "         <div style=\"margin-top: 4px;font-size: 15px\">SN:" + Device_lite[i].T_sn + "</div>\n" +
-                "         <div style=\"margin-top: 1px;font-size: 15px\">主机名称:" + Device_lite[i].T_devName + "</div>\n" +
-                "     </div>\n" +
-                "     <div class=\"layui-card-header\" style=\"float: right;\">\n" +
-                "         <button class=\"layui-btn  layui-btn-normal\" style=\"float: right;margin-top: 11px\"\n" +
-                "                 onclick=\"DeviceBind_Add('"+Device_lite[i].T_sn+"')\">\n" +
-                "             <i class=\"iconfont\" style=\"margin-right: 4px\">&#xe6f7;</i> 绑定\n" +
-                "         </button>\n" +
-                "     </div>\n" +
-                " </div>")
-        }
-
-    }
-
-    function Add_Device_list_Pages(Pages) {
-
-
-        for (let i = 0; i < Pages.length; i++) {
-            elem = Pages[i]
-            switch (elem.A) {
-                case 1:
-                    $('#Device_list_Pages').append("<a class=\"prev\" onclick='get_Device_list(" + elem.V + ")' >&lt;&lt;</a>\n");
-                    break;
-                case 2:
-                    $('#Device_list_Pages').append("<a class=\"num\" onclick='get_Device_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 3:
-                    $('#Device_list_Pages').append("<span class=\"current\">" + elem.V + "</span>\n");
-                    break;
-                case 4:
-                    $('#Device_list_Pages').append("<a class=\"num\" onclick='get_Device_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 5:
-                    $('#Device_list_Pages').append("<a class=\"next\" onclick='get_Device_list(" + elem.V + ")' >&gt;&gt;</a>\n");
-                    break;
-            }
-        }
-    }
-    /// ---------------   绑定
-    get_Device_bind_list(0)
-    function get_Device_bind_list(page) {
-
-            $.ajax({
-                type: 'POST',
-                url: 'DeviceBind_List',//发送请求
-                data: {
-                    User_tokey: $.cookie("User_tokey"),
-                    Admin_uuid: Admin_uuid,
-                    // Class_1: $("#D_Name").val(),
-                    T_sn: $("#B_T_sn").val(),
-                    Name: $("#B_Name").val(),
-                    page: page,
-                },
-                success: function (result) {
-                    console.log(result)
-
-                    if (result.Code == 200) {
-                        $('#Device_bind_list').html("")
-                        $('#Device_bind_list_Pages').html("")
-                        $('#Device_bind_list_Pages_x').html("")
-                        Device_bind_list = result.Data.Device_lite
-                        if (Device_bind_list.length == 0){
-                            $('#Device_bind_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有数据</div>")
-                            return
-                        }
-                        Add_Device_bind_list(result.Data.Device_lite) // 列表
-                        Add_Device_bind_list_Pages(result.Data.Pages) // 分页
-                        $('#Device_bind_list_Pages_x').append("页数:" + result.Data.Page +"/"+ result.Data.Page_size +"  总数:"+result.Data.Num );
-
-
-                    } else {
-
-
-                    }
-                }
-            });
-
-    }
-    function Add_Device_bind_list(Device_lite) {
-        for (let i = 0; i < Device_lite.length; i++) {
-            $('#Device_bind_list').append("" +
-                "<div class=\"layui-col\"style=\"height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;margin-top: 6px\">\n" +
-                "     <img style=\"float: left;width: 50px;margin: 0px 10px\" src=\"https://osscold.baozhida.cn/images/设备管理-1.png\" height=\"50\"\n" +
-                "          width=\"40\"/>\n" +
-                "     <div style=\"float: left;\">\n" +
-                "         <div style=\"margin-top: 4px;font-size: 15px\">SN:" + Device_lite[i].T_sn + "</div>\n" +
-                "         <div style=\"margin-top: 1px;font-size: 15px\">主机名称:" + Device_lite[i].T_devName + "</div>\n" +
-                "     </div>\n" +
-                "     <div class=\"layui-card-header\" style=\"float: right;\">\n" +
-                "         <button class=\"layui-btn  layui-btn-normal\" style=\"background-color:#ff7070;float: right;margin-top: 11px\"\n" +
-                "                 onclick=\"DeviceBind_Del('"+Device_lite[i].T_sn+"')\">\n" +
-                "             <i class=\"iconfont\" style=\"margin-right: 4px\">&#xe6f7;</i> 删除\n" +
-                "         </button>\n" +
-                "     </div>\n" +
-                " </div>")
-        }
-
-    }
-    function Add_Device_bind_list_Pages(Pages) {
-
-
-        for (let i = 0; i < Pages.length; i++) {
-            elem = Pages[i]
-            switch (elem.A) {
-                case 1:
-                    $('#Device_bind_list_Pages').append("<a class=\"prev\" onclick='get_Device_bind_list(" + elem.V + ")' >&lt;&lt;</a>\n");
-                    break;
-                case 2:
-                    $('#Device_bind_list_Pages').append("<a class=\"num\" onclick='get_Device_bind_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 3:
-                    $('#Device_bind_list_Pages').append("<span class=\"current\">" + elem.V + "</span>\n");
-                    break;
-                case 4:
-                    $('#Device_bind_list_Pages').append("<a class=\"num\" onclick='get_Device_bind_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 5:
-                    $('#Device_bind_list_Pages').append("<a class=\"next\" onclick='get_Device_bind_list(" + elem.V + ")' >&gt;&gt;</a>\n");
-                    break;
-            }
-        }
-    }
-    // 绑定操作
-    function DeviceBind_Add_All() {
-        var loading = layer.load(0, {
-            shade: false,
-            time: 99*1000
-        });
-        $.ajax({
-            type: 'POST',
-            url: 'DeviceBind_Add_All',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                Admin_uuid: Admin_uuid,
-                T_sn: $("#D_T_sn").val(),
-                Name: $("#D_Name").val(),
-            },
-            success: function (result) {
-                layer.close(loading)
-                console.log(result)
-                if (result.Code != 200) {
-                    layer.msg(result.Msg);
-                    return
-                }
-                layer.msg("成功导入设备数量:"+result.Data);
-
-                get_Device_bind_list(0)
-
-            }
-        });
-    }
-    // 绑定操作
-    function DeviceBind_Add(T_sn) {
-        var loading = layer.load(0, {
-            shade: false,
-            time: 99*1000
-        });
-        $.ajax({
-            type: 'POST',
-            url: 'DeviceBind_Add',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                Admin_uuid: Admin_uuid,
-                T_sn: T_sn,
-            },
-            success: function (result) {
-                layer.close(loading)
-                console.log(result)
-                if (result.Code == 203) {
-                    layer.msg('不能重复添加');
-                    return
-                }
-                get_Device_bind_list(0)
-
-            }
-        });
-    }
-    function DeviceBind_Del(T_sn) {
-        var loading = layer.load(0, {
-            shade: false,
-            time: 99*1000
-        });
-        $.ajax({
-            type: 'POST',
-            url: 'DeviceBind_Del',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                Admin_uuid: Admin_uuid,
-                T_sn: T_sn,
-            },
-            success: function (result) {
-                layer.close(loading)
-                console.log(result)
-                if (result.Code == 203) {
-                    layer.msg('不能重复添加');
-                    return
-                }
-                get_Device_bind_list(0)
-
-            }
-        });
-    }
-
-</script>
-<script>
-
-
-</script>
-</body>
-
-</html>

+ 0 - 275
views/Device/DeviceBind.html

@@ -1,275 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-</head>
-
-<body>
-<div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-    <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-        <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-    </a>
-</div>
-<div class="layui-fluid">
-    <div class="layui-row layui-col-space15">
-        <div class="layui-col-md12">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-                    <form class="layui-form layui-col-space5">
-
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="{{.Name}}" type="text" name="Name" placeholder="请输入 名称" autocomplete="off" class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach">
-                                <i class="layui-icon">&#xe615;</i></button>
-                        </div>
-                    </form>
-                </div>
-                <div class="layui-card-body ">
-                    <table class="layui-table layui-form">
-                        <thead>
-                        <tr>
-                            <th>编号</th>
-                            <th>名称</th>
-                            <th>账号</th>
-                            <th>权限</th>
-                            <th>电话</th>
-                            <th>邮箱</th>
-                            <th>性别</th>
-                            <th>备注</th>
-                            <th>创建时间</th>
-                            {{if eq 1 $.Admin_Power.Power_Device_Bind_e }}
-                            <th>操作</th>
-                            {{end}}
-
-                        </tr>
-                        </thead>
-                        <tbody>
-                        {{range $index, $elem := .List}}
-                        <tr>
-
-                            <td>{{$elem.Admin_uuid}}</td>
-                            <td>{{$elem.Admin_name}}</td>
-                            <td>{{$elem.Admin_user}}</td>
-                            <td>
-                                {{range $index, $elemx := $.Power_List}}
-                                {{if eq $elem.Admin_power $elemx.Id }}
-                                {{$elemx.Power_name}}
-                                {{end}}
-                                {{end}}
-
-                            </td>
-                            <td>{{$elem.Admin_telephone}}</td>
-                            <td>{{$elem.Admin_mail}}</td>
-                            <td>
-                                {{if eq $elem.Admin_gender 0 }}
-                                未知
-                                {{end}}
-                                {{if eq $elem.Admin_gender 1 }}
-                                男
-                                {{end}}
-                                {{if eq $elem.Admin_gender 2 }}
-                                女
-                                {{end}}
-                            </td>
-                            <td>{{$elem.Admin_text}}</td>
-                            <td>{{$elem.CreateTime}}</td>
-                            {{if eq 1 $.Admin_Power.Power_Device_Bind_e }}
-                            <td class="td-manage">
-
-
-                                <button class="layui-btn layui-btn-radius" style="float: right;margin-top: 2px" onclick="get_Device_bind_list_paste('{{$elem.Admin_uuid}}');">
-                                   粘贴</button>
-                                <button class="layui-btn layui-btn-radius layui-btn-warm" style="float: right;margin-top: 2px" onclick="get_Device_bind_list_copy('{{$elem.Admin_uuid}}');">
-                                    复制</button>
-                                <button class="layui-btn  layui-btn-normal" style="float: right;margin-top: 2px" onclick="xadmin.open('绑定设备 | 绑定用户:{{$elem.Admin_name}}','DeviceBind_html_?Admin_uuid={{$elem.Admin_uuid}}');">
-                                    <i class="iconfont" style="margin-right: 4px">&#xe6f7;</i> 绑定设备</button>
-
-
-                            </td>
-                            {{end}}
-                        </tr>
-
-                        {{end}}
-
-
-                        </tbody>
-                    </table>
-                </div>
-                <div class="layui-card-body ">
-                    <div class="page">
-                        <div>
-
-                            {{range $index, $elem := .Pages}}
-                            {{if eq $elem.A 1}}
-                            <a class="prev" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&lt;&lt;</a>
-                            {{end}}
-                            {{if eq $elem.A 2}}
-                            <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                            {{end}}
-                            {{if eq $elem.A 3}}
-                            <span class="current">{{$elem.V}}</span>
-                            {{end}}
-                            {{if eq $elem.A 4}}
-                            <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                            {{end}}
-                            {{if eq $elem.A 5}}
-                            <a class="next" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&gt;&gt;</a>
-                            {{end}}
-                            {{end}}
-                        </div>
-                        Page:{{.Page}}-
-                        Page_size:{{.Page_size}}-
-                        cnt:{{.cnt}}
-                    </div>
-                </div>
-
-
-            </div>
-        </div>
-    </div>
-</div>
-</body>
-<script>
-    layui.use(['laydate', 'form'],
-        function() {
-            var laydate = layui.laydate;
-
-            //执行一个laydate实例
-            laydate.render({
-                elem: '#start' //指定元素
-            });
-
-            //执行一个laydate实例
-            laydate.render({
-                elem: '#end' //指定元素
-            });
-        });
-    /*用户-删除*/
-    function member_del(obj, Admin_uuid) {
-        layer.confirm('确认要删除吗?',
-            function(index) {
-                //发异步删除数据
-                $(obj).parents("tr").remove();
-
-                $.ajax({
-                    type: 'POST',
-                    url: 'User_Del',//发送请求
-                    data: {Admin_uuid:Admin_uuid},
-                    success: function(result) {
-                        console.log(result)
-                        if (result.Code == 200 ){
-                            layer.msg('已删除!', {
-                                icon: 1,
-                                time: 2000
-                            });
-                            window.location.reload();
-                        }else {
-                            layer.msg('删除失败!', {
-                                time: 2000
-                            });
-                        }
-
-                    }
-                });
-
-
-
-            });
-    }
-
-    // 复制设备
-    var DeviceBind_List_copy = []
-    function get_Device_bind_list_copy(Admin_uuid) {
-        $.ajax({
-            type: 'POST',
-            url: 'DeviceBind_List',//发送请求
-            data: {
-                Admin_uuid: Admin_uuid,
-                page: 0,
-                page_z: 99999,
-            },
-            success: function (result) {
-                console.log(result)
-
-                if (result.Code == 200) {
-                    DeviceBind_List_copy = result.Data.Device_lite
-                    if(DeviceBind_List_copy.length == 0){
-                        layer.msg('复制失败,里面没有绑定设备!', {
-                            time: 2000
-                        });
-                    }
-                    layer.msg('复制数量:'+DeviceBind_List_copy.length, {
-                        time: 2000
-                    });
-
-                } else {
-                    layer.msg('复制失败!', {
-                        time: 2000
-                    });
-                }
-            }
-        });
-
-    }
-    // 粘贴设备
-    function get_Device_bind_list_paste(Admin_uuid) {
-        var loading = layer.load(0, {
-            shade: false,
-            time: 99*1000
-        });
-        DeviceBind_List_copy_i = DeviceBind_List_copy.length
-        DeviceBind_List_copy_ok = 0
-        DeviceBind_List_copy_no = 0
-
-        for(var i = 0;i<DeviceBind_List_copy.length;i++){
-
-            $.ajax({
-                type: 'POST',
-                url: 'DeviceBind_Add',//发送请求
-                data: {
-                    Admin_uuid: Admin_uuid,
-                    T_sn: DeviceBind_List_copy[i].T_sn,
-                },
-                success: function (result) {
-                    console.log(result)
-                    if(result.Code == 200){
-                        DeviceBind_List_copy_ok += 1
-                    }else {
-                        DeviceBind_List_copy_no += 1
-                    }
-
-
-                    DeviceBind_List_copy_i -= 1
-                    console.log(DeviceBind_List_copy_i)
-                    if(DeviceBind_List_copy_i == 0){
-                        layer.close(loading)
-                        layer.msg('成功:'+DeviceBind_List_copy_ok+'  失败:'+DeviceBind_List_copy_no, {
-                            time: 2000
-                        });
-                    }
-
-                }
-            });
-        }
-
-
-    }
-</script>
-
-</html>

+ 0 - 887
views/Device/DeviceClass-.html

@@ -1,887 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/lib/layui/layui.css">
-        <script type="text/javascript" src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-
-        <script src="https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js"></script>
-        <script src="https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-            <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-            <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]--></head>
-        <style>
-            .no_select{
-                -webkit-touch-callout: none;
-                -moz-user-select: none; /*火狐*/
-                -webkit-user-select: none;  /*webkit浏览器*/
-                -ms-user-select: none;   /*IE10*/
-                -khtml-user-select: none; /*早期浏览器*/
-                user-select: none;
-            }
-            .box_x{
-                border: 1px solid #1E9FFF;
-                width: 42px;
-                height: 16px;
-                margin: 0;
-                padding: 4px;
-                float: left;
-                text-align: center;
-            }
-
-        </style>
-    <body>
-        <div class="layui-fluid">
-            <div class="layui-row">
-
-                    <div class="layui-form-item">
-                        <label for="T_name" class="layui-form-label" style="width: 140px">
-                            <span class="x-red">*</span>传感器 分类名称</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }}
-                                   value="{{.T.T_name}}"
-                                   {{end}} type="text" id="T_name" name="T_name" required="" lay-verify="required" autocomplete="off" class="layui-input"></div>
-                    </div>
-                    {{if ne .id 0 }}
-                        <div class="layui-tab layui-tab-card">
-                            <ul class="layui-tab-title">
-                                <li class="layui-this">通知规则</li>
-                                <li class="">微信通知</li>
-                                {{if eq 0 $.Admin_r.Admin_master}}
-                                <li class="">微信通知(冷链)</li>
-                                {{end}}
-                                <li class="">短信通知</li>
-                                <li class="">电话通知</li>
-                                <li class="">邮箱通知</li>
-                            </ul>
-                            <div class="layui-tab-content" style="height: 340px;overflow-y: auto;">
-                                <div id="T_Notice_mechanism" class="layui-tab-item layui-show" style="" >
-
-
-
-                                </div>
-                                <div class="layui-tab-item " >
-                                    <div class="layui-row" style="margin: 0px 10px">
-                                        <div class="layui-col-xs6" >
-                                            <div class="layui-row no_select" style="margin: 10px 0px;font-size: 15px;color: #1E9FFF">
-                                                方式一:二维码
-                                            </div>
-                                            <div class="layui-row no_select" style="margin: 0px 10px">
-                                                <div style="float: left;margin-bottom: 8px">
-                                                    让被通知者 通过微信扫描二维码,二维码有效期7天。
-                                                </div>
-                                                <img id="myimg" style="width: 150px;height: 150px;float: left" src="https://osscold.baozhida.cn/images/二维码.png">
-
-                                            </div>
-<!--                                            <div class="layui-row no_select" style="margin: 10px 0px;font-size: 15px;color: #1E9FFF;margin-top: 18px">-->
-<!--                                                方式二:回复内容-->
-<!--                                            </div>-->
-<!--                                            <div id="Code" class="layui-row" style="height: 50px;margin: 0px 10px;border:1px solid  #cbcbcb;box-shadow: 0px 0px 8px #316fe7;padding: 6px;border-radius:5px;">-->
-
-<!--                                            </div>-->
-                                        </div>
-                                        <div id="Notice_wx_list" class="layui-col-xs6" style="padding-left: 6px;padding-right: 6px;height: 350px;border-left:1px solid  #cbcbcb;overflow-y:auto;">
-<!--                                            <div class="layui-col" style="height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;">-->
-<!--                                                <img style="float: left;width: 30px;margin: 0px 10px;margin-top: 2px;" src="https://osscold.baozhida.cn/images/微信.png" height="30"-->
-<!--                                                     width="30"/>-->
-<!--                                                <div style="float: left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">-->
-<!--                                                    <div style="margin-top: 8px;font-size: 15px">SN:KF20210510143443</div>-->
-<!--                                                </div>-->
-<!--                                                <div class="layui-card-header" style="float: right; padding: 0px;height: 0px;">-->
-
-<!--                                                    <span style="float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;"-->
-<!--                                                          onclick=""><i class="iconfont" style="margin-right: 2px">&#xe69d;</i>删除</span>-->
-<!--                                                </div>-->
-<!--                                            </div>-->
-
-                                        </div>
-                                    </div>
-
-                                </div>
-                                {{if eq 0 $.Admin_r.Admin_master}}
-                                <div class="layui-tab-item " >
-                                    <div class="layui-row" style="margin: 0px 10px">
-                                        <div class="layui-col-xs6" >
-                                            <div class="layui-row no_select" style="margin: 10px 0px;font-size: 15px;color: #1E9FFF">
-                                                方式一:二维码
-                                            </div>
-                                            <div class="layui-row no_select" style="margin: 0px 10px">
-                                                <div style="float: left;margin-bottom: 8px">
-                                                    让被通知者 通过微信扫描二维码,二维码有效期7天。
-                                                </div>
-                                                <img id="myimg2" style="width: 150px;height: 150px;float: left" src="https://osscold.baozhida.cn/images/二维码.png">
-
-                                            </div>
-<!--                                            <div class="layui-row no_select" style="margin: 10px 0px;font-size: 15px;color: #1E9FFF;margin-top: 18px">-->
-<!--                                                方式二:回复内容-->
-<!--                                            </div>-->
-<!--                                            <div id="Code" class="layui-row" style="height: 50px;margin: 0px 10px;border:1px solid  #cbcbcb;box-shadow: 0px 0px 8px #316fe7;padding: 6px;border-radius:5px;">-->
-
-<!--                                            </div>-->
-                                        </div>
-                                        <div id="Notice_wx2_list" class="layui-col-xs6" style="padding-left: 6px;padding-right: 6px;height: 350px;border-left:1px solid  #cbcbcb;overflow-y:auto;">
-<!--                                            <div class="layui-col" style="height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;">-->
-<!--                                                <img style="float: left;width: 30px;margin: 0px 10px;margin-top: 2px;" src="https://osscold.baozhida.cn/images/微信.png" height="30"-->
-<!--                                                     width="30"/>-->
-<!--                                                <div style="float: left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">-->
-<!--                                                    <div style="margin-top: 8px;font-size: 15px">SN:KF20210510143443</div>-->
-<!--                                                </div>-->
-<!--                                                <div class="layui-card-header" style="float: right; padding: 0px;height: 0px;">-->
-
-<!--                                                    <span style="float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;"-->
-<!--                                                          onclick=""><i class="iconfont" style="margin-right: 2px">&#xe69d;</i>删除</span>-->
-<!--                                                </div>-->
-<!--                                            </div>-->
-
-                                        </div>
-                                    </div>
-
-                                </div>
-                                {{end}}
-                                <div class="layui-tab-item">
-                                    <div class="layui-row" style="margin: 0px 10px">
-                                        <div class="layui-col-xs6" >
-                                            <div class="layui-row" style="margin: 20px 0px">
-                                                <label for="T_name" class="layui-form-label" style="margin-left: 6px;margin-top: 6px;padding:0px;padding-right: 10px">
-                                                    <span class="x-red">*</span>添加手机号码</label>
-                                                <div class="layui-input-inline">
-                                                    <input  type="text" id="E_message" name="E_message" required="" class="layui-input">
-                                                </div>
-                                            </div>
-                                            <div class="layui-row" style="margin: 0px 10px">
-                                                <div class="layui-form-item" style="text-align: center;margin-top: 30px">
-                                                    <button class="layui-btn layui-btn-normal" onclick="Add_Notice_message()">添加</button>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div id="Notice_message_list" class="layui-col-xs6" style="padding-left: 6px;padding-right: 6px;height: 350px;border-left:1px solid  #cbcbcb;overflow-y:auto;">
-                                            <!--                                        <div class="layui-col" style="height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;">-->
-                                            <!--                                            <img style="float: left;width: 30px;margin: 0px 10px;margin-top: 2px;" src="https://osscold.baozhida.cn/images/微信.png" height="30"-->
-                                            <!--                                                 width="30"/>-->
-                                            <!--                                            <div style="float: left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">-->
-                                            <!--                                                <div style="margin-top: 8px;font-size: 15px">SN:KF20210510143443</div>-->
-                                            <!--                                            </div>-->
-                                            <!--                                            <div class="layui-card-header" style="float: right; padding: 0px;height: 0px;">-->
-                                            <!--                                                <span style="float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;"-->
-                                            <!--                                                      onclick="Add_Notice_phone()"><i class="iconfont" style="margin-right: 2px">&#xe69d;</i>删除</span>-->
-                                            <!--                                            </div>-->
-                                            <!--                                        </div>-->
-
-                                        </div>
-                                    </div>
-                                </div>
-                                <div class="layui-tab-item">
-                                    <div class="layui-row" style="margin: 0px 10px">
-                                        <div class="layui-col-xs6" >
-                                            <div class="layui-row" style="margin: 20px 0px">
-                                                <label for="T_name" class="layui-form-label" style="margin-left: 6px;margin-top: 6px;padding:0px;padding-right: 10px">
-                                                    <span class="x-red">*</span>添加手机号码</label>
-                                                <div class="layui-input-inline">
-                                                    <input  type="text" id="E_phone" name="E_phone" required=""  class="layui-input">
-                                                </div>
-                                            </div>
-                                            <div class="layui-row" style="margin: 0px 10px">
-                                                <div class="layui-form-item" style="text-align: center;margin-top: 30px">
-                                                    <button class="layui-btn layui-btn-normal" onclick="Add_Notice_phone()">添加</button>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div id="Notice_phone_list" class="layui-col-xs6" style="padding-left: 6px;padding-right: 6px;height: 350px;border-left:1px solid  #cbcbcb;overflow-y:auto;">
-    <!--                                        <div class="layui-col" style="height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;">-->
-    <!--                                            <img style="float: left;width: 30px;margin: 0px 10px;margin-top: 2px;" src="https://osscold.baozhida.cn/images/微信.png" height="30"-->
-    <!--                                                 width="30"/>-->
-    <!--                                            <div style="float: left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">-->
-    <!--                                                <div style="margin-top: 8px;font-size: 15px">SN:KF20210510143443</div>-->
-    <!--                                            </div>-->
-    <!--                                            <div class="layui-card-header" style="float: right; padding: 0px;height: 0px;">-->
-    <!--                                                <span style="float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;"-->
-    <!--                                                      onclick="Add_Notice_phone()"><i class="iconfont" style="margin-right: 2px">&#xe69d;</i>删除</span>-->
-    <!--                                            </div>-->
-    <!--                                        </div>-->
-
-                                        </div>
-                                    </div>
-
-                                </div>
-
-                                <div class="layui-tab-item">
-                                    <div class="layui-row" style="margin: 0px 10px">
-                                        <div class="layui-col-xs6" >
-                                            <div class="layui-row" style="margin: 20px 0px">
-                                                <label for="T_name" class="layui-form-label" style="margin-left: 6px;margin-top: 6px;padding:0px;padding-right: 10px">
-                                                    <span class="x-red">*</span>添加邮箱</label>
-                                                <div class="layui-input-inline">
-                                                    <input  type="text" id="E_mailbox" name="E_phone" required=""class="layui-input">
-                                                </div>
-                                            </div>
-                                            <div class="layui-row" style="margin: 0px 10px">
-                                                <div class="layui-form-item" style="text-align: center;margin-top: 30px">
-                                                    <button class="layui-btn layui-btn-normal" onclick="Add_Notice_mailbox()">添加</button>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div id="Notice_mailbox_list" class="layui-col-xs6" style="padding-left: 6px;padding-right: 6px;height: 350px;border-left:1px solid  #cbcbcb;overflow-y:auto;">
-                                            <!--                                        <div class="layui-col" style="height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;">-->
-                                            <!--                                            <img style="float: left;width: 30px;margin: 0px 10px;margin-top: 2px;" src="https://osscold.baozhida.cn/images/微信.png" height="30"-->
-                                            <!--                                                 width="30"/>-->
-                                            <!--                                            <div style="float: left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">-->
-                                            <!--                                                <div style="margin-top: 8px;font-size: 15px">SN:KF20210510143443</div>-->
-                                            <!--                                            </div>-->
-                                            <!--                                            <div class="layui-card-header" style="float: right; padding: 0px;height: 0px;">-->
-                                            <!--                                                <span style="float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;"-->
-                                            <!--                                                      onclick="Add_Notice_phone()"><i class="iconfont" style="margin-right: 2px">&#xe69d;</i>删除</span>-->
-                                            <!--                                            </div>-->
-                                            <!--                                        </div>-->
-
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-
-
-                    {{end}}
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-                        <button class="layui-btn layui-btn-normal" onclick="DeviceClass_Post(true)">提交 {{if gt .id 0 }}(点击提交后生效){{end}}</button>
-                    </div>
-
-            </div>
-        </div>
-        <script>
-            //获取GET
-            function getPar(par) {
-                //获取当前URL
-                var local_url = document.location.href;
-                //获取要取得的get参数位置
-                var get = local_url.indexOf(par + "=")
-                ;
-                if (get == -1) {
-                    return false;
-                }
-                //截取字符串
-                //截取字符串
-                var get_par = local_url.slice(par.length + get + 1);
-                //判断截取后的字符串是否还有其他get参数
-                var nextPar = get_par.indexOf("&")
-                ;
-                if (nextPar != -1) {
-                    get_par = get_par.slice(0, nextPar);
-                }
-                return get_par;
-            }
-
-            // xxxx = plusXing(strx,"o5EKB1buEEsyDP6u-6H3H326T4no2","c")
-            function plusXing(str, wid, v) {
-
-                a_x = str.indexOf(wid+"/")
-
-                return str.substring(0, a_x+wid.length + 1) + v + str.substring(str.indexOf("|",a_x),str.length);
-            };
-
-            layui.use(['form', 'layer',"layedit"],
-            function() {
-                $ = layui.jquery;
-                var form = layui.form,
-                layer = layui.layer;
-
-                });
-            function hello_s5 (){
-                //要执行的代码
-                console.log("开启 循环")
-                forNotice_wx = true
-
-            }
-            function ShowElement(element,tid) {
-                forNotice_wx = false
-                var oldhtml = element.innerHTML;
-                //创建新的input元素
-                var newobj = document.createElement('input');
-                //为新增元素添加类型
-                newobj.type = 'text';
-                //为新增元素添加value值
-                newobj.value = oldhtml;
-                //为新增元素添加光标离开事件
-                newobj.onblur  = function() {
-                    console.log("离开。。",tid,this.value == oldhtml ? oldhtml : this.value)
-
-                    element.innerHTML = this.value == oldhtml ? oldhtml : this.value;
-                    T_Notice_wx = plusXing(T_Notice_wx,tid,this.value == oldhtml ? oldhtml : this.value)
-                    console.log("T_Notice_wx:",T_Notice_wx)
-                    DeviceClass_Post(false)
-
-                    setTimeout(hello_s5,5000);//5秒后执行
-                    //当触发时判断新增元素值是否为空,为空则不修改,并返回原有值
-                }
-                //设置该标签的子节点为空
-                element.innerHTML = '';
-                //添加该标签的子节点,input对象
-                element.appendChild(newobj);
-                //设置选择文本的内容或设置光标位置(两个参数:start,end;start为开始位置,end为结束位置;如果开始位置和结束位置相同则就是光标位置)
-                newobj.setSelectionRange(0, oldhtml.length);
-                //设置获得光标
-                newobj.focus();
-            }
-            var T_name = "{{.T.T_name}}"
-            var T_Notice_wx = "{{.T.T_Notice_wx}}"
-            var T_Notice_wx2 = "{{.T.T_Notice_wx2}}"
-            var T_Notice_phone = "{{.T.T_Notice_phone}}"
-            var T_Notice_message = "{{.T.T_Notice_message}}"
-            var T_Notice_mailbox = "{{.T.T_Notice_mailbox}}"
-            var T_Notice_mechanism = "{{.T.T_Notice_mechanism}}"
-            var Onload = true
-            var forNotice_wx = true
-            // 页面 加载完成后执行
-            window.onload=function(){
-                console.log("页面 加载完成后执行")
-                if(Onload && parseInt(getPar("id")) > 0){
-                    Onload =false;
-                    Show_Notice_T_Notice_mechanism();  // 报警机制
-                    Show_Notice_phone_list();
-                    Show_Notice_message_list();
-                    Show_Notice_mailbox_list();
-                    Get_DeviceClassId_QRCode();
-                    setTimeout("Automaticupdate_Notice_wx()", 1000)
-                    setTimeout("Automaticupdate_Notice_wx2()", 1000)
-
-                    setInterval(function(){
-                        if(forNotice_wx){
-                            Automaticupdate_Notice_wx();
-                        }
-                    },2000);
-                }
-
-            }
-            // 微信
-            function Automaticupdate_Notice_wx() {
-                Get_DeviceClassId();
-            }
-
-            function Del_Notice_wx_plusXing(str, wid) {
-
-                a_x = str.indexOf(wid+"/")
-
-                return str.substring(a_x, str.indexOf("|",a_x));
-            };
-            function Del_Notice_wx(x) {
-                srt_r = Del_Notice_wx_plusXing(T_Notice_wx,x)
-                if(T_Notice_wx.indexOf(srt_r) == -1){
-                    layer.msg('删除失败');
-                    return
-                }
-                T_Notice_wx = T_Notice_wx.replace(srt_r + "|", "")
-                Show_Notice_wx_list()
-                DeviceClass_Post(false)
-            }
-            function Del_Notice_wx2(x) {
-                srt_r = Del_Notice_wx_plusXing(T_Notice_wx2,x)
-                if(T_Notice_wx2.indexOf(srt_r) == -1){
-                    layer.msg('删除失败');
-                    return
-                }
-                T_Notice_wx2 = T_Notice_wx2.replace(srt_r + "|", "")
-                Show_Notice_wx_list2()
-                DeviceClass_Post(false)
-            }
-            function Show_Notice_wx_list() {
-                var scores = T_Notice_wx.split("|");
-                $('#Notice_wx_list').html("");
-                for (let i = 0; i < scores.length; i++) {
-                    if(scores[i].length == 0){
-                        return
-                    }
-                    scores_l = scores[i].split("/")
-
-                    $('#Notice_wx_list').append("" +
-                        "<div class=\"layui-col\" style=\"height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;\">\n" +
-                        "    <img style=\"float: left;width: 30px;margin: 0px 10px;margin-top: 2px;\" src=\"https://osscold.baozhida.cn/images/微信.png\" height=\"30\"\n" +
-                        "         width=\"30\"/>\n" +
-                        "    <div style=\"float: left;width: 170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">\n" +
-                        "        <div style=\"margin-top: 8px;font-size: 15px\" ondblclick=\"ShowElement(this,'"+scores_l[0]+"')\" >"+scores_l[1]+"</div>\n" +
-                        "    </div>\n" +
-                        "    <div class=\"layui-card-header\" style=\"float: right; padding: 0px;height: 0px;\">\n" +
-                        "        <span style=\"float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;\"\n" +
-                        "              onclick=\"Del_Notice_wx('"+scores_l[0]+"')\"><i class=\"iconfont\" style=\"margin-right: 2px\">&#xe69d;</i>删除</span>\n" +
-                        "    </div>\n" +
-                        "</div>")
-                }
-                if(scores.length == 0){
-                    $('#Notice_wx_list').append("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\" > 没有数据 < /div>" )
-
-                }
-            }
-            function Show_Notice_wx_list2() {
-                var scores = T_Notice_wx2.split("|");
-                $('#Notice_wx2_list').html("");
-                for (let i = 0; i < scores.length; i++) {
-                    if(scores[i].length == 0){
-                        return
-                    }
-                    scores_l = scores[i].split("/")
-
-                    $('#Notice_wx2_list').append("" +
-                        "<div class=\"layui-col\" style=\"height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;\">\n" +
-                        "    <img style=\"float: left;width: 30px;margin: 0px 10px;margin-top: 2px;\" src=\"https://osscold.baozhida.cn/images/微信.png\" height=\"30\"\n" +
-                        "         width=\"30\"/>\n" +
-                        "    <div style=\"float: left;width: 170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">\n" +
-                        "        <div style=\"margin-top: 8px;font-size: 15px\" ondblclick=\"ShowElement(this,'"+scores_l[0]+"')\" >"+scores_l[1]+"</div>\n" +
-                        "    </div>\n" +
-                        "    <div class=\"layui-card-header\" style=\"float: right; padding: 0px;height: 0px;\">\n" +
-                        "        <span style=\"float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;\"\n" +
-                        "              onclick=\"Del_Notice_wx2('"+scores_l[0]+"')\"><i class=\"iconfont\" style=\"margin-right: 2px\">&#xe69d;</i>删除</span>\n" +
-                        "    </div>\n" +
-                        "</div>")
-                }
-                if(scores.length == 0){
-                    $('#Notice_wx2_list').append("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\" > 没有数据 < /div>" )
-                }
-            }
-            // 手机
-            function Add_Notice_phone() {
-                x = $("#E_phone").val()
-                if(T_Notice_phone.indexOf(x) != -1){
-                    layer.msg('不能重复添加');
-                    return
-                }
-                T_Notice_phone = T_Notice_phone + x + "|"
-                Show_Notice_phone_list()
-            }
-            function Del_Notice_phone(x) {
-                if(T_Notice_phone.indexOf(x) == -1){
-                    layer.msg('删除失败');
-                    return
-                }
-                T_Notice_phone = T_Notice_phone.replace(x + "|", "")
-                Show_Notice_phone_list()
-            }
-
-            function Show_Notice_phone_list() {
-                var scores = T_Notice_phone.split("|");
-                $('#Notice_phone_list').html("");
-                for (let i = 0; i < scores.length; i++) {
-                    if(scores[i].length == 0){
-                        return
-                    }
-                    $('#Notice_phone_list').append("" +
-                        "<div class=\"layui-col\" style=\"height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;\">\n" +
-                        "    <img style=\"float: left;width: 30px;margin: 0px 10px;margin-top: 2px;\" src=\"https://osscold.baozhida.cn/images/电话.png\" height=\"30\"\n" +
-                        "         width=\"30\"/>\n" +
-                        "    <div style=\"float: left;width: 170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">\n" +
-                        "        <div style=\"margin-top: 8px;font-size: 15px\">"+scores[i]+"</div>\n" +
-                        "    </div>\n" +
-                        "    <div class=\"layui-card-header\" style=\"float: right; padding: 0px;height: 0px;\">\n" +
-                        "        <span style=\"float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;\"\n" +
-                        "              onclick=\"Del_Notice_phone('"+scores[i]+"')\"><i class=\"iconfont\" style=\"margin-right: 2px\">&#xe69d;</i>删除</span>\n" +
-                        "    </div>\n" +
-                        "</div>")
-                }
-                if(scores.length == 0){
-                    $('#Notice_phone_list').append("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\" > 没有数据 < /div>" )
-
-                }
-            }
-            // 短信
-            function Add_Notice_message() {
-                x = $("#E_message").val()
-                if(T_Notice_message.indexOf(x) != -1){
-                    layer.msg('不能重复添加');
-                    return
-                }
-                T_Notice_message = T_Notice_message + x + "|"
-                Show_Notice_message_list()
-            }
-            function Del_Notice_message(x) {
-                if(T_Notice_message.indexOf(x) == -1){
-                    layer.msg('删除失败');
-                    return
-                }
-                T_Notice_message = T_Notice_message.replace(x + "|", "")
-                Show_Notice_message_list()
-            }
-
-            function Show_Notice_message_list() {
-                var scores = T_Notice_message.split("|");
-                $('#Notice_message_list').html("");
-                for (let i = 0; i < scores.length; i++) {
-                    if(scores[i].length == 0){
-                        return
-                    }
-                    $('#Notice_message_list').append("" +
-                        "<div class=\"layui-col\" style=\"height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;\">\n" +
-                        "    <img style=\"float: left;width: 30px;margin: 0px 10px;margin-top: 2px;\" src=\"https://osscold.baozhida.cn/images/短信.png\" height=\"30\"\n" +
-                        "         width=\"30\"/>\n" +
-                        "    <div style=\"float: left;width: 170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">\n" +
-                        "        <div style=\"margin-top: 8px;font-size: 15px\">"+scores[i]+"</div>\n" +
-                        "    </div>\n" +
-                        "    <div class=\"layui-card-header\" style=\"float: right; padding: 0px;height: 0px;\">\n" +
-                        "        <span style=\"float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;\"\n" +
-                        "              onclick=\"Del_Notice_message('"+scores[i]+"')\"><i class=\"iconfont\" style=\"margin-right: 2px\">&#xe69d;</i>删除</span>\n" +
-                        "    </div>\n" +
-                        "</div>")
-                }
-                if(scores.length == 0){
-                    $('#Notice_message_list').append("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\" > 没有数据 < /div>" )
-
-                }
-            }
-            // 邮件
-            function Add_Notice_mailbox() {
-                x = $("#E_mailbox").val()
-                if(T_Notice_mailbox.indexOf(x) != -1){
-                    layer.msg('不能重复添加');
-                    return
-                }
-                T_Notice_mailbox = T_Notice_mailbox + x + "|"
-                Show_Notice_mailbox_list()
-            }
-            function Del_Notice_mailbox(x) {
-                if(T_Notice_mailbox.indexOf(x) == -1){
-                    layer.msg('删除失败');
-                    return
-                }
-                T_Notice_mailbox = T_Notice_mailbox.replace(x + "|", "")
-                Show_Notice_mailbox_list()
-            }
-
-            function Show_Notice_mailbox_list() {
-                var scores = T_Notice_mailbox.split("|");
-                $('#Notice_mailbox_list').html("");
-                for (let i = 0; i < scores.length; i++) {
-                    if(scores[i].length == 0){
-                        return
-                    }
-                    $('#Notice_mailbox_list').append("" +
-                        "<div class=\"layui-col\" style=\"height: 32px;background-color: #fafafa;border-radius:5px;margin-bottom: 4px;\">\n" +
-                        "    <img style=\"float: left;width: 30px;margin: 0px 10px;margin-top: 2px;\" src=\"https://osscold.baozhida.cn/images/邮箱.png\" height=\"30\"\n" +
-                        "         width=\"30\"/>\n" +
-                        "    <div style=\"float: left;width: 170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">\n" +
-                        "        <div style=\"margin-top: 8px;font-size: 15px\">"+scores[i]+"</div>\n" +
-                        "    </div>\n" +
-                        "    <div class=\"layui-card-header\" style=\"float: right; padding: 0px;height: 0px;\">\n" +
-                        "        <span style=\"float: right;margin-top: 0px;color: rgba(255,73,91,0.95);height: 20px;margin-right: 6px;margin-top: -4px;\"\n" +
-                        "              onclick=\"Del_Notice_mailbox('"+scores[i]+"')\"><i class=\"iconfont\" style=\"margin-right: 2px\">&#xe69d;</i>删除</span>\n" +
-                        "    </div>\n" +
-                        "</div>")
-                }
-                if(scores.length == 0){
-                    $('#Notice_mailbox_list').append("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\" > 没有数据 < /div>" )
-
-                }
-            }
-
-
-            function Get_DeviceClassId_QRCode(){
-                $.ajax({
-                    type: 'POST',
-                    url: 'Get_DeviceClassId_QRCode',//发送请求
-                    data: {
-                        User_tokey: $.cookie("User_tokey"),
-                        T_class_id: parseInt(getPar("id")),
-                    },
-                    success: function(result) {
-                        console.log(result)
-                        if (result.Code == 200 ){
-                            $("#myimg").attr('src',result.Data.QR);
-                            // $('#Code').html(result.Data.Code);
-                        }else {
-                            layer.msg('二维码生成失败!', {
-                                time: 2000
-                            });
-                        }
-
-                    }
-                });
-                $.ajax({
-                    type: 'POST',
-                    url: 'Get_DeviceClassId_QRCode2',//发送请求
-                    data: {
-                        User_tokey: $.cookie("User_tokey"),
-                        T_class_id: parseInt(getPar("id")),
-                    },
-                    success: function(result) {
-                        console.log(result)
-                        if (result.Code == 200 ){
-                            $("#myimg2").attr('src',result.Data.QR);
-                            // $('#Code').html(result.Data.Code);
-                        }else {
-                            layer.msg('二维码生成失败!', {
-                                time: 2000
-                            });
-                        }
-
-                    }
-                });
-            }
-            function Get_DeviceClassId(){
-                $.ajax({
-                    type: 'POST',
-                    url: 'Get_DeviceClassId',//发送请求
-                    data: {
-                        T_class_id: parseInt(getPar("id")),
-                    },
-                    success: function(result) {
-                        console.log(result)
-                        if (result.Code == 200 ){
-                            T_Notice_wx = result.Data.T_Notice_wx
-                            Show_Notice_wx_list()
-                            T_Notice_wx2 = result.Data.T_Notice_wx2
-                            Show_Notice_wx_list2()
-                        }else {
-                            layer.msg('获取数据失败!', {
-                                time: 2000
-                            });
-                        }
-
-                    }
-                });
-            }
-
-            function DeviceClass_Post(is){
-                var loading = layer.load(0, {
-                    shade: false,
-                    time: 99*1000
-                });
-                $.ajax({
-                    type: 'POST',
-                    url: 'DeviceClass_Post',//发送请求
-                    data: {
-                        Id:"{{.id}}",
-                        T_name:$("#T_name").val(),
-                        T_Notice_wx:T_Notice_wx,
-                        T_Notice_wx2:T_Notice_wx2,
-                        T_Notice_phone:T_Notice_phone,
-                        T_Notice_message:T_Notice_message,
-                        T_Notice_mailbox:T_Notice_mailbox,
-                        T_Notice_mechanism:Get_Notice_T_Notice_mechanism(),
-
-                    },
-                    success: function(result) {
-                        console.log(result)
-                        layer.close(loading)
-                        if(result.Code == 200){
-                            if(is){
-                                //关闭当前frame
-                                parent.layer.close();
-                                parent.location.reload();
-                            }
-
-                        }
-
-                    }
-                });
-            }
-
-
-        </script>
-        <script>
-            // 初始化 报警规则机制
-            function T_Notice_mechanism_initialization(){
-                var loading = layer.load(0, {
-                    shade: false,
-                    time: 99*1000
-                });
-                $.ajax({
-                    type: 'POST',
-                    url: 'DeviceWarningListT_Tips',//发送请求
-                    success: function(result) {
-                        console.log(result)
-                        layer.close(loading)
-                        //关闭当前frame
-                        // parent.layer.close();
-                        // parent.location.reload();
-                        T_Notice_mechanism = result.Data
-                        Show_Notice_T_Notice_mechanism()
-                    }
-                });
-            }
-            function Get_Notice_T_Notice_mechanism() {
-                box = $(".box_x")
-                if(box.length < 8){
-                    return ""
-                }
-                box_x = (box.length / 15) - 1
-                console.log("box_x:",box_x)
-                i_v = 15
-                str_ = ""
-                for (let i = 0; i < box_x; i++) {
-                    i_ = 15 + 15 * i
-
-
-                    str_ += box[i_+0].textContent + ","
-                    i_++
-                    if(box[i_].firstElementChild.checked == true){
-                        str_ += "1,"
-                    }else {
-                        str_ += "0,"
-                    }
-                    i_++
-                    if(box[i_].firstElementChild.checked == true){
-                        str_ += "1,"
-                    }else {
-                        str_ += "0,"
-                    }
-                    i_++
-                    if(box[i_].firstElementChild.checked == true){
-                        str_ += "1,"
-                    }else {
-                        str_ += "0,"
-                    }
-                    i_++
-                    str_ += box[i_].firstElementChild.value + ","
-                    i_++
-                    str_ += box[i_].firstElementChild.value + ","
-                    i_++
-                    if(box[i_].firstElementChild.checked == true){
-                        str_ += "1,"
-                    }else {
-                        str_ += "0,"
-                    }
-                    i_++
-                    str_ += box[i_].firstElementChild.value + ","
-                    i_++
-                    str_ += box[i_].firstElementChild.value + ","
-                    i_++
-                    if(box[i_].firstElementChild.checked == true){
-                        str_ += "1,"
-                    }else {
-                        str_ += "0,"
-                    }
-                    i_++
-                    str_ += box[i_].firstElementChild.value + ","
-                    i_++
-                    str_ += box[i_].firstElementChild.value + ","
-                    i_++
-                    if(box[i_].firstElementChild.checked == true){
-                        str_ += "1,"
-                    }else {
-                        str_ += "0,"
-                    }
-                    i_++
-                    str_ += box[i_].firstElementChild.value + ","
-                    i_++
-                    str_ += box[i_].firstElementChild.value + ""
-                    str_ += "|"
-                }
-                return str_
-            }
-            function Show_Notice_T_Notice_mechanism() {
-                console.log("======")
-                var scores = T_Notice_mechanism.split("|");
-                $('#T_Notice_mechanism').html("<div class=\"layui-row\">\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;width: 120px;\">报警类型</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: 1px;\">记录</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: 1px;\">处理</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: 1px;\">微信</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">触发数</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">上限数</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: 1px;\">短信</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">触发数</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">上限数</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: 1px;\">手机</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">触发数</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">上限数</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: 1px;\">邮箱</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">触发数</span>\n" +
-                    "                                        <span class=\"box_x\" style=\"margin-left: -1px;\">上限数</span>\n" +
-                    "                                    </div>");
-                for (let i = 0; i < scores.length; i++) {
-                    if(scores[i].length == 0){
-                        break
-                    }
-                    row = scores[i].split(",");
-                    $('#T_Notice_mechanism').append("" +
-                        "\n" +
-                        "                                    <div class=\"layui-row\">\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;width: 120px;\">"+row[0]+"</div>\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: 1px;\">\n" +
-                        "                                            <input type=\"checkbox\">\n" +
-                        "                                        </div>\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: 1px;\">\n" +
-                        "                                            <input type=\"checkbox\">\n" +
-                        "                                        </div>\n" +
-                        "\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: 1px;\">\n" +
-                        "                                            <input type=\"checkbox\">\n" +
-                        "                                        </div>\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
-                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[4]+"'>\n" +
-                        "                                        </div>\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
-                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[5]+"'>\n" +
-                        "                                        </div>\n" +
-                        "\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: 1px;\">\n" +
-                        "                                            <input type=\"checkbox\">\n" +
-                        "                                        </div>\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
-                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[7]+"'>\n" +
-                        "                                        </div>\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
-                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[8]+"'>\n" +
-                        "                                        </div>\n" +
-                        "\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: 1px;\">\n" +
-                        "                                            <input type=\"checkbox\">\n" +
-                        "                                        </div>\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
-                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[10]+"'>\n" +
-                        "                                        </div>\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
-                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[11]+"'>\n" +
-                        "                                        </div>\n" +
-                        "\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: 1px;\">\n" +
-                        "                                            <input type=\"checkbox\">\n" +
-                        "                                        </div>\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
-                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[13]+"'>\n" +
-                        "                                        </div>\n" +
-                        "                                        <div class=\"box_x\" style=\"margin-left: -1px;\">\n" +
-                        "                                            <input type=\"text\" style=\"width: 40px;\" value='"+row[14]+"'>\n" +
-                        "                                        </div>\n" +
-                        "\n" +
-                        "\n" +
-                        "                                    </div>\n")
-
-
-                    box = $(".box_x")
-                    if(row[1] == 1){
-                        box[box.length-1-13].firstElementChild.checked = true
-                    }
-                    if(row[2] == 1){
-                        box[box.length-1-12].firstElementChild.checked = true
-                    }
-                    if(row[3] == 1){
-                        box[box.length-1-11].firstElementChild.checked = true
-                    }
-                    if(row[6] == 1){
-                        box[box.length-1-8].firstElementChild.checked = true
-                    }
-                    if(row[9] == 1){
-                        box[box.length-1-5].firstElementChild.checked = true
-                    }
-                    if(row[12] == 1){
-                        box[box.length-1-2].firstElementChild.checked = true
-                    }
-
-                }
-
-
-                $('#T_Notice_mechanism').append("<div class='layui-row' style='text-align: center;margin-top: 20px'> " +
-                    "<button class=\"layui-btn layui-btn-normal\" onclick=\"T_Notice_mechanism_initialization()\">重置数据</button><button class=\"layui-btn layui-btn-normal\" onclick=\"\">说明</button>" +
-                    " </div>" )
-
-
-            }
-        </script>
-    </body>
-
-</html>

+ 0 - 149
views/Device/DeviceClass.html

@@ -1,149 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <title>欢迎页面-X-admin2.2</title>
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]-->
-</head>
-
-<body>
-<div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-    <a class="layui-btn layui-btn-normal " style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-        <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-    </a>
-</div>
-<div class="layui-fluid">
-    <div class="layui-row layui-col-space15">
-        <div class="layui-col-md12">
-            <div class="layui-card">
-                <!--                        <div class="layui-card-body ">-->
-                <!--                               <hr>-->
-                <!--&lt;!&ndash;                            <blockquote class="layui-elem-quote">每个tr 上有两个属性 cate-id='1' 当前分类id fid='0' 父级id ,顶级分类为 0,有子分类的前面加收缩图标<i class="layui-icon x-show" status='true'>&#xe623;</i></blockquote>&ndash;&gt;-->
-                <!--                        </div>-->
-                <div class="layui-card-header">
-                    <button class="layui-btn layui-btn-normal layui-btn-xs"  onclick="xadmin.open('添加传感器分类','DeviceClass_?id=0',500,200)" ><i class="layui-icon">&#xe61f;</i>添加传感器分类</button>
-
-                </div>
-                <div class="layui-card-body ">
-                    <table class="layui-table layui-form" >
-                        <thead>
-                        <tr>
-                            <th>传感器分类名</th>
-                            <th >操作</th>
-                        </thead>
-                        <tbody class="x-cate">
-
-                        {{range $index, $elem := .List}}
-
-                        <tr cate-id='{{$elem.Id}}' fid='0' >
-                            <td>
-                                <i class="layui-icon ">&#xe65b;</i>
-                                {{$elem.T_name}}
-                            </td>
-
-                            <td class="td-manage">
-                                <button class="layui-btn layui-btn layui-btn-normal"  onclick="xadmin.open('绑定传感器','DeviceClassBind_html?class_id={{$elem.Id}}')" ><i class="iconfont" style="margin-right: 8px;">&#xe6f7;</i>绑定传感器</button>
-
-                                <button class="layui-btn layui-btn layui-btn-xs" style="margin-left: 8px" onclick="xadmin.open('编辑','DeviceClass_?id={{$elem.Id}}',990,600)" ><i class="layui-icon">&#xe642;</i>编辑</button>
-                                <button class="layui-btn-danger layui-btn layui-btn-xs"  onclick="member_del(this,'{{$elem.Id}}')" href="javascript:;" ><i class="layui-icon" >&#xe640;</i>删除</button>
-                            </td>
-                        </tr>
-
-                        {{end}}
-
-                        </tbody>
-                    </table>
-                </div>
-
-            </div>
-        </div>
-    </div>
-</div>
-<script>
-    layui.use(['form'], function(){
-        form = layui.form;
-
-    });
-
-    /*用户-删除*/
-    function member_del(obj,id){
-        layer.confirm('确认要删除吗?',function(index){
-            //发异步删除数据
-            $(obj).parents("tr").remove();
-            $.ajax({
-                type: 'POST',
-                url: 'DeviceClass_Del',//发送请求
-                data: {Id:id},
-                success: function(result) {
-                    console.log(result)
-                    if (result.Code == 200 ){
-                        layer.msg('已删除!', {
-                            icon: 1,
-                            time: 2000
-                        });
-                        window.location.reload();
-                    }else {
-                        layer.msg('删除失败!', {
-                            time: 2000
-                        });
-                    }
-
-                }
-            });
-
-        });
-    }
-
-    // 分类展开收起的分类的逻辑
-    //
-    $(function(){
-        $("tbody.x-cate tr[fid!='0']").hide();
-        // 栏目多级显示效果
-        $('.x-show').click(function () {
-            if($(this).attr('status')=='true'){
-                $(this).html('&#xe625;');
-                $(this).attr('status','false');
-                cateId = $(this).parents('tr').attr('cate-id');
-                $("tbody tr[fid="+cateId+"]").show();
-            }else{
-                cateIds = [];
-                $(this).html('&#xe623;');
-                $(this).attr('status','true');
-                cateId = $(this).parents('tr').attr('cate-id');
-                getCateId(cateId);
-                for (var i in cateIds) {
-                    $("tbody tr[cate-id="+cateIds[i]+"]").hide().find('.x-show').html('&#xe623;').attr('status','true');
-                }
-            }
-        })
-    })
-
-    var cateIds = [];
-    function getCateId(cateId) {
-        $("tbody tr[fid="+cateId+"]").each(function(index, el) {
-            id = $(el).attr('cate-id');
-            cateIds.push(id);
-            getCateId(id);
-        });
-    }
-
-</script>
-</body>
-</html>

+ 0 - 677
views/Device/DeviceClassBind-.html

@@ -1,677 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-    <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    <script src="https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js"></script>
-    <script src="https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]--></head>
-
-<body>
-<div class="layui-fluid">
-    <!--    <div class="layui-inline" style="margin-top: 20px">-->
-    <!--        &lt;!&ndash;        <label class="layui-form-label" style="width: 28px;">用户</label>&ndash;&gt;-->
-    <!--        <div class="layui-input-inline" style="margin-left: 20px">-->
-    <!--            <input class="layui-input layui-disabled" type="text" value="发发发" autocomplete="off" class="layui-input">-->
-    <!--        </div>-->
-    <!--        <div class="layui-input-inline" style="width: 80px">-->
-    <!--            <input class="layui-input layui-disabled" type="text" value="施工人员" autocomplete="off" class="layui-input">-->
-    <!--        </div>-->
-    <!--    </div>-->
-    <div class="layui-row">
-        <div class="layui-col-xs4" style="overflow: hidden;">
-            <div class="layui-row" style="margin: 0px 10px">
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                    <legend>已绑定传感器</legend>
-                </fieldset>
-                <div class="layui-col">
-<!--                    <div class="layui-input-inline layui-show-xs-block">-->
-<!--                        <input value="" type="text" id="A_Name" name="B_Name" placeholder="请输入 名称" autocomplete="off"-->
-<!--                               class="layui-input"></div>-->
-
-<!--                    <div class="layui-input-inline layui-show-xs-block">-->
-<!--                        <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach"-->
-<!--                                onclick="get_DeviceSensor_calss_list(0)">-->
-<!--                            <i class="layui-icon">&#xe615;</i></button>-->
-<!--                    </div>-->
-                    <div w id="DeviceSensor_calss_list" style="width: 98%; overflow: hidden;margin-top: 10px">
-                        <!--                        <div class="layui-col"style="height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;">-->
-                        <!--                            <img style="float: left;width: 50px;margin: 0px 10px" src="https://osscold.baozhida.cn/images/设备管理-1.png" height="50"-->
-                        <!--                                 width="40"/>-->
-                        <!--                            <div style="float: left;">-->
-                        <!--                                <div style="margin-top: 4px;font-size: 15px">SN:KF20210510143443</div>-->
-                        <!--                                <div style="margin-top: 1px;font-size: 15px">主机名称:士大夫撒地方递四方速递</div>-->
-                        <!--                            </div>-->
-                        <!--                            <div class="layui-card-header" style="float: right;">-->
-                        <!--                                <button class="layui-btn  layui-btn-normal" style="float: right;margin-top: 11px"-->
-                        <!--                                        onclick="">-->
-                        <!--                                    <i class="iconfont" style="margin-right: 4px">&#xe6f7;</i> 绑定-->
-                        <!--                                </button>-->
-                        <!--                            </div>-->
-                        <!--                        </div>-->
-                    </div>
-
-                    <div style="height: 70px">
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div id="DeviceSensor_calss_list_Pages">
-
-                                    <!--                                    <a class="prev" href="">&lt;&lt;</a>-->
-
-                                    <!--                                    <a class="num" href="">1222</a>-->
-
-                                    <!--                                    <span class="current">111</span>-->
-
-                                    <!--                                    <a class="num" href="">444</a>-->
-                                    <!--                                    <a class="next" href="">&gt;&gt;</a>-->
-
-                                </div>
-
-                            </div>
-                            <div style="color: #1E9FFF;text-align: center" id="DeviceSensor_calss_list_Pages_x"></div>
-                        </div>
-                    </div>
-                </div>
-
-            </div>
-        </div>
-        <div class="layui-col-xs4" style="overflow: hidden;">
-            <div class="layui-row" style="margin: 0px 10px">
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                    <legend>设备库</legend>
-                </fieldset>
-                <div class="layui-col">
-                    <div class="layui-input-inline layui-show-xs-block">
-                        <input value="" type="text" id="D_Name" name="D_Name" placeholder="请输入 名称" autocomplete="off"
-                               class="layui-input"></div>
-                    <div class="layui-input-inline layui-show-xs-block">
-                        <input value="" type="text" id="D_T_sn" name="D_T_sn" placeholder="请输入 SN" autocomplete="off"
-                               class="layui-input"></div>
-                    <div class="layui-input-inline layui-show-xs-block">
-                        <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach"
-                                onclick="get_Device_list(0)">
-                            <i class="layui-icon">&#xe615;</i></button>
-                    </div>
-                    <div w id="Device_list" style="width: 98%; overflow: hidden;margin-top: 10px">
-                        <!--<div class="layui-col"style="height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;">-->
-                        <!--    <img style="float: left;width: 50px;margin: 0px 10px" src="https://osscold.baozhida.cn/images/设备管理-1.png" height="50"-->
-                        <!--         width="40"/>-->
-                        <!--    <div style="float: left;">-->
-                        <!--        <div style="margin-top: 4px;font-size: 15px">SN:KF20210510143443</div>-->
-                        <!--        <div style="margin-top: 1px;font-size: 15px">主机名称:士大夫撒地方递四方速递</div>-->
-                        <!--    </div>-->
-                        <!--    <div class="layui-card-header" style="float: right;">-->
-                        <!--        <button class="layui-btn  layui-btn-normal" style="float: right;margin-top: 11px"-->
-                        <!--                onclick="">-->
-                        <!--            <i class="iconfont" style="margin-right: 4px">&#xe6f7;</i> 绑定-->
-                        <!--        </button>-->
-                        <!--    </div>-->
-                        <!--</div>-->
-                    </div>
-
-                    <div style="height: 70px">
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div id="Device_list_Pages">
-
-                                    <!--                                    <a class="prev" href="">&lt;&lt;</a>-->
-
-                                    <!--                                    <a class="num" href="">1222</a>-->
-
-                                    <!--                                    <span class="current">111</span>-->
-
-                                    <!--                                    <a class="num" href="">444</a>-->
-                                    <!--                                    <a class="next" href="">&gt;&gt;</a>-->
-
-                                </div>
-
-                            </div>
-                            <div style="color: #1E9FFF;text-align: center" id="Device_list_Pages_x"></div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <div class="layui-col-xs4" style="overflow: hidden;">
-            <div class="layui-row" style="margin: 0px 10px">
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                    <legend>传感器库</legend>
-                </fieldset>
-                <div class="layui-col">
-<!--                    <div class="layui-input-inline layui-show-xs-block">-->
-<!--                        <input value="" type="text" id="B_Name" name="B_Name" placeholder="请输入 名称" autocomplete="off"-->
-<!--                               class="layui-input"></div>-->
-<!--                    <div class="layui-input-inline layui-show-xs-block">-->
-<!--                        <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach"-->
-<!--                                onclick="get_DeviceSensor_list(0)">-->
-<!--                            <i class="layui-icon">&#xe615;</i></button>-->
-<!--                    </div>-->
-                    <div class="layui-input-inline layui-show-xs-block"  style="margin-bottom: 10px">
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="Checkboxs_All()">
-                                <i class="layui-icon">全选择</i>
-                            </div>
-                        </div>
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="Checkboxs_Allno()">
-                                <i class="layui-icon">全取消</i>
-                            </div>
-                        </div>
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <div class="layui-btn layui-btn-normal"
-                                 onclick="Checkboxs_Allto()">
-                                <i class="layui-icon">反选</i>
-                            </div>
-                        </div>
-
-                        <div style="float: right;margin-left: 100px;"  >
-
-                            <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach"
-                                    onclick="Checkboxs_GetAll()">
-                                <img src="https://osscold.baozhida.cn/images/同步.png" height="15"
-                                     width="15"/> 导入</button>
-                        </div>
-
-                    </div>
-                    <div w id="DeviceSensor_list"  style="width: 98%; overflow: hidden;max-height: 616px;overflow-y: auto">
-                        <div style="color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px">《《 请先选择 设备库</div>
-                        <!--                        <div class="layui-col"style="height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;">-->
-                        <!--                            <img style="float: left;width: 50px;margin: 0px 10px" src="https://osscold.baozhida.cn/images/设备管理-1.png" height="50"-->
-                        <!--                                 width="40"/>-->
-                        <!--                            <div style="float: left;">-->
-                        <!--                                <div style="margin-top: 4px;font-size: 15px">SN:KF20210510143443</div>-->
-                        <!--                                <div style="margin-top: 1px;font-size: 15px">主机名称:士大夫撒地方递四方速递</div>-->
-                        <!--                            </div>-->
-                        <!--                            <div class="layui-card-header" style="float: right;">-->
-                        <!--                                <button class="layui-btn  layui-btn-normal" style="float: right;margin-top: 11px"-->
-                        <!--                                        onclick="">-->
-                        <!--                                    <i class="iconfont" style="margin-right: 4px">&#xe6f7;</i> 绑定-->
-                        <!--                                </button>-->
-                        <!--                            </div>-->
-                        <!--                        </div>-->
-                    </div>
-
-                    <div style="height: 70px">
-                        <div class="layui-card-body ">
-
-                            <div style="color: #1E9FFF;text-align: center">
-
-                                <div style="color: #1E9FFF;text-align: center" id="DeviceSensor_list_Pages_x"></div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-
-            </div>
-        </div>
-    </div>
-</div>
-<script>
-
-    // xxxxxx()
-    // function xxxxxx() {
-    //
-    //     $.ajax({
-    //         type: 'POST',
-    //         url: '../Data/DeviceSensor_Data_Print?User_tokey=3fdc9fab-7a85-48b4-9d79-4c79a5d755e7&T_sn=YD862289055504464&Time_start=2022-01-23%20%2004:07:07&Time_end=2022-01-24%2011:06:01',//发送请求
-    //         success: function (result) {
-    //             console.log("DeviceSensor_Data_Print",result)
-    //             f_mapTolist(result.Data)
-    //         }
-    //     });
-    //
-    // }
-    // var map_list = []
-    //
-    //
-    // //  f_mapTolist(result.Data) => list
-    // function f_mapTolist(data) {
-    //     To_list = []
-    //     for (x in data) {
-    //         To_list.push(data[x])
-    //     }
-    //    return To_list
-    // }
-
-    layui.use(['form', 'layer', "layedit"],
-
-        function () {
-            $ = layui.jquery;
-            var form = layui.form,
-                layer = layui.layer;
-            var layedit = layui.layedit
-
-            //构建一个默认的编辑器
-            var index = layedit.build('T_text', {
-                height: 580 //设置编辑器高度,
-
-            });
-
-
-        });
-
-    //获取GET
-    function getPar(par) {
-        //获取当前URL
-        var local_url = document.location.href;
-        //获取要取得的get参数位置
-        var get = local_url.indexOf(par + "=")
-        ;
-        if (get == -1) {
-            return false;
-        }
-        //截取字符串
-        //截取字符串
-        var get_par = local_url.slice(par.length + get + 1);
-        //判断截取后的字符串是否还有其他get参数
-        var nextPar = get_par.indexOf("&")
-        ;
-        if (nextPar != -1) {
-            get_par = get_par.slice(0, nextPar);
-        }
-        return get_par;
-    }
-    //获取div中所有的复选框  .value
-    var checkboxs = document.getElementsByClassName("checkboxxx");
-    function Checkboxs_All () {
-        for(var i = 0;i < checkboxs.length; i++){
-            checkboxs[i].checked = true
-        }
-    }
-    function Checkboxs_Allno () {
-        for(var i = 0;i < checkboxs.length; i++){
-            checkboxs[i].checked = false
-        }
-    }
-    function Checkboxs_Allto () {
-        for(var i = 0;i < checkboxs.length; i++){
-            if(checkboxs[i].checked){
-                checkboxs[i].checked = false
-            }else {
-                checkboxs[i].checked = true
-            }
-        }
-    }
-
-    function Checkboxs_GetAll () {
-
-        for(var i = 0;i < checkboxs.length; i++){
-            if(checkboxs[i].checked){
-                d_sn_id = checkboxs[i].value.split(",")
-                if(d_sn_id[0].length == 0 || d_sn_id[1].length == 0){
-                    continue;
-                }
-                DeviceBind_Add(d_sn_id[0],d_sn_id[1],Class_id,false)
-
-            }
-        }
-
-
-        setTimeout(function(){
-            get_DeviceSensor_calss_list(0)
-
-            setTimeout(function(){
-                layer.msg('成功绑定传感器');
-                //要执行的代码
-            },200);
-            //要执行的代码
-        },500);
-
-    }
-
-
-    var Class_id = getPar("class_id")
-
-
-    var Device_list = []
-    var Device_Sn = ""
-    var DeviceSensor_list = []
-    var DeviceSensor_calss_list = []
-    var DeviceSensor_snid_list = ""
-
-
-
-    /// 设备库
-    get_Device_list(0)
-
-    function get_Device_list(page) {
-
-        $.ajax({
-            type: 'POST',
-            url: 'DeviceBind_List',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                Admin_uuid: "",
-                // Class_1: $("#D_Name").val(),
-                T_sn: $("#D_T_sn").val(),
-                Name: $("#D_Name").val(),
-                page: page,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    $('#Device_list').html("")
-                    $('#Device_list_Pages').html("")
-                    $('#Device_list_Pages_x').html("")
-                    Device_list = result.Data.Device_lite
-                    if (Device_list.length == 0) {
-                        $('#Device_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px \">没有数据</div>")
-                        return
-                    }
-                    Add_Device_list(result.Data.Device_lite) // 列表
-                    Add_Device_list_Pages(result.Data.Pages) // 分页
-                    $('#Device_list_Pages_x').append("页数:" + result.Data.Page + "/" + result.Data.Page_size + "  总数:" + result.Data.Num);
-
-
-                } else {
-
-
-                }
-            }
-        });
-
-
-    }
-
-    function Add_Device_list(Device_lite) {
-        for (let i = 0; i < Device_lite.length; i++) {
-            $('#Device_list').append("" +
-                "<div onclick=\"Device_Sn = '"+Device_lite[i].T_sn+"';get_DeviceSensor_list(0)\" class=\"layui-col\"style=\"height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;margin-top: 6px\">\n" +
-                "     <img style=\"float: left;width: 50px;margin: 0px 10px\" src=\"https://osscold.baozhida.cn/images/设备管理-1.png\" height=\"50\"\n" +
-                "          width=\"40\"/>\n" +
-                "     <div style=\"float: left;\">\n" +
-                "         <div style=\"margin-top: 4px;font-size: 15px\">SN:" + Device_lite[i].T_sn + "</div>\n" +
-                "         <div style=\"margin-top: 1px;font-size: 15px\">主机名称:" + Device_lite[i].T_devName + "</div>\n" +
-                "     </div>\n" +
-                "     <div class=\"layui-card-header\" style=\"float: right;margin-top: 6px;color: #1E9FFF\">\n" +
-                "         》\n" +
-                "     </div>\n" +
-                " </div>")
-        }
-
-    }
-    function Add_Device_list_Pages(Pages) {
-
-
-        for (let i = 0; i < Pages.length; i++) {
-            elem = Pages[i]
-            switch (elem.A) {
-                case 1:
-                    $('#Device_list_Pages').append("<a class=\"prev\" onclick='get_Device_list(" + elem.V + ")' >&lt;&lt;</a>\n");
-                    break;
-                case 2:
-                    $('#Device_list_Pages').append("<a class=\"num\" onclick='get_Device_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 3:
-                    $('#Device_list_Pages').append("<span class=\"current\">" + elem.V + "</span>\n");
-                    break;
-                case 4:
-                    $('#Device_list_Pages').append("<a class=\"num\" onclick='get_Device_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 5:
-                    $('#Device_list_Pages').append("<a class=\"next\" onclick='get_Device_list(" + elem.V + ")' >&gt;&gt;</a>\n");
-                    break;
-            }
-        }
-    }
-
-    /// ---------------   传感器列表
-
-    function get_DeviceSensor_list(page) {
-
-        $.ajax({
-            type: 'POST',
-            url: 'DeviceSensor_List',//发送请求
-            data: {
-
-                Sn: Device_Sn,
-                page: page,
-            },
-            success: function (result) {
-                console.log(result)
-                if(page == 0)
-                    $('#DeviceSensor_list').html("")
-
-                if (result.Code == 200) {
-
-
-                    DeviceSensor_lite = result.Data.DeviceSensor_lite
-                    if (DeviceSensor_lite.length == 0) {
-                        $('#DeviceSensor_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有数据</div>")
-                        return
-                    }
-                    Add_DeviceSensor_list(result.Data.DeviceSensor_lite) // 列表
-                    // Add_DeviceSensor_list_Pages(result.Data.Pages) // 分页
-                    // $('#DeviceSensor_list_Pages_x').append("页数:" + result.Data.Page + "/" + result.Data.Page_size + "  总数:" + result.Data.Num);
-                    $('#DeviceSensor_list_Pages_x').html(" 传感器 总数:" + result.Data.Num);
-
-
-                    if(result.Data.Page_size > result.Data.Page ){
-                        get_DeviceSensor_list(result.Data.Page+1)
-                    }
-
-                } else {
-
-
-                }
-            }
-        });
-
-    }
-
-    function Add_DeviceSensor_list(DeviceSensor_lite) {
-        for (let i = 0; i < DeviceSensor_lite.length; i++) {
-            // if(T_id == 0){
-            //     T_id = DeviceSensor_lite[i].T_id;
-            //     T_sn_T_id = DeviceSensor_lite[i].T_sn;
-            //     get_DeviceSensor_data(0)
-            // }
-
-
-            $('#DeviceSensor_list').append("" +
-                "<div class=\"layui-col\"style=\"height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;margin-top: 6px\">\n" +
-                "        <input type=\"checkbox\" name='checkboxxx' class='checkboxxx' value='" + DeviceSensor_lite[i].T_sn + "," + DeviceSensor_lite[i].T_id + "'  style='float: left;width: 18px;height: 18px;margin-top: 16px;margin-left: 10px;'/>" +
-                "     <img style=\"float: left;width: 50px;margin: 0px 5px\" src=\"https://osscold.baozhida.cn/images/温湿度传感器-1.png\" height=\"50\"\n" +
-                "          width=\"40\"/>\n" +
-                "     <div style=\"float: left;\">\n" +
-                "         <div style=\"margin-top: 4px;font-size: 15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\">SN:" + DeviceSensor_lite[i].T_sn + "</div>\n" +
-                "         <div style=\"margin-top: 1px;font-size: 15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\">传感器[" + DeviceSensor_lite[i].T_id + "]:" + DeviceSensor_lite[i].T_name + "</div>\n" +
-                "     </div>\n" +
-                "     <div class=\"layui-card-header\" style=\"float: right;padding-left: 0px;\">\n" +
-                "         <button class=\"layui-btn  layui-btn-normal\" style=\"float: right;margin-top: 11px\"\n" +
-                "                 onclick=\"DeviceBind_Add('" + DeviceSensor_lite[i].T_sn + "'," + DeviceSensor_lite[i].T_id + "," + Class_id + ",true)\">\n" +
-                "             <i class=\"iconfont\" style=\"margin-right: 4px\">&#xe6f7;</i> 绑定\n" +
-                "         </button>\n" +
-                "     </div>\n" +
-                " </div>")
-        }
-
-    }
-
-    function Add_DeviceSensor_list_Pages(Pages) {
-        for (let i = 0; i < Pages.length; i++) {
-            elem = Pages[i]
-            switch (elem.A) {
-                case 1:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"prev\" onclick='get_DeviceSensor_list(" + elem.V + ")' >&lt;&lt;</a>\n");
-                    break;
-                case 2:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 3:
-                    $('#DeviceSensor_list_Pages').append("<span class=\"current\">" + elem.V + "</span>\n");
-                    break;
-                case 4:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 5:
-                    $('#DeviceSensor_list_Pages').append("<a class=\"next\" onclick='get_DeviceSensor_list(" + elem.V + ")' >&gt;&gt;</a>\n");
-                    break;
-            }
-        }
-    }
-
-
-
-    /// ---------------   绑定
-    get_DeviceSensor_calss_list(0)
-
-    function get_DeviceSensor_calss_list(page) {
-
-        $.ajax({
-            type: 'POST',
-            url: 'DeviceClassBind_List',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                T_calss_id: parseInt(Class_id),
-                Name: $("#B_Name").val(),
-                page: page,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 200) {
-                    $('#DeviceSensor_calss_list').html("")
-                    $('#DeviceSensor_calss_list_Pages').html("")
-                    $('#DeviceSensor_calss_list_Pages_x').html("")
-                    DeviceSensor_lite = result.Data.DeviceSensor_lite
-                    if (DeviceSensor_lite.length == 0) {
-                        $('#DeviceSensor_calss_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有数据</div>")
-                        return
-                    }
-                    Add_DeviceSensor_calss_list(result.Data.DeviceSensor_lite) // 列表
-                    Add_DeviceSensor_calss_list_Pages(result.Data.Pages) // 分页
-                    $('#DeviceSensor_calss_list_Pages_x').append("页数:" + result.Data.Page + "/" + result.Data.Page_size + "  总数:" + result.Data.Num);
-
-
-                } else {
-
-                    layer.msg(result.Msg);
-                }
-            }
-        });
-
-    }
-
-    function Add_DeviceSensor_calss_list(DeviceSensor_lite) {
-        for (let i = 0; i < DeviceSensor_lite.length; i++) {
-            $('#DeviceSensor_calss_list').append("" +
-                "<div class=\"layui-col\"style=\"height: 52px;background-color: #fafafa;border-radius:5px;padding-top: 2px;margin-top: 6px\">\n" +
-                "     <img style=\"float: left;width: 50px;margin: 0px 5px\" src=\"https://osscold.baozhida.cn/images/温湿度传感器-1.png\" height=\"50\"\n" +
-                "          width=\"40\"/>\n" +
-                "     <div style=\"float: left;\">\n" +
-                "         <div style=\"margin-top: 4px;font-size: 15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\">" + DeviceSensor_lite[i].T_sn + "</div>\n" +
-                "         <div style=\"margin-top: 1px;font-size: 15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\">传感器[" + DeviceSensor_lite[i].T_id + "]:" + DeviceSensor_lite[i].T_name + "</div>\n" +
-                "     </div>\n" +
-                "     <div class=\"layui-card-header\" style=\"float: right;padding-left: 0px;\">\n" +
-                "         <button class=\"layui-btn  layui-btn-normal\" style=\"background-color:#ff7070;float: right;margin-top: 11px\"\n" +
-                "                 onclick=\"DeviceBind_Del('" + DeviceSensor_lite[i].T_sn + "'," + DeviceSensor_lite[i].T_id + "," + Class_id + ")\">\n" +
-                "             <i class=\"iconfont\" style=\"margin-right: 4px\">&#xe6f7;</i> 删除\n" +
-                "         </button>\n" +
-                "     </div>\n" +
-                " </div>")
-        }
-
-    }
-
-    function Add_DeviceSensor_calss_list_Pages(Pages) {
-        for (let i = 0; i < Pages.length; i++) {
-            elem = Pages[i]
-            switch (elem.A) {
-                case 1:
-                    $('#DeviceSensor_calss_list_Pages').append("<a class=\"prev\" onclick='get_DeviceSensor_calss_list(" + elem.V + ")' >&lt;&lt;</a>\n");
-                    break;
-                case 2:
-                    $('#DeviceSensor_calss_list_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_calss_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 3:
-                    $('#DeviceSensor_calss_list_Pages').append("<span class=\"current\">" + elem.V + "</span>\n");
-                    break;
-                case 4:
-                    $('#DeviceSensor_calss_list_Pages').append("<a class=\"num\" onclick='get_DeviceSensor_calss_list(" + elem.V + ")' >" + elem.V + "</a>\n");
-                    break;
-                case 5:
-                    $('#DeviceSensor_calss_list_Pages').append("<a class=\"next\" onclick='get_DeviceSensor_calss_list(" + elem.V + ")' >&gt;&gt;</a>\n");
-                    break;
-            }
-        }
-    }
-
-    // 绑定操作
-    function DeviceBind_Add(T_sn,T_id,T_class_id,show) {
-        loading = layer.load(0, {
-            shade: false,
-            time: 99*1000
-        });
-        $.ajax({
-            type: 'POST',
-            url: 'DeviceClassBind_Add',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                T_sn: T_sn,
-                T_id: T_id,
-                T_class_id: T_class_id,
-            },
-            success: function (result) {
-                layer.close(loading)
-                if(show){
-                    console.log(result)
-                    if (result.Code == 203) {
-                        layer.msg('不能重复添加');
-                        return
-                    }
-                    get_DeviceSensor_calss_list(0)
-                }
-
-
-            }
-        });
-    }
-    function DeviceBind_Del(T_sn,T_id,T_class_id) {
-
-        $.ajax({
-            type: 'POST',
-            url: 'DeviceClassBind_Del',//发送请求
-            data: {
-                User_tokey: $.cookie("User_tokey"),
-                T_sn: T_sn,
-                T_id: T_id,
-                T_class_id: T_class_id,
-            },
-            success: function (result) {
-                console.log(result)
-                if (result.Code == 203) {
-                    layer.msg('操作异常');
-                    return
-                }
-                get_DeviceSensor_calss_list(0)
-            }
-        });
-    }
-
-</script>
-<script>
-
-
-</script>
-</body>
-
-</html>

+ 0 - 582
views/Device/DeviceClassPlan.html

@@ -1,582 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <title>欢迎页面-X-admin2.2</title>
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-<!--    <script type="text/javascript" src="https://osscold.baozhida.cn/js/jquery.colorpicker.js"></script>-->
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]-->
-
-    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/460/fabric.min.js" integrity="sha512-ybPp3kCrNQXdvTfh99YLIdnajWnQvHuEKDJ+b26mxI9w+pLhnBo3HmNLJ1pEUBFO1Q0bfJxApeqecNbmaV763g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
-    <style>
-        .plan_tool_{
-            height: 100px;width: 96px;background-color: rgba(239,239,239,0.95);text-align: center;float: left;margin: 4px 2px;
-            cursor: pointer;
-        }
-        .plan_tool_:hover{
-            background-color: rgba(231, 233, 234, 0.95);
-        }
-
-        .scrollbar {
-            overflow-y:scroll;
-        }
-        .scrollbar::-webkit-scrollbar {
-            /*滚动条整体样式*/
-            width : 10px;  /*高宽分别对应横竖滚动条的尺寸*/
-            height: 1px;
-        }
-        .scrollbar::-webkit-scrollbar-thumb {
-            /*滚动条里面小方块*/
-            border-radius   : 10px;
-            background-color: skyblue;
-            background-image: -webkit-linear-gradient(
-                    45deg,
-                    rgba(255, 255, 255, 0.2) 25%,
-                    transparent 25%,
-                    transparent 50%,
-                    rgba(255, 255, 255, 0.2) 50%,
-                    rgba(255, 255, 255, 0.2) 75%,
-                    transparent 75%,
-                    transparent
-            );
-        }
-        .scrollbar::-webkit-scrollbar-track {
-            /*滚动条里面轨道*/
-            box-shadow   : inset 0 0 5px rgba(0, 0, 0, 0.2);
-            background   : #ededed;
-            border-radius: 10px;
-        }
-    </style>
-</head>
-
-<body>
-<div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-    <a class="layui-btn layui-btn-normal " style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-        <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-    </a>
-</div>
-<div class="layui-fluid">
-    <div class="layui-row layui-col-space15">
-        <div class="layui-col-md12">
-            <div class="layui-card">
-
-                <div class="layui-card-body ">
-                    <form class="layui-form layui-col-space5">
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <select name="Id">
-                                <option>请选择分类</option>
-                                {{range $index, $elem := .List}}
-                                <option value="{{$elem.Id}}" {{if gt $.Id 0 }}
-                                        {{if eq $.Id $elem.Id }}
-                                        selected
-                                        {{end}}
-                                        {{end}}
-                                >{{$elem.T_name}}</option>
-                                {{end}}
-
-                            </select>
-                        </div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach">
-                                <i class="layui-icon">&#xe66a;</i></button>
-                            <div class="layui-btn layui-btn-normal" onclick="canvas_clear()">
-                                <i class="layui-icon">&#xe638;</i>清楚所有</div>
-                            <div class="layui-btn layui-btn-normal" onclick="canvas_removeSelected()">
-                                <i class="layui-icon">&#xe638;</i>删除对象</div>
-                            <div class="layui-btn layui-btn-normal" id="canvas_colorpicker">
-                                <i class="layui-icon">&#xe66a;</i>颜色选择</div>
-                        </div>
-                    </form>
-
-                </div>
-
-
-
-                <div class="layui-card-body ">
-
-                    {{if gt $.Id 0 }}
-                    <div id="plan_row" class="layui-row">
-                        <div id="plan_div" style="float: left">
-                            <canvas  id="c" style="border:1px solid red;"></canvas>
-                        </div>
-                        <div id="plan_tool" class="scrollbar" style="padding-left: 1rem;float: left;">
-                            <div>
-                                <div style="width: 100%;height: 30px;padding-top: 4px;float: left;background-color: rgb(160,204,252);text-align: center;font-size: 18px;margin-bottom: 10px">工具栏</div>
-
-                                <div class="plan_tool_" onclick="add_oImg()">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_" onclick="addTextbox()">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">文本框</div>
-                                </div>
-                                <div class="plan_tool_" onclick="addRect_1()">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">墙壁</div>
-                                </div>
-                                <div class="plan_tool_" onclick="addRect_2()">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">门</div>
-                                </div>
-                                <div class="plan_tool_" onclick="addRect()">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">方形</div>
-                                </div>
-                                <div class="plan_tool_" onclick="addCircle()">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">圆形</div>
-                                </div>
-                                <div class="plan_tool_" onclick="addTriangle()">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">三角形</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-
-                            </div>
-
-                            <div id="DeviceSensor_calss_list">
-
-                                <div class="plan_tool_" onclick="add_oImg()">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-                                <div class="plan_tool_">
-                                    <img width="80" height="80" src="https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png">
-                                    <div style="background-color: rgba(227,225,225,0.95)">工具</div>
-                                </div>
-
-                            </div>
-                        </div>
-
-                    </div>
-                    {{end}}
-
-
-
-                </div>
-
-            </div>
-        </div>
-    </div>
-</div>
-<script>
-    $(document).ready(function(){
-        plan_row = $("#plan_row").width() - 20
-        $("#plan_tool").width( 220 )
-        $("#plan_tool").height(  $(window).height() - 150 )
-        $("#plan_div").width(plan_row - 216)
-        {{if gt $.Id 0 }}
-            get_DeviceSensor_calss_list()
-            f_go_plan()
-        {{end}}
-
-
-    });
-
-    layui.use(['form'], function(){
-        form = layui.form;
-
-    });
-
-    function get_DeviceSensor_calss_list() {
-
-        $.ajax({
-            type: 'POST',
-            url: 'DeviceClassBind_List',//发送请求
-            data: {
-                T_calss_id: parseInt({{$.Id}}),
-                page: 0,
-                page_z: 9999,
-            },
-            success: function (result) {
-                console.log(result)
-                $('#DeviceSensor_calss_list').html("<div style=\"margin-top: 20px;width: 100%;height: 30px;padding-top: 4px;float: left;background-color: rgb(160,204,252);text-align: center;font-size: 18px;margin-bottom: 10px\">传感器</div>\n")
-
-                if (result.Code == 200) {
-
-                    DeviceSensor_lite = result.Data.DeviceSensor_lite
-                    if (DeviceSensor_lite.length == 0) {
-                        $('#DeviceSensor_calss_list').html("<div style=\"color: #1E9FFF;text-align: center;font-size: 15px;margin-top: 150px\">没有数据</div>")
-                         return
-                    }
-                    Add_DeviceSensor_calss_list(result.Data.DeviceSensor_lite) // 列表
-
-
-                } else {
-
-
-                }
-            }
-        });
-
-    }
-
-    function Add_DeviceSensor_calss_list(DeviceSensor_lite) {
-
-        for (let i = 0; i < DeviceSensor_lite.length; i++) {
-            $('#DeviceSensor_calss_list').append("<div class=\"plan_tool_\" onclick=\"add_DeviceSensor('','','"+ DeviceSensor_lite[i].T_name +"')\">\n" +
-                "    <img width=\"80\" height=\"80\" src=\"https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png\">\n" +
-                "    <div style=\"background-color: rgba(227,225,225,0.95)\">"+ DeviceSensor_lite[i].T_name +"</div>\n" +
-                "</div>")
-        }
-
-    }
-    
-
-</script>
-
-<script>
-    var canvas
-    function f_go_plan() {
-        plan_div_width = $("#plan_div").width();
-        plan_div_height = $(window).height() - 150;
-        console.log("plan_div:",plan_div_width,plan_div_height)
-        canvas = new fabric.Canvas('c',{backgroundColor : "#a4e5ff",width: plan_div_width,height: plan_div_height});
-        var LabeledRect = fabric.util.createClass(fabric.Rect, {
-            type: 'labeledRect',
-            initialize: function(options) {
-                options || (options = { });
-                this.callSuper('initialize', options);
-                this.set('label', options.label || '');
-                this.set('labelFont', options.labelFont || '');
-                this.set('labelFill', options.labelFill || '');
-            },
-            toObject: function() {
-                return fabric.util.object.extend(this.callSuper('toObject'), {
-                    label: this.get('label'),
-                    labelFont: this.get('labelFont'),
-                    labelFill: this.get('labelFill')
-                });
-            },
-            _render: function(ctx) {
-                this.callSuper('_render', ctx);
-                // ctx.font = '20px Helvetica';
-                // ctx.fillStyle = '#333';
-                console.log('this', this);
-                ctx.font = this.labelFont;
-                ctx.fillStyle = this.labelFill;
-                // ctx.fillText(this.label, -this.width/2, -this.height/2 + 20);
-                ctx.fillText(this.label, 0, 0+10);
-            }
-        });
-
-        var labeledRect = new LabeledRect({
-            width: 100,
-            height: 50,
-            left: 100,
-            top: 100,
-            label: 'test',
-            fill: '#faa',
-            labelFont: '30px Helvetica',
-            labelFill: '#00ff00'
-        });
-        canvas.add(labeledRect);
-
-        setTimeout(function(){
-            labeledRect.set({
-                label: 'trololo',
-                fill: '#aaf',
-                rx: 10,
-                ry: 10,
-                labelFill: '#0000ff'
-            });
-            canvas.renderAll();
-        }, 3000)
-        // canvas.item(0); // 参考之前添加的 fabric.Rect (第一个对象)
-        // canvas.getObjects(); // 获取画布上的所有对象(rect 将是第一个也是唯一的)
-        // canvas.add(
-        //     new fabric.Rect({ top: 100, left: 100, width: 50, height: 50, fill: '#f55' }),
-        //     new fabric.Circle({ top: 140, left: 230, radius: 75, fill: 'green' }),
-        //     new fabric.Triangle({ top: 300, left: 210, width: 100, height: 100, fill: 'blue' })
-        // );
-        Select_e = false
-        function animate_down(e) {
-            if (e.target) {
-                console.log("animate_down")
-                console.log(e)
-                canvas.remove(e);
-                Select_e = e
-            }
-        }
-        canvas.on('mouse:down', function(e) { animate_down(e); });
-
-        $(document).keydown(function(event){
-            console.log(event.keyCode);
-            if(event.keyCode == 46){
-                if(Select_e){
-                    console.log("删除:",Select_e);
-                    canvas.remove(Select_e);
-                }
-
-            }
-        });
-
-
-        // 画布缩放
-        canvas.on('mouse:wheel', function(opt) {
-            var delta = opt.e.deltaY;
-            var zoom = canvas.getZoom();
-            zoom *= 0.999 ** delta;
-            if (zoom > 20) zoom = 20;
-            if (zoom < 0.01) zoom = 0.01;
-            canvas.zoomToPoint({ x: opt.e.offsetX, y: opt.e.offsetY }, zoom);
-            console.log({ x: opt.e.offsetX, y: opt.e.offsetY },zoom)
-            opt.e.preventDefault();
-            opt.e.stopPropagation();
-        });
-        
-
-        
-        
-    }
-
-    // 清除画布
-    function canvas_clear() {
-        // clear canvas
-        canvas.clear();
-
-        // remove currently selected object
-        canvas.remove(canvas.getActiveObject());
-    }
-    // 删除对象
-    function canvas_removeSelected() {
-        var activeObjects = canvas.getActiveObjects();
-        canvas.discardActiveObject()
-        if (activeObjects.length) {
-            canvas.remove.apply(canvas, activeObjects);
-        }
-    };
-
-
-    $("#canvas_colorpicker").colorpicker({
-
-        fillcolor:true,
-
-        success:function(o,color){
-
-            console.log("color:",color)
-
-        }
-
-    });
-
-</script>
-
-<!--工具-->
-<script>
-
-
-    // 文本
-    function addTextbox() {
-        var text = '这里是个文本框';
-        var textSample = new fabric.Textbox(text.slice(0, 100), {
-            fontSize: 20,
-            left: getRandomInt(100, 400),
-            top: getRandomInt(100, 400),
-            fontFamily: 'helvetica',
-            angle: 0,
-            fill: '#000000' ,
-            fontWeight: '',
-            originX: 'left',
-            width: 100,
-            hasRotatingPoint: true,
-            centerTransform: true
-        });
-
-        canvas.add(textSample);
-    };
-    // 长方形
-    function addRect() {
-
-        canvas.add(new fabric.Rect({
-            left: getRandomInt(100, 400),
-            top: getRandomInt(100, 400),
-            fill: '#000000',
-            width: 50,
-            height: 50,
-            opacity: 0.8
-        }));
-    };
-    // 长方形 -
-    function addRect_1() {
-
-        canvas.add(new fabric.Rect({
-            left: getRandomInt(100, 400),
-            top: getRandomInt(100, 400),
-            fill: 'rgba(150,150,150,0.95)',
-            width: 50,
-            height: 50,
-            opacity: 0.8
-        }));
-    };
-    // 长方形 -
-    function addRect_2() {
-
-        canvas.add(new fabric.Rect({
-            left: getRandomInt(100, 400),
-            top: getRandomInt(100, 400),
-            fill: 'rgb(142,255,144)',
-            width: 50,
-            height: 50,
-            opacity: 0.8
-        }));
-    };
-    //圆圈
-    function addCircle() {
-
-        canvas.add(new fabric.Circle({
-            left: getRandomInt(100, 400),
-            top: getRandomInt(100, 400),
-            fill: '#000000',
-            radius: 50,
-            opacity: 0.8
-        }));
-    };
-    //三角形
-    function addTriangle() {
-
-        canvas.add(new fabric.Triangle({
-            left: getRandomInt(100, 400),
-            top: getRandomInt(100, 400),
-            fill: '#000000',
-            width: 50,
-            height: 50,
-            opacity: 0.8
-        }));
-    };
-
-    function add_Rect() {
-        canvas.add(
-            new fabric.Rect({ top: 100, left: 100, width: 50, height: 50, fill: '#f55' }),
-            new fabric.Circle({ top: 140, left: 230, radius: 75, fill: 'green' }),
-            new fabric.Triangle({ top: 300, left: 210, width: 100, height: 100, fill: 'blue' })
-        );
-    }
-    function add_oImg() {
-        fabric.Image.fromURL('https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png', function(oImg) {
-            canvas.add(oImg);
-        });
-    }
-    function add_DeviceSensor(Sn,id,name) {
-        fabric.Image.fromURL('https://osscold.baozhida.cn/images/%e6%b8%a9%e6%b9%bf%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8-1.png', function(oImg) {
-
-
-            // oImg.hasContent = false
-            // oImg.hasBorders  = false
-            // this.__canvases.push(canvas);
-            oImg.scale(0.6).set({ left: 0, top: 0 });
-
-
-            var circle = new fabric.Rect({
-
-                width: 190,
-                height: 80,
-                fill: '#e5e5e5',
-
-            });
-
-            var text1 = new fabric.Text('XX.X℃', {
-                left: 80,
-                top: 6,
-                fontSize: 30,
-                fill: '#62adff',
-            });
-            var text2 = new fabric.Text('XX %', {
-                left: 80,
-                top: 40,
-                fontSize: 30,
-                fill: '#62adff',
-            });
-            var group = new fabric.Group([circle, oImg, text1,text2 ], {
-                left: 350,
-                top: 100,
-
-            });
-
-            canvas.add(group);
-
-        });
-    }
-    var getRandomInt = fabric.util.getRandomInt;
-
-
-</script>
-
-</body>
-</html>

+ 0 - 87
views/Device/DeviceLogs.html

@@ -1,87 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    </head>
-    
-    <body>
-
-        <div class="layui-fluid">
-            <div class="layui-row layui-col-space15">
-                <div class="layui-col-md12">
-                    <div class="layui-card">
-
-                        <div class="layui-card-body " >
-                            <table class="layui-table layui-form">
-                                <thead>
-                                    <tr>
-                                        <th>内容</th>
-                                        <th>时间</th>
-                                    </tr>
-                                </thead>
-                                <tbody>
-                                {{range $index, $elem := .List}}
-                                    <tr>
-                                        <td>{{$elem.Logs_Txt}}</td>
-                                        <td>{{$elem.CreateTime}}</td>
-                                    </tr>
-
-                                {{end}}
-
-
-                                </tbody>
-                            </table>
-                        </div>
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div>
-
-                                    {{range $index, $elem := .Pages}}
-                                        {{if eq $elem.A 1}}
-                                        <a class="prev" href="?page={{$elem.V}}&T_sn={{$.T_sn}}">&lt;&lt;</a>
-                                        {{end}}
-                                        {{if eq $elem.A 2}}
-                                        <a class="num" href="?page={{$elem.V}}&T_sn={{$.T_sn}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 3}}
-                                        <span class="current">{{$elem.V}}</span>
-                                        {{end}}
-                                        {{if eq $elem.A 4}}
-                                        <a class="num" href="?page={{$elem.V}}&T_sn={{$.T_sn}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 5}}
-                                        <a class="next" href="?page={{$elem.V}}&T_sn={{$.T_sn}}">&gt;&gt;</a>
-                                        {{end}}
-
-
-
-                                    {{end}}
-
-
-
-                                </div>
-                                Page:{{.Page}}-
-                                Page_size:{{.Page_size}}-
-                                cnt:{{.cnt}}
-                            </div>
-                        </div>
-
-
-                    </div>
-                </div>
-            </div>
-        </div>
-    </body>
-
-
-</html>

+ 0 - 136
views/Device/DeviceWarning-.html

@@ -1,136 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/lib/layui/layui.css">
-        <script type="text/javascript" src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-            <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-            <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]--></head>
-    
-    <body>
-        <div class="layui-fluid">
-            <div class="layui-row">
-                <form class="layui-form">
-                    <div class="layui-form-item">
-                        <label for="T_Text" class="layui-form-label">
-                            <span class="x-red">*</span>处理报警备注</label>
-                        <div class="layui-input-inline">
-                            <textarea value="{{.T.T_Text}}" id="T_Text" name="T_Text" placeholder="请输入内容" class="layui-textarea">{{.T.T_Text}}</textarea>
-                           </div>
-                    </div>
-
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-                        <button class="layui-btn layui-btn-normal" lay-filter="add" lay-submit="">提交</button>
-                    </div>
-
-
-
-                </form>
-            </div>
-        </div>
-        <script>
-
-            layui.use(['form', 'layer',"layedit"],
-            function() {
-                $ = layui.jquery;
-                var form = layui.form,
-                layer = layui.layer;
-                //监听提交
-                form.on('submit(add)',
-                    function(data) {
-                        console.log(data);
-                        //发异步,把数据提交给php
-                        layer.alert("操作成功", {
-                            icon: 6
-                        },
-                        function() {
-                            // 获得frame索引
-                            var index = parent.layer.getFrameIndex(window.name);
-
-                            //关闭当前frame
-                            parent.layer.close(index);
-                            parent.location.reload();
-                        });
-
-                        $.ajax({
-                            type: 'POST',
-                            url: 'DeviceWarning_Post',//发送请求
-                            data: {
-                                Id:"{{.id}}",
-                                T_Text:data.field.T_Text,
-
-                                },
-                            success: function(result) {
-                                console.log(result)
-                            }
-                        });
-
-                        return false;
-                    });
-                });
-        </script>
-        <script>
-            var _img = ""
-
-            layui.use('upload', function(){
-                var $ = layui.jquery
-                    ,upload = layui.upload;
-
-                //普通图片上传
-                var uploadInst = upload.render({
-                    elem: '#test1'
-                    ,url: '/UpFile' //改成您自己的上传接口
-                    ,before: function(obj){
-                        //预读本地文件示例,不支持ie8
-                        obj.preview(function(index, file, result){
-                            $('#demo1').attr('src', result); //图片链接(base64)
-                        });
-                    }
-                    ,done: function(res){
-
-                        console.log(res)
-                        //如果上传失败
-                        if(res.code != 0){
-                            return layer.msg('上传失败');
-                        }
-                        _img = res.data.src
-                        console.log(_img)
-                        //上传成功
-                    }
-                    ,error: function(){
-                        console.log("error")
-
-                        //演示失败状态,并实现重传
-                        var demoText = $('#demoText');
-                        demoText.html('<span style="color: #ff5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
-                        demoText.find('.demo-reload').on('click', function(){
-                            uploadInst.upload();
-                        });
-                    }
-                });
-
-                //绑定原始文件域
-                upload.render({
-                    elem: '#test20'
-                    ,url: 'https://httpbin.org/post' //改成您自己的上传接口
-                    ,done: function(res){
-                        layer.msg('上传成功');
-                        console.log(res)
-                    }
-                });
-
-            });
-        </script>
-    </body>
-
-</html>

+ 0 - 143
views/Device/DeviceWarning-M.html

@@ -1,143 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/lib/layui/layui.css">
-        <script type="text/javascript" src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-            <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-            <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]--></head>
-    
-    <body>
-        <div class="layui-fluid">
-            <div class="layui-row">
-                <form class="layui-form">
-                    <div class="layui-form-item">
-                        <label for="T_Text" class="layui-form-label">
-                            <span class="x-red">*</span>处理报警备注</label>
-                        <div class="layui-input-inline">
-                            <textarea value="" id="T_Text" name="T_Text" placeholder="请输入内容" class="layui-textarea"></textarea>
-                           </div>
-                    </div>
-
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-                        <button class="layui-btn layui-btn-normal" lay-filter="add" lay-submit="">提交</button>
-                    </div>
-
-
-
-                </form>
-            </div>
-        </div>
-        <script>
-
-            layui.use(['form', 'layer',"layedit"],
-            function() {
-                $ = layui.jquery;
-                var form = layui.form,
-                layer = layui.layer;
-                //监听提交
-                form.on('submit(add)',
-                    function(data) {
-                        console.log(data);
-
-
-                        id_list = "{{.id}}".split("|")
-
-                        for(var i = 0;i < id_list.length;i++){
-                            $.ajax({
-                                type: 'POST',
-                                url: 'DeviceWarning_Post',//发送请求
-                                data: {
-                                    Id:id_list[i],
-                                    T_Text:data.field.T_Text,
-
-                                },
-                                success: function(result) {
-                                    console.log(result)
-                                }
-                            });
-                        }
-                        setTimeout(function(){
-                            //发异步,把数据提交给php
-                            layer.alert("操作成功", {
-                                    icon: 6
-                                },
-                                function() {
-                                    // 获得frame索引
-                                    var index = parent.layer.getFrameIndex(window.name);
-
-                                    //关闭当前frame
-                                    parent.layer.close(index);
-                                    parent.location.reload();
-                                });
-                        //要执行的代码
-                        },1000);
-                        return false;
-                    });
-                });
-        </script>
-        <script>
-            var _img = ""
-
-            layui.use('upload', function(){
-                var $ = layui.jquery
-                    ,upload = layui.upload;
-
-                //普通图片上传
-                var uploadInst = upload.render({
-                    elem: '#test1'
-                    ,url: '/UpFile' //改成您自己的上传接口
-                    ,before: function(obj){
-                        //预读本地文件示例,不支持ie8
-                        obj.preview(function(index, file, result){
-                            $('#demo1').attr('src', result); //图片链接(base64)
-                        });
-                    }
-                    ,done: function(res){
-
-                        console.log(res)
-                        //如果上传失败
-                        if(res.code != 0){
-                            return layer.msg('上传失败');
-                        }
-                        _img = res.data.src
-                        console.log(_img)
-                        //上传成功
-                    }
-                    ,error: function(){
-                        console.log("error")
-
-                        //演示失败状态,并实现重传
-                        var demoText = $('#demoText');
-                        demoText.html('<span style="color: #ff5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
-                        demoText.find('.demo-reload').on('click', function(){
-                            uploadInst.upload();
-                        });
-                    }
-                });
-
-                //绑定原始文件域
-                upload.render({
-                    elem: '#test20'
-                    ,url: 'https://httpbin.org/post' //改成您自己的上传接口
-                    ,done: function(res){
-                        layer.msg('上传成功');
-                        console.log(res)
-                    }
-                });
-
-            });
-        </script>
-    </body>
-
-</html>

+ 0 - 29
views/Device/DeviceWarning-log.html

@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/lib/layui/layui.css">
-        <script type="text/javascript" src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-            <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-            <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]--></head>
-    
-    <body>
-        <div class="layui-fluid">
-            <div class="layui-row">
-                {{str2html  .T_Log}}
-            </div>
-        </div>
-
-    </body>
-
-</html>

+ 0 - 314
views/Device/DeviceWarning.html

@@ -1,314 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    </head>
-    
-    <body>
-        <div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-                <a><cite>宝智达</cite></a>
-            </span>
-            <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-                <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-            </a>
-        </div>
-        <div class="layui-fluid">
-            <div class="layui-row layui-col-space15">
-                <div class="layui-col-md12">
-                    <div class="layui-card">
-                        <div class="layui-card-body ">
-                            <form class="layui-form layui-col-space5">
-                                <div class="layui-inline layui-show-xs-block">
-                                    <input class="layui-input" autocomplete="off" placeholder="开始日" name="Time_start" id="Time_start" lay-key="1"></div>
-                                <div class="layui-inline layui-show-xs-block">
-                                    <input class="layui-input" autocomplete="off" placeholder="截止日" name="Time_end" id="Time_end" lay-key="2"></div>
-
-
-<!--                                <div class="layui-input-inline layui-show-xs-block">-->
-<!--                                    <select name="Class_1">-->
-<!--                                        <option  value="0">全部报警记录</option>-->
-<!--                                        {{range $index, $elem := .Class_List}}-->
-<!--                                            <option {{if eq $elem.Id $.Class_1 }}-->
-<!--                                                     selected-->
-<!--                                                    {{end}} value="{{$elem.Id}}">{{$elem.T_name}}</option>-->
-
-<!--                                        {{end}}-->
-
-<!--                                    </select>-->
-<!--                                </div>-->
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <input value="{{.T_Name}}" type="text" name="T_Name" style="width: 200px" placeholder="请输入 关键词 (支持模糊搜索)" autocomplete="off" class="layui-input"></div>
-<!--                                <div class="layui-input-inline layui-show-xs-block">-->
-<!--                                    <input value="{{.T_Name}}" type="text" name="T_Name" style="width: 200px" placeholder="请输入 传感器名称 (支持模糊搜索)" autocomplete="off" class="layui-input"></div>-->
-
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach">
-                                        <i class="layui-icon">&#xe615;</i></button>
-                                </div>
-
-                                <div class="layui-input-inline layui-show-xs-block" style="float: right">
-                                    <div class="layui-btn layui-btn-normal"
-                                         onclick="get_Data_Excel()">
-                                        <i class="layui-icon">导出Excel</i>
-                                    </div>
-                                </div>
-                            </form>
-                        </div>
-
-                        <div class="layui-card-body ">
-                            <table class="layui-table layui-form">
-                                <thead>
-                                    <tr>
-                                        <th style="min-width: 30px;">选择</th>
-                                        <th>报警类型</th>
-                                        <th>Sn</th>
-                                        <th>设备名称</th>
-                                        <th>传感器</th>
-                                        <th>温度</th>
-                                        <th>湿度</th>
-                                        <th>时间</th>
-                                        <th>处理</th>
-                                    </tr>
-                                </thead>
-                                <tbody>
-                                {{range $index, $elem := .List}}
-                                    <tr {{if eq $elem.T_State 2 }} style="background-color: rgba(255,0,0,0.23)" {{end}} >
-
-                                        <td style="min-width: 30px;">
-                                             <input type="checkbox" name='checkboxxx' class='checkboxxx'  value='{{$elem.Id}}'  style='float: left;width: 10px;height: 10px;margin-top: 16px;margin-left: 10px;' />
-                                        </td>
-                                        <td>{{$elem.T_Title}}</td>
-                                        <td>{{$elem.T_sn}}</td>
-                                        <td>{{$elem.T_Addr}}</td>
-                                        <td>[{{$elem.T_Id}}]-{{$elem.T_Name}}</td>
-                                        <td>
-                                            {{$elem.T_T}}
-
-                                        </td>
-                                        <td>
-                                            {{if or (eq 0 ($elem.T_sn | IsYD)) (eq 1 $.Admin_r.Admin_rh)}}
-                                                {{$elem.T_RH}}
-                                            {{end}}
-                                        </td>
-                                        <td>{{$elem.T_Ut.Format "2006-01-02 15:04:05"}}</td>
-                                        <td>
-                                            <i class="layui-icon" style="margin-right: 10px;float: left;color: #1E9FFF"
-                                               onclick="xadmin.open('处理报警','DeviceWarning_?id={{$elem.Id}}',400,300)"  >&#xe6b2; 处理</i>
-                                            {{if le $.Admin_r.Admin_master 1 }}
-                                            <i class="layui-icon" style="margin-right: 10px;float: left;color: #1E9FFF"
-                                               onclick="member_del('{{$elem.Id}}')" >&#xe640; 删除报警</i>
-                                            {{end}}
-
-                                            {{if le $.Admin_r.Admin_power 6 }}
-
-                                            <i class="layui-icon" style="margin-right: 10px;float: left;color: #1E9FFF"
-                                               onclick="xadmin.open('处理记录','DeviceWarning_log?id={{$elem.Id}}',600,'')"  >&#xe60a; 处理记录</i>
-                                            {{end}}
-
-                                            <div style="float: left;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;width:120px;">{{$elem.T_Text}}</div>
-
-
-                                        </td>
-                                    </tr>
-
-                                {{end}}
-
-
-                                </tbody>
-                            </table>
-                        </div>
-                        <div class="layui-card-body ">
-                            <div class="layui-input-inline layui-show-xs-block" style="float: left">
-                                <div class="layui-btn layui-btn-normal"
-                                     onclick="Checkboxs_GetAll()">
-                                    <i class="layui-icon">批量处理</i>
-                                </div>
-                            </div>
-                            <div class="page">
-                                <div>
-
-                                    {{range $index, $elem := .Pages}}
-                                        {{if eq $elem.A 1}}
-                                        <a class="prev" href="?page={{$elem.V}}&T_sn={{$.T_sn}}&T_Name={{$.T_Name}}&Class_1={{$.Class_1}}&Time_start={{$.Time_start}}&Time_end={{$.Time_end}}">&lt;&lt;</a>
-                                        {{end}}
-                                        {{if eq $elem.A 2}}
-                                        <a class="num" href="?page={{$elem.V}}&T_sn={{$.T_sn}}&T_Name={{$.T_Name}}&Class_1={{$.Class_1}}&Time_start={{$.Time_start}}&Time_end={{$.Time_end}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 3}}
-                                        <span class="current">{{$elem.V}}</span>
-                                        {{end}}
-                                        {{if eq $elem.A 4}}
-                                        <a class="num" href="?page={{$elem.V}}&T_sn={{$.T_sn}}&T_Name={{$.T_Name}}&Class_1={{$.Class_1}}&Time_start={{$.Time_start}}&Time_end={{$.Time_end}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 5}}
-                                        <a class="next" href="?page={{$elem.V}}&T_sn={{$.T_sn}}&T_Name={{$.T_Name}}&Class_1={{$.Class_1}}&Time_start={{$.Time_start}}&Time_end={{$.Time_end}}">&gt;&gt;</a>
-                                        {{end}}
-
-
-
-                                    {{end}}
-
-
-
-                                </div>
-                                Page:{{.Page}}-
-                                Page_size:{{.Page_size}}-
-                                cnt:{{.cnt}}
-                            </div>
-                        </div>
-
-
-                    </div>
-                </div>
-            </div>
-        </div>
-
-    </body>
-    <script>
-
-
-        function get_Data_Excel() {
-
-            if($("#Time_start").val().length > 0){
-                Time_start = $("#Time_start").val();
-
-            }else {
-                Time_start = ""
-            }
-
-            if($("#Time_end").val().length > 0){
-                Time_end = $("#Time_end").val();
-            }else {
-                Time_end = ""
-            }
-
-            var loading = layer.load(0, {
-                shade: false,
-                time: 99*1000
-            });
-            $.ajax({
-                type: 'POST',
-                url: '../../Device/DeviceWarning_Data_Excel',//发送请求
-                data: {
-                    T_sn: "{{$.T_sn}}",
-                    T_Name: "{{$.T_Name}}",
-                    Class_1: "{{$.Class_1}}",
-                    Time_start:Time_start,
-                    Time_end:Time_end,
-                },
-                success: function (result) {
-                    console.log(result)
-                    layer.close(loading)
-                    if (result.Code != 200) {
-                        layer.msg(result.Msg);
-                        return
-                    }
-                    window.location.href = result.Data;
-                }
-            });
-            return false
-        }
-
-
-        layui.use(['layer','laydate', 'form'],
-            function() {
-                var laydate = layui.laydate;
-                var $ = layui.jquery,
-                layer = layui.layer; //独立版的layer无需执行这一句
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#Time_start', //指定元素
-                    value:{{.Time_start}}
-                ,type: 'datetime'
-                });
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#Time_end', //指定元素
-                    value:{{.Time_end}}
-                ,type: 'datetime'
-            });
-
-
-        });
-        /*用户-删除*/
-        function member_del( id) {
-            layer.confirm('确认要删除吗?',
-            function(index) {
-                $.ajax({
-                    type: 'POST',
-                    url: 'DeviceWarning_Del',//发送请求
-                    data: {Id:id},
-                    success: function(result) {
-                        console.log(result)
-                        if (result.Code == 200 ){
-                            layer.msg('已删除!', {
-                                icon: 1,
-                                time: 2000
-                            });
-                            window.location.reload();
-                        }else {
-                            layer.msg('删除失败!', {
-                                time: 2000
-                            });
-                        }
-
-                    }
-                });
-
-
-
-            });
-        }
-    </script>
-
-    <script>
-
-        //获取div中所有的复选框  .value
-        var checkboxs = document.getElementsByClassName("checkboxxx");
-        function Checkboxs_All () {
-            for(var i = 0;i < checkboxs.length; i++){
-                checkboxs[i].checked = true
-            }
-        }
-        function Checkboxs_Allno () {
-            for(var i = 0;i < checkboxs.length; i++){
-                checkboxs[i].checked = false
-            }
-        }
-        function Checkboxs_Allto () {
-            for(var i = 0;i < checkboxs.length; i++){
-                if(checkboxs[i].checked){
-                    checkboxs[i].checked = false
-                }else {
-                    checkboxs[i].checked = true
-                }
-            }
-        }
-        function Checkboxs_GetAll () {
-            DeviceSensor_snid_list = ""
-            for(var i = 0;i < checkboxs.length; i++){
-                if(checkboxs[i].checked){
-                    DeviceSensor_snid_list =  DeviceSensor_snid_list + checkboxs[i].value + "|"
-                }
-            }
-            console.log(DeviceSensor_snid_list)
-            xadmin.open('批量处理报警','DeviceWarning_M?id='+DeviceSensor_snid_list,400,300)
-        }
-
-
-    </script>
-</html>

+ 0 - 937
views/Device/Device_Parameter-.html

@@ -1,937 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm" style="" xmlns="http://www.w3.org/1999/html">
-    
-    <head>
-        <meta charset="UTF-8">
-
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-        <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <script src="https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js"></script>
-        <script src="https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-            <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-            <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]--></head>
-    
-    <body>
-        <div class="layui-fluid" style="overflow: auto">
-            <div class="layui-row" >
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                    <legend>设备参数 {{if gt $.DeviceParameter_lite_SendState_z 0 }} <span style="background-color: #dedede;"> 上次设置的参数 还没有生效,再次提交会替换上次的数据!</span> {{end}}</legend>
-                </fieldset>
-
-                {{if gt $.DeviceParameter_lite_z 0 }}
-                    <div style="{{if gt $.DeviceParameter_lite_SendState_z 0 }} background-color: #dedede; {{end}}">
-                    <form  class="layui-form" action="" lay-filter="example1">
-
-                        <div class="layui-form-item">
-                            <div class="layui-inline">
-                                <label class="layui-form-label" style="width: 28px;">SN</label>
-                                <div class="layui-input-inline">
-                                    <input class="layui-input layui-disabled" value="{{.Device.T_sn}}" type="text" id="SN" name="SN"  autocomplete="off" class="layui-input">
-                                </div>
-                            </div>
-                            <div class="layui-inline">
-                                <label class="layui-form-label">设备名称</label>
-                                <div class="layui-input-inline">
-                                    <input type="text" id="devName" value="{{.Device.T_devName}}" name="devName"  autocomplete="off" class="layui-input">
-                                </div>
-                            </div>
-                        </div>
-                        <div class="layui-form-item">
-    <!--                        <div class="layui-inline">-->
-    <!--                            <label class="layui-form-label">实时上传间隔</label>-->
-    <!--                            <div class="layui-input-inline" style="width: 100px;">-->
-    <!--                                <input type="text" id="uploadTime" value="{{.DeviceParameter.T_uploadTime}}"  name="uploadTime"  autocomplete="off" class="layui-input">-->
-    <!--                            </div>-->
-    <!--                            <span style="float: left;margin-top: 10px;">秒</span>-->
-    <!--                        </div>-->
-                            <div class="layui-inline" style="width: 370px">
-                                <label class="layui-form-label" style="width: 130px;">数据保存间隔</label>
-                                <div class="layui-input-inline" style="width: 100px;">
-                                    <input type="text" id="saveTime" name="saveTime" value="{{.DeviceParameter.T_saveTime}}"   autocomplete="off" class="layui-input">
-
-                                </div>
-                                <span style="float: left;margin-top: 10px;">秒(60~1800)</span>
-                            </div>
-                            <div class="layui-inline">
-                                <label class="layui-form-label" style="width: 175px;">数据超限保存间隔</label>
-                                <div class="layui-input-inline" style="width: 100px;">
-                                    <input type="text" id="overrunSave" name="overrunSave"  value="{{.DeviceParameter.T_overrunSave}}"  autocomplete="off" class="layui-input">
-                                </div>
-                                <span style="float: left;margin-top: 10px;">秒(60~120)</span>
-                            </div>
-                        </div>
-
-                        <div class="layui-form-item">
-                            <div class="layui-inline" style="width: 370px">
-                                <label class="layui-form-label" style="width: 130px;">超限报警触发间隔</label>
-                                <div class="layui-input-inline" style="width: 100px;">
-                                    <input type="text" id="overrunAlarm" name="overrunAlarm"  value="{{.DeviceParameter.T_overrunAlarm}}"  autocomplete="off" class="layui-input">
-                                </div>
-                                <span style="float: left;margin-top: 10px;">秒(60~600)</span>
-                            </div>
-                            <div class="layui-inline">
-                                <label class="layui-form-label" style="width: 175px;">传感器掉线报警触发间隔</label>
-                                <div class="layui-input-inline" style="width: 100px;">
-                                    <input type="text" id="lostAlarm" name="lostAlarm"   value="{{.DeviceParameter.T_lostAlarm}}" autocomplete="off" class="layui-input">
-                                </div>
-                                <span style="float: left;margin-top: 10px;">秒(60~600)</span>
-                            </div>
-                        </div>
-                        <div class="layui-form-item">
-                            <div class="layui-inline" style="width: 370px">
-                                <label class="layui-form-label" style="width: 130px;">断电报警触发间隔</label>
-                                <div class="layui-input-inline" style="width: 100px;">
-                                    <input type="text" id="outageAlarm" name="outageAlarm"  value="{{.DeviceParameter.T_outageAlarm}}"  autocomplete="off" class="layui-input">
-                                </div>
-                                <span style="float: left;margin-top: 10px;">秒(60~600)  </span>
-                            </div>
-                            <div class="layui-inline">
-                                <label class="layui-form-label" style="width: 175px;">超限预警触发间隔</label>
-                                <div class="layui-input-inline" style="width: 100px;">
-                                    <input type="text" id="warningTime" name="warningTime"  value="{{.DeviceParameter.T_warningTime}}"  autocomplete="off" class="layui-input">
-                                </div>
-                                <span style="float: left;margin-top: 10px;">秒(0,60~600)</span>
-                            </div>
-                        </div>
-                        <div class="layui-form-item">
-
-                            <div class="layui-inline" style="width: 370px">
-                                <label class="layui-form-label" style="width: 130px;">超限预警延时</label>
-                                <div class="layui-input-inline" style="width: 100px;">
-                                    <input type="text" id="warningDelay" name="warningDelay"  value="{{.DeviceParameter.T_warningDelay}}"  autocomplete="off" class="layui-input">
-                                </div>
-                                <span style="float: left;margin-top: 10px;">秒(0~600)  </span>
-                            </div>
-                            <div class="layui-inline">
-                                <label class="layui-form-label" style="width: 175px;">电池电量下限</label>
-                                <div class="layui-input-inline" style="width: 100px;">
-                                    <input type="text" id="batteryLimit" name="batteryLimit"  value="{{.DeviceParameter.T_batteryLimit}}"  autocomplete="off" class="layui-input">
-                                </div>
-                                <span style="float: left;margin-top: 10px;">%(0~10)</span>
-                            </div>
-
-                        </div>
-                        <div class="layui-form-item">
-                            <div class="layui-inline" style="width: 370px">
-                                <label class="layui-form-label" style="width: 130px;">温度预警提前量</label>
-                                <div class="layui-input-inline" style="width: 100px;">
-                                    <input type="text" id="tempPre" name="tempPre"  value="{{.DeviceParameter.T_tempPre}}"  autocomplete="off" class="layui-input">
-                                </div>
-                                <span style="float: left;margin-top: 10px;">℃(0~3)    </span>
-                            </div>
-                            <div class="layui-inline">
-                                <label class="layui-form-label" style="width: 175px;">湿度预警提前量</label>
-                                <div class="layui-input-inline" style="width: 100px;">
-                                    <input type="text" id="humPre"  name="humPre"  value="{{.DeviceParameter.T_humPre}}"  autocomplete="off" class="layui-input">
-                                </div>
-                                <span style="float: left;margin-top: 10px;">%(0~30)</span>
-                            </div>
-
-                        </div>
-
-                        <div class="layui-form-item">
-                            <div class="layui-inline">
-                                <label class="layui-form-label" style="width: 60px;">公司名称</label>
-                                <div class="layui-input-inline" style="width: 120px;">
-                                    <input type="text" id="company"  name="company"  value="{{.DeviceParameter.T_company}}"  autocomplete="off" class="layui-input">
-                                </div>
-                            </div>
-                            <div class="layui-inline">
-                                <label class="layui-form-label" style="width: 100px;">蓝牙打印机名称</label>
-                                <div class="layui-input-inline" style="width: 80px;">
-                                    <input type="text" id="btname"  name="btname"  value="{{.DeviceParameter.T_btname}}"  autocomplete="off" class="layui-input">
-                                </div>
-
-                            </div>
-                            <div class="layui-inline">
-                                <label class="layui-form-label" style="width: 100px;">打印机服务号</label>
-                                <div class="layui-input-inline" style="width: 80px;">
-                                    <input type="text" id="btserverID"  name="btserverID"  value="{{.DeviceParameter.T_btserverID}}"  autocomplete="off" class="layui-input">
-                                </div>
-                            </div>
-                            <div class="layui-inline">
-                                <label class="layui-form-label" style="width: 100px;">蓝牙特征码</label>
-                                <div class="layui-input-inline" style="width: 80px;">
-                                    <input type="text" id="btchar"  name="btchar" value="{{.DeviceParameter.T_btchar}}"   autocomplete="off" class="layui-input">
-                                </div>
-                            </div>
-
-                        </div>
-
-                        <div class="layui-form-item">
-<!--                            <div class="layui-inline">-->
-<!--                                <label class="layui-form-label" style="width: 140px;">配置管理主机总终端数量</label>-->
-<!--                                <div class="layui-input-inline" style="width: 120px;">-->
-<!--                                    <input type="text" id="decTotal"  name="decTotal"  value="{{.DeviceParameter.T_decTotal}}"  autocomplete="off" class="layui-input">-->
-<!--                                </div>-->
-<!--                            </div>-->
-                            <div class="layui-inline">
-                                <label class="layui-form-label" style="width: 100px;">配置每个通道数量</label>
-<!--                                <div class="layui-input-inline" style="width: 380px;">-->
-<!--                                    <input type="text" id="chDecTotal"  name="chDecTotal"  value="{{.DeviceParameter.T_chDecTotal}}"  autocomplete="off" class="layui-input">-->
-<!--                                </div>-->
-
-                                <div class="layui-input-inline" style="width: 380px;">
-                                    <input type="text" id="chDecTotal0"  name="chDecTotal0" lay-verify="required|number" autocomplete="off" class="layui-input" style="width: 35px;float: left">
-                                    <input type="text" id="chDecTotal1"  name="chDecTotal1" lay-verify="required|number" autocomplete="off" class="layui-input" style="width: 35px;float: left">
-                                    <input type="text" id="chDecTotal2"  name="chDecTotal2" lay-verify="required|number" autocomplete="off" class="layui-input" style="width: 35px;float: left">
-                                    <input type="text" id="chDecTotal3"  name="chDecTotal3" lay-verify="required|number" autocomplete="off" class="layui-input" style="width: 35px;float: left">
-                                    <input type="text" id="chDecTotal4"  name="chDecTotal4" lay-verify="required|number" autocomplete="off" class="layui-input" style="width: 35px;float: left">
-                                    <input type="text" id="chDecTotal5"  name="chDecTotal5" lay-verify="required|number" autocomplete="off" class="layui-input" style="width: 35px;float: left">
-                                    <input type="text" id="chDecTotal6"  name="chDecTotal6" lay-verify="required|number" autocomplete="off" class="layui-input" style="width: 35px;float: left">
-                                    <input type="text" id="chDecTotal7"  name="chDecTotal7" lay-verify="required|number" autocomplete="off" class="layui-input" style="width: 35px;float: left">
-                                    <input type="text" id="chDecTotal8"  name="chDecTotal8" lay-verify="required|number" autocomplete="off" class="layui-input" style="width: 35px;float: left">
-                                    <input type="text" id="chDecTotal9"  name="chDecTotal9" lay-verify="required|number" autocomplete="off" class="layui-input" style="width: 35px;float: left">
-                                </div>
-
-                            </div>
-
-                        </div>
-
-
-                        <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-
-                            <button type="submit" class="layui-btn  layui-btn-normal" lay-submit="" lay-filter="add">配置参数{{if gt $.DeviceParameter_lite_SendState_z 0 }} (替换上次参数) {{end}}</button>
-
-                        </div>
-                    </form>
-                    </div>
-                {{else}}
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px;padding: 20px">
-
-                        <h1 style="background-color: rgba(255,125,125,0.33);color: #f00;padding: 20px"> 新添加设备</h1>
-                        <h1 style="background-color: rgba(255,125,125,0.33);color: #f00;padding: 20px"> 确保 设备通讯正常后,请 重新进入此页面!</h1>
-                    </div>
-                {{end}}
-
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                    <legend>设备类型参数</legend>
-                </fieldset>
-                <form class="layui-form" action="" lay-filter="example">
-
-                    <div class="layui-form-item" style="font-size: 13px">
-                        <label class="layui-form-label" style="width: 57px;">类型选择</label>
-                        <div class="layui-input-block">
-                            <input type="radio" name="T_l_p" value="0" title="默认"
-                                   {{if eq $.Device.T_l_p 0 }}
-                                   checked=""
-                                   {{end}}
-                            ><div class="layui-unselect layui-form-radio"><i class="layui-anim layui-icon"></i><div>默认</div></div>
-                            <input type="radio" name="T_l_p" value="1" title="物流端"
-                                   {{if eq $.Device.T_l_p 1 }}
-                                   checked=""
-                                   {{end}}
-                            ><div class="layui-unselect layui-form-radio"><i class="layui-anim layui-icon"></i><div>物流端</div></div>
-                            <input type="radio" name="T_l_p" value="2" title="药店端"
-                                   {{if eq $.Device.T_l_p 2 }}
-                                   checked=""
-                                   {{end}}
-                            ><div class="layui-unselect layui-form-radio layui-form-radioed"><i class="layui-anim layui-icon layui-anim-scaleSpring"></i><div>药店端</div></div>
-                        </div>
-
-                    </div>
-
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-
-                        <button type="submit" class="layui-btn  layui-btn-normal" lay-submit="" lay-filter="EPOST2">配置参数</button>
-
-                    </div>
-                </form>
-                <hr>
-                {{if le $.Admin.Admin_master 1 }}
-                    <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                        <legend>设备是否弃用 !!设备弃用后,只有内部运维权限,才可以查看到!!</legend>
-                    </fieldset>
-                    <form class="layui-form" action="" lay-filter="example">
-
-                        <div class="layui-form-item" style="font-size: 13px">
-                            <label class="layui-form-label" style="width: 87px;">设备是否弃用</label>
-                            <div class="layui-input-block">
-                                <input type="radio" name="T_give" value="0" title="弃用设备"
-                                       {{if eq $.Device.T_give 0 }}
-                                       checked=""
-                                       {{end}}
-                                ><div class="layui-unselect layui-form-radio"><i class="layui-anim layui-icon"></i><div>弃用设备</div></div>
-                                <input type="radio" name="T_give" value="1" title="开启设备"
-                                       {{if eq $.Device.T_give 1 }}
-                                       checked=""
-                                       {{end}}
-                                ><div class="layui-unselect layui-form-radio"><i class="layui-anim layui-icon"></i><div>开启设备</div></div>
-
-
-                            </div>
-
-                        </div>
-
-                        <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-
-                            <button type="submit" class="layui-btn  layui-btn-normal" lay-submit="" lay-filter="T_give">配置参数</button>
-
-                        </div>
-                    </form>
-                    <hr>
-                {{end}}
-
-
-
-
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: -10px;">
-                    <legend>设备操作</legend>
-                </fieldset>
-                {{if eq $.Admin.Admin_master 0 }}
-                    <button class="layui-btn  layui-btn-danger" onclick="f_Device_Del()" >删除此设备</button>
-                {{end}}
-
-
-                <button class="layui-btn  layui-btn-normal" onclick="f_Read_DeviceSensorParameter()" >同步传感器</button>
-
-                {{if eq .Device.T_monitor 1 }}
-                    <button class="layui-btn  layui-btn-normal" onclick="DeviceTask_Post('{{.Device.T_sn}}',{{.Device.T_monitor}})" >停止记录(当期设备正在记录中)</button>
-                {{else}}
-                <button class="layui-btn  layui-btn-normal" onclick="DeviceTask_Post('{{.Device.T_sn}}',{{.Device.T_monitor}})" >开始记录(当期设备已停止记录)</button>
-                {{end}}
-                <hr>
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                    <legend>最近修改记录(
-                        <span style="background-color:#dedede;margin: 0px 10px;">灰色:等待执行</span>
-                        <span style="background-color:#00FF00;margin: 0px 10px;">绿色:修改成功</span>
-                        <span style="background-color:#ffa5a5;margin: 0px 10px;">红色:修改失败</span>
-                        <span style="background-color:#d7b3f5;margin: 0px 10px;">紫色:覆盖参数</span>
-                        )</legend>
-                </fieldset>
-
-                {{range $index, $elem := .DeviceParameter_lite}}
-
-                    <div class="layui-inline" style="margin-left: 40px;margin-bottom: 20px;padding: 10px;{{if eq $elem.T_SendState 0 }}background-color:#dedede; {{end}} {{if eq $elem.T_SendState 1 }}background-color:#00FF00; {{end}} {{if eq $elem.T_SendState 2 }}background-color:#ffa5a5; {{end}} {{if eq $elem.T_SendState 3 }}background-color:#d7b3f5; {{end}}">
-                        <span style="margin-right: 20px">操作人UUID:{{$elem.T_uuid}}</span>
-                        <span style="margin-right: 20px">设备名称:{{$elem.T_devName}}</span>
-                        <span style="margin-right: 20px">实时数据上传间隔:{{$elem.T_uploadTime}}</span>
-                        <span style="margin-right: 20px">数据保存间隔:{{$elem.T_saveTime}}</span>
-                        <span style="margin-right: 20px">数据超限保存间隔:{{$elem.T_overrunSave}}</span>
-                        <span style="margin-right: 20px">超限报警触发间隔:{{$elem.T_overrunAlarm}}</span>
-                        <span style="margin-right: 20px">传感器掉线报警触发间隔:{{$elem.T_lostAlarm}}</span>
-                        <span style="margin-right: 20px">断电报警触发间隔:{{$elem.T_outageAlarm}}</span>
-                        <span style="margin-right: 20px">超限预警触发间隔:{{$elem.T_warningTime}}</span>
-                        <span style="margin-right: 20px">超限预警延时:{{$elem.T_warningDelay}}</span>
-                        <span style="margin-right: 20px">电池电量下限:{{$elem.T_batteryLimit}}</span>
-                        <span style="margin-right: 20px">温度预警提前量:{{$elem.T_tempPre}}</span>
-                        <span style="margin-right: 20px">湿度预警提前量:{{$elem.T_humPre}}</span>
-                        <span style="margin-right: 20px">是否启动超限预警:{{$elem.T_enwarning}}</span>
-                        <span style="margin-right: 20px">公司名称:{{$elem.T_company}}</span>
-                        <span style="margin-right: 20px">蓝牙打印机名称:{{$elem.T_btname}}</span>
-                        <span style="margin-right: 20px">打印机服务号:{{$elem.T_btserverID}}</span>
-                        <span style="margin-right: 20px">蓝牙特征码:{{$elem.T_btchar}}</span>
-                        <span style="margin-right: 20px">配置管理主机总终端数量:{{$elem.T_decTotal}}</span>
-                        <span style="margin-right: 20px">配置每个通道数量:{{$elem.T_chDecTotal}}</span>
-                        <span style="margin-right: 20px">修改时间:{{$elem.CreateTime}}</span>
-                    </div>
-                {{end}}
-
-            </div>
-        </div>
-        <script>
-            //获取url中的参数
-            function getQueryString(name) {
-                var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
-                var r = window.location.search.substr(1).match(reg);
-                if (r != null)
-                    return decodeURIComponent(r[2]);
-                return null;
-            }
-
-            // 页面 加载完成后执行
-            window.onload = function () {
-                console.log("页面 加载完成后执行")
-
-            }
-            f_Read_DeviceParameter_is = true
-            function f_Read_DeviceParameter() {
-                if(f_Read_DeviceParameter_is){
-                    $.ajax({
-                        type: 'POST',
-                        url: 'Read_DeviceParameter',//发送请求
-                        data: {
-                            SN:getQueryString("Sn"),
-                        },
-                        success: function(result) {
-
-                        }
-                    });
-                    f_Read_DeviceParameter_is = false
-                }
-
-            }
-            function f_Read_DeviceSensorParameter() {
-                    $.ajax({
-                        type: 'POST',
-                        url: 'Read_DeviceSensorParameter',//发送请求
-                        data: {
-                            SN:getQueryString("Sn"),
-                        },
-                        success: function(result) {
-                            layer.msg('请求成功!');
-                        }
-                    });
-
-            }
-
-            function f_Device_Del() {
-                // console.log(getQueryString("Sn"),getQueryString("Id"))
-                //
-                layer.confirm('确认要 删除 当期设备吗?(清楚后当期所有相关信息 都将会被清除,无法找回!!!)',
-                    function(index) {
-                        var loading = layer.load(0, {
-                            shade: false,
-                            time: 99*1000
-                        });
-                        $.ajax({
-                            type: 'POST',
-                            url: 'Device_Del',//发送请求】
-                            data: {
-                                T_sn: getQueryString("Sn")
-                            },
-                            success: function (result) {
-                                console.log(result)
-
-                                layer.close(loading)
-
-                                if(result.Code == 200){
-                                    //关闭当前frame
-                                    parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                    parent.location.reload();
-
-                                }else {
-
-                                    layer.msg(result.Msg);
-                                }
-
-                                // return false;
-                            }
-                        });
-
-
-                    });
-
-            }
-
-            // 任务开始
-            function DeviceTask_Post(T_sn,T_monitor) {
-                confirm_str = "停止"
-                T_task = "stop"
-                if(T_monitor == 0){
-                    confirm_str = "开始"
-                    T_task = "start"
-                }
-
-                layer.confirm("确定"+confirm_str+"记录?", {
-                    btn: ['确定'] //可以无限个按钮
-                    ,btn1: function(index, layero){
-                        $.ajax({
-                            type: 'POST',
-                            url: '../../Device/DeviceTask_Post',//发送请求
-                            data: {
-                                T_sn: T_sn,
-                                T_task: T_task,
-                            },
-                            success: function (result) {
-                                console.log(result)
-                                layer.msg('提示:'+confirm_str+"记录 发送成功!请 等待同步显示",{time: 3000});
-                            }
-                        });
-                        return false
-                    }
-                });
-            }
-            function get_chDecTotal(x) {
-                texttext = "{{.DeviceParameter.T_chDecTotal}}"
-
-                texttext = texttext.replace('[', '');
-                texttext = texttext.replace(']', '');
-                // console.log(texttext)
-
-                texttextlistlist = texttext.split(",")
-
-                if (texttextlistlist[x] == undefined){
-                    return "0"
-                }
-                if (!(parseInt(texttextlistlist[x]) >= 0)){
-                    return "0"
-                }
-                if (texttextlistlist[x].length == 0){
-                    return "0"
-                }
-
-                return texttextlistlist[x]
-            }
-
-
-
-
-            
-            layui.use(['form', 'layer',"layedit"],
-
-                function() {
-                    $ = layui.jquery;
-                    var form = layui.form,
-                    layer = layui.layer;
-                    var layedit = layui.layedit
-
-                    layedit.set({
-                        uploadImage: {
-                            url: '/UpFile' //接口url
-                        }
-                    });
-                    form.val('example1', {
-                        "chDecTotal0": get_chDecTotal(0),
-                        "chDecTotal1": get_chDecTotal(1),
-                        "chDecTotal2": get_chDecTotal(2),
-                        "chDecTotal3": get_chDecTotal(3),
-                        "chDecTotal4": get_chDecTotal(4),
-                        "chDecTotal5": get_chDecTotal(5),
-                        "chDecTotal6": get_chDecTotal(6),
-                        "chDecTotal7": get_chDecTotal(7),
-                        "chDecTotal8": get_chDecTotal(8),
-                        "chDecTotal9": get_chDecTotal(9),
-                    });
-                    //构建一个默认的编辑器
-                    var index = layedit.build('T_text', {
-                        height: 580 //设置编辑器高度,
-                    });
-                    //监听提交
-                    form.on('submit(add)',
-                        function(data) {
-                            console.log("=== submit(add) ==");
-
-                            console.log(data);
-                            T_enwarning = 0
-                            if(data.field.enwarning != undefined){
-                                T_enwarning = 1
-                            }
-
-                            if(data.field.devName.length < 1){
-                                layer.msg('设备名称 太短!');
-
-                                return false;
-                            }
-                            if(data.field.saveTime < 60 || data.field.saveTime > 1800){
-                                layer.msg('数据保存间隔 60~1800');
-                                return false;
-                            }
-                            if(data.field.overrunSave < 60 || data.field.overrunSave > 120){
-                                layer.msg('数据超限保存间隔 60~120');
-                                return false;
-                            }
-                            if(data.field.overrunAlarm < 60 || data.field.overrunAlarm > 600){
-                                layer.msg('超限报警触发间隔 60~600');
-                                return false;
-                            }
-
-                            if(getQueryString("Sn").indexOf("KF") != -1 ){
-                                if(data.field.outageAlarm < 60 || data.field.outageAlarm > 600){
-                                    layer.msg('断电报警触发间隔 60~600');
-                                    return false;
-                                }
-                            }
-                            if(data.field.lostAlarm < 60 || data.field.lostAlarm > 600){
-                                layer.msg('传感器掉线报警触发间隔 60~600');
-                                return false;
-                            }
-                            if(data.field.warningDelay < 0 || data.field.warningDelay > 600){
-                                layer.msg('超限预警延时 0~600');
-                                return false;
-                            }
-                            if((data.field.warningTime < 60 || data.field.warningTime > 600)){
-                                if(data.field.warningTime != 0 ){
-                                    layer.msg('超限预警触发间隔 0,60~600  为只触发一次');
-                                    return false;
-                                }
-                            }
-                            if(data.field.tempPre < 0 || data.field.tempPre > 3){
-                                layer.msg('温度预警提前量 0~3');
-                                return false;
-                            }
-                            if(data.field.humPre < 0 || data.field.humPre > 30){
-                                layer.msg('湿度预警提前量 0~30');
-                                return false;
-                            }
-                            // if(data.field.uploadTime < 10 || data.field.uploadTime > 60){
-                            //     layer.msg('实时上传间隔 10~60   (该参数只对库房终端与PC端的连接有效)');
-                            //     return false;
-                            // }
-                            if(data.field.batteryLimit < 10 ){
-                                layer.msg('电池电量下限 > 10');
-                                return false;
-                            }
-
-                            if(data.field.chDecTotal0 < 0 || data.field.chDecTotal0 > 40
-                                || data.field.chDecTotal1 < 0 || data.field.chDecTotal1 > 40
-                                || data.field.chDecTotal2 < 0 || data.field.chDecTotal2 > 40
-                                || data.field.chDecTotal3 < 0 || data.field.chDecTotal3 > 40
-                                || data.field.chDecTotal4 < 0 || data.field.chDecTotal4 > 40
-                                || data.field.chDecTotal5 < 0 || data.field.chDecTotal5 > 40
-                                || data.field.chDecTotal6 < 0 || data.field.chDecTotal6 > 40
-                                || data.field.chDecTotal7 < 0 || data.field.chDecTotal7 > 40
-                                || data.field.chDecTotal8 < 0 || data.field.chDecTotal8 > 40
-                                || data.field.chDecTotal9 < 0 || data.field.chDecTotal9 > 40){
-                                layer.msg('配置每个通道数量 0~40');
-                                return false;
-                            }
-                            decTotal = parseInt(data.field.chDecTotal0)+parseInt(data.field.chDecTotal1)+parseInt(data.field.chDecTotal2)+parseInt(data.field.chDecTotal3)+parseInt(data.field.chDecTotal4)+parseInt(data.field.chDecTotal5)+parseInt(data.field.chDecTotal6)+parseInt(data.field.chDecTotal7)+parseInt(data.field.chDecTotal8)+parseInt(data.field.chDecTotal9)
-                            chDecTotal = "["+parseInt(data.field.chDecTotal0)+","+parseInt(data.field.chDecTotal1)+","+parseInt(data.field.chDecTotal2)+","+parseInt(data.field.chDecTotal3)+","+parseInt(data.field.chDecTotal4)+","+parseInt(data.field.chDecTotal5)+","+parseInt(data.field.chDecTotal6)+","+parseInt(data.field.chDecTotal7)+","+parseInt(data.field.chDecTotal8)+","+parseInt(data.field.chDecTotal9)+"]"
-
-                            loading = layer.load(0, {
-                                shade: false,
-                                time: 99*1000
-                            });
-                            $.ajax({
-                                type: 'POST',
-                                url: 'Pu_DeviceParameter',//发送请求
-                                data: {
-                                    User_tokey:$.cookie('User_tokey'),
-                                    SN:getQueryString("Sn"),
-                                    T_devName:data.field.devName,
-                                    // T_uploadTime:data.field.uploadTime,
-                                    T_saveTime:data.field.saveTime,
-                                    T_overrunSave:data.field.overrunSave,
-                                    T_overrunAlarm:data.field.overrunAlarm,
-                                    T_outageAlarm:data.field.outageAlarm,
-                                    T_warningTime:data.field.warningTime,
-                                    T_warningDelay:data.field.warningDelay,
-                                    T_batteryLimit:data.field.batteryLimit,
-                                    T_lostAlarm:data.field.lostAlarm,
-                                    T_tempPre:data.field.tempPre,
-                                    T_humPre:data.field.humPre,
-                                    T_enwarning:T_enwarning,
-                                    T_company:data.field.company,
-                                    T_btname:data.field.btname,
-                                    T_btserverID:data.field.btserverID,
-                                    T_btchar:data.field.btchar,
-                                    T_decTotal:decTotal,
-                                    T_chDecTotal:chDecTotal,
-
-                                },
-                                success: function(result) {
-                                    console.log(result)
-
-                                    if(result.Code != 200){
-                                        return
-                                    }
-                                    layer.close(loading)
-                                    var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
-                                    parent.layer.close(index); //再执行关闭
-                                    parent.location.reload();
-                                }
-                            });
-
-                            return false;
-                        });
-                    //监听提交
-                    form.on('submit(EPOST2)',
-                        function(data) {
-                            console.log("=== submit(EPOST2) ==");
-
-                            loading = layer.load(0, {
-                                shade: false,
-                                time: 99*1000
-                            });
-                            $.ajax({
-                                type: 'POST',
-                                url: 'Pu_DeviceParameter_T_l_p',//发送请求
-                                data: {
-                                    User_tokey:$.cookie('User_tokey'),
-                                    SN:getQueryString("Sn"),
-                                    T_l_p:data.field.T_l_p,
-
-                                },
-                                success: function(result) {
-                                    console.log(result)
-
-                                    if(result.Code != 222){
-                                        return
-                                    }
-
-                                    layer.close(loading)
-                                    layer.msg('配置参数成功!', {
-                                        offset: '6px'
-                                    });
-
-                                    //关闭当前frame
-                                    var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
-                                    parent.layer.close(index); //再执行关闭
-                                    parent.location.reload();
-                                    // return false;
-                                }
-                            });
-
-                            return false;
-                        });
-//监听提交
-                    form.on('submit(T_give)',
-                        function(data) {
-                            console.log("=== submit(T_give) ==");
-
-                            loading = layer.load(0, {
-                                shade: false,
-                                time: 99*1000
-                            });
-                            $.ajax({
-                                type: 'POST',
-                                url: 'Pu_DeviceParameter_T_give',//发送请求
-                                data: {
-                                    SN:getQueryString("Sn"),
-                                    T_give:data.field.T_give,
-
-                                },
-                                success: function(result) {
-                                    console.log(result)
-                                    layer.close(loading)
-
-                                    if(result.Code != 200){
-                                        return
-                                    }
-                                    layer.msg('配置参数成功!', {
-                                        offset: '6px'
-                                    });
-                                    //关闭当前frame
-                                    var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
-                                    parent.layer.close(index); //再执行关闭
-                                    parent.location.reload();
-                                    // return false;
-                                }
-                            });
-
-                            return false;
-                        });
-
-                    // //监听指定开关
-                    // form.on('switch(switchTest)', function(data){
-                    //     layer.msg('开关checked:'+ (this.checked ? 'true' : 'false'), {
-                    //         offset: '6px'
-                    //     });
-                    //     layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF', data.othis)
-                    // });
-
-                    //表单取值
-                    // layui.$('#LAY-component-form-getval').on('click', function(){
-                    //     var data = form.val('example');
-                    //     alert(JSON.stringify(data));
-                    // });
-
-                    // var loading = layer.load(0, {
-                    //     shade: false,
-                    //     time: 99*1000
-                    // });
-
-                    //
-                    //
-                    // var websocket = null;
-                    // var ok_websocket1 = false;
-                    // var ok_websocket2 = false;
-
-
-                    // function Timeout_1 (){
-                    //     //要执行的代码
-                    //     if(!ok_websocket1){
-                    //         layer.open({
-                    //             text:"连接失败",
-                    //             btn: '立即重新登录',
-                    //             content: "请退出账号重新登录!",
-                    //             yes: function(index, layero){
-                    //                 //do something
-                    //                 window.parent.parent.location.href ='../Login';
-                    //                 layer.close(index); //如果设定了yes回调,需进行手工关闭
-                    //             }
-                    //         });
-                    //     }
-                    //
-                    // }
-                    // setTimeout(Timeout_1,8000);//5秒后执行
-                    //
-                    //
-                    // function Timeout_2 (){
-                    //     //要执行的代码
-                    //     if(!ok_websocket2){
-                    //         layer.open({
-                    //             text:"无响应",
-                    //             btn: '重新试试',
-                    //             content: "设备主机无响应,请重新试试,若有疑问请联系工作人员!",
-                    //             yes: function(index, layero){
-                    //                 //do something
-                    //
-                    //                 layer.close(index); //如果设定了yes回调,需进行手工关闭
-                    //             }
-                    //         });
-                    //     }
-                    //
-                    // }
-                    // setTimeout(Timeout_2,20000);//5秒后执行
-                    //
-                    //
-                    //
-                    // //判断当前浏览器是否支持WebSocket
-                    // if ('WebSocket' in window) {
-                    //     url = window.location.host
-                    //     console.log("url:",url)
-                    //     if(url.indexOf("baozhida") != -1){
-                    //         websocket = new WebSocket("wss://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
-                    //     }else {
-                    //         websocket = new WebSocket("ws://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
-                    //     }
-                    // } else {
-                    //     alert('Dont support websocket')
-                    // }
-                    //
-                    // console.log(getQueryString("Sn"))
-                    //
-                    // //连接发生错误的回调方法
-                    // websocket.onerror = function () {
-                    //     console.log("error");
-                    // };
-                    //
-                    // //连接成功建立的回调方法
-                    // websocket.onopen = function () {
-                    //     console.log("open");
-                    //     send("{\"Sn\":\""+ getQueryString("Sn") +"\"}")
-                    // };
-                    //
-                    // //接收到消息的回调方法
-                    // websocket.onmessage = function (event) {
-                    //     f_Read_DeviceParameter();
-                    //
-                    //     console.log(event.data)
-                    //     var obj = JSON.parse(event.data);
-                    //     console.log(obj.type)
-                    //     ok_websocket1 = true
-                    //     if(obj.type == 3){
-                    //         layer.close(loading)
-                    //         ok_websocket2 = true
-                    //         switch (obj.msid%10) {
-                    //             case 1:
-                    //                 T_enwarning =false
-                    //                 if(obj.base.enwarning = 1){
-                    //                     T_enwarning =true
-                    //                 }
-                    //                 f_Read_DeviceSensorParameter()
-                    //                 if(obj.base.devName == "*"){
-                    //                     form.val('example', {
-                    //                         "SN": obj.sn // "name": "value"
-                    //                         ,"uploadTime": obj.base.uploadTime
-                    //                         ,"saveTime": obj.base.saveTime
-                    //                         ,"overrunSave": obj.base.overrunSave
-                    //                         ,"overrunAlarm": obj.base.overrunAlarm
-                    //                         ,"outageAlarm": obj.base.outageAlarm
-                    //                         ,"lostAlarm": obj.base.lostAlarm
-                    //                         ,"warningDelay": obj.base.warningDelay
-                    //                         ,"warningTime": obj.base.warningTime
-                    //                         ,"batteryLimit": obj.base.batteryLimit
-                    //                         ,"tempPre": obj.base.tempPre
-                    //                         ,"humPre": obj.base.humPre
-                    //                         ,"company": obj.base.company
-                    //                         ,"btname": obj.base.btname
-                    //                         ,"btserverID": obj.base.btserverID
-                    //                         ,"btchar": obj.base.btchar
-                    //                         ,"decTotal": obj.base.decTotal
-                    //                         ,"chDecTotal": JSON.stringify(obj.base.chDecTotal)
-                    //                         ,"enwarning": T_enwarning
-                    //                     });
-                    //                 }else {
-                    //                     form.val('example', {
-                    //                         "SN": obj.sn // "name": "value"
-                    //                         ,"devName": obj.base.devName
-                    //                         ,"uploadTime": obj.base.uploadTime
-                    //                         ,"saveTime": obj.base.saveTime
-                    //                         ,"overrunSave": obj.base.overrunSave
-                    //                         ,"overrunAlarm": obj.base.overrunAlarm
-                    //                         ,"outageAlarm": obj.base.outageAlarm
-                    //                         ,"lostAlarm": obj.base.lostAlarm
-                    //                         ,"warningDelay": obj.base.warningDelay
-                    //                         ,"warningTime": obj.base.warningTime
-                    //                         ,"batteryLimit": obj.base.batteryLimit
-                    //                         ,"tempPre": obj.base.tempPre
-                    //                         ,"humPre": obj.base.humPre
-                    //                         ,"company": obj.base.company
-                    //                         ,"btname": obj.base.btname
-                    //                         ,"btserverID": obj.base.btserverID
-                    //                         ,"btchar": obj.base.btchar
-                    //                         ,"decTotal": obj.base.decTotal
-                    //                         ,"chDecTotal": obj.base.chDecTotal
-                    //                         ,"enwarning": T_enwarning
-                    //                     });
-                    //                 }
-                    //
-                    //
-                    //
-                    //
-                    //                 break
-                    //
-                    //         }
-                    //
-                    //     }
-                    //     if(obj.type == 4){
-                    //         switch (obj.msid%10) {
-                    //             case 1:
-                    //                 layer.close(loading)
-                    //                 layer.msg('配置参数成功!', {
-                    //                         offset: '6px'
-                    //                     });
-                    //
-                    //                 //关闭当前frame
-                    //                 parent.layer.close(parent.layer.getFrameIndex(window.name));
-                    //                 parent.location.reload();
-                    //
-                    //
-                    //                 break
-                    //
-                    //         }
-                    //
-                    //     }
-                    //     //
-                    //     // if(obj && "memberstatus"==obj.type){
-                    //     //     console.log(obj.data)
-                    //     //     table.reload('test', {
-                    //     //         elem: '#test'
-                    //     //         ,data: JSON.parse(obj.data)
-                    //     //     });
-                    //     // }
-                    // };
-                    //
-                    // //连接关闭的回调方法
-                    // websocket.onclose = function () {
-                    //     console.log("close");
-                    // };
-                    //
-                    // //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
-                    // window.onbeforeunload = function () {
-                    //     websocket.close();
-                    //     console.log("onbeforeunload");
-                    // };
-                    //
-                    // //关闭连接
-                    // function closeWebSocket() {
-                    //     websocket.close();
-                    //     console.log("onbeforeunload");
-                    //     window.clearInterval(intervalId);
-                    // }
-                    //
-                    // //发送消息
-                    // function send(message) {
-                    //     websocket.send(message);
-                    // }
-
-                });
-        </script>
-
-    </body>
-
-</html>

+ 0 - 581
views/Device/Device_Sensor-.html

@@ -1,581 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-    <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    <script src="https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js"></script>
-    <script src="https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]--></head>
-
-<body>
-<div class="layui-fluid">
-
-
-    <div class="layui-row" id="tab_2">
-        <div class="layui-row">
-            <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                <legend >传感器参数 {{if gt $.DeviceSensorParameter_T_SendState_0 0 }} <span style="background-color: #dedede;"> 上次设置的参数 还没有生效,再次提交会替换上次的数据!</span> {{end}}</legend>
-            </fieldset>
-        </div>
-        <div class="layui-row">
-            <div class="layui-col-md7" style="margin-bottom: 30px">
-                <div style="{{if gt $.DeviceSensorParameter_T_SendState_0 0 }} background-color: #dedede; {{end}}">
-                    <form class="layui-form" action="" lay-filter="example">
-                    <div class="layui-form-item">
-
-                        <div class="layui-inline">
-                            <label class="layui-form-label">设备名称</label>
-                            <div class="layui-input-inline">
-                                <input type="text" id="S_devName  layui-disabled"  value="{{.Device.T_devName}}"  name="S_devName" autocomplete="off"
-                                       class="layui-input layui-disabled">
-                            </div>
-                            <div class="layui-input-inline">
-                                <input class="layui-input layui-disabled" value="{{.Device.T_sn}}" type="text" id="S_sn" name="S_sn"
-                                       autocomplete="off">
-                            </div>
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-
-                        <div class="layui-inline">
-                            <label class="layui-form-label">传感器名称</label>
-                            <div class="layui-input-inline">
-                                <input type="text" id="S_name" value="{{.DeviceSensor.T_name}}" name="S_name" autocomplete="off" class="layui-input">
-                            </div>
-                            <div class="layui-input-inline" style="width: 50px">
-                                <input class="layui-input layui-disabled" type="text" value="{{.DeviceSensor.T_id}}" id="S_id" name="S_id"
-                                       autocomplete="off"
-                                       class="layui-input">
-                            </div>
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <div class="layui-inline">
-                            <label class="layui-form-label">温度范围 ℃</label>
-                            <div class="layui-input-inline" style="width: 100px;">
-                                <input type="text" name="S_Tlower" autocomplete="off"  value="{{.DeviceSensor.T_Tlower}}" class="layui-input">
-                            </div>
-                            <div class="layui-form-mid">-</div>
-                            <div class="layui-input-inline" style="width: 100px;">
-                                <input type="text" name="S_Tupper" autocomplete="off"  value="{{.DeviceSensor.T_Tupper}}"  class="layui-input">
-                            </div>
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <div class="layui-inline">
-                            <label class="layui-form-label">湿度范围 %</label>
-                            <div class="layui-input-inline" style="width: 100px;">
-                                <input type="text" name="S_RHlower" autocomplete="off"  value="{{.DeviceSensor.T_RHlower}}"  class="layui-input">
-                            </div>
-                            <div class="layui-form-mid">-</div>
-                            <div class="layui-input-inline" style="width: 100px;">
-                                <input type="text" name="S_RHupper" autocomplete="off"  value="{{.DeviceSensor.T_RHupper}}"  class="layui-input">
-                            </div>
-
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label class="layui-form-label" style="width: 60px;">启用</label>
-                        <div class="layui-input-block">
-                            <input type="checkbox" id="S_en" name="S_en" lay-filter="switchTest" lay-skin="switch"
-                                   lay-text="开|关">
-                            <div class="layui-unselect layui-form-switch" lay-skin="_switch"><em>关</em><i></i></div>
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label class="layui-form-label" style="width: 60px;">空库</label>
-                        <div class="layui-input-block">
-                            <input type="checkbox" id="S_free" name="S_free" lay-filter="switchTest" lay-skin="switch"
-                                   lay-text="开|关">
-                            <div class="layui-unselect layui-form-switch" lay-skin="_switch"><em>关</em><i></i></div>
-                        </div>
-                    </div>
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-                        <button id="Pu_DeviceParameter_Sensor_id" type="submit" class="layui-btn  layui-btn-normal" lay-submit="" lay-filter="add">传感器配置{{if gt $.DeviceSensorParameter_T_SendState_0 0 }} (替换上次参数) {{end}}</button>
-                    </div>
-                </form>
-                </div>
-
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                    <legend>实时数据显示排序</legend>
-                </fieldset>
-                <div class="layui-form-item">
-                    <div class="layui-inline">
-                        <label class="layui-form-label" style="width: 170px;">实时数据显示排序:</label>
-                        <div class="layui-input-inline" style="width: 100px;">
-                            <input type="text" value="{{.DeviceSensor.T_sort}}" id="T_sort" autocomplete="off" class="layui-input">
-                        </div>
-                        <div class="layui-form-mid">(越小越靠前,可以负数)</div>
-                        <div class="layui-input-inline" style="width: 100px;">
-                            <button class="layui-btn  layui-btn-normal" onclick="UpDeviceSensor_Tsort()" >设置排序</button>
-                        </div>
-                    </div>
-                </div>
-
-
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                    <legend>屏蔽数据展示</legend>
-                </fieldset>
-                <form class="layui-form" action="" lay-filter="example">
-
-                    <div class="layui-inline" style="font-size: 13px">
-                        <label class="layui-form-label" style="width: 170px;">是否屏蔽数据展示</label>
-                        <div class="layui-input-block">
-                            <input type="radio" name="T_datashow" value="0" title="屏蔽数据展示"
-                                   {{if eq $.DeviceSensor.T_datashow 0 }}
-                                   checked=""
-                                   {{end}}
-                            ><div class="layui-unselect layui-form-radio"><i class="layui-anim layui-icon"></i><div>弃用设备</div></div>
-                            <input type="radio" name="T_datashow" value="1" title="正常数据展示"
-                                   {{if eq $.DeviceSensor.T_datashow 1 }}
-                                   checked=""
-                                   {{end}}
-                            ><div class="layui-unselect layui-form-radio"><i class="layui-anim layui-icon"></i><div>开启设备</div></div>
-
-
-                        </div>
-
-                    </div>
-
-                    <div class="layui-input-inline" style="text-align: center;margin-top: 20px">
-                        <button type="submit" class="layui-btn  layui-btn-normal" lay-submit="" lay-filter="T_datashow">配置参数</button>
-
-                    </div>
-                </form>
-
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                    <legend>数据视图订阅</legend>
-                </fieldset>
-                <div class="layui-form-item">
-                    <div class="layui-inline">
-                        <label class="layui-form-label" style="width: 100px;">3D视图ID:</label>
-                        <div class="layui-input-inline" style="width: 200px;">
-                            <input type="text" value="{{.DeviceSensor.T_3dview}}" id="T_3dview" autocomplete="off" class="layui-input">
-                        </div>
-                        <div class="layui-input-inline" style="width: 100px;">
-                            <button class="layui-btn  layui-btn-normal" onclick="UpDeviceSensor_T3dview()" >设置</button>
-                        </div>
-                    </div>
-                </div>
-
-
-                <fieldset class="layui-elem-field layui-field-title" style="margin-top: 10px;">
-                    <legend>设备操作</legend>
-                </fieldset>
-
-                <button style="margin-left: 80px;background-color: #e09d00;" class="layui-btn  layui-btn" onclick="f_Device_Parameter_Del()" >删除此设备(从数据库删除)</button>
-                <button style="background-color: #ff3b00;" class="layui-btn  layui-btn" onclick="f_Device_Parameter_Del_Device()" >删除此设备(从设备删除)</button>
-
-            </div>
-
-
-            <div class="layui-col-md5">
-                    <fieldset class="layui-elem-field layui-field-title" style="margin-top: -10px;">
-                        <legend>最近修改记录(
-                            <span style="background-color:#dedede;margin: 0px 10px;">灰色:等待执行</span>
-                            <span style="background-color:#00FF00;margin: 0px 10px;">绿色:修改成功</span>
-                            <span style="background-color:#ffa5a5;margin: 0px 10px;">红色:修改失败</span>
-                            <span style="background-color:#d7b3f5;margin: 0px 10px;">紫色:覆盖参数</span>
-                            )</legend>
-                    </fieldset>
-
-                    {{range $index, $elem := .DeviceSensorParameter_lite}}
-
-                    <div class="layui-inline" style="margin-left: 40px;margin-bottom: 20px;padding: 10px;{{if eq $elem.T_SendState 0 }}background-color:#dedede; {{end}} {{if eq $elem.T_SendState 1 }}background-color:#00FF00; {{end}} {{if eq $elem.T_SendState 2 }}background-color:#ffa5a5; {{end}} {{if eq $elem.T_SendState 3 }}background-color:#d7b3f5; {{end}}">
-                        <span style="margin-right: 20px">操作人UUID:{{$elem.T_uuid}}</span>
-                        <span style="margin-right: 20px">设备名称:{{$elem.T_name}}</span>
-                        <span style="margin-right: 20px">温度下限:{{$elem.T_Tlower}}</span>
-                        <span style="margin-right: 20px">温度上限:{{$elem.T_Tupper}}</span>
-                        <span style="margin-right: 20px">湿度下限:{{$elem.T_RHlower}}</span>
-                        <span style="margin-right: 20px">湿度上限:{{$elem.T_RHupper}}</span>
-                        <span style="margin-right: 20px">启用:{{$elem.T_en}}</span>
-                        <span style="margin-right: 20px">空库:{{$elem.T_free}}</span>
-                        <span style="margin-right: 20px">修改时间:{{$elem.CreateTime}}</span>
-                    </div>
-                    {{end}}
-            </div>
-        </div>
-
-    </div>
-</div>
-<script>
-    //获取url中的参数
-    function getQueryString(name) {
-        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
-        var r = window.location.search.substr(1).match(reg);
-        if (r != null)
-            return decodeURIComponent(r[2]);
-        return null;
-    }
-
-    function timestampToTime(timestamp) {
-        var date = new Date(timestamp * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
-        Y = date.getFullYear() + '-';
-        M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
-        D = date.getDate() + ' ';
-        h = date.getHours() + ':';
-        m = date.getMinutes() + ':';
-        s = date.getSeconds();
-        return Y + M + D + h + m + s;
-    }
-
-    $("#tab_1").hide()
-    $("#tab_2").show()
-
-    function tab_1() {
-        $("#tab_1").show()
-        $("#tab_2").hide()
-    }
-
-    function tab_2() {
-        $("#tab_1").hide()
-        $("#tab_2").show()
-    }
-
-    function f_Read_DeviceSensorParameter() {
-        $.ajax({
-            type: 'POST',
-            url: 'Read_DeviceSensorParameter',//发送请求
-            data: {
-                SN:getQueryString("Sn"),
-            },
-            success: function(result) {
-                layer.msg('请求成功!');
-            }
-        });
-
-    }
-
-    function f_Device_Parameter_Del() {
-        // console.log(getQueryString("Sn"),getQueryString("Id"))
-        layer.confirm('确认要 删除 当前传感器吗?',
-            function(index) {
-                var loading = layer.load(0, {
-                    shade: false,
-                    time: 99*1000
-                });
-                $.ajax({
-                    type: 'POST',
-                    url: 'Device_Parameter_Del',//发送请求】
-                    data: {
-                        Sn: getQueryString("Sn"),
-                        Id: getQueryString("Id")
-                    },
-                    success: function (result) {
-                        console.log(result)
-                        layer.close(loading)
-                        //关闭当前frame
-                        var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
-                        parent.layer.close(index); //再执行关闭
-                        parent.location.reload();
-                        // return false;
-                    }
-                });
-
-
-            });
-
-    }
-    function f_Device_Parameter_Del_Device() {
-        // console.log(getQueryString("Sn"),getQueryString("Id"))
-        layer.confirm('确认要 删除 当前传感器吗?',
-            function(index) {
-                var loading = layer.load(0, {
-                    shade: false,
-                    time: 99*1000
-                });
-                $.ajax({
-                    type: 'POST',
-                    url: 'Device_Parameter_Del_Device',//发送请求】
-                    data: {
-                        Sn: getQueryString("Sn"),
-                        Id: getQueryString("Id")
-                    },
-                    success: function (result) {
-                        console.log(result)
-                        var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
-                        parent.layer.close(index); //再执行关闭
-                        parent.location.reload();
-                        // return false;
-                    }
-                });
-
-
-            });
-
-    }
-    function UpDeviceSensor_Tsort() {
-        // console.log(getQueryString("Sn"),getQueryString("Id"))
-        //
-        $.ajax({
-            type: 'POST',
-            url: '../../Device/UpDeviceSensor_Tsort',//发送请求】
-            data: {
-                Sn: getQueryString("Sn"),
-                Id: getQueryString("Id"),
-                T_sort: $("#T_sort").val()
-            },
-            success: function (result) {
-                console.log(result)
-
-                //关闭当前frame
-                var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
-                parent.layer.close(index); //再执行关闭
-                parent.location.reload();
-                // return false;
-            }
-        });
-    }
-    function UpDeviceSensor_T3dview() {
-        // console.log(getQueryString("Sn"),getQueryString("Id"))
-        //
-        $.ajax({
-            type: 'POST',
-            url: '../../Device/UpDeviceSensor_T3dview',//发送请求】
-            data: {
-                Sn: getQueryString("Sn"),
-                Id: getQueryString("Id"),
-                T_3dview: $("#T_3dview").val()
-            },
-            success: function (result) {
-                console.log(result)
-
-                //关闭当前frame
-                var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
-                parent.layer.close(index); //再执行关闭
-                parent.location.reload();
-                // return false;
-            }
-        });
-    }
-    f_Read_DeviceParameter_is = true
-    function f_Read_DeviceParameter() {
-        if(f_Read_DeviceParameter_is){
-            console.log("Read_DeviceSensorParameter",getQueryString("Sn"))
-            $.ajax({
-                type: 'POST',
-                url: 'Read_DeviceSensorParameter',//发送请求
-                data: {
-                    SN:getQueryString("Sn"),
-                },
-                success: function(result) {
-
-                }
-            });
-            f_Read_DeviceParameter_is = false
-        }
-
-    }
-
-    layui.use(['form', 'layer', "layedit"],
-
-        function () {
-            $ = layui.jquery;
-            var form = layui.form,
-                layer = layui.layer;
-            var layedit = layui.layedit
-
-            layedit.set({
-                uploadImage: {
-                    url: '/UpFile' //接口url
-                }
-            });
-
-            T_en = false
-            if ("{{.DeviceSensor.T_en}}" == 1) {
-                T_en = true
-            }
-            T_free = false
-            if ("{{.DeviceSensor.T_free}}" == 1) {
-                T_free = true
-            }
-
-            form.val('example', {
-                "S_en": T_en
-                , "S_free": T_free
-            });
-
-            //监听提交
-            form.on('submit(add)',
-                function (data) {
-                    console.log("=== submit(add) ==");
-                    loading = layer.load(0, {
-                        shade: false,
-                        time: 99 * 1000
-                    });
-                    console.log(data);
-                    S_en = 0
-                    if (data.field.S_en != undefined) {
-                        S_en = 1
-                    }
-                    S_free = 0
-                    if (data.field.S_free != undefined) {
-                        S_free = 1
-                    }
-
-                    var T_sensor_list = [];
-                    T_sensor_list.push({
-
-                    })
-
-                    $.ajax({
-                        type: 'POST',
-                        url: "Pu_DeviceParameter_Sensor",//发送请求】
-                        data: {
-                            T_SN: Sn,
-                            T_id: parseInt(Id),
-                            "T_name": data.field.S_name,
-                            "T_Tlower": parseFloat(data.field.S_Tlower),
-                            "T_Tupper": parseFloat(data.field.S_Tupper),
-                            "T_RHlower": parseFloat(data.field.S_RHlower),
-                            "T_RHupper": parseFloat(data.field.S_RHupper),
-                            "T_en": S_en,
-                            "T_free": S_free
-                        },
-                        success: function (result) {
-                            console.log(result)
-                            if(result.Code == 200){
-                                //关闭当前frame
-                                var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
-                                parent.layer.close(index); //再执行关闭
-                                parent.location.reload();
-
-                            }else {
-
-                                layer.msg(result.Msg);
-                            }
-
-
-                            // return false;
-                        }
-                    });
-
-                    return false;
-                });
-            {{if eq $.Admin_Power.Power_DeviceSensor_Compensate_e 1}}
-
-            form.on('submit(T_datashow)',
-                function(data) {
-                    console.log("=== submit(T_datashow) ==");
-
-                    loading = layer.load(0, {
-                        shade: false,
-                        time: 99*1000
-                    });
-                    $.ajax({
-                        type: 'POST',
-                        url: 'UpDeviceSensor_T_datashow',//发送请求
-                        data: {
-                            Sn: Sn,
-                            Id: parseInt(Id),
-                            T_datashow:data.field.T_datashow,
-
-                        },
-                        success: function(result) {
-                            console.log(result)
-                            layer.close(loading)
-                            if(result.Code != 200){
-                                return
-                            }
-
-
-                            layer.msg('配置参数成功!', {
-                                offset: '6px'
-                            });
-
-                            //关闭当前frame
-                            var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
-                            parent.layer.close(index); //再执行关闭
-                            parent.location.reload();
-                            // return false;
-                        }
-                    });
-
-                    return false;
-                });
-            //监听提交
-            form.on('submit(O_add)',
-                function (data) {
-                    console.log("=== submit(add) ==");
-                    loading = layer.load(0, {
-                        shade: false,
-                        time: 99 * 1000
-                    });
-                    var T_sompensate_list = [];
-                    T_sompensate_list.push({
-                        "id": parseInt(Id),
-                        "T": parseFloat(data.field.O_T),
-                        "RH": parseFloat(data.field.O_RH)
-                    })
-                    $.ajax({
-                        type: 'POST',
-                        url: 'Pu_DeviceParameter_Compensate',//发送请求】
-                        data: {
-                            User_tokey: $.cookie('User_tokey'),
-                            SN: Sn,
-                            T_sompensate_list: JSON.stringify(T_sompensate_list)
-
-
-                        },
-                        success: function (result) {
-                            console.log(result)
-
-
-                            // return false;
-                        }
-                    });
-
-                    return false;
-                });
-            {{end}}
-
-            // //监听指定开关
-            // form.on('switch(switchTest)', function(data){
-            //     layer.msg('开关checked:'+ (this.checked ? 'true' : 'false'), {
-            //         offset: '6px'
-            //     });
-            //     layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF', data.othis)
-            // });
-
-            //表单取值
-            // layui.$('#LAY-component-form-getval').on('click', function(){
-            //     var data = form.val('example');
-            //     alert(JSON.stringify(data));
-            // });
-
-
-
-            var Sn = getQueryString("Sn")
-            var Id = getQueryString("Id")
-            $("#T_devName").html(getQueryString("Sn_name"))
-
-
-
-        });
-</script>
-
-</body>
-<style>
-    .tab_show {
-        background-color: #CCE9FF;
-        border-radius: 5px;
-        padding: 4px;
-    }
-</style>
-</html>

+ 0 - 765
views/Device/Device_Sensor-_.html

@@ -1,765 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm" style="overflow-y: hidden;">
-
-<head>
-    <meta charset="UTF-8">
-
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-    <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    <script src="https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js"></script>
-    <script src="https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]--></head>
-
-<body>
-<div class="layui-fluid">
-    <div class="layui-row" id="tab_1">
-
-        <div class="layui-row">
-            <button class="layui-btn  layui-btn-normal" style="float: right" onclick="tab_2()">
-                <i class="iconfont" style="margin-right: 4px">&#xe6ae;</i>配置参数
-            </button>
-
-            <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                <legend>实时数据</legend>
-            </fieldset>
-            <div style="margin-left: 40px;font-size: 20px">
-                设备名称:<span id="T_devName" class="tab_show" style="margin-right: 10px;"></span>
-                设备SN:<span id="T_sn" class="tab_show">{{.DeviceSensor.T_sn}}</span>
-            </div>
-            <div style="margin-left: 40px;font-size: 20px;margin-top: 10px">
-                传感器名称:<span id="T_name" class="tab_show" style="margin-right: 10px;">{{.DeviceSensor.T_name}}</span>
-                传感器ID:<span id="T_id" class="tab_show">{{.DeviceSensor.T_id}}</span>
-            </div>
-            <div style="margin-left: 40px;font-size: 20px;margin-top: 10px">
-                是否启用传感器:<span class="tab_show" style="margin-right: 10px;">
-                            {{if eq .DeviceSensor.T_en 1}}
-                                启用
-                            {{end}}
-                            {{if eq .DeviceSensor.T_en 0}}
-                                停止
-                            {{end}}
-                        </span>
-                是否为闲置状态(空库,只监测不报警):<span class="tab_show" style="margin-right: 10px;">
-                            {{if eq .DeviceSensor.T_free 0}}
-                                正常
-                            {{end}}
-                            {{if eq .DeviceSensor.T_free 1}}
-                                闲置
-                            {{end}}
-                        </span>
-            </div>
-            <div style="margin-left: 40px;">
-                <div style="width: 100px;float: left;margin-right: 10px">
-                    {{if eq .DeviceSensor.T_err 0}}
-                    <img src="https://osscold.baozhida.cn/images/温湿度传感器-1.png" height="100" width="100"/>
-                    {{end}}
-                    {{if eq .DeviceSensor.T_err 1}}
-                    <img src="https://osscold.baozhida.cn/images/温湿度传感器-3.png" height="100" width="100"/>
-                    {{end}}
-
-                </div>
-                <div style="float: left;font-size: 20px">
-                    <div style="margin-top: 10px">
-                        <span id="T_t" style="width: 130px;float: left">温度:{{.DeviceSensor.T_t}}℃</span>
-                        <span id="T_Tlower" style="margin-right: 10px">限制:{{.DeviceSensor.T_Tlower}}℃</span> ~
-                        <span id="T_Tupper">{{.DeviceSensor.T_Tupper}}℃</span>
-                    </div>
-                    <div>
-                        <span id="T_rh" style="width: 130px;float: left">湿度:{{.DeviceSensor.T_rh}}%</span>
-                        <span id="T_RHlower" style="margin-right: 10px">限制:{{.DeviceSensor.T_RHlower}}%</span> ~
-                        <span id="T_RHupper">{{.DeviceSensor.T_RHupper}}%</span>
-                    </div>
-                    <div>
-                        <span id="T_time">更新时间:等待同步中.....</span><img style="margin-left: 2px"
-                                                                     src="https://osscold.baozhida.cn/images/等待.gif" height="20"
-                                                                     width="20"/>
-                    </div>
-
-                </div>
-            </div>
-        </div>
-
-    </div>
-
-    <div class="layui-row" id="tab_2">
-        <div class="layui-row">
-            <button class="layui-btn  layui-btn-normal" style="float: right" onclick="tab_1()">
-
-                <i class="iconfont" style="margin-right: 4px">&#xe6e6;</i>实时数据
-            </button>
-            <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
-                <legend >传感器参数</legend>
-            </fieldset>
-        </div>
-        <div class="layui-row">
-            <div class="layui-col-md7">
-
-                <form class="layui-form" action="" lay-filter="example">
-                    <div class="layui-form-item">
-
-                        <div class="layui-inline">
-                            <label class="layui-form-label">设备名称</label>
-                            <div class="layui-input-inline">
-                                <input type="text" id="S_devName  layui-disabled"  value="{{.Device.T_devName}}"  name="S_devName" autocomplete="off"
-                                       class="layui-input">
-                            </div>
-                            <div class="layui-input-inline">
-                                <input class="layui-input layui-disabled" value="{{.Device.T_sn}}" type="text" id="S_sn" name="S_sn"
-                                       autocomplete="off"
-                                       class="layui-input">
-                            </div>
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-
-                        <div class="layui-inline">
-                            <label class="layui-form-label">传感器名称</label>
-                            <div class="layui-input-inline">
-                                <input type="text" id="S_name" value="{{.DeviceSensor.T_name}}" name="S_name" autocomplete="off" class="layui-input">
-                            </div>
-                            <div class="layui-input-inline" style="width: 50px">
-                                <input class="layui-input layui-disabled" type="text" value="{{.DeviceSensor.T_id}}" id="S_id" name="S_id"
-                                       autocomplete="off"
-                                       class="layui-input">
-                            </div>
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <div class="layui-inline">
-                            <label class="layui-form-label">温度范围 ℃</label>
-                            <div class="layui-input-inline" style="width: 100px;">
-                                <input type="text" name="S_Tlower" autocomplete="off" class="layui-input">
-                            </div>
-                            <div class="layui-form-mid">-</div>
-                            <div class="layui-input-inline" style="width: 100px;">
-                                <input type="text" name="S_Tupper" autocomplete="off" class="layui-input">
-                            </div>
-
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <div class="layui-inline">
-                            <label class="layui-form-label">湿度范围 %</label>
-                            <div class="layui-input-inline" style="width: 100px;">
-                                <input type="text" name="S_RHlower" autocomplete="off" class="layui-input">
-                            </div>
-                            <div class="layui-form-mid">-</div>
-                            <div class="layui-input-inline" style="width: 100px;">
-                                <input type="text" name="S_RHupper" autocomplete="off" class="layui-input">
-                            </div>
-
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label class="layui-form-label" style="width: 60px;">启用</label>
-                        <div class="layui-input-block">
-                            <input type="checkbox" id="S_en" name="S_en" lay-filter="switchTest" lay-skin="switch"
-                                   lay-text="开|关">
-                            <div class="layui-unselect layui-form-switch" lay-skin="_switch"><em>关</em><i></i></div>
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label class="layui-form-label" style="width: 60px;">空库</label>
-                        <div class="layui-input-block">
-                            <input type="checkbox" id="S_free" name="S_free" lay-filter="switchTest" lay-skin="switch"
-                                   lay-text="开|关">
-                            <div class="layui-unselect layui-form-switch" lay-skin="_switch"><em>关</em><i></i></div>
-                        </div>
-                    </div>
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-                        <button id="Pu_DeviceParameter_Sensor_id" type="submit" class="layui-btn  layui-btn-normal" lay-submit="" lay-filter="add">离线-配置参数(温湿度范围 必填项)</button>
-
-                    </div>
-                </form>
-
-                <hr>
-                <div class="layui-form-item" style="margin-top: 50px;">
-                    <div class="layui-inline">
-                        <label class="layui-form-label">实时数据显示排序:</label>
-                        <div class="layui-input-inline" style="width: 100px;">
-                            <input type="text" value="{{.DeviceSensor.T_sort}}" id="T_sort" autocomplete="off" class="layui-input">
-                        </div>
-                        <div class="layui-form-mid"></div>
-                        <div class="layui-input-inline" style="width: 100px;">
-                            <button class="layui-btn  layui-btn-normal" onclick="UpDeviceSensor_Tsort()" >设置排序</button>
-                        </div>
-                    </div>
-                </div>
-                <hr>
-                <button class="layui-btn  layui-btn-danger" onclick="f_Device_Parameter_Del()" >删除此设备</button>
-
-            </div>
-            <div class="layui-col-md5">
-                    <fieldset class="layui-elem-field layui-field-title" style="margin-top: -10px;">
-                        <legend>最近修改记录</legend>
-                    </fieldset>
-
-                    {{range $index, $elem := .DeviceSensorParameter_lite}}
-
-                    <div class="layui-inline" style="margin-left: 40px;margin-bottom: 20px">
-                        <span style="margin-right: 20px">操作人UUID:{{$elem.T_uuid}}</span>
-                        <span style="margin-right: 20px">设备名称:{{$elem.T_name}}</span>
-                        <span style="margin-right: 20px">温度下限:{{$elem.T_Tlower}}</span>
-                        <span style="margin-right: 20px">温度上限:{{$elem.T_Tupper}}</span>
-                        <span style="margin-right: 20px">湿度下限:{{$elem.T_RHlower}}</span>
-                        <span style="margin-right: 20px">湿度上限:{{$elem.T_RHupper}}</span>
-                        <span style="margin-right: 20px">是否启用传感器:{{$elem.T_en}}</span>
-                        <span style="margin-right: 20px">监测点是否为闲置状态(:{{$elem.T_free}}</span>
-                        <span style="margin-right: 20px">修改时间:{{$elem.CreateTime}}</span>
-                    </div>
-                    {{end}}
-            </div>
-        </div>
-
-    </div>
-</div>
-<script>
-    //获取url中的参数
-    function getQueryString(name) {
-        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
-        var r = window.location.search.substr(1).match(reg);
-        if (r != null)
-            return decodeURIComponent(r[2]);
-        return null;
-    }
-
-    function timestampToTime(timestamp) {
-        var date = new Date(timestamp * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
-        Y = date.getFullYear() + '-';
-        M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
-        D = date.getDate() + ' ';
-        h = date.getHours() + ':';
-        m = date.getMinutes() + ':';
-        s = date.getSeconds();
-        return Y + M + D + h + m + s;
-    }
-
-    $("#tab_1").hide()
-    $("#tab_2").show()
-
-    function tab_1() {
-        $("#tab_1").show()
-        $("#tab_2").hide()
-    }
-
-    function tab_2() {
-        $("#tab_1").hide()
-        $("#tab_2").show()
-    }
-
-
-    function f_Device_Parameter_Del() {
-        // console.log(getQueryString("Sn"),getQueryString("Id"))
-        //
-        $.ajax({
-            type: 'POST',
-            url: 'Device_Parameter_Del',//发送请求】
-            data: {
-                Sn: getQueryString("Sn"),
-                Id: getQueryString("Id")
-            },
-            success: function (result) {
-                console.log(result)
-
-                //关闭当前frame
-                parent.layer.close(parent.layer.getFrameIndex(window.name));
-                parent.location.reload();
-
-                // return false;
-            }
-        });
-    }
-    function UpDeviceSensor_Tsort() {
-        // console.log(getQueryString("Sn"),getQueryString("Id"))
-        //
-        $.ajax({
-            type: 'POST',
-            url: '../../Device/UpDeviceSensor_Tsort',//发送请求】
-            data: {
-                Sn: getQueryString("Sn"),
-                Id: getQueryString("Id"),
-                T_sort: $("#T_sort").val()
-            },
-            success: function (result) {
-                console.log(result)
-
-                //关闭当前frame
-                parent.layer.close(parent.layer.getFrameIndex(window.name));
-                parent.location.reload();
-
-                // return false;
-            }
-        });
-    }
-    f_Read_DeviceParameter_is = true
-    function f_Read_DeviceParameter() {
-        if(f_Read_DeviceParameter_is){
-            console.log("Read_DeviceSensorParameter",getQueryString("Sn"))
-            $.ajax({
-                type: 'POST',
-                url: 'Read_DeviceSensorParameter',//发送请求
-                data: {
-                    SN:getQueryString("Sn"),
-                },
-                success: function(result) {
-
-                }
-            });
-            f_Read_DeviceParameter_is = false
-        }
-
-    }
-
-    layui.use(['form', 'layer', "layedit"],
-
-        function () {
-            $ = layui.jquery;
-            var form = layui.form,
-                layer = layui.layer;
-            var layedit = layui.layedit
-
-            layedit.set({
-                uploadImage: {
-                    url: '/UpFile' //接口url
-                }
-            });
-
-            //构建一个默认的编辑器
-            var index = layedit.build('T_text', {
-                height: 580 //设置编辑器高度,
-
-            });
-            //监听提交
-            form.on('submit(add)',
-                function (data) {
-                    console.log("=== submit(add) ==");
-                    loading = layer.load(0, {
-                        shade: false,
-                        time: 99 * 1000
-                    });
-                    console.log(data);
-                    S_en = 0
-                    if (data.field.S_en != undefined) {
-                        S_en = 1
-                    }
-                    S_free = 0
-                    if (data.field.S_free != undefined) {
-                        S_free = 1
-                    }
-
-                    var T_sensor_list = [];
-                    T_sensor_list.push({
-                        "id": parseInt(Id),
-                        "name": data.field.S_name,
-                        "Tlower": parseFloat(data.field.S_Tlower),
-                        "Tupper": parseFloat(data.field.S_Tupper),
-                        "RHlower": parseFloat(data.field.S_RHlower),
-                        "RHupper": parseFloat(data.field.S_RHupper),
-                        "en": S_en,
-                        "free": S_free
-                    })
-                    url_ = "Pu_DeviceParameter_Sensor_Cache"
-                    if(ok_websocket_data){
-                        url_ = "Pu_DeviceParameter_Sensor"
-                    }else {
-                        if(data.field.S_Tlower.length == 0 || data.field.S_Tupper.length == 0){
-                            layer.msg('(离线设置)温度范围 必须设置');
-                            return false;
-                        }
-                        if(data.field.S_RHlower.length == 0 || data.field.S_RHupper.length == 0){
-                            layer.msg('(离线设置)湿度范围 必须设置');
-                            return false;
-                        }
-                    }
-                    $.ajax({
-                        type: 'POST',
-                        url: url_,//发送请求】
-                        data: {
-                            User_tokey: $.cookie('User_tokey'),
-                            SN: Sn,
-                            T_id: parseInt(Id),
-                            T_sensor_list: JSON.stringify(T_sensor_list)
-                        },
-                        success: function (result) {
-                            console.log(result)
-
-
-                            if(ok_websocket_data){
-                                loading = layer.load(0, {
-                                    shade: false,
-                                    time: 99 * 1000
-                                });
-                            }else {
-                                //关闭当前frame
-                                parent.layer.close(parent.layer.getFrameIndex(window.name));
-
-                            }
-
-                            // return false;
-                        }
-                    });
-
-                    return false;
-                });
-            {{if eq $.Admin_Power.Power_DeviceSensor_Compensate_e 1}}
-
-
-            //监听提交
-            form.on('submit(O_add)',
-                function (data) {
-                    console.log("=== submit(add) ==");
-                    loading = layer.load(0, {
-                        shade: false,
-                        time: 99 * 1000
-                    });
-                    var T_sompensate_list = [];
-                    T_sompensate_list.push({
-                        "id": parseInt(Id),
-                        "T": parseFloat(data.field.O_T),
-                        "RH": parseFloat(data.field.O_RH)
-                    })
-                    $.ajax({
-                        type: 'POST',
-                        url: 'Pu_DeviceParameter_Compensate',//发送请求】
-                        data: {
-                            User_tokey: $.cookie('User_tokey'),
-                            SN: Sn,
-                            T_sompensate_list: JSON.stringify(T_sompensate_list)
-
-
-                        },
-                        success: function (result) {
-                            console.log(result)
-
-
-                            // return false;
-                        }
-                    });
-
-                    return false;
-                });
-            {{end}}
-
-            // //监听指定开关
-            // form.on('switch(switchTest)', function(data){
-            //     layer.msg('开关checked:'+ (this.checked ? 'true' : 'false'), {
-            //         offset: '6px'
-            //     });
-            //     layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF', data.othis)
-            // });
-
-            //表单取值
-            // layui.$('#LAY-component-form-getval').on('click', function(){
-            //     var data = form.val('example');
-            //     alert(JSON.stringify(data));
-            // });
-
-            var loading = layer.load(0, {
-                shade: false,
-                time: 99 * 1000
-            });
-
-
-            var timestamp_V = (new Date()) / 1000;
-            var Sn = getQueryString("Sn")
-            var Id = getQueryString("Id")
-            $("#T_devName").html(getQueryString("Sn_name"))
-
-            var websocket = null;
-            var ok_websocket1 = false;
-            var ok_websocket2 = false;
-            var ok_websocket_data = false;
-
-
-            function Timeout_1 (){
-                //要执行的代码
-                if(!ok_websocket1){
-                    layer.open({
-                        text:"连接失败",
-                        btn: '立即重新登录',
-                        content: "请退出账号重新登录!",
-                        yes: function(index, layero){
-                            //do something
-                            window.parent.parent.location.href ='../Login';
-                            layer.close(index); //如果设定了yes回调,需进行手工关闭
-                        }
-                    });
-                }
-
-            }
-            setTimeout(Timeout_1,8000);//5秒后执行
-
-
-            function Timeout_2 (){
-                //要执行的代码
-                if(!ok_websocket2){
-                    layer.open({
-                        text:"无响应",
-                        btn: '重新试试',
-                        content: "设备主机无响应,请重新试试,若有疑问请联系工作人员!",
-                        yes: function(index, layero){
-                            //do something
-
-                            layer.close(index); //如果设定了yes回调,需进行手工关闭
-                        }
-                    });
-                }
-
-            }
-            setTimeout(Timeout_2,20000);//5秒后执行
-
-            //判断当前浏览器是否支持WebSocket
-            if ('WebSocket' in window) {
-                url = window.location.host
-                console.log("url:",url)
-                if(url.indexOf("baozhida") != -1){
-                    websocket = new WebSocket("wss://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
-                }else {
-                    websocket = new WebSocket("ws://"+window.location.host+"/ws/join?User_tokey="+$.cookie('User_tokey'));
-                }
-            } else {
-                alert('Dont support websocket')
-            }
-
-            console.log(getQueryString("Sn"))
-
-            //连接发生错误的回调方法
-            websocket.onerror = function () {
-                console.log("error");
-            };
-
-            //连接成功建立的回调方法
-            websocket.onopen = function () {
-                console.log("open");
-                send("{\"Sn\":\"" + getQueryString("Sn") + "\"}")
-                // f_Read_DeviceParameter();
-
-
-            };
-
-            //接收到消息的回调方法
-            websocket.onmessage = function (event) {
-
-                console.log(event.data)
-                var obj = JSON.parse(event.data);
-                console.log(obj.type)
-                ok_websocket1 = true
-                if(obj.Code == 200){
-                    f_Read_DeviceParameter();
-                    console.log(getQueryString("Sn").length , "KF00360016323051023".length)
-                    if(getQueryString("Sn").length > "KF00360016323051023".length){
-                        setTimeout(function(){
-                            console.log("f_Read_DeviceParameter  1200")
-                            f_Read_DeviceParameter();
-                        },1200);
-                        setTimeout(function(){
-                            console.log("f_Read_DeviceParameter  1400")
-                            f_Read_DeviceParameter();
-                        },1400);
-                        setTimeout(function(){
-                            console.log("f_Read_DeviceParameter  1600")
-                            f_Read_DeviceParameter();
-                        },1600);
-                    }
-                }
-
-                if (obj.sn != Sn) {
-                    return
-                }
-                // if (obj.type == 0) {
-                //     for (let i = 0; i < obj.sensor.length; i++) {
-                //
-                //         console.log("== ",Number(obj.sensor[i].id) , Number(Id))
-                //         if (Number(obj.sensor[i].id) == Number(Id)) {
-                //             console.log("== ok ")
-                //             // T_en =false
-                //             // if(obj.sensor[i].en == 1){
-                //             //     T_en =true
-                //             // }
-                //             // T_free =false
-                //             // if(obj.sensor[i].free == 1){
-                //             //     T_free =true
-                //             // }
-                //             if (timestamp_V != obj.sensor[i].UT) {
-                //
-                //
-                //                 $("#T_t").html("温度:" + obj.sensor[i].T.toFixed(2) + "℃")
-                //                 $("#T_rh").html("湿度:" + obj.sensor[i].RH.toFixed(1) + "%")
-                //                 $("#T_Tlower").html("限制:" + obj.sensor[i].Tlower + "℃")
-                //                 $("#T_Tupper").html(obj.sensor[i].Tupper + "℃")
-                //                 $("#T_RHlower").html("限制:" + obj.sensor[i].RHlower + "%")
-                //                 $("#T_RHupper").html(obj.sensor[i].RHupper + "%")
-                //                 $("#T_time").html("更新时间:" + timestampToTime(obj.sensor[i].UT) + "   更新间隔:" + Math.abs(timestamp_V - obj.sensor[i].UT).toFixed(0) + "s")
-                //
-                //                 console.log(timestamp_V, obj.sensor[i].UT, "   更新间隔:" + (timestamp_V - obj.sensor[i].UT) + "s")
-                //                 timestamp_V = obj.sensor[i].UT
-                //
-                //
-                //             }
-                //
-                //
-                //
-                //             break
-                //         }
-                //     }
-                // }
-                if (obj.type == 3) {
-
-                    switch (obj.msid % 10) {
-                        case 1:
-                            // obj.base.devName
-                            // form.val('example', {
-                            //     "S_sn": obj.sn
-                            //     , "S_devName": obj.base.devName
-                            //
-                            // });
-                            break
-                        case 2:
-                            ok_websocket2 = true
-                            for (let i = 0; i < obj.sensor.length; i++) {
-                                console.log("== ",Number(obj.sensor[i].id) , Number(Id))
-                                if (Number(obj.sensor[i].id) == Number(Id)) {
-                                    console.log("== ok ")
-                                    ok_websocket_data = true
-                                    $("#Pu_DeviceParameter_Sensor_id").html("在线-修改数据")
-                                    T_en = false
-                                    if (obj.sensor[i].en == 1) {
-                                        T_en = true
-                                    }
-                                    T_free = false
-                                    if (obj.sensor[i].free == 1) {
-                                        T_free = true
-                                    }
-                                    if(obj.sensor[i].name == "*") {
-                                        form.val('example', {
-                                            "S_id": Id
-                                            , "S_Tlower": obj.sensor[i].Tlower
-                                            , "S_Tupper": obj.sensor[i].Tupper
-                                            , "S_RHlower": obj.sensor[i].RHlower
-                                            , "S_RHupper": obj.sensor[i].RHupper
-                                            , "S_en": T_en
-                                            , "S_free": T_free
-                                        });
-                                    }else {
-                                        form.val('example', {
-                                            "S_id": Id
-                                            , "S_name": obj.sensor[i].name
-                                            , "S_Tlower": obj.sensor[i].Tlower
-                                            , "S_Tupper": obj.sensor[i].Tupper
-                                            , "S_RHlower": obj.sensor[i].RHlower
-                                            , "S_RHupper": obj.sensor[i].RHupper
-                                            , "S_en": T_en
-                                            , "S_free": T_free
-                                        });
-                                    }
-
-                                    layer.close(loading)
-
-                                }
-                            }
-
-                            break
-
-
-                    }
-
-                }
-                if (obj.type == 4) {
-                    switch (obj.msid % 10) {
-                        case 2:
-
-
-
-                            if(obj.set == 1){
-                                layer.close(loading)
-                                layer.msg('配置参数成功!', {
-                                    offset: '6px'
-                                });
-
-                                //关闭当前frame
-                                parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                parent.location.reload();
-                            }else {
-                                layer.close(loading)
-                                layer.msg('配置参数失败!', {
-                                    offset: '6px'
-                                });
-                            }
-
-
-
-
-                            break
-                        case 3:
-                            layer.close(loading)
-                            layer.msg('配置参数成功!', {
-                                offset: '6px'
-                            });
-
-                            //关闭当前frame
-                            parent.layer.close(parent.layer.getFrameIndex(window.name));
-                            parent.location.reload();
-
-
-                            break
-                    }
-
-                }
-                //
-                // if(obj && "memberstatus"==obj.type){
-                //     console.log(obj.data)
-                //     table.reload('test', {
-                //         elem: '#test'
-                //         ,data: JSON.parse(obj.data)
-                //     });
-                // }
-            };
-
-            //连接关闭的回调方法
-            websocket.onclose = function () {
-                console.log("close");
-            };
-
-            //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
-            window.onbeforeunload = function () {
-                websocket.close();
-                console.log("onbeforeunload");
-            };
-
-            //关闭连接
-            function closeWebSocket() {
-                websocket.close();
-                console.log("onbeforeunload");
-                window.clearInterval(intervalId);
-            }
-
-            //发送消息
-            function send(message) {
-                websocket.send(message);
-            }
-
-        });
-</script>
-
-</body>
-<style>
-    .tab_show {
-        background-color: #CCE9FF;
-        border-radius: 5px;
-        padding: 4px;
-    }
-</style>
-</html>

+ 0 - 138
views/Device/TemplateClass-.html

@@ -1,138 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <title>欢迎页面-X-admin2.2</title>
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/lib/layui/layui.css">
-        <script type="text/javascript" src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-            <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-            <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]--></head>
-    
-    <body>
-        <div class="layui-fluid">
-            <div class="layui-row">
-                <form class="layui-form">
-                    <div class="layui-form-item">
-                        <label for="T_name" class="layui-form-label">
-                            <span class="x-red">*</span>分类名称</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }}
-                                   value="{{.T.T_name}}"
-                                   {{end}} type="text" id="T_name" name="T_name" required="" lay-verify="required" autocomplete="off" class="layui-input"></div>
-                    </div>
-
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-                        <button class="layui-btn layui-btn-normal" lay-filter="add" lay-submit="">提交</button>
-                    </div>
-
-
-
-                </form>
-            </div>
-        </div>
-        <script>
-
-            layui.use(['form', 'layer',"layedit"],
-            function() {
-                $ = layui.jquery;
-                var form = layui.form,
-                layer = layui.layer;
-                //监听提交
-                form.on('submit(add)',
-                    function(data) {
-                        console.log(data);
-                        //发异步,把数据提交给php
-                        layer.alert("操作成功", {
-                            icon: 6
-                        },
-                        function() {
-                            // 获得frame索引
-                            var index = parent.layer.getFrameIndex(window.name);
-
-                            //关闭当前frame
-                            parent.layer.close(index);
-                            parent.location.reload();
-                        });
-
-                        $.ajax({
-                            type: 'POST',
-                            url: 'Class_Post',//发送请求
-                            data: {
-                                Id:"{{.id}}",
-                                T_name:data.field.T_name,
-
-                                },
-                            success: function(result) {
-                                console.log(result)
-                            }
-                        });
-
-                        return false;
-                    });
-                });
-        </script>
-        <script>
-            var _img = ""
-
-            layui.use('upload', function(){
-                var $ = layui.jquery
-                    ,upload = layui.upload;
-
-                //普通图片上传
-                var uploadInst = upload.render({
-                    elem: '#test1'
-                    ,url: '/UpFile' //改成您自己的上传接口
-                    ,before: function(obj){
-                        //预读本地文件示例,不支持ie8
-                        obj.preview(function(index, file, result){
-                            $('#demo1').attr('src', result); //图片链接(base64)
-                        });
-                    }
-                    ,done: function(res){
-
-                        console.log(res)
-                        //如果上传失败
-                        if(res.code != 0){
-                            return layer.msg('上传失败');
-                        }
-                        _img = res.data.src
-                        console.log(_img)
-                        //上传成功
-                    }
-                    ,error: function(){
-                        console.log("error")
-
-                        //演示失败状态,并实现重传
-                        var demoText = $('#demoText');
-                        demoText.html('<span style="color: #ff5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
-                        demoText.find('.demo-reload').on('click', function(){
-                            uploadInst.upload();
-                        });
-                    }
-                });
-
-                //绑定原始文件域
-                upload.render({
-                    elem: '#test20'
-                    ,url: 'https://httpbin.org/post' //改成您自己的上传接口
-                    ,done: function(res){
-                        layer.msg('上传成功');
-                        console.log(res)
-                    }
-                });
-
-            });
-        </script>
-    </body>
-
-</html>

+ 0 - 157
views/Device/TemplateClass.html

@@ -1,157 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <title>欢迎页面-X-admin2.2</title>
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
-        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-          <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-          <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]-->
-    </head>
-
-    <body>
-        <div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-            <a class="layui-btn layui-btn-normal " style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-                <i class="layui-icon layui-icon-normal" style="line-height:30px"></i>
-            </a>
-        </div>
-        <div class="layui-fluid">
-            <div class="layui-row layui-col-space15">
-                <div class="layui-col-md12">
-                    <div class="layui-card">
-<!--                        <div class="layui-card-body ">-->
-<!--                               <hr>-->
-<!--&lt;!&ndash;                            <blockquote class="layui-elem-quote">每个tr 上有两个属性 cate-id='1' 当前分类id fid='0' 父级id ,顶级分类为 0,有子分类的前面加收缩图标<i class="layui-icon x-show" status='true'>&#xe623;</i></blockquote>&ndash;&gt;-->
-<!--                        </div>-->
-                        <div class="layui-card-header">
-                            <button class="layui-btn layui-btn-normal layui-btn-xs"  onclick="xadmin.open('添加','Class_?id=0',400,400)" ><i class="layui-icon">&#xe61f;</i>添加分类</button>
-
-                        </div>
-                        <div class="layui-card-body ">
-                            <table class="layui-table layui-form" >
-                              <thead>
-                                <tr>
-<!--                                  <th width="20">-->
-<!--                                    <input type="checkbox" name="" lay-skin="primary">-->
-<!--                                  </th>-->
-<!--                                  <th width="70">ID</th>-->
-                                  <th width="250">栏目名</th>
-<!--                                  <th width="50">排序</th>-->
-<!--                                  <th width="80">状态</th>-->
-                                  <th >操作</th>
-                              </thead>
-                              <tbody class="x-cate">
-
-                              {{range $index, $elem := .List}}
-
-                                    <tr cate-id='{{$elem.Id}}' fid='0' >
-                                      <td>
-
-                                            <i class="layui-icon ">&#xe65b;</i>
-
-                                          {{$elem.T_name}}
-                                          
-                                      </td>
-
-                                      <td class="td-manage">
-                                          <button class="layui-btn layui-btn layui-btn-xs"  onclick="xadmin.open('编辑','Class_?id={{$elem.Id}}',400,400)" ><i class="layui-icon">&#xe642;</i>编辑</button>
-                                          <button class="layui-btn-danger layui-btn layui-btn-xs"  onclick="member_del(this,'{{$elem.Id}}')" href="javascript:;" ><i class="layui-icon">&#xe640;</i>删除</button>
-                                      </td>
-                                  </tr>
-
-                              {{end}}
-
-
-                              </tbody>
-                            </table>
-                        </div>
-
-                    </div>
-                </div>
-            </div>
-        </div>
-        <script>
-          layui.use(['form'], function(){
-            form = layui.form;
-            
-          });
-
-           /*用户-删除*/
-          function member_del(obj,id){
-              layer.confirm('确认要删除吗?',function(index){
-                  //发异步删除数据
-                  $(obj).parents("tr").remove();
-                  $.ajax({
-                      type: 'POST',
-                      url: 'Class_Del',//发送请求
-                      data: {Id:id},
-                      success: function(result) {
-                          console.log(result)
-                          if (result.Code == 200 ){
-                              layer.msg('已删除!', {
-                                  icon: 1,
-                                  time: 2000
-                              });
-                              window.location.reload();
-                          }else {
-                              layer.msg('删除失败!', {
-                                  time: 2000
-                              });
-                          }
-
-                      }
-                  });
-
-              });
-          }
-
-          // 分类展开收起的分类的逻辑
-          // 
-          $(function(){
-            $("tbody.x-cate tr[fid!='0']").hide();
-            // 栏目多级显示效果
-            $('.x-show').click(function () {
-                if($(this).attr('status')=='true'){
-                    $(this).html('&#xe625;'); 
-                    $(this).attr('status','false');
-                    cateId = $(this).parents('tr').attr('cate-id');
-                    $("tbody tr[fid="+cateId+"]").show();
-               }else{
-                    cateIds = [];
-                    $(this).html('&#xe623;');
-                    $(this).attr('status','true');
-                    cateId = $(this).parents('tr').attr('cate-id');
-                    getCateId(cateId);
-                    for (var i in cateIds) {
-                        $("tbody tr[cate-id="+cateIds[i]+"]").hide().find('.x-show').html('&#xe623;').attr('status','true');
-                    }
-               }
-            })
-          })
-
-          var cateIds = [];
-          function getCateId(cateId) {
-              $("tbody tr[fid="+cateId+"]").each(function(index, el) {
-                  id = $(el).attr('cate-id');
-                  cateIds.push(id);
-                  getCateId(id);
-              });
-          }
-   
-        </script>
-    </body>
-</html>

+ 0 - 160
views/Device/TemplateClassPlan.html

@@ -1,160 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <title>欢迎页面-X-admin2.2</title>
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
-        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-          <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-          <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]-->
-    </head>
-
-    <body>
-        <div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-            <a class="layui-btn layui-btn-normal " style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-                <i class="layui-icon layui-icon-normal" style="line-height:30px"></i>
-            </a>
-        </div>
-        <div class="layui-fluid">
-            <div class="layui-row layui-col-space15">
-                <div class="layui-col-md12">
-                    <div class="layui-card">
-<!--                        <div class="layui-card-body ">-->
-<!--                               <hr>-->
-<!--&lt;!&ndash;                            <blockquote class="layui-elem-quote">每个tr 上有两个属性 cate-id='1' 当前分类id fid='0' 父级id ,顶级分类为 0,有子分类的前面加收缩图标<i class="layui-icon x-show" status='true'>&#xe623;</i></blockquote>&ndash;&gt;-->
-<!--                        </div>-->
-                        <div class="layui-card-header">
-
-                            <div class="layui-form-item">
-                                <label class="layui-form-label">
-                                    <span class="x-red">*</span>权限</label>
-                                <div class="layui-input-inline">
-                                    <select  lay-filter="Admin_power" id="Admin_power" name="Admin_power" class="valid" >
-                                        {{range $index, $elem := .List}}
-                                        <option value="{{$elem.Id}}" {{if gt $.id 0 }}
-                                                {{if eq $.Id $elem.Id }}
-                                                selected
-                                                {{end}}
-                                                {{end}}
-                                        >{{$elem.T_name}}</option>
-                                        {{end}}
-
-                                    </select>
-                                </div>
-                            </div>
-
-
-                            <button class="layui-btn layui-btn-normal layui-btn-xs"  onclick="xadmin.open('添加','Class_?id=0',400,400)" ><i class="layui-icon">&#xe61f;</i>添加分类</button>
-
-                        </div>
-                        <div class="layui-card-body ">
-                            <table class="layui-table layui-form" >
-                              <thead>
-                                <tr>
-<!--                                  <th width="20">-->
-<!--                                    <input type="checkbox" name="" lay-skin="primary">-->
-<!--                                  </th>-->
-<!--                                  <th width="70">ID</th>-->
-                                  <th width="250">栏目名</th>
-<!--                                  <th width="50">排序</th>-->
-<!--                                  <th width="80">状态</th>-->
-                                  <th >操作</th>
-                              </thead>
-                              <tbody class="x-cate">
-
-
-
-
-                              </tbody>
-                            </table>
-                        </div>
-
-                    </div>
-                </div>
-            </div>
-        </div>
-        <script>
-          layui.use(['form'], function(){
-            form = layui.form;
-            
-          });
-
-           /*用户-删除*/
-          function member_del(obj,id){
-              layer.confirm('确认要删除吗?',function(index){
-                  //发异步删除数据
-                  $(obj).parents("tr").remove();
-                  $.ajax({
-                      type: 'POST',
-                      url: 'Class_Del',//发送请求
-                      data: {Id:id},
-                      success: function(result) {
-                          console.log(result)
-                          if (result.Code == 200 ){
-                              layer.msg('已删除!', {
-                                  icon: 1,
-                                  time: 2000
-                              });
-                              window.location.reload();
-                          }else {
-                              layer.msg('删除失败!', {
-                                  time: 2000
-                              });
-                          }
-
-                      }
-                  });
-
-              });
-          }
-
-          // 分类展开收起的分类的逻辑
-          // 
-          $(function(){
-            $("tbody.x-cate tr[fid!='0']").hide();
-            // 栏目多级显示效果
-            $('.x-show').click(function () {
-                if($(this).attr('status')=='true'){
-                    $(this).html('&#xe625;'); 
-                    $(this).attr('status','false');
-                    cateId = $(this).parents('tr').attr('cate-id');
-                    $("tbody tr[fid="+cateId+"]").show();
-               }else{
-                    cateIds = [];
-                    $(this).html('&#xe623;');
-                    $(this).attr('status','true');
-                    cateId = $(this).parents('tr').attr('cate-id');
-                    getCateId(cateId);
-                    for (var i in cateIds) {
-                        $("tbody tr[cate-id="+cateIds[i]+"]").hide().find('.x-show').html('&#xe623;').attr('status','true');
-                    }
-               }
-            })
-          })
-
-          var cateIds = [];
-          function getCateId(cateId) {
-              $("tbody tr[fid="+cateId+"]").each(function(index, el) {
-                  id = $(el).attr('cate-id');
-                  cateIds.push(id);
-                  getCateId(id);
-              });
-          }
-   
-        </script>
-    </body>
-</html>

+ 0 - 204
views/GoodsOrder/GoodsOrder-.html

@@ -1,204 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm" style="overflow-y: hidden;">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-        <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-            <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-            <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]--></head>
-    
-    <body>
-        <div class="layui-fluid">
-            <div class="layui-row">
-                <form class="layui-form" lay-filter="example1">
-                    <div class="layui-form-item" style="margin-top: 20px">
-                        <label for="T_orderid" class="layui-form-label">订单号</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }} value="{{.Date.T_orderid}}" {{end}}
-                                   type="text" id="T_orderid" name="T_orderid" required="" autocomplete="off" class="layui-input"></div>
-                    </div>
-                    <div class="layui-form-item" style="margin-top: 20px">
-                        <label for="T_outorderid" class="layui-form-label">出库订单号</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }} value="{{.Date.T_outorderid}}" {{end}}
-                                   type="text" id="T_outorderid" name="T_outorderid" required="" autocomplete="off" class="layui-input"></div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label class="layui-form-label">
-                            设备编号</label>
-                        <div class="layui-input-inline">
-                            <select id="T_sn" name="T_sn" class="valid" >
-                                {{range $index, $elem := .Device_lite}}
-                                <option value="{{$elem.T_sn}}" {{if gt $.id 0 }}
-                                        {{if eq $.Date.T_sn $elem.T_sn }}
-                                        selected
-                                        {{end}}
-                                        {{end}}
-                                >{{$elem.T_devName}}</option>
-                                {{end}}
-
-                            </select>
-                        </div>
-                    </div>
-
-                    <div class="layui-form-item" style="margin-top: 20px">
-                        <label for="T_receiving" class="layui-form-label">收货单位</label>
-                        <div class="layui-input-inline"  style="width: 250px;">
-                            <input {{if gt .id 0 }} value="{{.Date.T_receiving}}" {{end}}
-                                   type="text" id="T_receiving" name="T_receiving" required="" autocomplete="off" class="layui-input"></div>
-                    </div>
-
-                    <div class="layui-form-item" style="margin-top: 20px">
-                        <label for="T_orderid" class="layui-form-label">送货时间</label>
-                        <div class="layui-input-inline "  style="width: 250px;">
-                            <input class="layui-input lay-date" autocomplete="off" placeholder="起运时间" name="T_start_Ut" id="T_start_Ut" lay-key="1">
-                        </div>
-                    </div>
-
-                    <div class="layui-form-item" style="margin-top: 20px">
-                        <div >
-                            <label for="T_orderid" class="layui-form-label">起运温度</label>
-                            <div class="layui-input-inline" style="width: 65px;">
-                                <input {{if gt .id 0 }} value="{{.Date.T_start_Ut_T}}" {{end}}
-                                       type="text" id="T_start_Ut_T" name="T_start_Ut_T" required="" autocomplete="off" class="layui-input"></div>
-                        </div>
-
-                        <div>
-                            <label for="T_end_Ut_T" class="layui-form-label">到达温度</label>
-                            <div class="layui-input-inline" style="width: 65px;">
-                                <input {{if gt .id 0 }} value="{{.Date.T_end_Ut_T}}" {{end}}
-                                       type="text" id="T_end_Ut_T" name="T_end_Ut_T" required="" autocomplete="off" class="layui-input"></div>
-                        </div>
-                    </div>
-
-
-                    <div class="layui-form-item layui-form-text">
-                        <label for="T_text" class="layui-form-label">详情</label>
-                        <div class="layui-input-block">
-
-                            <textarea name="T_text" id="T_text" class="layui-textarea">{{.Date.T_text}}</textarea>
-                        </div>
-                    </div>
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-<!--                        <label for="L_repass" class="layui-form-label"></label>-->
-                        <button class="layui-btn  layui-btn-normal" lay-filter="add" lay-submit="">提交</button></div>
-                </form>
-            </div>
-        </div>
-        <script>
-
-            layui.use(['form', 'layer',"layedit","laydate"],
-
-                function() {
-                    $ = layui.jquery;
-
-                    var form = layui.form;
-                    var layer = layui.layer;
-                    var layedit = layui.layedit
-                    var laydate = layui.laydate
-                    laydate.render({
-                        elem: '#T_start_Ut' //指定元素
-                        ,type: 'datetime'
-                        ,range: true
-                        ,trigger: 'click', // 新增这一行以解决
-                    });
-                    // layedit.set({
-                    //     uploadImage: {
-                    //         url: '/UpFile' //接口url
-                    //     }
-                    // });
-                    // //构建一个默认的编辑器
-                    // var index = layedit.build('T_text', {
-                    //     height: 140 //设置编辑器高度,
-                    //
-                    // });
-
-                    {{if gt .id 0 }}
-                    T_start_Ut = '{{.Date.T_start_Ut.Format "2006-01-02 15:04:05"}}'
-                    T_end_Ut = '{{.Date.T_end_Ut.Format "2006-01-02 15:04:05"}}'
-
-                    form.val('example1', {
-                        "T_start_Ut":T_start_Ut + " - " + T_end_Ut,
-
-                    });
-
-                    {{end}}
-
-
-
-                    //监听提交
-                    form.on('submit(add)',
-                        function(data) {
-                            console.log("=== submit(add) ==");
-                            console.log(data);
-
-                            T_start_Ut = ""
-                            T_end_Ut = ""
-                            if($("#T_start_Ut").val().length > 0){
-                                T_start_Ut = $("#T_start_Ut").val().split(" - ")[0]
-                                T_end_Ut = $("#T_start_Ut").val().split(" - ")[1]
-                            }
-
-                            $.ajax({
-                                type: 'POST',
-                                url: 'List_Post',//发送请求
-                                data: {
-                                    id:"{{.id}}",
-                                    T_orderid:data.field.T_orderid,
-                                    T_outorderid:data.field.T_outorderid,
-                                    T_sn:data.field.T_sn,
-                                    T_receiving:data.field.T_receiving,
-                                    T_start_Ut:T_start_Ut,
-                                    T_end_Ut:T_end_Ut,
-                                    T_start_Ut_T:data.field.T_start_Ut_T,
-                                    T_end_Ut_T:data.field.T_end_Ut_T,
-                                    T_text:data.field.T_text,
-                                },
-                                success: function(result) {
-                                    console.log(result)
-                                    if(result.Code == 200){
-                                        layer.msg("操作成功", {
-                                            icon: 1,
-                                            time: 2000
-                                        });
-                                        //关闭当前frame
-                                        // parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                        // parent.location.reload();
-
-                                        form.render('select');
-                                        // return false;
-                                    }else {
-                                        layer.msg("错误:"+result.Msg, {
-                                            icon: 2,
-                                            time: 2000
-                                        });
-                                    }
-
-
-
-                                }
-                            });
-
-                            return false;
-                        });
-
-                });
-        </script>
-
-
-    </body>
-
-</html>

+ 0 - 200
views/GoodsOrder/GoodsOrder.html

@@ -1,200 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    </head>
-    
-    <body>
-        <div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-            <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-                <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-            </a>
-        </div>
-        <div class="layui-fluid">
-            <div class="layui-row layui-col-space15">
-                <div class="layui-col-md12">
-                    <div class="layui-card">
-                        <div class="layui-card-body ">
-                            <form class="layui-form layui-col-space5">
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <input value="{{.Name}}" type="text" name="Name" placeholder="请输入 名称" autocomplete="off" class="layui-input"></div>
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach">
-                                        <i class="layui-icon">&#xe615;</i></button>
-                                </div>
-                            </form>
-                        </div>
-                        <div class="layui-card-header">
-<!--                            <button class="layui-btn layui-btn-danger" onclick="delAll()">-->
-<!--                                <i class="layui-icon"></i>批量删除</button>-->
-                            <button class="layui-btn  layui-btn-normal" onclick="xadmin.open('添加','GoodsOrder__html',650,600,false);">
-                                <i class="layui-icon"></i>添加</button></div>
-                        <div class="layui-card-body ">
-                            <table class="layui-table layui-form">
-                                <thead>
-                                    <tr>
-                                        <th>订单号</th>
-                                        <th>出库订单号</th>
-                                        <th>设备编号</th>
-                                        <th>收货单位</th>
-                                        <th>起运时间</th>
-                                        <th>到达时间</th>
-                                        <th style="width: 122.7px;">操作</th></tr>
-                                </thead>
-                                <tbody>
-                                {{range $index, $elem := .List}}
-                                    <tr>
-
-                                        <td>{{$elem.T_orderid}}</td>
-                                        <td>{{$elem.T_outorderid}}</td>
-                                        <td>
-                                            {{range $index, $elemx := $.Device_lite}}
-                                            {{if eq $elem.T_sn $elemx.T_sn }}
-                                            {{$elemx.T_devName}}
-                                            {{end}}
-                                            {{end}}
-                                        </td>
-                                        <td>{{$elem.T_receiving}}</td>
-
-                                        <td>{{$elem.T_start_Ut.Format "2006-01-02 15:04:05"}}</td>
-                                        <td>{{$elem.T_end_Ut.Format "2006-01-02 15:04:05"}}</td>
-
-                                        <td class="td-manage">
-                                            <a title="编辑" onclick="f_Data_PDF('{{$elem.Id}}');" href="javascript:;">
-                                                <i class="layui-icon">&#xe601;</i>PDF</a>
-                                            <a title="编辑" onclick="xadmin.open('编辑','GoodsOrder__html?id={{$elem.Id}}',650,600,false);" href="javascript:;">
-                                                <i class="layui-icon">&#xe63c;</i>编辑</a>
-                                            <a title="删除" onclick="member_del(this,'{{$elem.Id}}')" href="javascript:;">
-                                                <i class="layui-icon">&#xe640;</i>删除</a>
-                                        </td>
-                                    </tr>
-                                {{end}}
-
-
-                                </tbody>
-                            </table>
-                        </div>
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div>
-
-                                    {{range $index, $elem := .Pages}}
-                                        {{if eq $elem.A 1}}
-                                        <a class="prev" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&lt;&lt;</a>
-                                        {{end}}
-                                        {{if eq $elem.A 2}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 3}}
-                                        <span class="current">{{$elem.V}}</span>
-                                        {{end}}
-                                        {{if eq $elem.A 4}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 5}}
-                                        <a class="next" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&gt;&gt;</a>
-                                        {{end}}
-
-
-
-                                    {{end}}
-
-
-
-                                </div>
-                                Page:{{.Page}}-
-                                Page_size:{{.Page_size}}-
-                                cnt:{{.cnt}}
-                            </div>
-                        </div>
-
-
-                    </div>
-                </div>
-            </div>
-        </div>
-    </body>
-    <script>
-        layui.use(['laydate', 'form'],
-            function() {
-                var laydate = layui.laydate;
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#start' //指定元素
-                });
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#end' //指定元素
-            });
-        });
-
-        function f_Data_PDF(Id) {
-            $.ajax({
-                type: 'POST',
-                url: 'Data_PDF',//发送请求
-                data: {
-                    Id: Id,
-                },
-                success: function (result) {
-                    console.log(result)
-                    // layer.close(loading)
-                    // if (result.Code != 200) {
-                    //     layer.msg(result.Msg);
-                    //     return
-                    // }
-                    // window.parent.location.href = result.Data;
-
-                }
-            });
-        }
-        /*用户-删除*/
-        function member_del(obj, id) {
-            layer.confirm('确认要删除吗?',
-            function(index) {
-                //发异步删除数据
-                $(obj).parents("tr").remove();
-
-                $.ajax({
-                    type: 'POST',
-                    url: 'List_Del',//发送请求
-                    data: {Id:id},
-                    success: function(result) {
-                        console.log(result)
-                        if (result.Code == 200 ){
-                            layer.msg('已删除!', {
-                                icon: 1,
-                                time: 2000
-                            });
-                            window.location.reload();
-                        }else {
-                            layer.msg('删除失败!', {
-                                time: 2000
-                            });
-                        }
-
-                    }
-                });
-
-
-
-            });
-        }
-    </script>
-
-</html>

+ 0 - 119
views/RawSql/RawSql-.html

@@ -1,119 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm" style="overflow-y: hidden;" xmlns="http://www.w3.org/1999/html">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-        <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-            <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-            <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]--></head>
-
-    <body>
-        <div class="layui-fluid">
-            <div class="layui-row">
-                <form class="layui-form" lay-filter="example1">
-                    <div class="layui-form-item" style="margin-top: 20px">
-                        <label for="T_name" class="layui-form-label">名称</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }} value="{{.Date.T_name}}" {{end}}
-                                   type="text" id="T_name" name="T_name" required="" autocomplete="off" class="layui-input"></div>
-                    </div>
-
-
-                    <div class="layui-form-item layui-form-text">
-                        <label for="T_text" class="layui-form-label">详情</label>
-                        <div class="layui-input-block">
-
-                            <textarea name="T_text" id="T_text" class="layui-textarea">{{.Date.T_text}}</textarea>
-                        </div>
-                    </div>
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-<!--                        <label for="L_repass" class="layui-form-label"></label>-->
-                        <button class="layui-btn  layui-btn-normal" lay-filter="add" lay-submit="">提交</button></div>
-
-                    <blockquote class="layui-elem-quote">SELECT * FROM user WHERE `ID` > ? AND `uuid` LIKE ? LIMIT 0,1000</blockquote>
-                    <blockquote class="layui-elem-quote">POST: 地址/v3/Data/Raw</br> T_id:FTxZ8 </br> T_data:250|%c8%|</blockquote>
-
-                </form>
-            </div>
-        </div>
-        <script>
-
-            layui.use(['form', 'layer',"layedit","laydate"],
-
-                function() {
-                    $ = layui.jquery;
-
-                    var form = layui.form;
-                    var layer = layui.layer;
-                    var layedit = layui.layedit
-                    var laydate = layui.laydate
-                    laydate.render({
-                        elem: '#T_start_Ut' //指定元素
-                        ,type: 'datetime'
-                        ,range: true
-                        ,trigger: 'click', // 新增这一行以解决
-                    });
-
-
-                    //监听提交
-                    form.on('submit(add)',
-                        function(data) {
-                            console.log("=== submit(add) ==");
-                            console.log(data);
-
-                            $.ajax({
-                                type: 'POST',
-                                url: 'List_Post',//发送请求
-                                data: {
-                                    id:"{{.id}}",
-                                    T_name:data.field.T_name,
-                                    T_text:data.field.T_text,
-                                },
-                                success: function(result) {
-                                    console.log(result)
-                                    if(result.Code == 200){
-                                        layer.msg("操作成功", {
-                                            icon: 1,
-                                            time: 2000
-                                        });
-                                        //关闭当前frame
-                                        parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                        parent.location.reload();
-
-                                        form.render('select');
-                                        // return false;
-                                    }else {
-                                        layer.msg("错误:"+result.Msg, {
-                                            icon: 2,
-                                            time: 2000
-                                        });
-                                    }
-
-
-
-                                }
-                            });
-
-                            return false;
-                        });
-
-                });
-        </script>
-
-
-    </body>
-
-</html>

+ 0 - 156
views/RawSql/RawSql.html

@@ -1,156 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    </head>
-    
-    <body>
-        <div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-            <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-                <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-            </a>
-        </div>
-        <div class="layui-fluid">
-            <div class="layui-row layui-col-space15">
-                <div class="layui-col-md12">
-                    <div class="layui-card">
-
-                        <div class="layui-card-header">
-<!--                            <button class="layui-btn layui-btn-danger" onclick="delAll()">-->
-<!--                                <i class="layui-icon"></i>批量删除</button>-->
-                            <button class="layui-btn  layui-btn-normal" onclick="xadmin.open('添加','Raw__html',650,600,false);">
-                                <i class="layui-icon"></i>添加</button></div>
-                        <div class="layui-card-body ">
-                            <table class="layui-table layui-form">
-                                <thead>
-                                    <tr>
-                                        <th>T_id</th>
-                                        <th>标题</th>
-                                        <th>SQL</th>
-                                        <th style="width: 122.7px;">操作</th></tr>
-                                </thead>
-                                <tbody>
-                                {{range $index, $elem := .List}}
-                                    <tr>
-
-                                        <td>{{$elem.T_id}}</td>
-                                        <td>{{$elem.T_name}}</td>
-                                        <td>{{$elem.T_text}}</td>
-                                        <td class="td-manage">
-                                            <a title="编辑" onclick="xadmin.open('编辑','Raw__html?id={{$elem.Id}}',650,600,false);" href="javascript:;">
-                                                <i class="layui-icon">&#xe63c;</i>编辑</a>
-                                            <a title="删除" onclick="member_del(this,'{{$elem.Id}}')" href="javascript:;">
-                                                <i class="layui-icon">&#xe640;</i>删除</a>
-                                        </td>
-                                    </tr>
-                                {{end}}
-
-
-                                </tbody>
-                            </table>
-                        </div>
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div>
-
-                                    {{range $index, $elem := .Pages}}
-                                        {{if eq $elem.A 1}}
-                                        <a class="prev" href="?page={{$elem.V}}">&lt;&lt;</a>
-                                        {{end}}
-                                        {{if eq $elem.A 2}}
-                                        <a class="num" href="?page={{$elem.V}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 3}}
-                                        <span class="current">{{$elem.V}}</span>
-                                        {{end}}
-                                        {{if eq $elem.A 4}}
-                                        <a class="num" href="?page={{$elem.V}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 5}}
-                                        <a class="next" href="?page={{$elem.V}}">&gt;&gt;</a>
-                                        {{end}}
-
-
-
-                                    {{end}}
-
-
-
-                                </div>
-                                Page:{{.Page}}-
-                                Page_size:{{.Page_size}}-
-                                cnt:{{.cnt}}
-                            </div>
-                        </div>
-
-
-                    </div>
-                </div>
-            </div>
-        </div>
-    </body>
-    <script>
-        layui.use(['laydate', 'form'],
-            function() {
-                var laydate = layui.laydate;
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#start' //指定元素
-                });
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#end' //指定元素
-            });
-        });
-
-        /*用户-删除*/
-        function member_del(obj, id) {
-            layer.confirm('确认要删除吗?',
-            function(index) {
-                //发异步删除数据
-                $(obj).parents("tr").remove();
-
-                $.ajax({
-                    type: 'POST',
-                    url: 'List_Del',//发送请求
-                    data: {Id:id},
-                    success: function(result) {
-                        console.log(result)
-                        if (result.Code == 200 ){
-                            layer.msg('已删除!', {
-                                icon: 1,
-                                time: 2000
-                            });
-                            window.location.reload();
-                        }else {
-                            layer.msg('删除失败!', {
-                                time: 2000
-                            });
-                        }
-
-                    }
-                });
-
-
-
-            });
-        }
-    </script>
-
-</html>

+ 0 - 168
views/System/Logs.html

@@ -1,168 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    </head>
-    
-    <body>
-        <div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-                <a><cite>宝智达</cite></a>
-            </span>
-            <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-                <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-            </a>
-        </div>
-        <div class="layui-fluid">
-            <div class="layui-row layui-col-space15">
-                <div class="layui-col-md12">
-                    <div class="layui-card">
-                        <div class="layui-card-body ">
-                            <form class="layui-form layui-col-space5">
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <select name="Class_1">
-                                        <option value="">所有分类</option>
-                                        {{range $index, $elem := .Class_List}}
-
-                                            <option {{if eq $elem $.Class_1 }}
-                                                    selected
-                                                    {{end}} value="{{$elem}}">{{$elem}}</option>
-
-                                        {{end}}
-                                    </select>
-                                </div>
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach">
-                                        <i class="layui-icon">&#xe615;</i></button>
-                                </div>
-                            </form>
-                        </div>
-
-                        <div class="layui-card-body " >
-                            <table class="layui-table layui-form">
-                                <thead>
-                                    <tr>
-                                        <th>编号</th>
-                                        <th>分类</th>
-                                        <th>标题</th>
-                                        <th>详情</th>
-                                        <th>时间</th>
-                                    </tr>
-                                </thead>
-                                <tbody>
-                                {{range $index, $elem := .List}}
-                                    <tr>
-                                        <td>{{$elem.Id}}</td>
-                                        <td>{{$elem.Logs_class}}</td>
-                                        <td>{{$elem.Logs_Title}}</td>
-                                        <td>{{$elem.Logs_Txt}}</td>
-                                        <td>{{$elem.CreateTime}}</td>
-                                    </tr>
-
-                                {{end}}
-
-
-                                </tbody>
-                            </table>
-                        </div>
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div>
-
-                                    {{range $index, $elem := .Pages}}
-                                        {{if eq $elem.A 1}}
-                                        <a class="prev" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&lt;&lt;</a>
-                                        {{end}}
-                                        {{if eq $elem.A 2}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 3}}
-                                        <span class="current">{{$elem.V}}</span>
-                                        {{end}}
-                                        {{if eq $elem.A 4}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 5}}
-                                        <a class="next" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&gt;&gt;</a>
-                                        {{end}}
-
-
-
-                                    {{end}}
-
-
-
-                                </div>
-                                Page:{{.Page}}-
-                                Page_size:{{.Page_size}}-
-                                cnt:{{.cnt}}
-                            </div>
-                        </div>
-
-
-                    </div>
-                </div>
-            </div>
-        </div>
-    </body>
-    <script>
-        layui.use(['laydate', 'form'],
-            function() {
-                var laydate = layui.laydate;
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#start' //指定元素
-                });
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#end' //指定元素
-                });
-            });
-        /*用户-删除*/
-        function member_del(obj, id) {
-            layer.confirm('确认要删除吗?',
-                function(index) {
-                    //发异步删除数据
-                    $(obj).parents("tr").remove();
-
-                    $.ajax({
-                        type: 'POST',
-                        url: 'List_Del',//发送请求
-                        data: {Id:id},
-                        success: function(result) {
-                            console.log(result)
-                            if (result.Code == 200 ){
-                                layer.msg('已删除!', {
-                                    icon: 1,
-                                    time: 2000
-                                });
-                                window.location.reload();
-                            }else {
-                                layer.msg('删除失败!', {
-                                    time: 2000
-                                });
-                            }
-
-                        }
-                    });
-
-
-
-                });
-        }
-    </script>
-
-</html>

+ 0 - 218
views/Template/Template-.html

@@ -1,218 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-        <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-            <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-            <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]--></head>
-    
-    <body>
-        <div class="layui-fluid">
-            <div class="layui-row">
-                <form class="layui-form">
-
-                    <div class="layui-form-item">
-                        <label class="layui-form-label">
-                            <span class="x-red">*</span>图片</label>
-                        <div class="layui-input-inline">
-                            <div class="layui-upload">
-                                <button type="button" class="layui-btn" id="test1">上传图片</button>
-                                <div class="layui-upload-list">
-                                    <img {{if gt .id 0 }}
-                                         src="{{.Date.T_img}}"
-                                         {{end}}  style="max-height: 100px;height: 100px" class="layui-upload-img" id="demo1">
-                                    <p id="demoText"></p>
-                                </div>
-                            </div>
-
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label for="T_name" class="layui-form-label">
-                            <span class="x-red">*</span>名称</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }}
-                                   value="{{.Date.Id}}"
-                                   {{end}}  type="text" id="T_name" name="T_name" required="" lay-verify="required" autocomplete="off" class="layui-input"></div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label class="layui-form-label">
-                            <span class="x-red">*</span>分类</label>
-                        <div class="layui-input-inline">
-                            <select  lay-filter="T_class" id="T_class" name="T_class" class="valid" >
-                                {{range $index, $elem := .Class_List}}
-                                    <option value="{{$elem.Id}}" {{if gt $.id 0 }}
-                                                {{if eq $.Date.T_class $elem.Id }}
-                                                selected
-                                                {{end}}
-                                            {{end}}
-                                             >{{$elem.T_name}}</option>
-                                {{end}}
-
-                            </select>
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label for="T_int" class="layui-form-label">
-                            <span class="x-red">*</span>数字</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }}
-                                        value="{{.Date.T_int}}"
-                                   {{end}} type="text" id="T_int" name="T_int" placeholder="¥" autocomplete="off" class="layui-input">
-                        </div>
-                        <div class="layui-form-mid layui-word-aux">
-                            <span class="x-red">*</span>
-                        </div>
-                    </div>
-                    <div class="layui-form-item layui-form-text">
-                        <label for="T_text" class="layui-form-label">描述</label>
-                        <div class="layui-input-block">
-                           <textarea class="layui-textarea" id="T_text" style="display: none" >
-                              {{if gt .id 0 }}
-                                   {{.Date.T_text}}
-                                   {{end}}
-                            </textarea>
-                        </div>
-                    </div>
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-<!--                        <label for="L_repass" class="layui-form-label"></label>-->
-                        <button class="layui-btn  layui-btn-normal" lay-filter="add" lay-submit="">提交</button></div>
-                </form>
-            </div>
-        </div>
-        <script>
-            layui.use(['form', 'layer',"layedit"],
-
-                function() {
-                    $ = layui.jquery;
-                    var form = layui.form,
-                    layer = layui.layer;
-                    var layedit = layui.layedit
-
-                    layedit.set({
-                        uploadImage: {
-                            url: '/UpFile' //接口url
-                        }
-                    });
-
-                    //构建一个默认的编辑器
-                    var index = layedit.build('T_text', {
-                        height: 580 //设置编辑器高度,
-
-                    });
-                    //监听提交
-                    form.on('submit(add)',
-                        function(data) {
-                            console.log("=== submit(add) ==");
-                            console.log(data);
-
-                            $.ajax({
-                                type: 'POST',
-                                url: 'List_Post',//发送请求
-                                data: {
-                                    id:"{{.id}}",
-                                    T_name:data.field.T_name,
-                                    T_class:data.field.T_class,
-                                    T_int:data.field.T_int,
-                                    T_img:T_img,
-                                    T_text:layedit.getContent(index),
-                                },
-                                success: function(result) {
-                                    console.log(result)
-                                    if(result.Code == 200){
-                                        layer.msg("操作成功", {
-                                            icon: 1,
-                                            time: 2000
-                                        });
-                                    }else {
-                                        layer.msg("错误:"+result.Msg, {
-                                            icon: 2,
-                                            time: 2000
-                                        });
-                                    }
-
-                                    //
-                                    //关闭当前frame
-                                    parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                    parent.location.reload();
-
-                                    form.render('select');
-                                    // return false;
-                                }
-                            });
-
-                            return false;
-                        });
-
-                });
-        </script>
-        <script>
-
-            T_img = "{{.Date.T_img}}"
-
-
-            layui.use('upload', function(){
-                var $ = layui.jquery
-                    ,upload = layui.upload;
-
-                //普通图片上传
-                var uploadInst = upload.render({
-                    elem: '#test1'
-                    ,url: '/UpFile' //改成您自己的上传接口
-                    ,before: function(obj){
-                        //预读本地文件示例,不支持ie8
-                        obj.preview(function(index, file, result){
-                            $('#demo1').attr('src', result); //图片链接(base64)
-                        });
-                    }
-                    ,done: function(res){
-
-                        console.log(res)
-                        //如果上传失败
-                        if(res.code != 0){
-                            return layer.msg('上传失败');
-                        }
-                        T_img = res.data.src
-                        console.log(T_img)
-                        //上传成功
-                    }
-                    ,error: function(){
-                        console.log("error")
-
-                        //演示失败状态,并实现重传
-                        var demoText = $('#demoText');
-                        demoText.html('<span style="color: #ff5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
-                        demoText.find('.demo-reload').on('click', function(){
-                            uploadInst.upload();
-                        });
-                    }
-                });
-
-                //绑定原始文件域
-                upload.render({
-                    elem: '#test20'
-                    ,url: 'https://httpbin.org/post' //改成您自己的上传接口
-                    ,done: function(res){
-                        layer.msg('上传成功');
-                        console.log(res)
-                    }
-                });
-
-            });
-        </script>
-    </body>
-
-</html>

+ 0 - 192
views/Template/Template.html

@@ -1,192 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    </head>
-    
-    <body>
-        <div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-            <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-                <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-            </a>
-        </div>
-        <div class="layui-fluid">
-            <div class="layui-row layui-col-space15">
-                <div class="layui-col-md12">
-                    <div class="layui-card">
-                        <div class="layui-card-body ">
-                            <form class="layui-form layui-col-space5">
-
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <select name="Class_1">
-                                        <option value="">所有分类</option>
-                                        {{range $index, $elem := .Class_List}}
-
-                                            <option {{if eq $elem.Id $.Class_1 }}
-                                                     selected
-                                                    {{end}} value="{{$elem.Id}}">{{$elem.T_name}}</option>
-
-                                        {{end}}
-
-                                    </select>
-                                </div>
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <input value="{{.Name}}" type="text" name="Name" placeholder="请输入 名称" autocomplete="off" class="layui-input"></div>
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach">
-                                        <i class="layui-icon">&#xe615;</i></button>
-                                </div>
-                            </form>
-                        </div>
-                        <div class="layui-card-header">
-<!--                            <button class="layui-btn layui-btn-danger" onclick="delAll()">-->
-<!--                                <i class="layui-icon"></i>批量删除</button>-->
-                            <button class="layui-btn  layui-btn-normal" onclick="xadmin.open('添加','List_',800,600,true);">
-                                <i class="layui-icon"></i>添加</button></div>
-                        <div class="layui-card-body ">
-                            <table class="layui-table layui-form">
-                                <thead>
-                                    <tr>
-                                        <th>编号</th>
-                                        <th>图片</th>
-                                        <th>名称</th>
-                                        <th>分类</th>
-                                        <th>数量</th>
-                                        <th>操作</th></tr>
-                                </thead>
-                                <tbody>
-                                {{range $index, $elem := .List}}
-                                    <tr>
-
-                                        <td>{{$elem.Id}}</td>
-                                        <td><img src="{{$elem.T_img}}"></td>
-                                        <td>{{$elem.T_name}}</td>
-                                        <td>
-                                            {{range $index, $elemx := $.Class_List}}
-                                                {{if eq $elem.T_class $elemx.Id }}
-                                                    {{$elemx.T_name}}
-                                                {{end}}
-                                            {{end}}
-
-
-                                        </td>
-                                        <td>{{$elem.T_int}}</td>
-
-                                        <td class="td-manage">
-                                            <a title="编辑" onclick="xadmin.open('编辑','List_?id={{$elem.Id}}');" href="javascript:;">
-                                                <i class="layui-icon">&#xe63c;</i></a>
-                                            <a title="删除" onclick="member_del(this,'{{$elem.Id}}')" href="javascript:;">
-                                                <i class="layui-icon">&#xe640;</i></a>
-                                        </td>
-                                    </tr>
-
-                                {{end}}
-
-
-                                </tbody>
-                            </table>
-                        </div>
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div>
-
-                                    {{range $index, $elem := .Pages}}
-                                        {{if eq $elem.A 1}}
-                                        <a class="prev" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&lt;&lt;</a>
-                                        {{end}}
-                                        {{if eq $elem.A 2}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 3}}
-                                        <span class="current">{{$elem.V}}</span>
-                                        {{end}}
-                                        {{if eq $elem.A 4}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 5}}
-                                        <a class="next" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&gt;&gt;</a>
-                                        {{end}}
-
-
-
-                                    {{end}}
-
-
-
-                                </div>
-                                Page:{{.Page}}-
-                                Page_size:{{.Page_size}}-
-                                cnt:{{.cnt}}
-                            </div>
-                        </div>
-
-
-                    </div>
-                </div>
-            </div>
-        </div>
-    </body>
-    <script>
-        layui.use(['laydate', 'form'],
-            function() {
-                var laydate = layui.laydate;
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#start' //指定元素
-                });
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#end' //指定元素
-            });
-        });
-        /*用户-删除*/
-        function member_del(obj, id) {
-            layer.confirm('确认要删除吗?',
-            function(index) {
-                //发异步删除数据
-                $(obj).parents("tr").remove();
-
-                $.ajax({
-                    type: 'POST',
-                    url: 'List_Del',//发送请求
-                    data: {Id:id},
-                    success: function(result) {
-                        console.log(result)
-                        if (result.Code == 200 ){
-                            layer.msg('已删除!', {
-                                icon: 1,
-                                time: 2000
-                            });
-                            window.location.reload();
-                        }else {
-                            layer.msg('删除失败!', {
-                                time: 2000
-                            });
-                        }
-
-                    }
-                });
-
-
-
-            });
-        }
-    </script>
-
-</html>

+ 0 - 137
views/Template/TemplateClass-.html

@@ -1,137 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/lib/layui/layui.css">
-        <script type="text/javascript" src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-            <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-            <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]--></head>
-    
-    <body>
-        <div class="layui-fluid">
-            <div class="layui-row">
-                <form class="layui-form">
-                    <div class="layui-form-item">
-                        <label for="T_name" class="layui-form-label">
-                            <span class="x-red">*</span>分类名称</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }}
-                                   value="{{.T.T_name}}"
-                                   {{end}} type="text" id="T_name" name="T_name" required="" lay-verify="required" autocomplete="off" class="layui-input"></div>
-                    </div>
-
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-                        <button class="layui-btn layui-btn-normal" lay-filter="add" lay-submit="">提交</button>
-                    </div>
-
-
-
-                </form>
-            </div>
-        </div>
-        <script>
-
-            layui.use(['form', 'layer',"layedit"],
-            function() {
-                $ = layui.jquery;
-                var form = layui.form,
-                layer = layui.layer;
-                //监听提交
-                form.on('submit(add)',
-                    function(data) {
-                        console.log(data);
-                        //发异步,把数据提交给php
-                        layer.alert("操作成功", {
-                            icon: 6
-                        },
-                        function() {
-                            // 获得frame索引
-                            var index = parent.layer.getFrameIndex(window.name);
-
-                            //关闭当前frame
-                            parent.layer.close(index);
-                            parent.location.reload();
-                        });
-
-                        $.ajax({
-                            type: 'POST',
-                            url: 'Class_Post',//发送请求
-                            data: {
-                                Id:"{{.id}}",
-                                T_name:data.field.T_name,
-
-                                },
-                            success: function(result) {
-                                console.log(result)
-                            }
-                        });
-
-                        return false;
-                    });
-                });
-        </script>
-        <script>
-            var _img = ""
-
-            layui.use('upload', function(){
-                var $ = layui.jquery
-                    ,upload = layui.upload;
-
-                //普通图片上传
-                var uploadInst = upload.render({
-                    elem: '#test1'
-                    ,url: '/UpFile' //改成您自己的上传接口
-                    ,before: function(obj){
-                        //预读本地文件示例,不支持ie8
-                        obj.preview(function(index, file, result){
-                            $('#demo1').attr('src', result); //图片链接(base64)
-                        });
-                    }
-                    ,done: function(res){
-
-                        console.log(res)
-                        //如果上传失败
-                        if(res.code != 0){
-                            return layer.msg('上传失败');
-                        }
-                        _img = res.data.src
-                        console.log(_img)
-                        //上传成功
-                    }
-                    ,error: function(){
-                        console.log("error")
-
-                        //演示失败状态,并实现重传
-                        var demoText = $('#demoText');
-                        demoText.html('<span style="color: #ff5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
-                        demoText.find('.demo-reload').on('click', function(){
-                            uploadInst.upload();
-                        });
-                    }
-                });
-
-                //绑定原始文件域
-                upload.render({
-                    elem: '#test20'
-                    ,url: 'https://httpbin.org/post' //改成您自己的上传接口
-                    ,done: function(res){
-                        layer.msg('上传成功');
-                        console.log(res)
-                    }
-                });
-
-            });
-        </script>
-    </body>
-
-</html>

+ 0 - 156
views/Template/TemplateClass.html

@@ -1,156 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
-        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-          <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-          <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]-->
-    </head>
-
-    <body>
-        <div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-        <a><cite>宝智达</cite></a>
-            </span>
-            <a class="layui-btn layui-btn-normal " style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-                <i class="layui-icon layui-icon-normal" style="line-height:30px"></i>
-            </a>
-        </div>
-        <div class="layui-fluid">
-            <div class="layui-row layui-col-space15">
-                <div class="layui-col-md12">
-                    <div class="layui-card">
-<!--                        <div class="layui-card-body ">-->
-<!--                               <hr>-->
-<!--&lt;!&ndash;                            <blockquote class="layui-elem-quote">每个tr 上有两个属性 cate-id='1' 当前分类id fid='0' 父级id ,顶级分类为 0,有子分类的前面加收缩图标<i class="layui-icon x-show" status='true'>&#xe623;</i></blockquote>&ndash;&gt;-->
-<!--                        </div>-->
-                        <div class="layui-card-header">
-                            <button class="layui-btn layui-btn-normal layui-btn-xs"  onclick="xadmin.open('添加','Class_?id=0',400,400)" ><i class="layui-icon">&#xe61f;</i>添加分类</button>
-
-                        </div>
-                        <div class="layui-card-body ">
-                            <table class="layui-table layui-form" >
-                              <thead>
-                                <tr>
-<!--                                  <th width="20">-->
-<!--                                    <input type="checkbox" name="" lay-skin="primary">-->
-<!--                                  </th>-->
-<!--                                  <th width="70">ID</th>-->
-                                  <th width="250">栏目名</th>
-<!--                                  <th width="50">排序</th>-->
-<!--                                  <th width="80">状态</th>-->
-                                  <th >操作</th>
-                              </thead>
-                              <tbody class="x-cate">
-
-                              {{range $index, $elem := .List}}
-
-                                    <tr cate-id='{{$elem.Id}}' fid='0' >
-                                      <td>
-
-                                            <i class="layui-icon ">&#xe65b;</i>
-
-                                          {{$elem.T_name}}
-                                          
-                                      </td>
-
-                                      <td class="td-manage">
-                                          <button class="layui-btn layui-btn layui-btn-xs"  onclick="xadmin.open('编辑','Class_?id={{$elem.Id}}',400,400)" ><i class="layui-icon">&#xe642;</i>编辑</button>
-                                          <button class="layui-btn-danger layui-btn layui-btn-xs"  onclick="member_del(this,'{{$elem.Id}}')" href="javascript:;" ><i class="layui-icon">&#xe640;</i>删除</button>
-                                      </td>
-                                  </tr>
-
-                              {{end}}
-
-
-                              </tbody>
-                            </table>
-                        </div>
-
-                    </div>
-                </div>
-            </div>
-        </div>
-        <script>
-          layui.use(['form'], function(){
-            form = layui.form;
-            
-          });
-
-           /*用户-删除*/
-          function member_del(obj,id){
-              layer.confirm('确认要删除吗?',function(index){
-                  //发异步删除数据
-                  $(obj).parents("tr").remove();
-                  $.ajax({
-                      type: 'POST',
-                      url: 'Class_Del',//发送请求
-                      data: {Id:id},
-                      success: function(result) {
-                          console.log(result)
-                          if (result.Code == 200 ){
-                              layer.msg('已删除!', {
-                                  icon: 1,
-                                  time: 2000
-                              });
-                              window.location.reload();
-                          }else {
-                              layer.msg('删除失败!', {
-                                  time: 2000
-                              });
-                          }
-
-                      }
-                  });
-
-              });
-          }
-
-          // 分类展开收起的分类的逻辑
-          // 
-          $(function(){
-            $("tbody.x-cate tr[fid!='0']").hide();
-            // 栏目多级显示效果
-            $('.x-show').click(function () {
-                if($(this).attr('status')=='true'){
-                    $(this).html('&#xe625;'); 
-                    $(this).attr('status','false');
-                    cateId = $(this).parents('tr').attr('cate-id');
-                    $("tbody tr[fid="+cateId+"]").show();
-               }else{
-                    cateIds = [];
-                    $(this).html('&#xe623;');
-                    $(this).attr('status','true');
-                    cateId = $(this).parents('tr').attr('cate-id');
-                    getCateId(cateId);
-                    for (var i in cateIds) {
-                        $("tbody tr[cate-id="+cateIds[i]+"]").hide().find('.x-show').html('&#xe623;').attr('status','true');
-                    }
-               }
-            })
-          })
-
-          var cateIds = [];
-          function getCateId(cateId) {
-              $("tbody tr[fid="+cateId+"]").each(function(index, el) {
-                  id = $(el).attr('cate-id');
-                  cateIds.push(id);
-                  getCateId(id);
-              });
-          }
-   
-        </script>
-    </body>
-</html>

+ 0 - 610
views/Tool/DataTool.html

@@ -1,610 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <script src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script src="https://osscold.baozhida.cn/js/jquery.cookie.min.js"></script>
-    <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-    <script src="https://osscold.baozhida.cn/js/echarts.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    <script type="text/javascript" src='https://osscold.baozhida.cn/js/xlsx.full.min.js'></script>
-
-    <style>
-        .kuangk{
-            border:1px solid;padding: 2px 4px;
-            color: #1E9FFF;
-            font-size: 20px;
-        }
-    </style>
-</head>
-
-<body>
-
-<div class="layui-fluid">
-    <div class="layui-row">
-        <!-- // 传感器 选择-->
-        <div class="layui-col-md12">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input id="lefile" type="file" hidden >
-
-                            <div  onclick="document.getElementById('lefile').click();" class="layui-btn layui-btn-normal">
-                                <i class="layui-icon">导入数据</i>
-                            </div>
-                        </div>
-
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <label class="layui-form-label">标题:</label>
-                            <div class="layui-input-block">
-                                <input type="text" onchange="onchanget(this)" name="" value="这里是标题" placeholder="这里是标题" autocomplete="off" class="layui-input">
-                            </div>
-                        </div>
-                    <div class="layui-input-inline layui-show-xs-block">
-                        <label class="layui-form-label">温度阈值:</label>
-                        <div class="layui-input-block">
-                            <input type="text" id="T_a" style="width: 50px;float: left;" value="2" autocomplete="off" class="layui-input">
-                            <input type="text" id="T_b" style="width: 50px;float: left;" value="30" autocomplete="off" class="layui-input">
-                        </div>
-                    </div>
-                    <div class="layui-input-inline layui-show-xs-block">
-                        <label class="layui-form-label">湿度阈值:</label>
-                        <div class="layui-input-block">
-                            <input type="text" id="H_a" style="width: 50px;float: left;" value="35"  autocomplete="off" class="layui-input">
-                            <input type="text" id="H_b" style="width: 50px;float: left;" value="75"  autocomplete="off" class="layui-input">
-                        </div>
-                    </div>
-
-                    <div class="layui-input-inline layui-show-xs-block" style="float: right">
-
-                        <div class="layui-btn layui-btn-normal" onclick="window.location.href = 'https://osscold.baozhida.cn/js/导入模板.xlsx';">
-                            <i class="layui-icon">下载导入模板</i>
-                        </div>
-                    </div>
-
-                    <hr>
-                </div>
-                <div class="layui-card-body " >
-
-
-                    <div  style="width: 99%;height:105px;">
-                        <h2 id="T_html_H" style="text-align: center;margin-bottom: 20px;font-size: 25px;">这里是标题</h2>
-                        <h3 id="T_html_time" style="text-align: center;width: 33%;float: left;"></h3>
-                        <h3 id="T_myChart_1_title" style="text-align: center;width: 33%;float: left;"></h3>
-                        <h3 id="T_myChart_2_title" style="text-align: center;width: 33%;float: left;"></h3>
-                    </div>
-                    <div id="T_myChart_1" style="width: 99%;height:335px;"></div>
-                    <div style="width: 99%;height:35px;">
-
-                    </div>
-                    <div id="T_myChart_2" style="width: 99%;height:335px;"></div>
-                    <div  style="width: 99%;height:35px;">
-
-                    </div>
-
-
-
-                </div>
-            </div>
-        </div>
-
-
-    </div>
-
-
-
-
-</div>
-
-</div>
-</body>
-
-<script>
-    // 页面 加载完成后执行
-    window.onload = function () {
-        console.log("页面 加载完成后执行")
-        f_myChart_todata_inte()
-
-
-    }
-    
-    function onchanget(t) {
-        $("#T_html_H").html(t.value)
-    }
-</script>
-
-<script>
-    var fileType = 0;  //默认0(0不正确,1正确)
-    var wb;                                     //读取Excel的数据
-    var rABS = false;                      //是否将文件读取为二进制字符串
-    var excelTab;                         //Excel
-    $("#lefile").on('change',function(){
-        var file = $('#lefile').get(0);  //得到文件对象
-        var filename = $("#lefile").val();
-        var idx = filename.lastIndexOf(".");
-        if (idx != -1){
-            ext = filename.substr(idx+1).toUpperCase();
-            ext = ext.toLowerCase( );
-            // alert("ext="+ext);
-            if (ext != 'xls' && ext != 'xlsx' ){
-                alert("只能上传.xls和.xlsx类型的文件!");
-                fileType = 0;
-                return;
-            }else{
-                fileType = 1;
-            }
-            if(fileType == 0){
-                alert("只能上传.xls和.xlsx类型的文件!");
-                return;
-            }else{
-                var file = $('#lefile').get(0);  //得到文件对象
-                importf(file);     //进行读取操作
-            }
-        } else {
-            alert("只能上传.xls和.xlsx类型的文件!");
-            fileType = 0;
-            return;
-        }
-    })
-
-
-
-    function importf(obj) {
-        if(!obj.files) {
-            return;
-        }
-        var f = obj.files[0];
-        var reader = new FileReader();
-        reader.onload = function(e) {
-            var data = e.target.result;
-            if(rABS) {
-                wb = XLSX.read(btoa(fixdata(data)), {//手动转化
-                    type: 'base64'
-                });
-            } else {
-                wb = XLSX.read(data, {
-                    type: 'binary'
-                });
-            }
-
-            excelTab = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
-            console.log(excelTab);
-            printData(excelTab);
-        };
-        if(rABS) {
-            reader.readAsArrayBuffer(f);
-        } else {
-            reader.readAsBinaryString(f);
-        }
-    }
-
-    function fixdata(data) { //文件流转BinaryString
-        var o = "",
-            l = 0,
-            w = 10240;
-        for(; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
-        o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
-        return o;
-    }
-    name_x = 1
-    function printData(excelTab){
-
-        dataList = []
-        for( var i = 0; i < excelTab.length; i++ ){
-
-            dataList.push({
-                T_t:excelTab[i].温度,
-                T_rh:excelTab[i].湿度,
-                T_time:excelTab[i].记录时间,
-            })
-        }
-        //例子2
-        layer.prompt({
-            formType: 0,
-            value: '数据'+name_x,
-            title: '请输入 监测点名称',
-            // area: ['800px', '350px'] //自定义文本域宽高
-        }, function(value, index, elem){
-
-            layer.close(index);
-
-            f_Data_to_myChart(value,dataList)
-            name_x += 1
-        });
-
-    }
-</script>
-
-<!-- 多个 图表-->
-<script>
-
-    // 最高温度、最低温度、平均温度、超标温度累积时长
-    var T_myChart_List_M = []
-    var H_myChart_List_M = []
-
-    function f_myChart_todata_inte() {
-        T_myChart_List_M = [] // 清空
-        H_myChart_List_M = [] // 清空
-        $("#T_myChart_2").show()
-        $("#T_myChart_2_title").show()
-        T_myChart = echarts.init(document.getElementById('T_myChart_1'));
-        H_myChart = echarts.init(document.getElementById('T_myChart_2'));
-        $("#T_myChart_1_title").html("")
-        $("#T_myChart_2_title").html("")
-
-
-        T_time_a = new Date("2099-05-08 00:00:00").getTime();
-        T_time_b = new Date("2000-05-08 00:00:00").getTime();
-
-    }
-
-    var M_T_n_max = 0
-    var M_T_n_min = 999
-    var M_T_n_ave_num = 0
-    var M_T_n_ave_sum = 0
-
-    var M_H_n_max = 0
-    var M_H_n_min = 999
-    var M_H_n_ave_num = 0
-    var M_H_n_ave_sum = 0
-
-
-    var T_time_a = ""
-    var T_time_b = ""
-
-
-    function f_Data_to_myChart(List_name,data) {
-        data_1 = []
-        data_2 = []
-
-        console.log(data)
-        T_time_a
-
-        for (let i = 0; i < data.length; i++) {
-
-            startT = new Date(data[i].T_time).getTime();
-
-            if(startT < T_time_a){
-                T_time_a = startT
-
-                $("#T_html_time").html("<spen class='kuangk'>时间:"+timestampToTime(T_time_a)+" ~ "+timestampToTime(T_time_b)+"</spen>")
-
-            }
-            if(startT > T_time_b){
-                T_time_b = startT
-
-                $("#T_html_time").html("<spen class='kuangk'>时间:"+timestampToTime(T_time_a)+" ~ "+timestampToTime(T_time_b)+"</spen>")
-
-            }
-            // 温度
-            if (data[i].T_t == undefined) continue;
-            if (data[i].T_t == "") continue;
-            data[i].T_t = parseFloat(data[i].T_t)
-            data_1.unshift([data[i].T_time,data[i].T_t])
-            if(data[i].T_t > M_T_n_max){
-                M_T_n_max = data[i].T_t
-            }
-            if(data[i].T_t < M_T_n_min){
-                M_T_n_min = data[i].T_t
-            }
-            M_T_n_ave_num += 1
-            M_T_n_ave_sum += data[i].T_t
-
-
-            // 湿度
-            if (data[i].T_rh == undefined) continue;
-            if (data[i].T_rh == "") continue;
-            data[i].T_rh = parseFloat(data[i].T_rh)
-            data_2.unshift([data[i].T_time,data[i].T_rh])
-
-            if(data[i].T_rh > M_H_n_max){
-                M_H_n_max = data[i].T_rh
-            }
-            if(data[i].T_rh < M_H_n_min){
-                M_H_n_min = data[i].T_rh
-            }
-
-            M_H_n_ave_num += 1
-            M_H_n_ave_sum += data[i].T_rh
-
-
-        }
-        console.log("M_T_n_ave_num:",M_T_n_ave_num)
-        console.log("M_T_n_ave_sum:",M_T_n_ave_sum)
-        $("#T_myChart_1_title").html("<spen class='kuangk' style='width: 120px;'>最高温度:"+parseFloat(M_T_n_max).toFixed(1)+"℃</spen><spen class='kuangk' style='width: 120px;'>最低温度"+parseFloat(M_T_n_min).toFixed(1)+"℃</spen><spen class='kuangk' style='width: 120px;'>平均温度:"+parseFloat(M_T_n_ave_sum/M_T_n_ave_num).toFixed(1)+"℃</spen> ")
-
-
-        $("#T_myChart_2_title").html("<spen class='kuangk' style='width: 120px;'>最高湿度:"+parseFloat(M_H_n_max).toFixed(1)+"%</spen><spen class='kuangk' style='width: 120px;'>最低湿度"+parseFloat(M_H_n_min).toFixed(1)+"%</spen><spen class='kuangk' style='width: 120px;'>平均湿度:"+parseFloat(M_H_n_ave_sum/M_H_n_ave_num).toFixed(1)+"%</spen> ")
-
-
-
-        T_myChart_List_M.push({
-            name: List_name,
-            type: 'line',
-            // stack: 'Total',
-            smooth: true,
-            data: data_1,
-            // markLine: {
-            //     data: [
-            //         {
-            //             silent:true,             //鼠标悬停事件  true没有,false有
-            //             lineStyle:{               //警戒线的样式  ,虚实  颜色
-            //                 type:"solid",
-            //                 color:"#FF4200",
-            //                 width: 3,
-            //             },
-            //             label:{
-            //                 position:'end',
-            //                 formatter:"下限("+data[0].T_Tlower+"℃)"
-            //             },
-            //             yAxis:data[0].T_Tlower
-            //         },
-            //         {
-            //             silent:true,             //鼠标悬停事件  true没有,false有
-            //             lineStyle:{               //警戒线的样式  ,虚实  颜色
-            //                 type:"solid",
-            //                 color:"#FF4200",
-            //                 width: 3,
-            //             },
-            //             label:{
-            //                 position:'end',
-            //                 formatter:"上限("+data[0].T_Tupper+"℃)"
-            //             },
-            //             yAxis:data[0].T_Tupper
-            //         }
-            //     ]
-            // }
-        })
-
-
-        H_myChart_List_M.push({
-            name: List_name,
-            type: 'line',
-            // stack: 'Total',
-            smooth: true,
-            data: data_2,
-            // markLine: {
-            //     data: [
-            //         {
-            //             silent:true,             //鼠标悬停事件  true没有,false有
-            //             lineStyle:{               //警戒线的样式  ,虚实  颜色
-            //                 type:"solid",
-            //                 color:"#FF4200",
-            //                 width: 3,
-            //             },
-            //             label:{
-            //                 position:'end',
-            //                 formatter:"下限("+data[0].T_RHlower+"℃)"
-            //             },
-            //             yAxis:data[0].T_RHlower
-            //         },
-            //         {
-            //             silent:true,             //鼠标悬停事件  true没有,false有
-            //             lineStyle:{               //警戒线的样式  ,虚实  颜色
-            //                 type:"solid",
-            //                 color:"#FF4200",
-            //                 width: 3,
-            //             },
-            //             label:{
-            //                 position:'end',
-            //                 formatter:"上限("+data[0].T_RHupper+"℃)"
-            //             },
-            //             yAxis:data[0].T_RHupper
-            //         }
-            //     ]
-            // }
-        })
-
-
-
-
-        var T_myChart_option_1 = {
-            // title: {
-            //     top: '50px',
-            //     text: T_name+"["+T_id+"]:" + $("#Time_start").val() + '~' + $("#Time_end").val(),
-            //     textStyle:{
-            //         fontSize:14,
-            //     }
-            // },
-            tooltip: {
-                trigger: 'axis'
-            },
-
-            toolbox: {
-                show: false,
-                feature: {
-                    dataZoom: {
-                        yAxisIndex: 'none'
-                    },
-                    dataView: { readOnly: false },
-                    magicType: { type: ['line', 'bar'] },
-                    restore: {},
-                    saveAsImage: {}
-                }
-            },
-            grid: {
-                top: '40px',
-                left: '10px',
-                right: '10px',
-                bottom: '50px',
-                containLabel: true
-            },
-            legend: {
-                textStyle:{
-                    color:"#7c7c7c"
-                }
-            },
-            xAxis: {
-                type: 'time',
-                boundaryGap: false,
-
-            },
-            yAxis: {
-                type: 'value',
-                axisLabel: {
-                    formatter: '{value} °C'
-                },
-                boundaryGap: [0, '100%'],
-                max:$("#T_a").val(),
-                min:$("#T_b").val(),
-            },
-
-            dataZoom: [
-                {
-                    type: 'inside',
-                    start: 0,
-                    end: 100
-                },
-                {
-                    start: 0,
-                    end: 100
-                }
-            ],
-            markPoint: {
-                // data: [ {
-                //     name: '最大值',
-                //     type: 'max'
-                // },{
-                //     name: '最小值',
-                //     type: 'min'
-                // }
-                // ]
-            },
-
-            series: T_myChart_List_M
-        };
-
-        // 初始化 图表
-        T_myChart.setOption(T_myChart_option_1);
-
-
-
-
-        var T_myChart_option_2 = {
-            // title: {
-            //     top: '50px',
-            //     text: T_name+"["+T_id+"]:" + $("#Time_start").val() + '~' + $("#Time_end").val(),
-            //     textStyle:{
-            //         fontSize:14,
-            //     }
-            // },
-            tooltip: {
-                trigger: 'axis'
-            },
-
-            toolbox: {
-                show: false,
-                feature: {
-                    dataZoom: {
-                        yAxisIndex: 'none'
-                    },
-                    dataView: { readOnly: false },
-                    magicType: { type: ['line', 'bar'] },
-                    restore: {},
-                    saveAsImage: {}
-                }
-            },
-            grid: {
-                top: '40px',
-                left: '10px',
-                right: '10px',
-                bottom: '50px',
-                containLabel: true
-            },
-            legend: {
-                textStyle:{
-                    color:"#7c7c7c"
-                }
-            },
-            xAxis: {
-                type: 'time',
-                boundaryGap: false,
-            },
-            yAxis: {
-                type: 'value',
-                axisLabel: {
-                    formatter: '{value} %'
-                },
-                boundaryGap: [0, '100%'],
-                max:$("#H_a").val(),
-                min:$("#H_b").val(),
-            },
-
-            dataZoom: [
-                {
-                    type: 'inside',
-                    start: 0,
-                    end: 100
-                },
-                {
-                    start: 0,
-                    end: 100
-                }
-            ],
-            markPoint: {
-                // data: [ {
-                //     name: '最大值',
-                //     type: 'max'
-                // },{
-                //     name: '最小值',
-                //     type: 'min'
-                // }
-                // ]
-            },
-
-            series: H_myChart_List_M
-        };
-
-        // 初始化 图表
-        H_myChart.setOption(T_myChart_option_2);
-
-    }
-
-    
-    
-
-    //
-    // function f_Refresh_T_myChart_1() {
-    //     T_myChart_1.clear();
-    //     //
-    //     // T_myChart_option_1.title.text =
-    //     T_myChart_option_1.series = T_myChart_List_1
-    //     T_myChart_option_1.yAxis.max = T_myChart_max_1
-    //     T_myChart_option_1.yAxis.min = T_myChart_min_1
-    //     T_myChart_option_1.yAxis.axisLabel.formatter = '{value} ℃'
-    //     T_myChart_1.setOption(T_myChart_option_1);
-    // }
-
-</script>
-
-
-<script>
-    function timestampToTime(timestamp) {
-        if(timestamp.length == 10) {
-            timestamp = timestamp * 1000
-        }
-        var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
-        var Y = date.getFullYear() + '-';
-        var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
-        var D = date.getDate()< 10 ? '0' +date.getDate() + ' ': date.getDate() + ' ';
-        var h = date.getHours()< 10 ? '0' + date.getHours() + ':' : date.getHours() + ':';
-        var m = date.getMinutes() < 10 ? '0' + date.getMinutes() + ':' : date.getMinutes() + ':';
-        var s = date.getSeconds() < 10 ? '0' + date.getSeconds()  : date.getSeconds() ;
-        return Y + M + D + h + m + s;
-    }
-
-
-</script>
-
-</html>

+ 0 - 274
views/User/Admin-.html

@@ -1,274 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-        <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-        <!--[if lt IE 9]>
-            <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-            <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-        <![endif]--></head>
-    
-    <body>
-        <div class="layui-fluid">
-            <div class="layui-row">
-                <form class="layui-form">
-
-                    <div class="layui-form-item" style="margin-top: 20px">
-                        <label for="Admin_name" class="layui-form-label">
-                            <span class="x-red">*</span>名称</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }}
-                                   value="{{.Date.Admin_name}}"
-                                   {{end}}  type="text" id="Admin_name" name="Admin_name" required="" lay-verify="required" autocomplete="off" class="layui-input">
-
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label class="layui-form-label">
-                            <span class="x-red">*</span>权限</label>
-                        <div class="layui-input-inline">
-                            <select  lay-filter="Admin_power" id="Admin_power" name="Admin_power" class="valid" >
-                                {{range $index, $elem := .Power_List}}
-                                <option value="{{$elem.Id}}" {{if gt $.id 0 }}
-                                        {{if eq $.Date.Admin_power $elem.Id }}
-                                        selected
-                                        {{end}}
-                                        {{end}}
-                                >{{$elem.Power_name}}</option>
-                                {{end}}
-
-                            </select>
-                        </div>
-                    </div>
-                    {{if eq .id 0 }}
-                        <div class="layui-form-item">
-                            <label for="Admin_user" class="layui-form-label">
-                                <span class="x-red">*</span>账号</label>
-                            <div class="layui-input-inline">
-                                <input {{if gt .id 0 }}
-                                       value="{{.Date.Admin_user}}"
-                                       {{end}}  type="text" id="Admin_user" name="Admin_user" required="" lay-verify="required" autocomplete="off" class="layui-input"></div>
-                        </div>
-
-                        <div class="layui-form-item">
-                            <label for="Admin_telephone" class="layui-form-label">
-                                <span class="x-red">*</span>密码</label>
-                            <div class="layui-input-inline">
-                                <input   disabled readonly class="layui-input layui-disabled"
-                                       value="密码会自动生成"
-                                         type="text" required="" autocomplete="off" class="layui-input">
-
-                            </div>
-                        </div>
-                    {{end}}
-                    <div class="layui-form-item">
-                        <label class="layui-form-label">性别</label>
-                        <div class="layui-input-inline">
-                            <select   id="Admin_gender" name="Admin_gender" class="valid" >
-
-                                <option value="0" {{if gt $.id 0 }}
-                                        {{if eq 0 .Date.Admin_gender }}
-                                        selected
-                                        {{end}}
-                                        {{end}}
-                                >未知</option>
-                                <option value="1" {{if gt $.id 0 }}
-                                        {{if eq 1 .Date.Admin_gender }}
-                                        selected
-                                        {{end}}
-                                        {{end}}
-                                >男</option>
-                                <option value="2" {{if gt $.id 0 }}
-                                        {{if eq 2 .Date.Admin_gender }}
-                                        selected
-                                        {{end}}
-                                        {{end}}
-                                >女</option>
-
-                            </select>
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label for="Admin_telephone" class="layui-form-label">电话</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }}
-                                   value="{{.Date.Admin_telephone}}"
-                                   {{end}}  type="text" id="Admin_telephone" name="Admin_telephone" required="" autocomplete="off" class="layui-input">
-
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label for="Admin_mail" class="layui-form-label">邮箱</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }}
-                                   value="{{.Date.Admin_mail}}"
-                                   {{end}}  type="text" id="Admin_mail" name="Admin_mail" required=""  autocomplete="off" class="layui-input">
-
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label for="Admin_text" class="layui-form-label">
-                            备注</label>
-                        <div class="layui-input-inline">
-                            <input {{if gt .id 0 }}
-                                   value="{{.Date.Admin_text}}"
-                                   {{end}}  type="text" id="Admin_text" name="Admin_text" required=""  autocomplete="off" class="layui-input">
-
-                        </div>
-                    </div>
-
-                    <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-<!--                        <label for="L_repass" class="layui-form-label"></label>-->
-                        <button class="layui-btn layui-btn-normal" lay-filter="add" lay-submit="">提交</button></div>
-                </form>
-            </div>
-        </div>
-        <script>
-            layui.use(['form', 'layer',"layedit"],
-
-                function() {
-                    $ = layui.jquery;
-                    var form = layui.form,
-                    layer = layui.layer;
-                    var layedit = layui.layedit
-
-                    layedit.set({
-                        uploadImage: {
-                            url: '/UpFile' //接口url
-                        }
-                    });
-
-                    //构建一个默认的编辑器
-                    var index = layedit.build('T_text', {
-                        height: 580 //设置编辑器高度,
-
-                    });
-                    //监听提交
-                    form.on('submit(add)',
-                        function(data) {
-                            console.log("=== submit(add) ==");
-                            console.log(data);
-
-                            $.ajax({
-                                type: 'POST',
-                                url: 'Admin_Post',//发送请求
-                                data: {
-                                    Admin_uuid:"{{.Admin_uuid}}",
-                                    Admin_name:data.field.Admin_name,
-                                    Admin_power:data.field.Admin_power,
-                                    Admin_user:data.field.Admin_user,
-                                    Admin_telephone:data.field.Admin_telephone,
-                                    Admin_mail:data.field.Admin_mail,
-                                    Admin_gender:data.field.Admin_gender,
-                                    Admin_text:data.field.Admin_text,
-
-                                },
-                                success: function(result) {
-                                    console.log(result)
-                                    if(result.Code == 200){
-                                        layer.msg("操作成功", {
-                                            icon: 1,
-                                            time: 2000
-                                        });
-                                        //关闭当前frame
-                                        parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                        parent.location.reload();
-                                        form.render('select');
-                                    }if(result.Code == 210){
-
-
-                                        layer.alert(
-                                            "生成密码:"+result.Data,
-                                            {icon: 6,closeBtn: 0 ,title: "请保管好密码,后期无法呈现"},
-                                            function () {
-                                                //关闭当前frame
-                                                parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                                parent.location.reload();
-                                                form.render('select');
-                                            });
-
-
-                                    }else {
-                                        layer.msg("错误:"+result.Msg, {
-                                            icon: 2,
-                                            time: 2000
-                                        });
-                                    }
-
-                                    //
-
-                                    // return false;
-                                }
-                            });
-
-                            return false;
-                        });
-
-                });
-        </script>
-        <script>
-
-
-            layui.use('upload', function(){
-                var $ = layui.jquery
-                    ,upload = layui.upload;
-
-                //普通图片上传
-                var uploadInst = upload.render({
-                    elem: '#test1'
-                    ,url: '/UpFile' //改成您自己的上传接口
-                    ,before: function(obj){
-                        //预读本地文件示例,不支持ie8
-                        obj.preview(function(index, file, result){
-                            $('#demo1').attr('src', result); //图片链接(base64)
-                        });
-                    }
-                    ,done: function(res){
-
-                        console.log(res)
-                        //如果上传失败
-                        if(res.code != 0){
-                            return layer.msg('上传失败');
-                        }
-                        T_img = res.data.src
-                        console.log(T_img)
-                        //上传成功
-                    }
-                    ,error: function(){
-                        console.log("error")
-
-                        //演示失败状态,并实现重传
-                        var demoText = $('#demoText');
-                        demoText.html('<span style="color: #ff5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
-                        demoText.find('.demo-reload').on('click', function(){
-                            uploadInst.upload();
-                        });
-                    }
-                });
-
-                //绑定原始文件域
-                upload.render({
-                    elem: '#test20'
-                    ,url: 'https://httpbin.org/post' //改成您自己的上传接口
-                    ,done: function(res){
-                        layer.msg('上传成功');
-                        console.log(res)
-                    }
-                });
-
-            });
-        </script>
-    </body>
-
-</html>

+ 0 - 204
views/User/Admin.html

@@ -1,204 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    </head>
-    
-    <body>
-        <div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-                <a><cite>宝智达</cite></a>
-            </span>
-            <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-                <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-            </a>
-        </div>
-        <div class="layui-fluid">
-            <div class="layui-row layui-col-space15">
-                <div class="layui-col-md12">
-                    <div class="layui-card">
-                        <div class="layui-card-body ">
-                            <form class="layui-form layui-col-space5">
-
-
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <input value="{{.Name}}" type="text" name="Name" placeholder="请输入 名称" autocomplete="off" class="layui-input"></div>
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach">
-                                        <i class="layui-icon">&#xe615;</i></button>
-                                </div>
-                            </form>
-                        </div>
-
-
-                        <div class="layui-card-header">
-<!--                            <button class="layui-btn layui-btn-danger" onclick="delAll()">-->
-<!--                                <i class="layui-icon"></i>批量删除</button>-->
-                            <button class="layui-btn  layui-btn-normal" onclick="xadmin.open('添加','Admin_?id=0',500,600,false);">
-                                <i class="layui-icon"></i>添加</button></div>
-
-                        <div class="layui-card-body ">
-                            <table class="layui-table layui-form">
-                                <thead>
-                                    <tr>
-                                        <th>编号</th>
-                                        <th>名称</th>
-                                        <th>账号</th>
-                                        <th>权限</th>
-                                        <th>电话</th>
-                                        <th>邮箱</th>
-                                        <th>性别</th>
-                                        <th>备注</th>
-                                        <th>创建时间</th>
-
-                                        <th>操作</th>
-
-                                    </tr>
-                                </thead>
-                                <tbody>
-                                {{range $index, $elem := .List}}
-                                    <tr>
-
-                                        <td>{{$elem.Admin_uuid}}</td>
-                                        <td>{{$elem.Admin_name}}</td>
-                                        <td>{{$elem.Admin_user}}</td>
-                                        <td>
-                                            {{range $index, $elemx := $.Power_List}}
-                                            {{if eq $elem.Admin_power $elemx.Id }}
-                                            {{$elemx.Power_name}}
-                                            {{end}}
-                                            {{end}}
-
-                                        </td>
-                                        <td>{{$elem.Admin_telephone}}</td>
-                                        <td>{{$elem.Admin_mail}}</td>
-                                        <td>
-                                            {{if eq $elem.Admin_gender 0 }}
-                                                未知
-                                            {{end}}
-                                            {{if eq $elem.Admin_gender 1 }}
-                                                男
-                                            {{end}}
-                                            {{if eq $elem.Admin_gender 2 }}
-                                                女
-                                            {{end}}
-                                        </td>
-                                        <td>{{$elem.Admin_text}}</td>
-                                        <td>{{$elem.CreateTime}}</td>
-
-                                        <td class="td-manage">
-                                            <a title="编辑" onclick="xadmin.open('编辑','Admin_?id={{$elem.Id}}&Admin_uuid={{$elem.Admin_uuid}}',500,600,false);" href="javascript:;">
-                                                <i class="layui-icon">&#xe63c;</i></a>
-                                            <a title="删除" onclick="member_del(this,'{{$elem.Admin_uuid}}')" href="javascript:;">
-                                                <i class="layui-icon">&#xe640;</i></a>
-                                        </td>
-
-                                    </tr>
-
-                                {{end}}
-
-
-                                </tbody>
-                            </table>
-                        </div>
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div>
-
-                                    {{range $index, $elem := .Pages}}
-                                        {{if eq $elem.A 1}}
-                                        <a class="prev" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&lt;&lt;</a>
-                                        {{end}}
-                                        {{if eq $elem.A 2}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 3}}
-                                        <span class="current">{{$elem.V}}</span>
-                                        {{end}}
-                                        {{if eq $elem.A 4}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 5}}
-                                        <a class="next" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&gt;&gt;</a>
-                                        {{end}}
-
-
-
-                                    {{end}}
-
-
-
-                                </div>
-                                Page:{{.Page}}-
-                                Page_size:{{.Page_size}}-
-                                cnt:{{.cnt}}
-                            </div>
-                        </div>
-
-
-                    </div>
-                </div>
-            </div>
-        </div>
-    </body>
-    <script>
-        layui.use(['laydate', 'form'],
-            function() {
-                var laydate = layui.laydate;
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#start' //指定元素
-                });
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#end' //指定元素
-            });
-        });
-        /*用户-删除*/
-        function member_del(obj, Admin_uuid) {
-            layer.confirm('确认要删除吗?',
-            function(index) {
-                //发异步删除数据
-                $(obj).parents("tr").remove();
-
-                $.ajax({
-                    type: 'POST',
-                    url: 'Admin_Del',//发送请求
-                    data: {Admin_uuid:Admin_uuid},
-                    success: function(result) {
-                        console.log(result)
-                        if (result.Code == 200 ){
-                            layer.msg('已删除!', {
-                                icon: 1,
-                                time: 2000
-                            });
-                            window.location.reload();
-                        }else {
-                            layer.msg('删除失败!', {
-                                time: 2000
-                            });
-                        }
-
-                    }
-                });
-
-
-
-            });
-        }
-    </script>
-
-</html>

+ 0 - 362
views/User/Power-.html

@@ -1,362 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-    <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]--></head>
-
-<body>
-<div class="layui-fluid">
-    <div class="layui-row">
-        <form class="layui-form layui-form-pane">
-            <div class="layui-form-item" style="margin-top: 20px">
-                <label for="Power_name" class="layui-form-label">
-                    <span class="x-red">*</span>权限名称</label>
-                <div class="layui-input-inline">
-                    <input {{if gt .id 0 }}
-                           value="{{.Date.Power_name}}"
-                           {{end}} type="text" id="Power_name" name="Power_name" required="" lay-verify="required"
-                           autocomplete="off" class="layui-input"></div>
-            </div>
-
-            <div class="layui-form-item layui-form-text">
-                <label class="layui-form-label">
-                    拥有权限
-                </label>
-                <table class="layui-table layui-input-block">
-                    <tbody>
-                    <tr>
-                        <td width="50px">
-                            <span>内部人员</span>
-                        </td>
-                        <td>
-                            <div class="layui-input-block">
-                                <input type="checkbox" id="Power_Administration" name="Power_Administration" value='1'
-                                       {{if gt $.id 0 }}
-                                       {{if eq $.Date.Power_Administration 1 }}
-                                       checked="checked"
-                                       {{end}}
-                                       {{end}}
-                                       class='checkone' lay-skin="primary" TITLE="内部人员">
-                            </div>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span>管理员</span>
-                        </td>
-                        <td>
-
-                            <div class="layui-input-block">
-                                <input type="checkbox" id="Power_User_r" name="Power_User_r" value='1'
-                                       {{if gt $.id 0 }}
-                                       {{if eq $.Date.Power_User_r 1 }}
-                                       checked="checked"
-                                       {{end}}
-                                       {{end}}
-                                       class='checkone' lay-skin="primary" title="用户管理">
-                                <input type="checkbox" id="Power_User_e" name="Power_User_e" value='1'
-                                       {{if gt $.id 0 }}
-                                       {{if eq $.Date.Power_User_e 1 }}
-                                       checked="checked"
-                                       {{end}}
-                                       {{end}}
-                                       class='checkone' lay-skin="primary" title="创建、编辑、删除 -用户管理">
-
-
-                                <input type="checkbox" id="Power_User_entry" name="Power_User_entry" value='1'
-                                       {{if gt $.id 0 }}
-                                       {{if eq $.Date.Power_User_entry 1 }}
-                                       checked="checked"
-                                       {{end}}
-                                       {{end}}
-                                       class='checkone' lay-skin="primary" title="无钥匙进入 -用户管理">
-
-                            </div>
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>
-                            <span>设备管理</span>
-                        </td>
-                        <td>
-                            <div class="layui-input-block">
-                                <input type="checkbox" id="Power_Device_r" name="Power_Device_r" value='1'
-                                       {{if gt $.id 0 }}
-                                       {{if eq $.Date.Power_Device_r 1 }}
-                                       checked="checked"
-                                       {{end}}
-                                       {{end}}
-                                       class='checkone' lay-skin="primary" title="设备管理">
-
-
-                                <input type="checkbox" id="Power_Device_Parameter_e" name="Power_Device_Parameter_e" value='1'
-                                       {{if gt $.id 0 }}
-                                       {{if eq $.Date.Power_Device_Parameter_e 1 }}
-                                       checked="checked"
-                                       {{end}}
-                                       {{end}}
-                                       class='checkone' lay-skin="primary" title="设备参数设置">
-
-                                <input type="checkbox" id="Power_DeviceSensor_Parameter_e" name="Power_DeviceSensor_Parameter_e" value='1'
-                                       {{if gt $.id 0 }}
-                                       {{if eq $.Date.Power_DeviceSensor_Parameter_e 1 }}
-                                       checked="checked"
-                                       {{end}}
-                                       {{end}}
-                                       class='checkone' lay-skin="primary" title="传感器参数设置">
-
-
-                                <input type="checkbox" id="Power_DeviceSensor_Compensate_e" name="Power_DeviceSensor_Compensate_e" value='1'
-                                       {{if gt $.id 0 }}
-                                       {{if eq $.Date.Power_DeviceSensor_Compensate_e 1 }}
-                                       checked="checked"
-                                       {{end}}
-                                       {{end}}
-                                       class='checkone' lay-skin="primary" title="二级报警">
-
-                                <input type="checkbox" id="Power_Device_a" name="Power_Device_a" value='1'
-                                       {{if gt $.id 0 }}
-                                       {{if eq $.Date.Power_Device_a 1 }}
-                                       checked="checked"
-                                       {{end}}
-                                       {{end}}
-                                       class='checkone' lay-skin="primary" title="设备添加 [内部]">
-
-                            </div>
-                            <div class="layui-input-block">
-                                <input type="checkbox" disabled="disabled" value='1' checked="checked" class='checkone' lay-skin="primary" title="设备报警">
-
-                                <input type="checkbox" id="Power_Device_Bind_e" name="Power_Device_Bind_e" value='1'
-                                       {{if gt $.id 0 }}
-                                       {{if eq $.Date.Power_Device_Bind_e 1 }}
-                                       checked="checked"
-                                       {{end}}
-                                       {{end}}
-                                       class='checkone' lay-skin="primary" title="设备绑定">
-
-
-                                <input type="checkbox" id="Power_DeviceSensor_Class" name="Power_DeviceSensor_Class" value='1'
-                                       {{if gt $.id 0 }}
-                                       {{if eq $.Date.Power_DeviceSensor_Class 1 }}
-                                       checked="checked"
-                                       {{end}}
-                                       {{end}}
-                                       class='checkone' lay-skin="primary" title="传感器分类">
-                            </div>
-                        </td>
-                    </tr>
-
-
-                    <tr>
-                        <td>
-                            <span>数据展示</span>
-                        </td>
-                        <td>
-                            <input type="checkbox" disabled="disabled" value='1' checked="checked" class='checkone' lay-skin="primary" title="数据展示">
-
-                            <input type="checkbox" id="Power_DataScreen_r" name="Power_DataScreen_r" value='1'
-                                   {{if gt $.id 0 }}
-                                   {{if eq $.Date.Power_DataScreen_r 1 }}
-                                   checked="checked"
-                                   {{end}}
-                                   {{end}}
-                                   class='checkone' lay-skin="primary" title="大数据平台">
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span>系统管理</span>
-                        </td>
-                        <td>
-                            <div class="layui-input-block">
-                                <input type="checkbox" id="Logs_Sys_r" name="Logs_Sys_r" value='1'
-                                       {{if gt $.id 0 }}
-                                       {{if eq $.Date.Logs_Sys_r 1 }}
-                                       checked="checked"
-                                       {{end}}
-                                       {{end}}
-                                       class='checkone' lay-skin="primary" title="系统日志 [内部]">
-                                <input type="checkbox" id="Logs_User_r" name="Logs_User_r" value='1'
-                                       {{if gt $.id 0 }}
-                                       {{if eq $.Date.Logs_User_r 1 }}
-                                       checked="checked"
-                                       {{end}}
-                                       {{end}}
-                                       class='checkone' lay-skin="primary" title="用户日志">
-
-                            </div>
-                        </td>
-                    </tr>
-                    </tbody>
-                </table>
-            </div>
-
-            <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-                <!--                        <label for="L_repass" class="layui-form-label"></label>-->
-                <button class="layui-btn  layui-btn-normal" lay-filter="add" lay-submit="">提交</button>
-            </div>
-        </form>
-    </div>
-</div>
-<script>
-    layui.use(['form', 'layer', "layedit"],
-
-        function () {
-            $ = layui.jquery;
-            var form = layui.form,
-                layer = layui.layer;
-            var layedit = layui.layedit
-
-            layedit.set({
-                uploadImage: {
-                    url: '/UpFile' //接口url
-                }
-            });
-
-            //构建一个默认的编辑器
-            var index = layedit.build('T_text', {
-                height: 580 //设置编辑器高度,
-
-            });
-
-            function checkone_get(tt) {
-                if (tt == undefined) {
-                    return 0
-                }
-                return 1
-            }
-
-            //监听提交
-            form.on('submit(add)',
-                function (data) {
-                    console.log("=== submit(add) ==");
-                    console.log(data);
-                    // console.log(data.field.Power_Admin);
-                    // console.log($("#Power_Admin").attr("checked", "checked"););
-
-                    $.ajax({
-                        type: 'POST',
-                        url: 'Power_Post',//发送请求
-                        data: {
-                            id: "{{.id}}",
-                            Power_name: data.field.Power_name,
-                            Power_Administration: checkone_get(data.field.Power_Administration),
-                            Power_Admin_r: checkone_get(data.field.Power_Admin_r),
-                            Power_Admin_e: checkone_get(data.field.Power_Admin_e),
-                            Power_User_r: checkone_get(data.field.Power_User_r),
-                            Power_User_entry: checkone_get(data.field.Power_User_entry),
-                            Power_Power_r: checkone_get(data.field.Power_Power_r),
-                            Power_Power_e: checkone_get(data.field.Power_Power_e),
-                            Power_Device_r: checkone_get(data.field.Power_Device_r),
-                            Power_Device_a: checkone_get(data.field.Power_Device_a),
-                            Power_Device_Parameter_e: checkone_get(data.field.Power_Device_Parameter_e),
-                            Power_DeviceSensor_Parameter_e: checkone_get(data.field.Power_DeviceSensor_Parameter_e),
-                            Power_Device_Bind_e: checkone_get(data.field.Power_Device_Bind_e),
-                            Power_DeviceSensor_Compensate_e: checkone_get(data.field.Power_DeviceSensor_Compensate_e),
-                            Power_DeviceSensor_Class: checkone_get(data.field.Power_DeviceSensor_Class),
-                            Power_DataScreen_r: checkone_get(data.field.Power_DataScreen_r),
-                            Logs_Sys_r: checkone_get(data.field.Logs_Sys_r),
-                            Logs_User_r: checkone_get(data.field.Logs_User_r),
-
-                        },
-                        success: function (result) {
-                            console.log(result)
-                            if (result.Code == 200) {
-                                layer.msg("操作成功", {
-                                    icon: 1,
-                                    time: 2000
-                                });
-                            } else {
-                                layer.msg("错误:" + result.Msg, {
-                                    icon: 2,
-                                    time: 2000
-                                });
-                            }
-
-                            //
-                            //关闭当前frame
-                            parent.layer.close(parent.layer.getFrameIndex(window.name));
-                            parent.location.reload();
-
-                            form.render('select');
-                            // return false;
-                        }
-                    });
-
-                    return false;
-                });
-
-        });
-</script>
-<script>
-
-
-    layui.use('upload', function () {
-        var $ = layui.jquery
-            , upload = layui.upload;
-
-        //普通图片上传
-        var uploadInst = upload.render({
-            elem: '#test1'
-            , url: '/UpFile' //改成您自己的上传接口
-            , before: function (obj) {
-                //预读本地文件示例,不支持ie8
-                obj.preview(function (index, file, result) {
-                    $('#demo1').attr('src', result); //图片链接(base64)
-                });
-            }
-            , done: function (res) {
-
-                console.log(res)
-                //如果上传失败
-                if (res.code != 0) {
-                    return layer.msg('上传失败');
-                }
-                T_img = res.data.src
-                console.log(T_img)
-                //上传成功
-            }
-            , error: function () {
-                console.log("error")
-
-                //演示失败状态,并实现重传
-                var demoText = $('#demoText');
-                demoText.html('<span style="color: #ff5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
-                demoText.find('.demo-reload').on('click', function () {
-                    uploadInst.upload();
-                });
-            }
-        });
-
-        //绑定原始文件域
-        upload.render({
-            elem: '#test20'
-            , url: 'https://httpbin.org/post' //改成您自己的上传接口
-            , done: function (res) {
-                layer.msg('上传成功');
-                console.log(res)
-            }
-        });
-
-    });
-</script>
-</body>
-
-</html>

+ 0 - 232
views/User/Power.html

@@ -1,232 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    </head>
-    
-    <body>
-        <div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-                <a><cite>宝智达</cite></a>
-            </span>
-            <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-                <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-            </a>
-        </div>
-        <div class="layui-fluid">
-            <div class="layui-row layui-col-space15">
-                <div class="layui-col-md12">
-                    <div class="layui-card">
-                        <div class="layui-card-body ">
-                            <form class="layui-form layui-col-space5">
-
-
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <input value="{{.Name}}" type="text" name="Name" placeholder="请输入 名称" autocomplete="off" class="layui-input"></div>
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach">
-                                        <i class="layui-icon">&#xe615;</i></button>
-                                </div>
-                            </form>
-                        </div>
-
-                        <div class="layui-card-header">
-<!--                            <button class="layui-btn layui-btn-danger" onclick="delAll()">-->
-<!--                                <i class="layui-icon"></i>批量删除</button>-->
-                            <button class="layui-btn  layui-btn-normal" onclick="xadmin.open('添加','Power_',800,600,true);">
-                                <i class="layui-icon"></i>添加</button></div>
-
-                        <div class="layui-card-body ">
-                            <table class="layui-table layui-form">
-                                <thead>
-                                    <tr>
-                                        <th>权限名称</th>
-                                        <th>内部人员</th>
-                                        <th>用户管理</th>
-                                        <th>设备管理</th>
-                                        <th>系统管理</th>
-                                        <th>操作</th></tr>
-                                </thead>
-                                <tbody>
-                                {{range $index, $elem := .List}}
-                                    <tr>
-
-                                        <td>{{$elem.Power_name}}</td>
-                                        <td>
-                                            {{if eq $elem.Power_Administration 0 }}×{{end}}
-                                            {{if eq $elem.Power_Administration 1 }}✔{{end}}
-                                        </td>
-
-                                        <td>
-                                            用户管理:
-                                            {{if eq $elem.Power_User_r 0 }}×{{end}}
-                                            {{if eq $elem.Power_User_r 1 }}✔{{end}}
-                                            无钥匙进入:
-                                            {{if eq $elem.Power_User_entry 0 }}×{{end}}
-                                            {{if eq $elem.Power_User_entry 1 }}✔{{end}}
-                                        </td>
-
-                                        <td>
-                                            设备管理:
-                                            {{if eq $elem.Power_Device_r 0 }}×{{end}}
-                                            {{if eq $elem.Power_Device_r 1 }}✔{{end}}
-                                            设备添加:
-                                            {{if eq $elem.Power_Device_a 0 }}×{{end}}
-                                            {{if eq $elem.Power_Device_a 1 }}✔{{end}}
-                                            设备参数操作:
-                                            {{if eq $elem.Power_Device_Parameter_e 0 }}×{{end}}
-                                            {{if eq $elem.Power_Device_Parameter_e 1 }}✔{{end}}
-                                            传感器参数操作:
-                                            {{if eq $elem.Power_DeviceSensor_Parameter_e 0 }}×{{end}}
-                                            {{if eq $elem.Power_DeviceSensor_Parameter_e 1 }}✔{{end}}
-                                            二级报警:
-                                            {{if eq $elem.Power_DeviceSensor_Compensate_e 0 }}×{{end}}
-                                            {{if eq $elem.Power_DeviceSensor_Compensate_e 1 }}✔{{end}}
-                                            设备绑定:
-                                            {{if eq $elem.Power_Device_Bind_e 0 }}×{{end}}
-                                            {{if eq $elem.Power_Device_Bind_e 1 }}✔{{end}}
-                                            传感器分类:
-                                            {{if eq $elem.Power_DeviceSensor_Class 0 }}×{{end}}
-                                            {{if eq $elem.Power_DeviceSensor_Class 1 }}✔{{end}}
-
-                                        </td>
-                                        <td>
-                                            系统日志:
-                                            {{if eq $elem.Logs_Sys_r 0 }}×{{end}}
-                                            {{if eq $elem.Logs_Sys_r 1 }}✔{{end}}
-                                            用户日志:
-                                            {{if eq $elem.Logs_User_r 0 }}×{{end}}
-                                            {{if eq $elem.Logs_User_r 1 }}✔{{end}}
-
-                                        </td>
-
-                                            <td class="td-manage">
-                                                <a title="编辑" onclick="xadmin.open('编辑','Power_?id={{$elem.Id}}');" href="javascript:;">
-                                                    <i class="layui-icon">&#xe63c;</i></a>
-                                                <a title="删除" onclick="member_del(this,'{{$elem.Id}}')" href="javascript:;">
-                                                    <i class="layui-icon">&#xe640;</i></a>
-                                            </td>
-
-                                    </tr>
-
-                                {{end}}
-
-
-                                </tbody>
-                            </table>
-                        </div>
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div>
-
-                                    {{range $index, $elem := .Pages}}
-                                        {{if eq $elem.A 1}}
-                                        <a class="prev" href="?page={{$elem.V}}&Name={{$.Name}}">&lt;&lt;</a>
-                                        {{end}}
-                                        {{if eq $elem.A 2}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 3}}
-                                        <span class="current">{{$elem.V}}</span>
-                                        {{end}}
-                                        {{if eq $elem.A 4}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 5}}
-                                        <a class="next" href="?page={{$elem.V}}&Name={{$.Name}}">&gt;&gt;</a>
-                                        {{end}}
-
-
-
-                                    {{end}}
-
-
-
-                                </div>
-                                Page:{{.Page}}-
-                                Page_size:{{.Page_size}}-
-                                cnt:{{.cnt}}
-                            </div>
-                        </div>
-
-
-                    </div>
-                </div>
-            </div>
-        </div>
-    </body>
-    <script>
-        layui.use(['laydate', 'form'],
-            function() {
-                var laydate = layui.laydate;
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#start' //指定元素
-                });
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#end' //指定元素
-            });
-        });
-        /*用户-删除*/
-        function member_del(obj, id) {
-            layer.confirm('确认要删除吗?',
-            function(index) {
-                //发异步删除数据
-                $(obj).parents("tr").remove();
-
-                $.ajax({
-                    type: 'POST',
-                    url: 'Power_Del',//发送请求
-                    data: {Id:id},
-                    success: function(result) {
-                        console.log(result)
-                        if (result.Code == 200 ){
-                            layer.msg('已删除!', {
-                                icon: 1,
-                                time: 2000
-                            });
-                            window.location.reload();
-                        }else if (result.Code == 203 ){
-                            layer.msg('没有权限', {
-                                icon: 1,
-                                time: 2000
-                            });
-                            window.location.reload();
-                        }else if (result.Code == 205 ){
-                            layer.msg(result.Msg, {
-                                icon: 1,
-                                time: 2000
-                            });
-                            window.location.reload();
-                        }else {
-                            layer.msg('删除失败!', {
-                                icon: 1,
-                                time: 2000
-                            });
-                            window.location.reload();
-                        }
-
-                    }
-                });
-
-
-
-            });
-        }
-    </script>
-
-</html>

+ 0 - 280
views/User/User-.html

@@ -1,280 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-    <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    <script src="https://osscold.baozhida.cn/js/pingying.js"></script>
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]--></head>
-
-<body>
-<div class="layui-fluid">
-    <div class="layui-row">
-        <form class="layui-form">
-
-            <div class="layui-form-item" style="margin-top: 20px">
-                <label for="Admin_name" class="layui-form-label">
-                    <span class="x-red">*</span>名称</label>
-                <div class="layui-input-inline">
-                    <input {{if gt .id 0 }}
-                           value="{{.Date.Admin_name}}"
-                           {{end}}  type="text" onchange="f_onchange()" id="Admin_name" name="Admin_name" required="" lay-verify="required" autocomplete="off" class="layui-input">
-
-                </div>
-            </div>
-            <div class="layui-form-item">
-                <label class="layui-form-label">
-                    <span class="x-red">*</span>权限</label>
-                <div class="layui-input-inline">
-                    <select  lay-filter="Admin_power" id="Admin_power" name="Admin_power" class="valid" >
-                        {{range $index, $elem := .Power_List}}
-                        <option value="{{$elem.Id}}" {{if gt $.id 0 }}
-                                {{if eq $.Date.Admin_power $elem.Id }}
-                                selected
-                                {{end}}
-                                {{end}}
-                        >{{$elem.Power_name}}</option>
-                        {{end}}
-
-                    </select>
-                </div>
-            </div>
-            {{if eq .id 0 }}
-                <div class="layui-form-item">
-                    <label for="Admin_user" class="layui-form-label">
-                        <span class="x-red">*</span>账号</label>
-                    <div class="layui-input-inline">
-                        <input {{if gt .id 0 }}
-                               value="{{.Date.Admin_user}}"
-                               {{end}} id="Admin_user" name="Admin_user" style="color: #1A1B20"  class="layui-input " type="text" required="" autocomplete="off"  ></div>
-                </div>
-
-                <div class="layui-form-item">
-                    <label class="layui-form-label">
-                        <span class="x-red">*</span>密码</label>
-                    <div class="layui-input-inline">
-                        <input   disabled readonly class="layui-input layui-disabled"
-                                 value="密码会自动生成"
-                                 type="text" required="" autocomplete="off" class="layui-input">
-
-                    </div>
-                </div>
-            {{end}}
-            <div class="layui-form-item">
-                <label class="layui-form-label">性别</label>
-                <div class="layui-input-inline">
-                    <select   id="Admin_gender" name="Admin_gender" class="valid" >
-
-                        <option value="0" {{if gt $.id 0 }}
-                                {{if eq 0 .Date.Admin_gender }}
-                                selected
-                                {{end}}
-                                {{end}}
-                        >未知</option>
-                        <option value="1" {{if gt $.id 0 }}
-                                {{if eq 1 .Date.Admin_gender }}
-                                selected
-                                {{end}}
-                                {{end}}
-                        >男</option>
-                        <option value="2" {{if gt $.id 0 }}
-                                {{if eq 2 .Date.Admin_gender }}
-                                selected
-                                {{end}}
-                                {{end}}
-                        >女</option>
-
-                    </select>
-                </div>
-            </div>
-            <div class="layui-form-item">
-                <label for="Admin_telephone" class="layui-form-label">电话</label>
-                <div class="layui-input-inline">
-                    <input {{if gt .id 0 }}
-                           value="{{.Date.Admin_telephone}}"
-                           {{end}}  type="text" id="Admin_telephone" name="Admin_telephone" required="" autocomplete="off" class="layui-input">
-
-                </div>
-            </div>
-            <div class="layui-form-item">
-                <label for="Admin_mail" class="layui-form-label">邮箱</label>
-                <div class="layui-input-inline">
-                    <input {{if gt .id 0 }}
-                           value="{{.Date.Admin_mail}}"
-                           {{end}}  type="text" id="Admin_mail" name="Admin_mail" required=""  autocomplete="off" class="layui-input">
-
-                </div>
-            </div>
-            <div class="layui-form-item">
-                <label for="Admin_text" class="layui-form-label">
-                    备注</label>
-                <div class="layui-input-inline">
-                    <input {{if gt .id 0 }}
-                           value="{{.Date.Admin_text}}"
-                           {{end}}  type="text" id="Admin_text" name="Admin_text" required=""  autocomplete="off" class="layui-input">
-
-                </div>
-            </div>
-
-            <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-                <!--                        <label for="L_repass" class="layui-form-label"></label>-->
-                <button class="layui-btn layui-btn-normal" lay-filter="add" lay-submit="">提交</button></div>
-        </form>
-    </div>
-</div>
-<script>
-    
-    function f_onchange() {
-        $("#Admin_user").val(codefans_net_CC2PY($("#Admin_name").val()))
-    }
-    
-    layui.use(['form', 'layer',"layedit"],
-
-        function() {
-            $ = layui.jquery;
-            var form = layui.form,
-                layer = layui.layer;
-            var layedit = layui.layedit
-
-            layedit.set({
-                uploadImage: {
-                    url: '/UpFile' //接口url
-                }
-            });
-
-            //构建一个默认的编辑器
-            var index = layedit.build('T_text', {
-                height: 580 //设置编辑器高度,
-
-            });
-            //监听提交
-            form.on('submit(add)',
-                function(data) {
-                    console.log("=== submit(add) ==");
-                    console.log(data);
-
-                    $.ajax({
-                        type: 'POST',
-                        url: 'User_Post',//发送请求
-                        data: {
-                            Admin_uuid:"{{.Admin_uuid}}",
-                            Admin_name:data.field.Admin_name,
-                            Admin_power:data.field.Admin_power,
-                            Admin_user:data.field.Admin_user,
-                            Admin_telephone:data.field.Admin_telephone,
-                            Admin_mail:data.field.Admin_mail,
-                            Admin_gender:data.field.Admin_gender,
-                            Admin_text:data.field.Admin_text,
-
-                        },
-                        success: function(result) {
-                            console.log(result)
-                            if(result.Code == 200){
-                                layer.msg("操作成功", {
-                                    icon: 1,
-                                    time: 2000
-                                });
-                                //关闭当前frame
-                                parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                parent.location.reload();
-                                form.render('select');
-                            }else if(result.Code == 210){
-
-
-                                layer.alert(
-                                    "生成密码:"+result.Data,
-                                    {icon: 6,closeBtn: 0 ,title: "请保管好密码,后期无法呈现"},
-                                    function () {
-                                        //关闭当前frame
-                                        parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                        parent.location.reload();
-                                        form.render('select');
-                                    });
-
-
-                            }else {
-                                layer.msg("错误:"+result.Msg, {
-                                    icon: 2,
-                                    time: 2000
-                                });
-                            }
-
-                            //
-
-                            // return false;
-                        }
-                    });
-
-                    return false;
-                });
-
-        });
-</script>
-<script>
-
-
-    layui.use('upload', function(){
-        var $ = layui.jquery
-            ,upload = layui.upload;
-
-        //普通图片上传
-        var uploadInst = upload.render({
-            elem: '#test1'
-            ,url: '/UpFile' //改成您自己的上传接口
-            ,before: function(obj){
-                //预读本地文件示例,不支持ie8
-                obj.preview(function(index, file, result){
-                    $('#demo1').attr('src', result); //图片链接(base64)
-                });
-            }
-            ,done: function(res){
-
-                console.log(res)
-                //如果上传失败
-                if(res.code != 0){
-                    return layer.msg('上传失败');
-                }
-                T_img = res.data.src
-                console.log(T_img)
-                //上传成功
-            }
-            ,error: function(){
-                console.log("error")
-
-                //演示失败状态,并实现重传
-                var demoText = $('#demoText');
-                demoText.html('<span style="color: #ff5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
-                demoText.find('.demo-reload').on('click', function(){
-                    uploadInst.upload();
-                });
-            }
-        });
-
-        //绑定原始文件域
-        upload.render({
-            elem: '#test20'
-            ,url: 'https://httpbin.org/post' //改成您自己的上传接口
-            ,done: function(res){
-                layer.msg('上传成功');
-                console.log(res)
-            }
-        });
-
-    });
-</script>
-</body>
-
-</html>

+ 0 - 270
views/User/User-Info.html

@@ -1,270 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/layui/css/layui.css">
-    <script type="text/javascript" src="https://osscold.baozhida.cn/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/jquery.min.js"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/jquery.md5.js" ></script>
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]--></head>
-
-<body>
-<div class="layui-fluid">
-    <div class="layui-row">
-        <form class="layui-form">
-
-            <div class="layui-form-item" style="margin-top: 20px">
-                <label for="Admin_name" class="layui-form-label">
-                    <span class="x-red">*</span>名称</label>
-                <div class="layui-input-inline">
-                    <input
-                           value="{{.Date.Admin_name}}"
-                           type="text" id="Admin_name" name="Admin_name" required="" lay-verify="required" autocomplete="off" class="layui-input">
-
-                </div>
-            </div>
-
-                <div class="layui-form-item">
-                    <label for="Admin_user" class="layui-form-label">
-                        账号</label>
-                    <div class="layui-input-inline">
-                        <input  disabled readonly
-                               value="{{.Date.Admin_user}}"
-                                 type="text" id="Admin_user" name="Admin_user" required="" lay-verify="required" autocomplete="off" class="layui-input"></div>
-                </div>
-
-                <div class="layui-form-item">
-                    <label for="Admin_pass" class="layui-form-label">
-                        密码</label>
-                    <div class="layui-input-inline" >
-                        <input  class="layui-input " id="Admin_pass" name="Admin_pass" placeholder="请输入新密码(不修改则不填)"
-                                 value=""
-                                 type="text" required="" autocomplete="off" class="layui-input">
-
-                    </div>
-                </div>
-
-            <div class="layui-form-item">
-                <label class="layui-form-label">性别</label>
-                <div class="layui-input-inline">
-                    <select   id="Admin_gender" name="Admin_gender" class="valid" >
-
-                        <option value="0" {{if gt $.id 0 }}
-                                {{if eq 0 .Date.Admin_gender }}
-                                selected
-                                {{end}}
-                                {{end}}
-                        >未知</option>
-                        <option value="1" {{if gt $.id 0 }}
-                                {{if eq 1 .Date.Admin_gender }}
-                                selected
-                                {{end}}
-                                {{end}}
-                        >男</option>
-                        <option value="2" {{if gt $.id 0 }}
-                                {{if eq 2 .Date.Admin_gender }}
-                                selected
-                                {{end}}
-                                {{end}}
-                        >女</option>
-
-                    </select>
-                </div>
-            </div>
-            <div class="layui-form-item">
-                <label for="Admin_telephone" class="layui-form-label">电话</label>
-                <div class="layui-input-inline">
-                    <input {{if gt .id 0 }} placeholder="请输入电话"
-                           value="{{.Date.Admin_telephone}}"
-                           {{end}}  type="text" id="Admin_telephone" name="Admin_telephone" required="" autocomplete="off" class="layui-input">
-
-                </div>
-            </div>
-            <div class="layui-form-item">
-                <label for="Admin_mail" class="layui-form-label">邮箱</label>
-                <div class="layui-input-inline">
-                    <input {{if gt .id 0 }} placeholder="请输入邮箱"
-                           value="{{.Date.Admin_mail}}"
-                           {{end}}  type="text" id="Admin_mail" name="Admin_mail" required=""  autocomplete="off" class="layui-input">
-
-                </div>
-            </div>
-            <div class="layui-form-item">
-                <label for="Admin_text" class="layui-form-label">
-                    备注</label>
-                <div class="layui-input-inline">
-                    <input {{if gt .id 0 }}  placeholder="请输入备注"
-                           value="{{.Date.Admin_text}}"
-                           {{end}}  type="text" id="Admin_text" name="Admin_text" required=""  autocomplete="off" class="layui-input">
-
-                </div>
-            </div>
-
-            <div class="layui-form-item" style="text-align: center;margin-top: 20px">
-                <!--                        <label for="L_repass" class="layui-form-label"></label>-->
-                <button class="layui-btn layui-btn-normal" lay-filter="add" lay-submit="">提交</button></div>
-        </form>
-    </div>
-</div>
-<script>
-
-    function md5xx(xx) {
-        return $.md5(xx)
-    }
-    layui.use(['form', 'layer',"layedit"],
-
-        function() {
-            $ = layui.jquery;
-            var form = layui.form,
-                layer = layui.layer;
-            var layedit = layui.layedit
-
-            layedit.set({
-                uploadImage: {
-                    url: '/UpFile' //接口url
-                }
-            });
-
-            //构建一个默认的编辑器
-            var index = layedit.build('T_text', {
-                height: 580 //设置编辑器高度,
-
-            });
-            //监听提交
-            form.on('submit(add)',
-                function(data) {
-                    console.log("=== submit(add) ==");
-                    console.log(data);
-                    Admin_pass = ""
-                    if(data.field.Admin_pass.length <= 6 && data.field.Admin_pass.length > 0){
-                        layer.msg("密码必须 6 个字符以上", {
-                            icon: 1,
-                            time: 2000
-                        });
-
-                        return false;
-                    }
-                    if(data.field.Admin_pass.length > 6){
-                        Admin_pass = md5xx(data.field.Admin_pass)
-                    }
-
-                    $.ajax({
-                        type: 'POST',
-                        url: 'User_Post',//发送请求
-                        data: {
-                            Admin_uuid:"{{.Date.Admin_uuid}}",
-                            Admin_name:data.field.Admin_name,
-                            Admin_pass:Admin_pass,
-                            Admin_user:data.field.Admin_user,
-                            Admin_telephone:data.field.Admin_telephone,
-                            Admin_mail:data.field.Admin_mail,
-                            Admin_gender:data.field.Admin_gender,
-                            Admin_text:data.field.Admin_text,
-
-                        },
-                        success: function(result) {
-                            console.log(result)
-                            if(result.Code == 200){
-                                layer.msg("操作成功", {
-                                    icon: 1,
-                                    time: 2000
-                                });
-
-                                if(data.field.Admin_pass.length > 6){
-
-                                    window.parent.location.href ='../Login';
-
-                                }else {
-                                    // 关闭当前frame
-                                    parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                    parent.location.reload();
-                                }
-
-
-                            }else {
-                                layer.msg("错误:"+result.Msg, {
-                                    icon: 2,
-                                    time: 2000
-                                });
-                            }
-
-                            //
-
-                            // return false;
-                        }
-                    });
-
-                    return false;
-                });
-
-        });
-</script>
-<script>
-
-
-    layui.use('upload', function(){
-        var $ = layui.jquery
-            ,upload = layui.upload;
-
-        //普通图片上传
-        var uploadInst = upload.render({
-            elem: '#test1'
-            ,url: '/UpFile' //改成您自己的上传接口
-            ,before: function(obj){
-                //预读本地文件示例,不支持ie8
-                obj.preview(function(index, file, result){
-                    $('#demo1').attr('src', result); //图片链接(base64)
-                });
-            }
-            ,done: function(res){
-
-                console.log(res)
-                //如果上传失败
-                if(res.code != 0){
-                    return layer.msg('上传失败');
-                }
-                T_img = res.data.src
-                console.log(T_img)
-                //上传成功
-            }
-            ,error: function(){
-                console.log("error")
-
-                //演示失败状态,并实现重传
-                var demoText = $('#demoText');
-                demoText.html('<span style="color: #ff5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
-                demoText.find('.demo-reload').on('click', function(){
-                    uploadInst.upload();
-                });
-            }
-        });
-
-        //绑定原始文件域
-        upload.render({
-            elem: '#test20'
-            ,url: 'https://httpbin.org/post' //改成您自己的上传接口
-            ,done: function(res){
-                layer.msg('上传成功');
-                console.log(res)
-            }
-        });
-
-    });
-</script>
-</body>
-
-</html>

+ 0 - 301
views/User/User.html

@@ -1,301 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-    <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-    <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-    <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-</head>
-
-<body>
-<div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-    <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-        <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-    </a>
-</div>
-<div class="layui-fluid">
-    <div class="layui-row layui-col-space15">
-        <div class="layui-col-md12">
-            <div class="layui-card">
-                <div class="layui-card-body ">
-                    <form class="layui-form layui-col-space5">
-
-
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <input value="{{.Name}}" type="text" name="Name" placeholder="请输入 名称" autocomplete="off" class="layui-input"></div>
-                        <div class="layui-input-inline layui-show-xs-block">
-                            <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach">
-                                <i class="layui-icon">&#xe615;</i></button>
-                        </div>
-                    </form>
-                </div>
-
-                <div class="layui-card-header">
-                    <!--                            <button class="layui-btn layui-btn-danger" onclick="delAll()">-->
-                    <!--                                <i class="layui-icon"></i>批量删除</button>-->
-                    <button class="layui-btn  layui-btn-normal" onclick="xadmin.open('添加','User_?id=0',500,600,false);">
-                        <i class="layui-icon"></i>添加</button></div>
-
-                <div class="layui-card-body ">
-                    <table class="layui-table layui-form">
-                        <thead>
-                        <tr>
-                            <th>编号</th>
-                            <th>名称</th>
-                            <th>账号</th>
-                            <th>权限</th>
-                            <th>电话</th>
-                            <th>邮箱</th>
-                            <th>性别</th>
-                            <th>备注</th>
-                            <th>创建时间</th>
-
-                            <th width="75px">操作</th></tr>
-                        </thead>
-                        <tbody>
-                        {{range $index, $elem := .List}}
-                        <tr>
-
-                            <td>{{$elem.Admin_uuid}}</td>
-                            <td>{{$elem.Admin_name}}</td>
-                            <td>{{$elem.Admin_user}}</td>
-                            <td>
-                                {{range $index, $elemx := $.Power_List}}
-                                {{if eq $elem.Admin_power $elemx.Id }}
-                                {{$elemx.Power_name}}
-                                {{end}}
-                                {{end}}
-
-                            </td>
-                            <td>{{$elem.Admin_telephone}}</td>
-                            <td>{{$elem.Admin_mail}}</td>
-                            <td>
-                                {{if eq $elem.Admin_gender 0 }}
-                                未知
-                                {{end}}
-                                {{if eq $elem.Admin_gender 1 }}
-                                男
-                                {{end}}
-                                {{if eq $elem.Admin_gender 2 }}
-                                女
-                                {{end}}
-                            </td>
-                            <td>{{$elem.Admin_text}}</td>
-                            <td>{{$elem.CreateTime}}</td>
-
-                            <td class="td-manage" >
-                                <div style="float: left">
-                                    <a title="无钥匙登陆" style="color: #05a000" onclick="User_entry(this,'{{$elem.Admin_uuid}}');" href="javascript:;">
-                                        <i class="layui-icon" style="margin-right: 4px">&#xe663;</i>无钥匙登陆</a>
-                                    <a title="同步分类" style="color: #a03eff;" onclick="DeviceClass_Syn('{{$elem.Admin_uuid}}');" href="javascript:;">
-                                        <i class="iconfont" style="margin-right: 4px">&#xe6b4;</i>同步分类</a>
-                                    <a title="同步智慧大屏" style="color: #a03eff;" onclick="Panel_plan_Syn('{{$elem.Admin_uuid}}');" href="javascript:;">
-                                        <i class="layui-icon" style="margin-right: 4px" >&#xe632;</i>同步智慧大屏</a>
-                                </div>
-                                <div style="float: left;margin-bottom: 8px">
-                                <a title="编辑" style="color: #008cff;" onclick="xadmin.open('编辑','User_?id={{$elem.Id}}&Admin_uuid={{$elem.Admin_uuid}}',500,600,false);" href="javascript:;">
-                                    <i class="layui-icon" >&#xe63c;</i>编辑</a>
-                                <a title="删除" style="color: #ff3636" onclick="member_del(this,'{{$elem.Admin_uuid}}')" href="javascript:;">
-                                    <i class="layui-icon">&#xe640;</i>删除</a>
-                                </div>
-                            </td>
-                        </tr>
-
-                        {{end}}
-
-
-                        </tbody>
-                    </table>
-                </div>
-                <div class="layui-card-body ">
-                    <div class="page">
-                        <div>
-
-                            {{range $index, $elem := .Pages}}
-                            {{if eq $elem.A 1}}
-                            <a class="prev" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&lt;&lt;</a>
-                            {{end}}
-                            {{if eq $elem.A 2}}
-                            <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                            {{end}}
-                            {{if eq $elem.A 3}}
-                            <span class="current">{{$elem.V}}</span>
-                            {{end}}
-                            {{if eq $elem.A 4}}
-                            <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                            {{end}}
-                            {{if eq $elem.A 5}}
-                            <a class="next" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&gt;&gt;</a>
-                            {{end}}
-
-
-
-                            {{end}}
-
-
-
-                        </div>
-                        Page:{{.Page}}-
-                        Page_size:{{.Page_size}}-
-                        cnt:{{.cnt}}
-                    </div>
-                </div>
-
-
-            </div>
-        </div>
-    </div>
-</div>
-</body>
-<script>
-    layui.use(['laydate', 'form'],
-        function() {
-            var laydate = layui.laydate;
-
-            //执行一个laydate实例
-            laydate.render({
-                elem: '#start' //指定元素
-            });
-
-            //执行一个laydate实例
-            laydate.render({
-                elem: '#end' //指定元素
-            });
-        });
-    /*用户-删除*/
-    function member_del(obj, Admin_uuid) {
-        layer.confirm('确认要删除吗?',
-            function(index) {
-                //发异步删除数据
-                $(obj).parents("tr").remove();
-
-                $.ajax({
-                    type: 'POST',
-                    url: 'User_Del',//发送请求
-                    data: {Admin_uuid:Admin_uuid},
-                    success: function(result) {
-                        console.log(result)
-                        if (result.Code == 200 ){
-                            layer.msg('已删除!', {
-                                icon: 1,
-                                time: 2000
-                            });
-                            window.location.reload();
-                        }else {
-                            layer.msg('删除失败!', {
-                                time: 2000
-                            });
-                        }
-
-                    }
-                });
-
-
-
-            });
-    }
-    /*用户-无钥匙进入*/
-    function User_entry(obj, Admin_uuid) {
-        layer.confirm('确认要 无钥匙进入 子账号吗?(确定后本账户将会退出登陆)',
-            function(index) {
-                $.ajax({
-                    type: 'POST',
-                    url: 'User_Entry',//发送请求
-                    data: {
-                        Admin_uuid:Admin_uuid
-                    },
-                    success: function(result) {
-                        console.log(result)
-                        if (result.Code == 200 ){
-                            window.parent.location.reload();
-                        }else {
-                            layer.msg('失败!', {
-                                time: 2000
-                            });
-                        }
-
-                    }
-                });
-
-                // window.open("/Index", "_blank");
-
-
-            });
-    }
-    /*用户-无钥匙进入*/
-    function DeviceClass_Syn(Admin_uuid) {
-        layer.confirm('确认要 同步分类 子账号吗?',
-            function(index) {
-                var loading = layer.load(0, {
-                    shade: false,
-                    time: 99*1000
-                });
-                $.ajax({
-                    type: 'POST',
-                    url: '../Device/DeviceClass_Syn',//发送请求
-                    data: {
-                        Admin_uuid:Admin_uuid
-                    },
-                    success: function(result) {
-                        layer.close(loading)
-                        console.log(result)
-                        if (result.Code != 200) {
-                            layer.msg(result.Msg);
-                            return
-                        }
-                        layer.msg("成功同步传感器分类数量:"+result.Data);
-
-                    }
-                });
-
-                // window.open("/Index", "_blank");
-
-
-            });
-    }
-    /*用户-无钥匙进入*/
-    function Panel_plan_Syn(Admin_uuid) {
-        layer.confirm('确认要 同步面板 子账号吗?',
-            function(index) {
-                var loading = layer.load(0, {
-                    shade: false,
-                    time: 99*1000
-                });
-                $.ajax({
-                    type: 'POST',
-                    url: '../User/Panel_plan_Syn',//发送请求
-                    data: {
-                        Admin_uuid:Admin_uuid
-                    },
-                    success: function(result) {
-                        layer.close(loading)
-                        console.log(result)
-                        if (result.Code != 200) {
-                            layer.msg(result.Msg);
-                            return
-                        }
-                        layer.msg("成功同步");
-
-                    }
-                });
-
-                // window.open("/Index", "_blank");
-
-
-            });
-    }
-
-</script>
-
-</html>

+ 0 - 168
views/User/UserLogs.html

@@ -1,168 +0,0 @@
-<!DOCTYPE html>
-<html class="x-admin-sm">
-    
-    <head>
-        <meta charset="UTF-8">
-        <meta name="renderer" content="webkit">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-        <link rel="shortcut icon" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="bookmark" href="https://osscold.baozhida.cn/favicon.ico">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/font.css">
-        <link rel="stylesheet" href="https://osscold.baozhida.cn/css/xadmin.css">
-        <script src="https://osscold.baozhida.cn/lib/layui/layui.js" charset="utf-8"></script>
-        <script type="text/javascript" src="https://osscold.baozhida.cn/js/xadmin.js"></script>
-    </head>
-    
-    <body>
-        <div class="x-nav">
-            <span class="layui-breadcrumb">
-                <a href="">首页</a>
-               <a><cite>宝智达</cite></a>
-            </span>
-            <a class="layui-btn layui-btn-normal" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
-                <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
-            </a>
-        </div>
-        <div class="layui-fluid">
-            <div class="layui-row layui-col-space15">
-                <div class="layui-col-md12">
-                    <div class="layui-card">
-                        <div class="layui-card-body ">
-                            <form class="layui-form layui-col-space5">
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <select name="Class_1">
-                                        <option value="">所有分类</option>
-                                        {{range $index, $elem := .Class_List}}
-
-                                            <option {{if eq $elem $.Class_1 }}
-                                                    selected
-                                                    {{end}} value="{{$elem}}">{{$elem}}</option>
-
-                                        {{end}}
-                                    </select>
-                                </div>
-                                <div class="layui-input-inline layui-show-xs-block">
-                                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="sreach">
-                                        <i class="layui-icon">&#xe615;</i></button>
-                                </div>
-                            </form>
-                        </div>
-
-                        <div class="layui-card-body ">
-                            <table class="layui-table layui-form">
-                                <thead>
-                                    <tr>
-                                        <th>编号</th>
-                                        <th>分类</th>
-                                        <th>标题</th>
-                                        <th>详情</th>
-                                        <th>时间</th>
-                                    </tr>
-                                </thead>
-                                <tbody>
-                                {{range $index, $elem := .List}}
-                                    <tr>
-                                        <td>{{$elem.Id}}</td>
-                                        <td>{{$elem.Logs_class}}</td>
-                                        <td>{{$elem.Logs_Title}}</td>
-                                        <td>{{$elem.Logs_Txt}}</td>
-                                        <td>{{$elem.CreateTime}}</td>
-                                    </tr>
-
-                                {{end}}
-
-
-                                </tbody>
-                            </table>
-                        </div>
-                        <div class="layui-card-body ">
-                            <div class="page">
-                                <div>
-
-                                    {{range $index, $elem := .Pages}}
-                                        {{if eq $elem.A 1}}
-                                        <a class="prev" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&lt;&lt;</a>
-                                        {{end}}
-                                        {{if eq $elem.A 2}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 3}}
-                                        <span class="current">{{$elem.V}}</span>
-                                        {{end}}
-                                        {{if eq $elem.A 4}}
-                                        <a class="num" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">{{$elem.V}}</a>
-                                        {{end}}
-                                        {{if eq $elem.A 5}}
-                                        <a class="next" href="?page={{$elem.V}}&Name={{$.Name}}&Class_1={{$.Class_1}}">&gt;&gt;</a>
-                                        {{end}}
-
-
-
-                                    {{end}}
-
-
-
-                                </div>
-                                Page:{{.Page}}-
-                                Page_size:{{.Page_size}}-
-                                cnt:{{.cnt}}
-                            </div>
-                        </div>
-
-
-                    </div>
-                </div>
-            </div>
-        </div>
-    </body>
-    <script>
-        layui.use(['laydate', 'form'],
-            function() {
-                var laydate = layui.laydate;
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#start' //指定元素
-                });
-
-                //执行一个laydate实例
-                laydate.render({
-                    elem: '#end' //指定元素
-                });
-            });
-        /*用户-删除*/
-        function member_del(obj, id) {
-            layer.confirm('确认要删除吗?',
-                function(index) {
-                    //发异步删除数据
-                    $(obj).parents("tr").remove();
-
-                    $.ajax({
-                        type: 'POST',
-                        url: 'List_Del',//发送请求
-                        data: {Id:id},
-                        success: function(result) {
-                            console.log(result)
-                            if (result.Code == 200 ){
-                                layer.msg('已删除!', {
-                                    icon: 1,
-                                    time: 2000
-                                });
-                                window.location.reload();
-                            }else {
-                                layer.msg('删除失败!', {
-                                    time: 2000
-                                });
-                            }
-
-                        }
-                    });
-
-
-
-                });
-        }
-    </script>
-
-</html>

+ 0 - 11
views/base/base.html

@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html>
-	<head>
-		{{template "base/head.html" .}}
-		{{template "head" .}}
-	</head>
-	<body>
-		{{template "body" .}}
-		{{template "base/footer.html" .}}
-	</body>
-</html>

+ 0 - 0
views/base/footer.html


+ 0 - 15
views/base/head.html

@@ -1,15 +0,0 @@
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="shortcut icon" href="/static/img/favicon.png" />
-<meta name="author" content="Unknown" />
-<meta name="description" content="Beego sample app - Web IM" />
-<meta name="keywords" content="Go, golang, beego, sample, Web IM">
-
-<link href="/static/css/bootstrap.min.css" rel="stylesheet" />
-
-<script src="/static/js/jquery-1.10.1.min.js"></script>
-{{if .IsLongPolling}}
-<script src="/static/js/longpolling.js"></script>
-{{end}}
-{{if .IsWebSocket}}
-<script src="/static/js/websocket.js"></script>
-{{end}}

+ 0 - 0
views/base/navbar.html


部分文件因为文件数量过多而无法显示