图片/地图图片上标注/标点
在图片上标点,便于直观的让用户了解各标点的状态及完成情况,围绕标点进行进一步的场景延伸
序号 | 特性 | 是否支持 |
1 | 用户自定义背景图片(地图/平面图/其它) | |
2 | 自定义标注点图标 | |
3 | 自定义标注点颜色 | |
4 | 支持地图放大及缩小 | |
5 | 自定义标注点的分类 | |
6 | 显示历史标注点 |
(一)、具体的界面效果如下:
(二)、开发步骤:
1、在项目信息里面定义图片及其缩略图字段
2、绑定项目信息的新建及编辑事件,自动生成缩略图
参考生成缩略图的代码:
#region 函数说明:生成项目缩略图纸 /// <summary> /// 生成项目缩略图纸 /// </summary> /// <param name="CallBackEvent"></param> /// <param name="DataTableName"></param> /// <param name="UniqueKey"></param> /// <returns></returns> public AjaxResultModel 生成项目缩略图纸(PublicFunctions.CallBackEvent.CallBackEventEnum CallBackEvent, string DataTableName, string UniqueKey) { AjaxResultModel AjaxResultObject = new AjaxResultModel(); using (PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory context = new PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory(PublicSetting.RawDBHelper_CRM_ConnectionStringKey)) { Dictionary<string, string> dic = context.GetCellRowDictionary("select 园建图纸,绿化图纸 from " + DataTableName + " where ID=" + UniqueKey); if (dic.Count > 0) { if (true) { string 园建图纸 = PublicFunctions.PublicFunctions.GetDataFromDictionary("园建图纸", dic); if (!Check.IsNull(园建图纸)) { 园建图纸 = PublicFunctions.ReplaceRestorStr.RestoreHTMLTag(园建图纸); Dictionary<string, string> FileDictionary = PublicFunctions.HtmlControl.HtmlControl.GetFileListFromUploadFileCompenentModeHTML(园建图纸); 园建图纸 = FileDictionary.Count > 0 ? FileDictionary.First().Key : ""; if (!Check.IsNull(园建图纸)) { if (园建图纸.ToLower().StartsWith("http")) { 园建图纸 = 园建图纸.Substring(园建图纸.IndexOf("UserUploadFiles/")); } string PreviewImagePath=PublicSetting.SystemFrameWorkPhysicalPath+"\\"+园建图纸.Replace("/","\\").Split('.').First()+"_Preview."+园建图纸.Split('.').Last(); int OriginImageWidth=0; int OriginImageHeight=0; if (PublicFunctions.ImageManagementClass.CreatePreviewImage(PublicSetting.SystemFrameWorkPhysicalPath + "\\" + 园建图纸.Replace("/", "\\"), 150, 300, PreviewImagePath, ref OriginImageWidth, ref OriginImageHeight, QualitySetting: 100)) { //更新园建图纸缩略图 context.ExecuteSQLBool("update " + DataTableName + " set 园建图纸缩略图='" + (园建图纸.Split('.').First() + "_Preview." + 园建图纸.Split('.').Last()) + "' where ID=" + UniqueKey); } } } } if (true) { string 绿化图纸 = PublicFunctions.PublicFunctions.GetDataFromDictionary("绿化图纸", dic); if (!Check.IsNull(绿化图纸)) { 绿化图纸 = PublicFunctions.ReplaceRestorStr.RestoreHTMLTag(绿化图纸); Dictionary<string, string> FileDictionary = PublicFunctions.HtmlControl.HtmlControl.GetFileListFromUploadFileCompenentModeHTML(绿化图纸); 绿化图纸 = FileDictionary.Count > 0 ? FileDictionary.First().Key : ""; if (!Check.IsNull(绿化图纸)) { if (绿化图纸.ToLower().StartsWith("http")) { 绿化图纸 = 绿化图纸.Substring(绿化图纸.IndexOf("UserUploadFiles/")); } string PreviewImagePath = PublicSetting.SystemFrameWorkPhysicalPath + "\\" + 绿化图纸.Replace("/", "\\").Split('.').First() + "_Preview." + 绿化图纸.Split('.').Last(); int OriginImageWidth = 0; int OriginImageHeight = 0; if (PublicFunctions.ImageManagementClass.CreatePreviewImage(PublicSetting.SystemFrameWorkPhysicalPath + "\\" + 绿化图纸.Replace("/", "\\"), 150, 300, PreviewImagePath, ref OriginImageWidth, ref OriginImageHeight, QualitySetting: 100)) { //更新绿化图纸缩略图 context.ExecuteSQLBool("update " + DataTableName + " set 绿化图纸缩略图='" + (绿化图纸.Split('.').First() + "_Preview." + 绿化图纸.Split('.').Last()) + "' where ID=" + UniqueKey); } } } } } } AjaxResultObject.IsSuccess = true; return AjaxResultObject; } #endregion
3、定义标注点分类,名称及对应的颜色:
参考字段的配置(可直接导入):
W3siSUQiOjk0MzE3LCJGb3JtS2V5IjoiQ1JNLuWunua1i+WunumHj+ajgOafpemhuS4xIiwiRGF0YUJhc2VUYWJsZU5hbWUiOiLlrp7mtYvlrp7ph4/mo4Dmn6XpobkiLCJDb2x1bW5OYW1lIjoi5qOA5p+l6aG5IiwiQ29sdW1uTmFtZUNOIjoi5qOA5p+l6aG5IiwiQ29sdW1uTGFiZWwiOiLmo4Dmn6XpobkiLCJDb2x1bW5PYmplY3RUeXBlIjoiVGV4dEZpZWxkIiwiRGF0YVR5cGUiOiJOVkFSQ0hBUiIsIkRhdGFMZW5ndGgiOiIzMDAiLCJPYmplY3RJRCI6IuajgOafpemhuSIsIkNTU0NsYXNzTmFtZSI6IiIsIkRlZmF1bHRWYWx1ZSI6IiIsIklzTm90QWxsb3dOdWxsVmFsdWVGaWVsZCI6dHJ1ZSwiTnVsbFZhbHVlQWxlcnRUZXh0IjoiIiwiSXNSZXN0cmljdE1vZGUiOmZhbHNlLCJPcHRpb25UZXh0IjoiIiwiVG9vZ2xlVGV4dCI6IiIsIkRpY3Rpb25hcnlLZXkiOiIiLCJBZGRpdGlvbmFsTXNnIjoiIiwiQWRkaXRpb25hbE1zZ0ZvclZhbHVlIjoiIiwiQWRkaXRpb25hbE1zZ0xheW91dCI6InRhYmxlICAgICAiLCJJc1JlYWRPbmx5IjpmYWxzZSwiSXNEaXNhYmxlIjpmYWxzZSwiVmFsaWRhdGVPbkJsdXIiOnRydWUsIklzU2VhcmNoYWJsZSI6dHJ1ZSwiSXNTb3J0YWJsZSI6dHJ1ZSwiQ29tYm9Cb3hNdWx0aVNlbGVjdCI6ZmFsc2UsIkNvbWJvQm94RWRpdGFibGUiOmZhbHNlLCJSYWRpb0F1dG9TZWxlY3RGaXJzdE9uZSI6ZmFsc2UsIkNoZWNrQm94TmVlZENoZWNrQWxsRnVuY3Rpb24iOmZhbHNlLCJNaW5WYWx1ZSI6IiIsIk1heFZhbHVlIjoiIiwiV2lkdGgiOjAsIkhlaWdodCI6MCwiSXNBbGxvd1VwbG9hZE11bHRpRmlsZSI6dHJ1ZSwiSXNTZXJpYWxpemVUb0JpbmFyeSI6ZmFsc2UsIk5lZWRSZXNldEJ1dHRvbiI6ZmFsc2UsIkFsbG93RmlsZUV4dGVuc2lvbkxpc3QiOiIqIiwiSW5pdGlhdGVVcGxvYWRGb3JtTnVtYmVyIjoxLCJGaWxlU2F2ZUZvbGRlciI6IiIsIkRhdGFTb3VyZURpY3Rpb25hcnkiOiIiLCJBZGRpdGlvbmFsUHJvcGVydHkiOiIiLCJEaXNwbGF5Q1NTQ2xhc3NOYW1lIjoiIiwiSXNQcmV2aWV3Q29sdW1uIjp0cnVlLCJJc1N5c3RlbUNvbHVtbiI6ZmFsc2UsIlByZXZpZXdDb2x1bW5XaWR0aCI6MCwiSXNDaGVja0R1cGxpY2F0ZWQiOnRydWUsIlRvZ2V0aGVyQ2hlY2tEdXBsaWNhdGVkQ29sdW1uTGlzdCI6IiIsIkN1c3RvbWl6ZWRWYWxpZGF0ZSI6IiIsIkh0bWwiOiIiLCJNaW5MZW5ndGgiOiIiLCJNYXhMZW5ndGgiOiIiLCJQcmVmaXhIVE1MIjoiIiwiRXh0cmFQcmVmaXhIVE1MIjoiIiwiRXh0cmFTdWZmaXhIVE1MIjoiIiwiSXNOb3RTdW1tYXJ5RmllbGQiOnRydWUsIklzQWNjdXJhdGVUb01pbnV0ZSI6ZmFsc2UsIk9yZGVyTnVtYmVyIjoxMDA1LCJJc0hpZGRlbiI6ZmFsc2UsIkRpc3BsYXlBc0ltYWdlcyI6ZmFsc2UsIkZvcmx1bWEiOiIiLCJJc1BsYWluVGV4dCI6ZmFsc2UsIkdldE1vYmlsZVBob3RvTW9kZSI6IiIsIlNob3dBZGRNaW51c0ljb24iOmZhbHNlLCJBZGRNaW51c0ludGVydmFsIjoxLjAwLCJJc0dyaWRIaWRkZW4iOmZhbHNlLCJJc0VxdWFsU2VhcmNoIjpmYWxzZX0seyJJRCI6OTQzMTgsIkZvcm1LZXkiOiJDUk0u5a6e5rWL5a6e6YeP5qOA5p+l6aG5LjEiLCJEYXRhQmFzZVRhYmxlTmFtZSI6IuWunua1i+WunumHj+ajgOafpemhuSIsIkNvbHVtbk5hbWUiOiLmj4/ngrnpopzoibIiLCJDb2x1bW5OYW1lQ04iOiLmj4/ngrnpopzoibIiLCJDb2x1bW5MYWJlbCI6IuaPj+eCueminOiJsiIsIkNvbHVtbk9iamVjdFR5cGUiOiJUZXh0RmllbGQiLCJEYXRhVHlwZSI6Ik5WQVJDSEFSIiwiRGF0YUxlbmd0aCI6IjMwMCIsIk9iamVjdElEIjoi5o+P54K56aKc6ImyIiwiQ1NTQ2xhc3NOYW1lIjoiIiwiRGVmYXVsdFZhbHVlIjoiIiwiSXNOb3RBbGxvd051bGxWYWx1ZUZpZWxkIjp0cnVlLCJOdWxsVmFsdWVBbGVydFRleHQiOiIiLCJJc1Jlc3RyaWN0TW9kZSI6ZmFsc2UsIk9wdGlvblRleHQiOiIiLCJUb29nbGVUZXh0IjoiUkdC6aKc6Imy5YC877yM5L6L77yaIzNlOGVmNyIsIkRpY3Rpb25hcnlLZXkiOiIiLCJBZGRpdGlvbmFsTXNnIjoiIiwiQWRkaXRpb25hbE1zZ0ZvclZhbHVlIjoiIiwiQWRkaXRpb25hbE1zZ0xheW91dCI6InRhYmxlICAgICAiLCJJc1JlYWRPbmx5IjpmYWxzZSwiSXNEaXNhYmxlIjpmYWxzZSwiVmFsaWRhdGVPbkJsdXIiOnRydWUsIklzU2VhcmNoYWJsZSI6dHJ1ZSwiSXNTb3J0YWJsZSI6dHJ1ZSwiQ29tYm9Cb3hNdWx0aVNlbGVjdCI6ZmFsc2UsIkNvbWJvQm94RWRpdGFibGUiOmZhbHNlLCJSYWRpb0F1dG9TZWxlY3RGaXJzdE9uZSI6ZmFsc2UsIkNoZWNrQm94TmVlZENoZWNrQWxsRnVuY3Rpb24iOmZhbHNlLCJNaW5WYWx1ZSI6IiIsIk1heFZhbHVlIjoiIiwiV2lkdGgiOjAsIkhlaWdodCI6MCwiSXNBbGxvd1VwbG9hZE11bHRpRmlsZSI6dHJ1ZSwiSXNTZXJpYWxpemVUb0JpbmFyeSI6ZmFsc2UsIk5lZWRSZXNldEJ1dHRvbiI6ZmFsc2UsIkFsbG93RmlsZUV4dGVuc2lvbkxpc3QiOiIqIiwiSW5pdGlhdGVVcGxvYWRGb3JtTnVtYmVyIjoxLCJGaWxlU2F2ZUZvbGRlciI6IiIsIkRhdGFTb3VyZURpY3Rpb25hcnkiOiIiLCJBZGRpdGlvbmFsUHJvcGVydHkiOiIiLCJEaXNwbGF5Q1NTQ2xhc3NOYW1lIjoiIiwiSXNQcmV2aWV3Q29sdW1uIjp0cnVlLCJJc1N5c3RlbUNvbHVtbiI6ZmFsc2UsIlByZXZpZXdDb2x1bW5XaWR0aCI6MCwiSXNDaGVja0R1cGxpY2F0ZWQiOmZhbHNlLCJUb2dldGhlckNoZWNrRHVwbGljYXRlZENvbHVtbkxpc3QiOiIiLCJDdXN0b21pemVkVmFsaWRhdGUiOiIiLCJIdG1sIjoiIiwiTWluTGVuZ3RoIjoiIiwiTWF4TGVuZ3RoIjoiIiwiUHJlZml4SFRNTCI6IiIsIkV4dHJhUHJlZml4SFRNTCI6IiIsIkV4dHJhU3VmZml4SFRNTCI6IiIsIklzTm90U3VtbWFyeUZpZWxkIjp0cnVlLCJJc0FjY3VyYXRlVG9NaW51dGUiOmZhbHNlLCJPcmRlck51bWJlciI6MTAxMCwiSXNIaWRkZW4iOmZhbHNlLCJEaXNwbGF5QXNJbWFnZXMiOmZhbHNlLCJGb3JsdW1hIjoiIiwiSXNQbGFpblRleHQiOmZhbHNlLCJHZXRNb2JpbGVQaG90b01vZGUiOiIiLCJTaG93QWRkTWludXNJY29uIjpmYWxzZSwiQWRkTWludXNJbnRlcnZhbCI6MS4wMCwiSXNHcmlkSGlkZGVuIjpmYWxzZSwiSXNFcXVhbFNlYXJjaCI6ZmFsc2V9LHsiSUQiOjk0MzE5LCJGb3JtS2V5IjoiQ1JNLuWunua1i+WunumHj+ajgOafpemhuS4xIiwiRGF0YUJhc2VUYWJsZU5hbWUiOiLlrp7mtYvlrp7ph4/mo4Dmn6XpobkiLCJDb2x1bW5OYW1lIjoi5o6S5bqP5Y+3IiwiQ29sdW1uTmFtZUNOIjoi5o6S5bqP5Y+3IiwiQ29sdW1uTGFiZWwiOiLmjpLluo/lj7ciLCJDb2x1bW5PYmplY3RUeXBlIjoiTnVtYmVyRmllbGQiLCJEYXRhVHlwZSI6IklOVCIsIkRhdGFMZW5ndGgiOiIiLCJPYmplY3RJRCI6IuaOkuW6j+WPtyIsIkNTU0NsYXNzTmFtZSI6IiIsIkRlZmF1bHRWYWx1ZSI6IiIsIklzTm90QWxsb3dOdWxsVmFsdWVGaWVsZCI6ZmFsc2UsIk51bGxWYWx1ZUFsZXJ0VGV4dCI6IiIsIklzUmVzdHJpY3RNb2RlIjpmYWxzZSwiT3B0aW9uVGV4dCI6IiIsIlRvb2dsZVRleHQiOiIiLCJEaWN0aW9uYXJ5S2V5IjoiIiwiQWRkaXRpb25hbE1zZyI6IiIsIkFkZGl0aW9uYWxNc2dGb3JWYWx1ZSI6IiIsIkFkZGl0aW9uYWxNc2dMYXlvdXQiOiJ0YWJsZSAgICAgIiwiSXNSZWFkT25seSI6ZmFsc2UsIklzRGlzYWJsZSI6ZmFsc2UsIlZhbGlkYXRlT25CbHVyIjp0cnVlLCJJc1NlYXJjaGFibGUiOnRydWUsIklzU29ydGFibGUiOnRydWUsIkNvbWJvQm94TXVsdGlTZWxlY3QiOmZhbHNlLCJDb21ib0JveEVkaXRhYmxlIjpmYWxzZSwiUmFkaW9BdXRvU2VsZWN0Rmlyc3RPbmUiOmZhbHNlLCJDaGVja0JveE5lZWRDaGVja0FsbEZ1bmN0aW9uIjpmYWxzZSwiTWluVmFsdWUiOiIiLCJNYXhWYWx1ZSI6IiIsIldpZHRoIjowLCJIZWlnaHQiOjAsIklzQWxsb3dVcGxvYWRNdWx0aUZpbGUiOnRydWUsIklzU2VyaWFsaXplVG9CaW5hcnkiOmZhbHNlLCJOZWVkUmVzZXRCdXR0b24iOmZhbHNlLCJBbGxvd0ZpbGVFeHRlbnNpb25MaXN0IjoiKiIsIkluaXRpYXRlVXBsb2FkRm9ybU51bWJlciI6MSwiRmlsZVNhdmVGb2xkZXIiOiIiLCJEYXRhU291cmVEaWN0aW9uYXJ5IjoiIiwiQWRkaXRpb25hbFByb3BlcnR5IjoiIiwiRGlzcGxheUNTU0NsYXNzTmFtZSI6IiIsIklzUHJldmlld0NvbHVtbiI6dHJ1ZSwiSXNTeXN0ZW1Db2x1bW4iOmZhbHNlLCJQcmV2aWV3Q29sdW1uV2lkdGgiOjAsIklzQ2hlY2tEdXBsaWNhdGVkIjpudWxsLCJUb2dldGhlckNoZWNrRHVwbGljYXRlZENvbHVtbkxpc3QiOiIiLCJDdXN0b21pemVkVmFsaWRhdGUiOiIiLCJIdG1sIjoiIiwiTWluTGVuZ3RoIjoiIiwiTWF4TGVuZ3RoIjoiIiwiUHJlZml4SFRNTCI6IiIsIkV4dHJhUHJlZml4SFRNTCI6IiIsIkV4dHJhU3VmZml4SFRNTCI6IiIsIklzTm90U3VtbWFyeUZpZWxkIjpudWxsLCJJc0FjY3VyYXRlVG9NaW51dGUiOmZhbHNlLCJPcmRlck51bWJlciI6MTAxNSwiSXNIaWRkZW4iOm51bGwsIkRpc3BsYXlBc0ltYWdlcyI6bnVsbCwiRm9ybHVtYSI6IiIsIklzUGxhaW5UZXh0IjpudWxsLCJHZXRNb2JpbGVQaG90b01vZGUiOiIiLCJTaG93QWRkTWludXNJY29uIjpudWxsLCJBZGRNaW51c0ludGVydmFsIjpudWxsLCJJc0dyaWRIaWRkZW4iOm51bGwsIklzRXF1YWxTZWFyY2giOm51bGx9LHsiSUQiOjk0MzIwLCJGb3JtS2V5IjoiQ1JNLuWunua1i+WunumHj+ajgOafpemhuS4xIiwiRGF0YUJhc2VUYWJsZU5hbWUiOiLlrp7mtYvlrp7ph4/mo4Dmn6XpobkiLCJDb2x1bW5OYW1lIjoi57G75YirIiwiQ29sdW1uTmFtZUNOIjoi57G75YirIiwiQ29sdW1uTGFiZWwiOiLnsbvliKsiLCJDb2x1bW5PYmplY3RUeXBlIjoiUmFkaW9Hcm91cCIsIkRhdGFUeXBlIjoiTlZBUkNIQVIiLCJEYXRhTGVuZ3RoIjoiNTAiLCJPYmplY3RJRCI6Iuexu+WIqyIsIkNTU0NsYXNzTmFtZSI6IiIsIkRlZmF1bHRWYWx1ZSI6IiIsIklzTm90QWxsb3dOdWxsVmFsdWVGaWVsZCI6dHJ1ZSwiTnVsbFZhbHVlQWxlcnRUZXh0IjoiIiwiSXNSZXN0cmljdE1vZGUiOmZhbHNlLCJPcHRpb25UZXh0IjoiIiwiVG9vZ2xlVGV4dCI6IiIsIkRpY3Rpb25hcnlLZXkiOiLlrp7mtYvlrp7ph4/mo4Dmn6XpobnliIbnsbsiLCJBZGRpdGlvbmFsTXNnIjoiIiwiQWRkaXRpb25hbE1zZ0ZvclZhbHVlIjoiIiwiQWRkaXRpb25hbE1zZ0xheW91dCI6InRhYmxlICAgICAiLCJJc1JlYWRPbmx5IjpmYWxzZSwiSXNEaXNhYmxlIjpmYWxzZSwiVmFsaWRhdGVPbkJsdXIiOnRydWUsIklzU2VhcmNoYWJsZSI6dHJ1ZSwiSXNTb3J0YWJsZSI6dHJ1ZSwiQ29tYm9Cb3hNdWx0aVNlbGVjdCI6ZmFsc2UsIkNvbWJvQm94RWRpdGFibGUiOmZhbHNlLCJSYWRpb0F1dG9TZWxlY3RGaXJzdE9uZSI6ZmFsc2UsIkNoZWNrQm94TmVlZENoZWNrQWxsRnVuY3Rpb24iOmZhbHNlLCJNaW5WYWx1ZSI6IiIsIk1heFZhbHVlIjoiIiwiV2lkdGgiOjAsIkhlaWdodCI6MCwiSXNBbGxvd1VwbG9hZE11bHRpRmlsZSI6dHJ1ZSwiSXNTZXJpYWxpemVUb0JpbmFyeSI6ZmFsc2UsIk5lZWRSZXNldEJ1dHRvbiI6ZmFsc2UsIkFsbG93RmlsZUV4dGVuc2lvbkxpc3QiOiIqIiwiSW5pdGlhdGVVcGxvYWRGb3JtTnVtYmVyIjoxLCJGaWxlU2F2ZUZvbGRlciI6bnVsbCwiRGF0YVNvdXJlRGljdGlvbmFyeSI6IiIsIkFkZGl0aW9uYWxQcm9wZXJ0eSI6IiIsIkRpc3BsYXlDU1NDbGFzc05hbWUiOiIiLCJJc1ByZXZpZXdDb2x1bW4iOnRydWUsIklzU3lzdGVtQ29sdW1uIjpmYWxzZSwiUHJldmlld0NvbHVtbldpZHRoIjpudWxsLCJJc0NoZWNrRHVwbGljYXRlZCI6ZmFsc2UsIlRvZ2V0aGVyQ2hlY2tEdXBsaWNhdGVkQ29sdW1uTGlzdCI6IiIsIkN1c3RvbWl6ZWRWYWxpZGF0ZSI6IiIsIkh0bWwiOiIiLCJNaW5MZW5ndGgiOiIiLCJNYXhMZW5ndGgiOiIiLCJQcmVmaXhIVE1MIjoiIiwiRXh0cmFQcmVmaXhIVE1MIjoiIiwiRXh0cmFTdWZmaXhIVE1MIjoiIiwiSXNOb3RTdW1tYXJ5RmllbGQiOmZhbHNlLCJJc0FjY3VyYXRlVG9NaW51dGUiOmZhbHNlLCJPcmRlck51bWJlciI6MTAwLCJJc0hpZGRlbiI6ZmFsc2UsIkRpc3BsYXlBc0ltYWdlcyI6ZmFsc2UsIkZvcmx1bWEiOiIiLCJJc1BsYWluVGV4dCI6ZmFsc2UsIkdldE1vYmlsZVBob3RvTW9kZSI6IiIsIlNob3dBZGRNaW51c0ljb24iOmZhbHNlLCJBZGRNaW51c0ludGVydmFsIjoxLjAwLCJJc0dyaWRIaWRkZW4iOmZhbHNlLCJJc0VxdWFsU2VhcmNoIjpmYWxzZX1d
4、创建标点的界面,以下用统计功能的GRID界面来示例:
参考代码,一定要引用标点的JS及CSS,相关文件目录为:ImagePointMaker
select 巡检任务编号,项目编号,巡检项目,计划巡检日期,所属运营中心,项目群,巡检类型, 巡检组员=stuff((select ','+巡检组员 from 巡检任务 where 巡检任务编号=t9.巡检任务编号 for xml path('')),1,1,''), 硬景是否已描点=(case when 硬景是否已描点 IS NOT NULL and 硬景是否已描点='是' then '<div class="Center"><span class="mui-icon mui-icon-checkbox-filled" style="color:#11c26d; font-size:30px;"></span></div>' else '<div class="Center"><span class="mui-icon mui-icon-checkbox HandCursor" style="color:#e4eaec; font-size:30px;" onclick="UpdateTaskMakePointStatus('''+巡检任务编号+''',''硬景是否已描点'',''是'')"></span></div>' end), 软景是否已描点=(case when 软景是否已描点 IS NOT NULL and 软景是否已描点='是' then '<div class="Center"><span class="mui-icon mui-icon-checkbox-filled" style="color:#11c26d; font-size:30px;"></span></div>' else '<div class="Center"><span class="mui-icon mui-icon-checkbox HandCursor" style="color:#e4eaec; font-size:30px;" onclick="UpdateTaskMakePointStatus('''+巡检任务编号+''',''软景是否已描点'',''是'')"></span></div>' end), 硬景实测实量描点='<div class="Center"><button class="btn btn-primary btn-outline" style="padding-left:6px; padding-right:6px; font-size:12px; height:26px;line-height:26px;" onclick="HuaYuanImagePointMakerClass.Initiate('''+巡检任务编号+''',''硬景实测实量'', true)">硬景描点</button></div>', 软景实测实量描点='<div class="Center"><button class="btn btn-primary btn-outline" style="padding-left:6px; padding-right:6px; font-size:12px; height:26px;line-height:26px;" onclick="HuaYuanImagePointMakerClass.Initiate('''+巡检任务编号+''',''软景实测实量'', true)">软景描点</button></div>' from ( select distinct 巡检任务编号,项目编号,巡检项目,计划巡检日期,所属运营中心,项目群,巡检类型,硬景是否已描点,软景是否已描点 from 巡检任务 where 巡检类型 in('月度评测','验收前评测','验收后评测') and 巡检组员 in(select Realname from EmployeeTable where <$PermissionStrWhere$>) and (硬景是否已描点 IS NULL OR 硬景是否已描点='否' OR 软景是否已描点 IS NULL OR 软景是否已描点='否') group by 巡检任务编号,项目编号,巡检项目,计划巡检日期,所属运营中心,项目群,巡检类型,硬景是否已描点,软景是否已描点 )t9
<style type="text/css"> #MainContentDIVDataTableDIV .WorkFlowCSSTable { box-shadow: none; } .CommonTabContainer { border-bottom: 1px solid #eee; } .TagList { float: left; margin-top: 28px; margin-left: 10px; } .TagList span { padding: 5px 3px 5px 8px; cursor: pointer; border-radius: 5px; margin-right: 10px; border: 0px solid #33b5e5; color: #33b5e5; } .TagList span i { font-size: 14px; line-height: 14px; margin-left: 2px; } </style> <!-- lhpMegaImgViewer plugin css --> <link rel="stylesheet" type="text/css" href="ImagePointMaker/ImagePointMaker.css" /> <!-- jQuery easing plugin--> <script type="text/javascript" src="ImagePointMaker/jquery.easing.1.3.js"></script> <!-- jQuery mousewheel plugin--> <script type="text/javascript" src="ImagePointMaker/jquery.mousewheel.min.js"></script> <!-- jQuery hammer plugin--> <script type="text/javascript" src="ImagePointMaker/jquery.hammer-full.min.js"></script> <!-- lhpMegaImgViewer plugin --> <script type="text/javascript" src="ImagePointMaker/jquery.lhpMegaImgViewer.min.js"></script> <!-- swfobject --> <script type="text/javascript" src="ImagePointMaker/swfobject.js"></script> <!-- 华苑的描述类 --> <script type="text/javascript" src="script/HuaYuanImagePointMaker/HuaYuanImagePointMakerClass.js"></script> <style type="text/css"> .wb-map { font-size: 40px; text-shadow: 1px 1px 6px #fff; } .lhp_miv_marker .label { text-align: center; font-size: 12px; font-weight: bold; border: 1px solid #fff; margin-top: 5px; background-color: #fff; border-radius: 10px; } </style> <div class="panel panel-bordered CenterDIV Relative" style="margin-top: 10px; display: table; min-width: 100%;"> <div class="panel-heading Relative"> <h3 class="panel-title">待描点的巡检任务</h3> </div> <div style="padding: 0px 10px;"> <div id="GridQuickFilterSummaryDIV" style="padding-bottom: 0px; margin-bottom: 0px !important;"></div> <$DataGrid$> </div> <script> function UpdateTaskMakePointStatus(巡检任务编号, ColumnName, Value) { if (confirm("请确认" + ColumnName.replace("是否已描点", "已完成描点") + "?")) { ShowLoadingStatusDIV(null, "正在提交..."); LoadServiceClass.LoadServiceInterfaceByDLLSetting("华苑园林插件wyz.dll|标准项目插件.描点类|UpdateTaskMakePointStatus", "完成描点", false, "", "", { 巡检任务编号: 巡检任务编号, ColumnName: ColumnName, Value: Value }, function (返回值) { HideLoadingStatusDIV(); PopupToastMessage("info", "提交成功"); RefreshGrid(); }, Common_Error, { ActionName: "完成描点" }); } } </script> </div>
5、控制标注的源代码参考HuaYuanImagePointMakerClass.js:
var HuaYuanImagePointMakerClass = { //类型:硬景实测实量、软景实测实量 Config: null, InitiateConfig: null, Initiate: function (巡检任务编号, 类别, IsAdminMode, IsDisplayHistoryPoint, position) { if (typeof (IsDisplayHistoryPoint) == "undefined") { IsDisplayHistoryPoint = false; } if (typeof (position) == "undefined") { position = null; } if (HuaYuanImagePointMakerClass.InitiateConfig == null) { HuaYuanImagePointMakerClass.InitiateConfig = { 巡检任务编号: 巡检任务编号, 类别: 类别, IsAdminMode: IsAdminMode, IsDisplayHistoryPoint: IsDisplayHistoryPoint }; } else { HuaYuanImagePointMakerClass.InitiateConfig.巡检任务编号 = 巡检任务编号; HuaYuanImagePointMakerClass.InitiateConfig.类别 = 类别; HuaYuanImagePointMakerClass.InitiateConfig.IsAdminMode = IsAdminMode; HuaYuanImagePointMakerClass.InitiateConfig.IsDisplayHistoryPoint = IsDisplayHistoryPoint; } ShowLoadingStatusDIV(null, "正在加载..."); LoadServiceClass.LoadServiceInterfaceByDLLSetting("华苑园林插件wyz.dll|标准项目插件.描点类|GetConfig", "加载配置", false, "", "", { 巡检任务编号: 巡检任务编号, 类别: 类别 }, function (返回值) { HideLoadingStatusDIV(); //获得配置 HuaYuanImagePointMakerClass.Config = eval("(" + 返回值.Result + ")"); //创建容器 var html = ""; html += "<div style='width:calc(100% - 320px); overflow-y: auto;' id=\"ProjectMainInfoDIV\">"; html += "<div style='padding:20px 0px 0px 20px;'>"; html += "<h4 class=\"project-title Relative\" style=\"padding-left:10px; padding-top:5px; font-size:18px;\"><span class=\"wb-small-point\" style=\"margin-right:10px;\"></span>"; html += 类别 + "描点 - " + HuaYuanImagePointMakerClass.Config.巡检任务.巡检项目 + " - " + 巡检任务编号; html += "<div style='position:absolute; right:70px; top:10px; font-size:12px; font-weight:normal;'>显示历史描点:</div>"; html += "<div style='position:absolute; right:10px; top:5px;'><input type=\"checkbox\" name=\"IsDisplayHistoryPoint\" id='IsDisplayHistoryPoint' value=\"1\" class='IsDisplayHistoryPoint' " + (IsDisplayHistoryPoint ? "checked='checked'" : "") + " /></div>"; html += "</h4>"; html += "<div id=\"ImagePointMakerMapDiv\" style=\"width: 900px; height: 600px; margin-top:25px; overflow: hidden; border: solid 1px #ddd; background: #333; box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); border-radius: 5px; padding:5px;\" class=\"CenterDIV\"></div>"; html += "<div id=\"MyHotspots\" style=\"display: none;\"></div>"; html += "</div>"; html += "</div>"; //右侧的区域 html += "<div style=\"position:absolute; right:0px;top:0px;width: 300px; background-color: #fff; border-left: 1px solid #e4eaec; overflow-y: auto; box-shadow: -10px 0 20px 0 rgba(66, 66, 66, .2);\" id=\"测量点容器层\"><div id=\"测量点层\" style=\"height: 1500px;\"><div id=\"PointListDIV\" class=\"PointListDIV\" style=\"padding:20px; padding-top:10px;\">" + GetLoadingMsg("正在加载...") + "</div></div></div>"; var size = Element.Size($("#PageRightContentSliderDIV")); if (size.width > 300) { Element.SetHtml($("#PageRightContentSliderContentDIV"), html); } else { PageRightContentSliderClass.Show(Element.Size($(".main-container-inner")).width, html, true, "#fff"); Element.SetStyle($("#PageRightContentSliderContentDIV"), "padding", "0px"); } //显示历史描点 InitiateSwitchCheckBox($('#IsDisplayHistoryPoint'), '是', '否', function () { //选中的回调 HuaYuanImagePointMakerClass.Initiate(巡检任务编号, 类别, IsAdminMode, true); }, function () { //取消的回调 HuaYuanImagePointMakerClass.Initiate(巡检任务编号, 类别, IsAdminMode, false); }); //显示检查项列表 HuaYuanImagePointMakerClass.DisplayPointCategoryList(); window.setTimeout(function () { //计算高度 var height = (Element.Size($(".main-container")).height - 5); Element.SetStyle($("#测量点容器层"), "height", height + "px"); ScrollBarClass.Initiate($("#测量点容器层")); $("#测量点容器层").scrollTop(0); Element.SetStyle($("#ImagePointMakerMapDiv"), "height", (height - 100) + "px"); //加载描点列表 HuaYuanImagePointMakerClass.LoadPointList(IsDisplayHistoryPoint, function () { //调用地图 HuaYuanImagePointMakerClass.InitiateMap(类别 == "硬景实测实量" ? HuaYuanImagePointMakerClass.Config.园建图纸 : HuaYuanImagePointMakerClass.Config.绿化图纸, 类别 == "硬景实测实量" ? HuaYuanImagePointMakerClass.Config.园建图纸缩略图 : HuaYuanImagePointMakerClass.Config.绿化图纸缩略图, 类别, IsAdminMode, position); }); }, 1000); }, Common_Error, { ActionName: "加载配置" }); }, Refresh: function () { HuaYuanImagePointMakerClass.InitiateConfig["CheckAllPointCategory"] = document.getElementById("CheckAllPointCategory").checked; HuaYuanImagePointMakerClass.InitiateConfig["PointCategoryList"] = GetCheckBoxValue("PointCategory").join(","); HuaYuanImagePointMakerClass.Initiate(HuaYuanImagePointMakerClass.InitiateConfig.巡检任务编号, HuaYuanImagePointMakerClass.InitiateConfig.类别, HuaYuanImagePointMakerClass.InitiateConfig.IsAdminMode, HuaYuanImagePointMakerClass.InitiateConfig.IsDisplayHistoryPoint, CurrentMapPosition); }, InitiateMap: function (url, thumburl, 类别, IsAdminMode, position) { var settings = { 'viewportWidth': '100%', 'viewportHeight': '100%', 'fitToViewportShortSide': true, 'contentSizeOver100': false, 'loadingBgColor': '#ffffff', 'startScale': .5, 'startX': position == null ? 0 : position.x, 'startY': position == null ? 0 : position.y, 'animTime': 500, 'draggInertia': 10, 'zoomLevel': 1, 'zoomStep': 0.1, 'contentUrl': url, 'intNavEnable': true, 'intNavPos': 'B', 'intNavAutoHide': false, 'intNavMoveDownBtt': true, 'intNavMoveUpBtt': true, 'intNavMoveRightBtt': true, 'intNavMoveLeftBtt': true, 'intNavZoomBtt': true, 'intNavUnzoomBtt': true, 'intNavFitToViewportBtt': true, 'intNavFullSizeBtt': true, 'intNavBttSizeRation': 1, 'mapEnable': true, 'mapThumb': thumburl, 'mapPos': 'BL', 'popupShowAction': 'click', 'testMode': true }; $('#ImagePointMakerMapDiv').lhpMegaImgViewer(settings, 'MyHotspots'); $("#ImagePointMakerMapDiv").resizable({ resize: function (event, ui) { $('#resizeIco').hide(); $(this).lhpMegaImgViewer('adaptsToContainer'); } }); if (IsAdminMode) { //绑定双击事件 $("#ImagePointMakerMapDiv").dblclick(function () { HuaYuanImagePointMakerClass.LoadAddNewPage(类别, CurrentMapPosition.x + 20, CurrentMapPosition.y + 15); }); } }, DisplayPointCategoryList: function () { var html = ""; var list = eval("(" + HuaYuanImagePointMakerClass.Config.实测实量检查项 + ")"); html += "<div style=\"padding:0px; font-size:13px; font-weight:bold; padding-left:10px; background-color:#3e8ef7; color:#fff; border-radius:5px; margin-top:25px; margin-bottom:5px; padding-right:5px;\" ><div class='FloatLeft' style='margin-top:10px;'><span class=\"wb-map\" style=\"margin-right:5px; font-size:14px;\"></span>描点总数:<span id='检查项总数量'></span></div> <div class='FloatRight'><div class=\"checkbox-custom checkbox-default\"><input type=\"checkbox\" id=\"CheckAllPointCategory\" name=\"CheckAllPointCategory\" " + (!HuaYuanImagePointMakerClass.InitiateConfig.hasOwnProperty("CheckAllPointCategory") || HuaYuanImagePointMakerClass.InitiateConfig.CheckAllPointCategory ? "checked='checked'" : "") + " autocomplete=\"off\" onclick=\"this.checked?CheckAll('PointCategory'):UnCheckAll('PointCategory'); HuaYuanImagePointMakerClass.Refresh();\" /><label for=\"CheckAllPointCategory\"> </label></div></div> <div class='ClearFloat'></div></div>"; list.foreach(function (item, index) { var CategoryKey = item.检查项[0]; html += "<div style=\"padding:0px; font-size:12px; font-weight:bold; padding-left:10px; padding-bottom:0px; color:#999; padding-right:5px;\" class='Relative'><div class='FloatLeft' style='margin-top:15px;'><span class=\"wb-small-point\" style=\"margin-right:5px; color:" + item.描点颜色 + ";\"></span>" + item.检查项 + "<span id='检查项数量" + CategoryKey + "'></span></div> <div class='FloatRight'><div class=\"checkbox-custom checkbox-default\"><input type=\"checkbox\" class=\"PointCategory\" id=\"PointCategory" + CategoryKey + "\" name=\"PointCategory\" " + (!HuaYuanImagePointMakerClass.InitiateConfig.hasOwnProperty("PointCategoryList") || Array.contains(HuaYuanImagePointMakerClass.InitiateConfig.PointCategoryList, item.检查项) ? "checked='checked'" : "") + " value=\"" + item.检查项 + "\" autocomplete=\"off\" onclick=\"HuaYuanImagePointMakerClass.Refresh()\" /><label for=\"PointCategory" + CategoryKey + "\"> </label></div></div> <div class='ClearFloat'></div></div>"; }); Element.SetHtml($("#PointListDIV"), html); }, LoadAddNewPage: function (类别, x, y) { var list = eval("(" + HuaYuanImagePointMakerClass.Config.实测实量检查项 + ")"); var html = ""; html += "<table class='FixedTable FullWidth TableCSSClassPadding5'>"; html += "<tr>"; html += "<td style='width:90px;'>检查项:</td>"; html += "<td>"; html += "<select id='描点检查项' class='form-control'>"; list.foreach(function (item, index) { var CategoryKey = item.检查项[0]; html += "<option value=\"" + item.检查项 + "\">" + item.检查项 + "</option>"; }); html += "</select>"; html += "</td>"; html += "</tr>"; html += "<tr>"; html += "<td>备注:</td>"; html += "<td><input type='text' class='form-control' id='描点备注'></td>"; html += "</tr>"; html += "</table>"; PopupDialogModelWindow(); PopupDialogModelWindowSetTitle("新建检查点"); PopupDialogModelWindowSetContent("<div id='AddNewPointPageDIV' class='Padding10' style='padding-top:0px;'>" + html + "</div> <div class='Padding10' style='margin-top:20px;'><button type=\"button\" class=\"btn btn-primary\" onclick=\"HuaYuanImagePointMakerClass.AddNewPoint('" + 类别 + "','" + x + "','" + y + "')\" style='margin-right:5px;'>确定</button><button type=\"button\" class=\"btn btn-outline btn-default\" onclick='ClosePopupDialogModelWindow()'>取消</button></div>"); }, AddNewPoint: function (类别, x, y) { var dic = {}; dic["巡检任务编号"] = HuaYuanImagePointMakerClass.Config.巡检任务.巡检任务编号; dic["类别"] = 类别; dic["x"] = x; dic["y"] = y; dic["检查项"] = Element.GetValue($("#描点检查项")); dic["备注"] = Element.GetValue($("#描点备注")).replace(/'/ig, ""); ShowLoadingStatusDIV(null, "正在保存..."); LoadServiceClass.LoadServiceInterfaceByDLLSetting("华苑园林插件wyz.dll|标准项目插件.描点类|AddNewPoint", "新建测量点", false, "", "", { dic: JSON.encode(dic) }, function (返回值) { ClosePopupDialogModelWindow(); HideLoadingStatusDIV(); PopupToastMessage("info", "新建测量点成功"); HuaYuanImagePointMakerClass.Refresh(); }, Common_Error, { ActionName: "新建测量点" }); }, LoadEditPage: function (测量点编号, 检查项, 备注) { var list = eval("(" + HuaYuanImagePointMakerClass.Config.实测实量检查项 + ")"); var html = ""; html += "<table class='FixedTable FullWidth TableCSSClassPadding5'>"; html += "<tr>"; html += "<td style='width:90px;'>测量点编号:</td>"; html += "<td>" + 测量点编号 + "</td>"; html += "</tr>"; html += "<tr>"; html += "<td>检查项:</td>"; html += "<td>"; html += "<select id='描点检查项' class='form-control'>"; list.foreach(function (item, index) { var CategoryKey = item.检查项[0]; html += "<option value=\"" + item.检查项 + "\" " + (检查项 == item.检查项 ? "selected='selected'" : "") + ">" + item.检查项 + "</option>"; }); html += "</select>"; html += "</td>"; html += "</tr>"; html += "<tr>"; html += "<td>备注:</td>"; html += "<td><input type='text' class='form-control' id='描点备注' value=\"" + 备注 + "\"></td>"; html += "</tr>"; html += "</table>"; PopupDialogModelWindow(); PopupDialogModelWindowSetTitle("编辑检查点"); PopupDialogModelWindowSetContent("<div id='EditPointPageDIV' class='Padding10' style='padding-top:0px;'>" + html + "</div> <div class='Padding10' style='margin-top:20px;'><button type=\"button\" class=\"btn btn-primary\" onclick=\"HuaYuanImagePointMakerClass.EditPoint('" + 测量点编号 + "')\" style='margin-right:5px;'>确定</button><button type=\"button\" class=\"btn btn-outline btn-default\" onclick='ClosePopupDialogModelWindow()'>取消</button></div>"); }, EditPoint: function (测量点编号) { var dic = {}; var 检查项 = Element.GetValue($("#描点检查项")); var 备注 = Element.GetValue($("#描点备注")).replace(/'/ig, ""); ShowLoadingStatusDIV(null, "正在保存..."); LoadServiceClass.LoadServiceInterfaceByDLLSetting("华苑园林插件wyz.dll|标准项目插件.描点类|EditPoint", "新建测量点", false, "", "", { 测量点编号: 测量点编号, 检查项: 检查项, 备注: 备注 }, function (返回值) { ClosePopupDialogModelWindow(); HideLoadingStatusDIV(); PopupToastMessage("info", "编辑测量点成功"); HuaYuanImagePointMakerClass.Refresh(); }, Common_Error, { ActionName: "编辑测量点" }); }, AjaxLoader: null, LoadPointList: function (IsDisplayHistoryPoint, SuccessCallBack) { if (HuaYuanImagePointMakerClass.AjaxLoader != null) { try { HuaYuanImagePointMakerClass.AjaxLoader.abort(); } catch (e) { } } var PointCategoryList = GetCheckBoxValue("PointCategory"); HuaYuanImagePointMakerClass.AjaxLoader = LoadServiceClass.LoadServiceInterfaceByDLLSetting("华苑园林插件wyz.dll|标准项目插件.描点类|LoadPointList", "加载描点列表", false, "", "", { 巡检任务编号: HuaYuanImagePointMakerClass.Config.巡检任务.巡检任务编号, 类别: HuaYuanImagePointMakerClass.InitiateConfig.类别, PointCategoryList: PointCategoryList.join(","), IsDisplayHistoryPoint: IsDisplayHistoryPoint }, function (返回值) { var Config = eval("(" + 返回值.Result + ")"); //更新检查项的数量 var TotalValue = 0; for (var Key in Config.检查项数量统计) { var value = Config.检查项数量统计[Key]; Element.SetHtml($("#检查项数量" + Key[0]), "(" + value + ")"); TotalValue += value; } Element.SetHtml($("#检查项总数量"), TotalValue); //显示测量点清单 var 测量点清单 = eval("(" + Config.测量点清单 + ")"); HuaYuanImagePointMakerClass.DisplayPointList(测量点清单, false); //显示历史测量点清单 var 历史测量点清单 = eval("(" + Config.历史测量点清单 + ")"); HuaYuanImagePointMakerClass.DisplayPointList(历史测量点清单, true); //回调 SuccessCallBack(); }, Common_Error, { ActionName: "加载描点列表" }); }, GetColor: function (检查项) { var color = ""; var list = eval("(" + HuaYuanImagePointMakerClass.Config.实测实量检查项 + ")"); list.foreach(function (item, index) { if (item.检查项 == 检查项) { color = item.描点颜色; } }); return color; }, DisplayPointList: function (PointList, IsHistoryPoint) { var html = ""; PointList.foreach(function (item, index) { var color = IsHistoryPoint ? "#fff" : HuaYuanImagePointMakerClass.GetColor(item.检查项); html += "<div class=\"lhp_miv_hotspot\" data-x=\"" + item.x + "\" data-y=\"" + item.y + "\" data-visible-scale=\"0.5\">"; html += "<!-- marker -->"; html += "<div class=\"lhp_miv_marker pos-BR\">"; html += "<span class=\"wb-map\" style=\"color: " + color + ";" + (IsHistoryPoint ? "text-shadow:none !important;" : "") + "\"></span>"; html += "<div class=\"label\" style=\"color: " + (IsHistoryPoint ? "#000" : color) + ";\">" + item.测量点编号.split("-").last() + "</div>"; html += "</div>"; html += "<!-- pop-up -->"; html += "<div class=\"lhp_miv_popup pos-R\">"; html += "<div class=\"content\" style=\"height: 180px; width: 120px;\">"; html += "<div>" + item.测量点编号.split("-").last() + " - " + item.检查项 + "</div>"; html += "<div style='margin-top:10px; color:#aaa;'>巡检任务编号:</div>"; html += "<div>" + item.巡检任务编号 + "</div>"; html += "<div style='margin-top:5px; color:#aaa;'>备注:</div>"; html += "<div>" + (item.备注.length == 0 ? "无" : item.备注) + "</div>"; if (!IsHistoryPoint) { html += "<div style='margin-top:15px;text-align:center;'><a href=\"javascript:HuaYuanImagePointMakerClass.LoadEditPage('" + item.测量点编号 + "', '" + item.检查项 + "', '" + item.备注 + "')\">编辑</a> <a href=\"javascript:HuaYuanImagePointMakerClass.DeletePoint('" + item.测量点编号 + "')\">删除</a></div>"; } html += "</div>"; html += "</div>"; html += "</div>"; }); Element.AppendByElement($("#MyHotspots"), html); }, DeletePoint: function (测量点编号) { if (confirm("请确认是否要删除此测量点(" + 测量点编号 + ")?")) { ShowLoadingStatusDIV(null, "正在删除..."); LoadServiceClass.LoadServiceInterfaceByDLLSetting("华苑园林插件wyz.dll|标准项目插件.描点类|DeletePoint", "删除测量点", false, "", "", { 测量点编号: 测量点编号 }, function (返回值) { $(".lhp_miv_popup_close").fireEvent("click"); HideLoadingStatusDIV(); PopupToastMessage("info", "删除测量点成功"); HuaYuanImagePointMakerClass.Refresh(); }, Common_Error, { ActionName: "删除测量点" }); } } };
6、控制标注的插件源代码参考《描点类》
//----------------------------------------------------------------------- // <copyright file="描点类.cs" company="企管宝"> // CustomizedWCFUI // </copyright> // <author>wyz</author> // <createdate>2020-10-28</createdate> // <revisionhistory> // </revisionhistory> //----------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Text; using System.Data; using PublicFunctions; using PublicFunctions.Service; using PublicFunctions.Button; using PublicFunctions.Form; using PublicFunctions.Grid; using PublicFunctions.PageTemplate; namespace 标准项目插件 { /// <summary> /// 描点类 /// </summary> public class 描点类 : ServiceFactoryBase { #region 函数说明:构造函数 /// <summary> /// 构造函数,必须保留 /// </summary> /// <param name="ServiceData"></param> public 描点类(ServiceDataModel ServiceData) : base(ServiceData) { } #endregion #region 函数说明:GetConfig加载描点配置 /// <summary> /// GetConfig加载描点配置 /// </summary> /// <returns></returns> public AjaxResultModel GetConfig() { AjaxResultModel AjaxResultObject = new AjaxResultModel(); string 巡检任务编号 = PublicFunctions.PublicFunctions.GetDataFromDictionary("巡检任务编号", ServiceData.RequestFormDictionary); string 类别 = PublicFunctions.PublicFunctions.GetDataFromDictionary("类别", ServiceData.RequestFormDictionary); if (Check.IsNull(巡检任务编号) || Check.IsNull(类别)) { AjaxResultObject.ErrorMsg = "必要参数缺失"; } else { using (PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory context = new PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory(PublicSetting.RawDBHelper_CRM_ConnectionStringKey)) { //巡检任务 Dictionary<string, string> 巡检任务 = context.GetCellRowDictionary("select * from 巡检任务 where 巡检任务编号='" + 巡检任务编号 + "'"); if (巡检任务 == null || 巡检任务.Count == 0) { AjaxResultObject.ErrorMsg = "巡检任务不存在"; } else { //项目编号 string 项目编号 = 巡检任务["项目编号"]; //实测实量检查项 string ErrorMsg = ""; DataTable 实测实量检查项 = new DataTable(); if (context.GetDataAll(ref 实测实量检查项, "select 检查项,描点颜色 from 实测实量检查项 where 类别='" + 类别 + "' order by 排序号 asc", ref ErrorMsg)) { //还原数据 PublicFunctions.MyDataTableClass.RestoreDataTableStringData(ref 实测实量检查项); } //读取项目信息字典 Dictionary<string, string> 项目信息 = context.GetCellRowDictionary("select 园建图纸,绿化图纸,园建图纸缩略图,绿化图纸缩略图 from 项目信息 where 项目编号='" + 项目编号 + "'"); if (项目信息.Count == 0) { AjaxResultObject.ErrorMsg = "项目不存在【" + 项目编号 + "】"; } else { //读取项目的园建图及绿化图 string 园建图纸 = PublicFunctions.PublicFunctions.GetDataFromDictionary("园建图纸", 项目信息); if (!Check.IsNull(园建图纸)) { 园建图纸 = PublicFunctions.ReplaceRestorStr.RestoreHTMLTag(园建图纸); Dictionary<string, string> FileDictionary = PublicFunctions.HtmlControl.HtmlControl.GetFileListFromUploadFileCompenentModeHTML(园建图纸); 园建图纸 = FileDictionary.Count > 0 ? FileDictionary.First().Key : ""; } string 绿化图纸 = PublicFunctions.PublicFunctions.GetDataFromDictionary("绿化图纸", 项目信息); if (!Check.IsNull(绿化图纸)) { 绿化图纸 = PublicFunctions.ReplaceRestorStr.RestoreHTMLTag(绿化图纸); Dictionary<string, string> FileDictionary = PublicFunctions.HtmlControl.HtmlControl.GetFileListFromUploadFileCompenentModeHTML(绿化图纸); 绿化图纸 = FileDictionary.Count > 0 ? FileDictionary.First().Key : ""; } AjaxResultObject.IsSuccess = true; AjaxResultObject.Result = Serializer.SerializeJSON(new { 巡检任务 = 巡检任务, 实测实量检查项 = JSONClass.DataTableToJSON(实测实量检查项), 园建图纸 = 园建图纸, 绿化图纸 = 绿化图纸, 园建图纸缩略图 = PublicFunctions.PublicFunctions.GetDataFromDictionary("园建图纸缩略图", 项目信息), 绿化图纸缩略图 = PublicFunctions.PublicFunctions.GetDataFromDictionary("绿化图纸缩略图", 项目信息) }); } if (实测实量检查项 != null) { 实测实量检查项.Dispose(); 实测实量检查项 = null; } } } } return AjaxResultObject; } #endregion #region 函数说明:AddNewPoint新建测量点 /// <summary> /// AddNewPoint新建测量点 /// </summary> /// <returns></returns> public AjaxResultModel AddNewPoint() { AjaxResultModel AjaxResultObject = new AjaxResultModel(); string json = PublicFunctions.PublicFunctions.GetDataFromDictionary("dic", ServiceData.RequestFormDictionary); if (Check.IsNull(json)) { AjaxResultObject.ErrorMsg = "必要参数缺失"; } else { string ErrorMsg; Dictionary<string, string> dic = Serializer.DeSerializeJSON<Dictionary<string, string>>(json, out ErrorMsg); if (dic == null) { AjaxResultObject.ErrorMsg = ErrorMsg; } else { using (PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory context = new PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory(PublicSetting.RawDBHelper_CRM_ConnectionStringKey)) { AddNewPointCore(context, ref AjaxResultObject, dic); } } } return AjaxResultObject; } /// <summary> /// AddNewPoint新建测量点(核心) /// </summary> /// <param name="context"></param> /// <param name="AjaxResultObject"></param> /// <param name="dic"></param> public void AddNewPointCore(PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory context, ref AjaxResultModel AjaxResultObject, Dictionary<string, string> dic) { string 巡检任务编号 = dic["巡检任务编号"]; string 检查项 = dic["检查项"]; #region 代码块说明:自动计算排序号 List<int> 排序号列表 = context.GetDistinctDataList<int>("排序号", "select 排序号 from 测量点清单 where 巡检任务编号='" + 巡检任务编号 + "' and 检查项='" + 检查项 + "' order by 排序号 asc"); int 排序号 = 1; if (排序号列表.Count > 0) { //首先判断《排序号列表》有没有因为删除描点引起的断号产生,如果有则用现在的断号 bool 是否使用断号 = false; int MaxValue = 排序号列表.Max(); for (int i = 1; i < MaxValue; i++) { if (!排序号列表.Contains(i)) { 排序号 = i; 是否使用断号 = true; break; } } if (!是否使用断号) { 排序号 = MaxValue + 1; } } dic["排序号"] = 排序号.ToString(); dic["测量点编号"] = 巡检任务编号 + "-" + 检查项[0] + 排序号.ToString(); #endregion dic["UserGuid"] = ServiceData.UserInfo.UserGuid; dic["UpdateUserGuid"] = ServiceData.UserInfo.UserGuid; dic["AddDate"] = DateTime.Now.ToString(); dic["UpdateDate"] = DateTime.Now.ToString(); string sql; AjaxResultObject.IsSuccess = context.InsertDataReturnIDDebug("测量点清单", dic, out sql) > 0; if (!AjaxResultObject.IsSuccess) { AjaxResultObject.ErrorMsg = sql; } } #endregion #region 函数说明:LoadPointList加载测量点列表 /// <summary> /// LoadPointList加载测量点列表 /// </summary> /// <returns></returns> public AjaxResultModel LoadPointList() { AjaxResultModel AjaxResultObject = new AjaxResultModel(); string 类别 = PublicFunctions.PublicFunctions.GetDataFromDictionary("类别", ServiceData.RequestFormDictionary); string 巡检任务编号 = PublicFunctions.PublicFunctions.GetDataFromDictionary("巡检任务编号", ServiceData.RequestFormDictionary); string PointCategoryList = PublicFunctions.PublicFunctions.GetDataFromDictionary("PointCategoryList", ServiceData.RequestFormDictionary); bool IsDisplayHistoryPoint = ConvertData.ConvertToBool(PublicFunctions.PublicFunctions.GetDataFromDictionary("IsDisplayHistoryPoint", ServiceData.RequestFormDictionary)); if (Check.IsNull(巡检任务编号) || Check.IsNull(类别)) { AjaxResultObject.ErrorMsg = "必要参数缺失"; } else { string ErrorMsg = ""; using (PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory context = new PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory(PublicSetting.RawDBHelper_CRM_ConnectionStringKey)) { #region 代码块说明:统计各检查项的数量 Dictionary<string, int> 检查项数量统计 = context.GetDictionary<string, int>("检查项", "数量", "select 检查项,数量=count(1) from 测量点清单 where 巡检任务编号='" + 巡检任务编号 + "' and 类别='" + 类别 + "' group by 检查项"); #endregion #region 代码块说明:加载当前《巡检任务编号》的《测量点清单》 DataTable 测量点清单 = new DataTable(); if (context.GetDataAll(ref 测量点清单, "select 测量点编号,巡检任务编号,类别,检查项,备注,x,y from 测量点清单 where 巡检任务编号='" + 巡检任务编号 + "' and 检查项 in(" + ConvertData.ConvertStringToSqlString(PointCategoryList) + ")", ref ErrorMsg)) { PublicFunctions.MyDataTableClass.RestoreDataTableStringData(ref 测量点清单); } #endregion #region 代码块说明:加载当前《巡检任务编号》的《历史测量点清单》 DataTable 历史测量点清单 = new DataTable(); if (IsDisplayHistoryPoint) { Dictionary<string, string> 巡检任务 = context.GetCellRowDictionary("select ID,项目编号 from 巡检任务 where 巡检任务编号='" + 巡检任务编号 + "'"); string 项目编号 = PublicFunctions.PublicFunctions.GetDataFromDictionary("项目编号", 巡检任务); string 巡检任务ID = PublicFunctions.PublicFunctions.GetDataFromDictionary("ID", 巡检任务); if (context.GetDataAll(ref 历史测量点清单, "select 测量点编号,巡检任务编号,类别,检查项,备注,x,y from 测量点清单 where 巡检任务编号!='" + 巡检任务编号 + "' and 巡检任务编号 in(select 巡检任务编号 from 巡检任务 where 项目编号='" + 项目编号 + "') and 检查项 in(" + ConvertData.ConvertStringToSqlString(PointCategoryList) + ")", ref ErrorMsg)) { PublicFunctions.MyDataTableClass.RestoreDataTableStringData(ref 历史测量点清单); } } #endregion AjaxResultObject.IsSuccess = true; AjaxResultObject.Result = Serializer.SerializeJSON(new { 检查项数量统计 = 检查项数量统计, 测量点清单 = JSONClass.DataTableToJSON(测量点清单), 历史测量点清单 = JSONClass.DataTableToJSON(历史测量点清单) }); 测量点清单.Dispose(); 测量点清单 = null; 历史测量点清单.Dispose(); 历史测量点清单 = null; } } return AjaxResultObject; } #endregion #region 函数说明:DeletePoint删除测量点 /// <summary> /// DeletePoint删除测量点 /// </summary> /// <returns></returns> public AjaxResultModel DeletePoint() { AjaxResultModel AjaxResultObject = new AjaxResultModel(); string 测量点编号 = PublicFunctions.PublicFunctions.GetDataFromDictionary("测量点编号", ServiceData.RequestFormDictionary); if (Check.IsNull(测量点编号)) { AjaxResultObject.ErrorMsg = "必要参数缺失"; } else { using (PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory context = new PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory(PublicSetting.RawDBHelper_CRM_ConnectionStringKey)) { DeletePointCore(context, ref AjaxResultObject, 测量点编号); } } return AjaxResultObject; } /// <summary> /// DeletePointCore删除测量点(核心) /// </summary> /// <param name="context"></param> /// <param name="AjaxResultObject"></param> /// <param name="测量点编号"></param> public void DeletePointCore(PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory context, ref AjaxResultModel AjaxResultObject, string 测量点编号) { AjaxResultObject.IsSuccess = context.ExecuteSQLBool("delete from 测量点清单 where 测量点编号='" + 测量点编号 + "'"); } #endregion #region 函数说明:EditPoint编辑测量点 /// <summary> /// EditPoint编辑测量点 /// </summary> /// <returns></returns> public AjaxResultModel EditPoint() { AjaxResultModel AjaxResultObject = new AjaxResultModel(); string 测量点编号 = PublicFunctions.PublicFunctions.GetDataFromDictionary("测量点编号", ServiceData.RequestFormDictionary); string 检查项 = PublicFunctions.PublicFunctions.GetDataFromDictionary("检查项", ServiceData.RequestFormDictionary); string 备注 = PublicFunctions.PublicFunctions.GetDataFromDictionary("备注", ServiceData.RequestFormDictionary); if (Check.IsNull(测量点编号)) { AjaxResultObject.ErrorMsg = "必要参数缺失"; } else { using (PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory context = new PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory(PublicSetting.RawDBHelper_CRM_ConnectionStringKey)) { Dictionary<string, string> dic = context.GetCellRowDictionary("select 巡检任务编号,类别,x,y from 测量点清单 where 测量点编号='" + 测量点编号 + "'"); //删除测量点 DeletePointCore(context, ref AjaxResultObject, 测量点编号); if (AjaxResultObject.IsSuccess) { //新建测量点 dic["检查项"] = 检查项; dic["备注"] = 备注; AddNewPointCore(context, ref AjaxResultObject, dic); } } } return AjaxResultObject; } #endregion #region 函数说明:UpdateTaskMakePointStatus更新描点是否完成的状态 /// <summary> /// UpdateTaskMakePointStatus更新描点是否完成的状态 /// </summary> /// <returns></returns> public AjaxResultModel UpdateTaskMakePointStatus() { AjaxResultModel AjaxResultObject = new AjaxResultModel(); string 巡检任务编号 = PublicFunctions.PublicFunctions.GetDataFromDictionary("巡检任务编号", ServiceData.RequestFormDictionary); string ColumnName = PublicFunctions.PublicFunctions.GetDataFromDictionary("ColumnName", ServiceData.RequestFormDictionary); string Value = PublicFunctions.PublicFunctions.GetDataFromDictionary("Value", ServiceData.RequestFormDictionary); if (Check.IsNull(巡检任务编号) || Check.IsNull(ColumnName) || Check.IsNull(Value)) { AjaxResultObject.ErrorMsg = "必要参数缺失"; } else { using (PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory context = new PublicFunctions.DBHelper.RawDBHelper.SqlDataFactory(PublicSetting.RawDBHelper_CRM_ConnectionStringKey)) { AjaxResultObject.IsSuccess = context.ExecuteSQLBool("update 巡检任务 set " + ColumnName + "='" + Value + "' where 巡检任务编号='" + 巡检任务编号 + "'"); } } return AjaxResultObject; } #endregion } }
7、所调用的插件官网