1 /** 2 * //2.0檢測方式(目測,測量,專用儀器測試等) 3 function GetCheckType() { 4 $.ajax({ 5 url: '@Url.Action("GetCheckType", "SCM_RMInspection_Report")', 6 type: "get", 7 asycn: false, 8 success: function (data) { 9 if (data) { 10 var list = utils.filterProperties(data, ['ID as id', 'ParentID as pid', 'Name as text']); 11 var treeData = utils.toTreeData(list, "id", "pid", "children"); 12 $('#CheckTypeID').combotree('loadData', treeData); 13 } 14 }, 15 error: function (err) { 16 parent.sy.messagerAlert('提示', '出錯!', err); 17 } 18 }) 19 } 20 **/ 21 22 var utils = {}; 23 24 /** 25 * 格式化字符串 26 * 用法: 27 .formatString("{0}-{1}","a","b"); 28 */ 29 utils.formatString = function () { 30 for (var i = 1; i < arguments.length; i++) { 31 var exp = new RegExp('\\{' + (i - 1) + '\\}', 'gm'); 32 arguments[0] = arguments[0].replace(exp, arguments[i]); 33 } 34 return arguments[0]; 35 }; 36 37 /** 38 * 格式化時間顯示方式 39 * 用法:format="yyyy-MM-dd hh:mm:ss"; 40 */ 41 utils.formatDate = function (v, format) { 42 if (!v) return ""; 43 var d = v; 44 if (typeof v === 'string') { 45 if (v.indexOf("/Date(") > -1) 46 d = new Date(parseInt(v.replace("/Date(", "").replace(")/", ""), 10)); 47 else 48 d = new Date(Date.parse(v.replace(/-/g, "/").replace("T", " ").split(".")[0]));//.split(".")[0] 用來處理出現毫秒的情況,截取掉.xxx,否則會出錯 49 } 50 var o = { 51 "M+": d.getMonth() + 1, //month 52 "d+": d.getDate(), //day 53 "h+": d.getHours(), //hour 54 "m+": d.getMinutes(), //minute 55 "s+": d.getSeconds(), //second 56 "q+": Math.floor((d.getMonth() + 3) / 3), //quarter 57 "S": d.getMilliseconds() //millisecond 58 }; 59 if (/(y+)/.test(format)) { 60 format = format.replace(RegExp.$1, (d.getFullYear() + "").substr(4 - RegExp.$1.length)); 61 } 62 for (var k in o) { 63 if (new RegExp("(" + k + ")").test(format)) { 64 format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); 65 } 66 } 67 return format; 68 }; 69 70 /** 71 * 格式化數字顯示方式 72 * 用法 73 * formatNumber(12345.999,'#,##0.00'); 74 * formatNumber(12345.999,'#,##0.##'); 75 * formatNumber(123,'000000'); 76 */ 77 utils.formatNumber = function (v, pattern) { 78 if (v == null) 79 return v; 80 var strarr = v ? v.toString().split('.') : ['0']; 81 var fmtarr = pattern ? pattern.split('.') : ['']; 82 var retstr = ''; 83 // 整數部分 84 var str = strarr[0]; 85 var fmt = fmtarr[0]; 86 var i = str.length - 1; 87 var comma = false; 88 for (var f = fmt.length - 1; f >= 0; f--) { 89 switch (fmt.substr(f, 1)) { 90 case '#': 91 if (i >= 0) retstr = str.substr(i--, 1) + retstr; 92 break; 93 case '0': 94 if (i >= 0) retstr = str.substr(i--, 1) + retstr; 95 else retstr = '0' + retstr; 96 break; 97 case ',': 98 comma = true; 99 retstr = ',' + retstr; 100 break; 101 } 102 } 103 if (i >= 0) { 104 if (comma) { 105 var l = str.length; 106 for (; i >= 0; i--) { 107 retstr = str.substr(i, 1) + retstr; 108 if (i > 0 && ((l - i) % 3) == 0) retstr = ',' + retstr; 109 } 110 } 111 else retstr = str.substr(0, i + 1) + retstr; 112 } 113 retstr = retstr + '.'; 114 // 處理小數部分 115 str = strarr.length > 1 ? strarr[1] : ''; 116 fmt = fmtarr.length > 1 ? fmtarr[1] : ''; 117 i = 0; 118 for (var f = 0; f < fmt.length; f++) { 119 switch (fmt.substr(f, 1)) { 120 case '#': 121 if (i < str.length) retstr += str.substr(i++, 1); 122 break; 123 case '0': 124 if (i < str.length) retstr += str.substr(i++, 1); 125 else retstr += '0'; 126 break; 127 } 128 } 129 return retstr.replace(/^,+/, '').replace(/\.$/, ''); 130 }; 131 132 /** 133 * json格式轉樹狀結構 134 * @param {json} json數據 135 * @param {String} id的字符串 136 * @param {String} 父id的字符串 137 * @param {String} children的字符串 138 * @return {Array} 數組 139 */ 140 utils.toTreeData = function (a, idStr, pidStr, childrenStr) { 141 var r = [], hash = {},len = (a||[]).length; 142 for (var i=0; i < len; i++) { 143 hash[a[i][idStr]] = a[i]; 144 } 145 for (var j=0; j < len; j++) { 146 var aVal = a[j], hashVP = hash[aVal[pidStr]]; 147 if (hashVP) { 148 !hashVP[childrenStr] && (hashVP[childrenStr] = []); 149 hashVP[childrenStr].push(aVal); 150 } else { 151 r.push(aVal); 152 } 153 } 154 return r; 155 }; 156 157 utils.eachTreeRow = function(treeData,eachHandler) { 158 for (var i in treeData) { 159 if (eachHandler(treeData[i]) == false) break; 160 if (treeData[i].children) 161 utils.eachTreeRow(treeData[i].children, eachHandler); 162 } 163 }; 164 165 utils.isInChild = function (treeData,pid,id) { 166 var isChild = false; 167 utils.eachTreeRow(treeData, function (curNode) { 168 if (curNode.id == pid) { 169 utils.eachTreeRow([curNode], function (row) { 170 if (row.id == id) { 171 isChild = true; 172 return false; 173 } 174 }); 175 return false; 176 } 177 }); 178 return isChild; 179 }; 180 181 utils.fnValueToText = function (list, value, text) { 182 var map = {}; 183 for (var i in list) { 184 map[list[i][value || 'value']] = list[i][text || 'text']; 185 } 186 var fnConvert = function (v, r) { 187 return map[v]; 188 }; 189 return fnConvert; 190 }; 191 192 utils.compareObject = function (v1, v2) { 193 var countProps = function (obj) { 194 var count = 0; 195 for (k in obj) if (obj.hasOwnProperty(k)) count++; 196 return count; 197 }; 198 199 if (typeof (v1) !== typeof (v2)) { 200 return false; 201 } 202 203 if (typeof (v1) === "function") { 204 return v1.toString() === v2.toString(); 205 } 206 207 if (v1 instanceof Object && v2 instanceof Object) { 208 if (countProps(v1) !== countProps(v2)) { 209 return false; 210 } 211 var r = true; 212 for (k in v1) { 213 r = utils.compareObject(v1[k], v2[k]); 214 if (!r) { 215 return false; 216 } 217 } 218 return true; 219 } else { 220 return v1 === v2; 221 } 222 }; 223 224 utils.minusArray = function (arr1, arr2) { 225 var arr = []; 226 for (var i in arr1) { 227 var b = true; 228 for (var j in arr2) { 229 if (utils.compareObject(arr1[i],arr2[j])) { 230 b = false; 231 break; 232 } 233 } 234 if (b) { 235 arr.push(arr1[i]); 236 } 237 } 238 return arr; 239 }; 240 241 utils.diffrence = function (obj1, obj2, reserve,ignore) { 242 var obj = {}, reserve = reserve || [], ignore = ignore || [], reserveMap = {}, ignoreMap = {}; 243 for (var i in reserve) 244 reserveMap[reserve[i]] = true; 245 246 for (var i in ignore) 247 ignoreMap[ignore[i]] = true; 248 249 for (var k in obj1) { 250 if (!ignoreMap[k] && (obj1[k] != obj2[k] || reserveMap[k])) { 251 obj[k] = obj1[k]; 252 } 253 } 254 return obj; 255 }; 256 257 utils.filterProperties = function (obj, props, ignore) { 258 var ret; 259 if (obj instanceof Array || Object.prototype.toString.call(obj) === "[object Array]") { 260 ret = []; 261 for (var k in obj) { 262 ret.push(utils.filterProperties(obj[k], props, ignore)); 263 } 264 } 265 else if (typeof obj === 'object') { 266 ret = {}; 267 if (ignore) { 268 var map = {}; 269 for (var k in props) 270 map[props[k]] = true; 271 272 for (var i in obj) { 273 if (!map[i]) ret[i] = obj[i]; 274 } 275 } 276 else { 277 for (var i in props) { 278 var arr = props[i].split(" as "); 279 ret[arr[1] || arr[0]] = obj[arr[0]]; 280 } 281 } 282 } 283 else { 284 ret = obj; 285 } 286 return ret; 287 }; 288 289 290 utils.copyProperty = function (obj, sourcePropertyName, newPropertyName, overWrite) { 291 if (obj instanceof Array || Object.prototype.toString.call(obj) === "[object Array]") { 292 for (var k in obj) 293 utils.copyProperty(obj[k], sourcePropertyName, newPropertyName); 294 } 295 else if (typeof obj === 'object') { 296 if (sourcePropertyName instanceof Array || Object.prototype.toString.call(sourcePropertyName) === "[object Array]") { 297 for (var i in sourcePropertyName) { 298 utils.copyProperty(obj, sourcePropertyName[i], newPropertyName[i]); 299 } 300 } 301 else if (typeof sourcePropertyName === 'string') { 302 if ((obj[newPropertyName] && overWrite) || (!obj[newPropertyName])) 303 obj[newPropertyName] = obj[sourcePropertyName]; 304 } 305 } 306 return obj; 307 }; 308 309 utils.clearIframe = function (context) { 310 var frame = $('iframe', context).add(parent.$('iframe', context)); 311 if (frame.length > 0) { 312 frame[0].contentWindow.document.write(''); 313 frame[0].contentWindow.close(); 314 frame.remove(); 315 if ($.browser.msie) { 316 CollectGarbage(); 317 } 318 } 319 }; 320 321 utils.getThisIframe = function () { 322 if (!parent) return null; 323 var iframes = parent.document.getElementsByTagName('iframe'); 324 if (iframes.length == 0) return null; 325 for (var i = 0; i < iframes.length; ++i) { 326 var iframe = iframes[i]; 327 if (iframe.contentWindow === self) { 328 return iframe; 329 } 330 } 331 return null; 332 } 333 334 utils.functionComment = function(fn){ 335 return fn.toString().replace(/^.*\r?\n?.*\/\*|\*\/([.\r\n]*).+?$/gm,''); 336 }; 337 338 utils.uuid = (function () { var a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""); return function (b, f) { var h = a, e = [], d = Math.random; f = f || h.length; if (b) { for (var c = 0; c < b; c++) { e[c] = h[0 | d() * f]; } } else { var g; e[8] = e[13] = e[18] = e[23] = "-"; e[14] = "4"; for (var c = 0; c < 36; c++) { if (!e[c]) { g = 0 | d() * 16; e[c] = h[(c == 19) ? (g & 3) | 8 : g & 15]; } } } return e.join("").toLowerCase(); }; })(); 339 340 utils.getRequest = function (name, url) { 341 var url = url|| window.location.href; 342 var theRequest = new Object(); 343 if (url.indexOf("?") != -1) { 344 var str = url.split("?")[1]; 345 strs = str.split("&"); 346 for (var i = 0; i < strs.length; i++) { 347 theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]); 348 } 349 } 350 return theRequest[name]; 351 };