{"version":3,"file":"MchOmsAssets/js/UtilityJs.0d55749f13.js","sources":["webpack:///./src/Common/Utility.js"],"sourcesContent":["'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.search.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.object.assign.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.number.to-fixed.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.regexp.constructor.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport ListViewRequest from \"@/Common/ListViewRequest.js\";\nimport FormViewRequest from \"@/Common/FormViewRequest.js\";\nimport Vue from 'vue';\nimport Configuration from \"./Configuration\";\nimport apiService from '@/Common/ApiService';\nimport NavigationService from '@/Common/NavigationService'; //import moment from \"moment\";\n\nvar Utility = {\n vue: new Vue(),\n HasServerError: false,\n LastModifyTime: new Date(),\n Nav: null,\n SerialNumber: 0,\n Session: {},\n Argument: {},\n Bag: {},\n RecordMoveButtonClick: null,\n //#region Job\n PrepareJob: function PrepareJob(vueComponent, responseData, finishHandler) {\n var jobId;\n var path;\n path = location.pathname + location.search;\n\n if (responseData.ValueSet.JobId != null) {\n Utility.SaveBag(\"JobId_\" + path, responseData.ValueSet.JobId);\n }\n },\n RemoveJob: function RemoveJob(vueComponent, jobId) {\n var bags;\n var bagName, bagValue;\n var i;\n bags = this.GetAllBags();\n\n for (i = 0; i < bags.length; i++) {\n bagName = bags[i].Name;\n bagValue = bags[i].Value;\n\n if (bagName.indexOf(\"JobId_\") == 0 && bagValue == jobId) {\n this.ClearBag(bagName);\n break;\n }\n }\n },\n //#endregion\n CreateListViewRequest: function CreateListViewRequest(vueComponent) {},\n LoadListViewResponse: function LoadListViewResponse(vueComponent, responseData, detailCacheData) {\n var data;\n var equal = false;\n var i = 0;\n this.ProcessIso8601Text(vueComponent, responseData);\n data = vueComponent.$data;\n\n if (responseData.Paging != null) {\n data.Paging = responseData.Paging;\n }\n\n data.OrderBy = responseData.OrderBy;\n data.CheckedAll = false;\n\n if (responseData.AttributeSet != null) {\n if (data.AttributeSet == null) {\n data.AttributeSet = {};\n }\n\n this.SetNotNullAttributes(vueComponent, data.AttributeSet, responseData.AttributeSet);\n }\n\n if (responseData.Query != null) {\n if (data.Query == null) {\n data.Query = {};\n }\n\n this.SetNotNullAttributes(vueComponent, data.Query, responseData.Query);\n\n if (responseData.Query.AttributeSet != null) {\n for (var colunName in data.Query.AttributeSet) {\n var newAttributObj = {};\n var attributeObj = void 0;\n attributeObj = data.Query.AttributeSet[colunName];\n\n for (var propertyName in attributeObj) {\n newAttributObj[propertyName] = attributeObj[propertyName];\n } //end for (var propertyName in attributeObj) {\n\n\n data.Query.AttributeSet[colunName] = newAttributObj;\n } //end for (var colunName in data.Query.AttributeSet) {\n\n }\n } //end if (responseData.Query != null) {\n\n\n if (responseData.ValueSet != null) {\n this.SetNotNullAttributes(vueComponent, data.ValueSet, responseData.ValueSet);\n\n if (responseData.AttributeSet != null) {\n for (var colunName in data.AttributeSet) {\n var _newAttributObj = {};\n\n var _attributeObj = void 0;\n\n _attributeObj = data.AttributeSet[colunName];\n\n for (var propertyName in _attributeObj) {\n _newAttributObj[propertyName] = _attributeObj[propertyName];\n } //end for (var propertyName in attributeObj) {\n\n\n data.AttributeSet[colunName] = _newAttributObj;\n } //end for (var colunName in data.Query.AttributeSet) {\n\n }\n }\n\n if (responseData.Rows != null) {\n data.Rows.length = 0;\n this.PrepareSeqNo(responseData);\n\n for (i = 0; i < responseData.Rows.length; i++) {\n responseData.Rows[i].Checked = false;\n data.Rows.push(responseData.Rows[i]);\n }\n }\n\n if (detailCacheData != null) {\n for (i = 0; i < responseData.Rows.length; i++) {\n equal = this.CompareValueSet(detailCacheData.ValueSet, responseData.Rows[i].ValueSet);\n\n if (equal) {\n responseData.Rows[i].LastDetail = true;\n } else {\n responseData.Rows[i].LastDetail = false;\n }\n }\n\n setTimeout(function () {\n this.ClearLastDetailAttribute(vueComponent);\n }.bind(this), 1200);\n }\n },\n PrepareSeqNo: function PrepareSeqNo(responseData) {\n var i;\n var baseNo;\n baseNo = responseData.Paging.RecordPerPage * (responseData.Paging.CurrentPageNumber - 1);\n\n for (i = 0; i < responseData.Rows.length; i++) {\n responseData.Rows[i].ValueSet.SeqNo = baseNo + i + 1;\n }\n },\n ClearLastDetailAttribute: function ClearLastDetailAttribute(vueComponent) {\n var trElements;\n var i;\n trElements = document.querySelectorAll(\"TR.LastDetail\");\n\n for (i = 0; i < trElements.length; i++) {\n trElements[i].classList.remove(\"LastDetail\");\n }\n },\n CompareValueSet: function CompareValueSet(detailValueSet, listValueSet) {\n var equal = true;\n var propertyName;\n var count = 0;\n\n for (propertyName in listValueSet) {\n if (detailValueSet.hasOwnProperty(propertyName)) {\n if (Utility.IsDateObject(detailValueSet[propertyName])) {\n if (this.GetDateText(listValueSet[propertyName]) == detailValueSet[propertyName]) {\n count++;\n } else {\n break;\n }\n } else if (listValueSet[propertyName] == detailValueSet[propertyName]) {\n count++;\n } else {\n equal = false;\n break;\n }\n }\n\n if (count >= 5) {\n break;\n }\n }\n\n return equal;\n },\n GetQueryStringListBySearchPath: function GetQueryStringListBySearchPath(searchPath) {\n var queryStringList = [];\n var tokens, pair;\n var queryStringName, queryStringValue;\n var i;\n tokens = searchPath.split(\"&\");\n\n for (i = 0; i < tokens.length; ++i) {\n pair = tokens[i].split('=', 2);\n queryStringName = \"\";\n queryStringValue = \"\";\n\n if (pair.length == 1) {\n queryStringName = pair[0];\n } else {\n queryStringName = pair[0];\n queryStringValue = pair[1];\n queryStringValue = decodeURIComponent(queryStringValue.replace(/\\+/g, \" \"));\n }\n\n queryStringList.push({\n Name: queryStringName,\n Value: queryStringValue\n });\n }\n\n return queryStringList;\n },\n GetSingleShotQueryStringList: function GetSingleShotQueryStringList(queryStringList) {\n var singleShotQueryStringList = [];\n var i;\n\n for (i = 0; i < queryStringList.length; i++) {\n if (queryStringList[i].Name.indexOf(\"..\") == 0) {\n singleShotQueryStringList.push(queryStringList[i]);\n }\n }\n\n return singleShotQueryStringList;\n },\n GetNonSingleShotQueryStringList: function GetNonSingleShotQueryStringList(queryStringList) {\n var nonSingleShotQueryStringList = [];\n var i;\n\n for (i = 0; i < queryStringList.length; i++) {\n if (queryStringList[i].Name.indexOf(\"..\") < 0) {\n nonSingleShotQueryStringList.push(queryStringList[i]);\n }\n }\n\n return nonSingleShotQueryStringList;\n },\n RenderSearchPathWithoutSingleShot: function RenderSearchPathWithoutSingleShot(queryStringList) {\n var newSearchPath = \"\";\n var singleShotQueryStringList = [];\n var nonSingleShotQueryStringList = [];\n var i;\n singleShotQueryStringList = this.GetSingleShotQueryStringList(queryStringList);\n\n if (singleShotQueryStringList.length > 0) {\n nonSingleShotQueryStringList = this.GetNonSingleShotQueryStringList(queryStringList);\n } else {\n nonSingleShotQueryStringList = queryStringList;\n }\n\n for (i = 0; i < nonSingleShotQueryStringList.length; i++) {\n newSearchPath = nonSingleShotQueryStringList[i].Name + \"=\" + nonSingleShotQueryStringList[i].Value;\n\n if (i < nonSingleShotQueryStringList.length - 1) {\n newSearchPath += \"&\";\n }\n }\n\n return newSearchPath;\n },\n PrepareListViewRequest: function PrepareListViewRequest(vueComponent) {\n var listViewRequest = new ListViewRequest();\n var data;\n var dateText;\n var queryStringList;\n var singleShotQueryStringList;\n var singleShotTargetName;\n var nonSingleShotPath,\n nonSingleShotSearchPath = \"\";\n var dateTimeText;\n var dateObject;\n var i;\n data = vueComponent.$data;\n\n if (data.FirstQuery == null) {\n data.FirstQuery = true;\n } else {\n data.FirstQuery = false;\n }\n\n if (this.Nav == null) {\n this.Nav = new NavigationService(vueComponent);\n }\n\n if (this.Nav.MatchLastPath()) {\n var pathInfo;\n pathInfo = this.Nav.PeekPath();\n vueComponent.$args = pathInfo.Argument;\n }\n\n listViewRequest.FirstQuery = data.FirstQuery;\n listViewRequest.SourcePagePath = vueComponent.$route.path;\n Object.assign(listViewRequest.Query, data.Query);\n queryStringList = this.GetQueryStringListBySearchPath(window.location.search.substr(1));\n singleShotQueryStringList = this.GetSingleShotQueryStringList(queryStringList);\n\n if (singleShotQueryStringList.length > 0) {\n for (i = 0; i < singleShotQueryStringList.length; i++) {\n if (singleShotQueryStringList[i].Name.indexOf(\"...\") == 0) {\n singleShotTargetName = singleShotQueryStringList[i].Name.replace(\"...\", \"\");\n this.SaveBag(singleShotTargetName, singleShotQueryStringList[i].Value);\n } else if (singleShotQueryStringList[i].Name.indexOf(\"..\") == 0) {\n singleShotTargetName = singleShotQueryStringList[i].Name.replace(\"..\", \"\");\n listViewRequest.Query.ValueSet[singleShotTargetName] = singleShotQueryStringList[i].Value;\n }\n }\n\n nonSingleShotSearchPath = this.RenderSearchPathWithoutSingleShot(queryStringList);\n\n if (nonSingleShotSearchPath != \"\") {\n nonSingleShotPath = window.location.pathname + \"?\" + nonSingleShotSearchPath;\n } else {\n nonSingleShotPath = window.location.pathname;\n }\n\n vueComponent.$router.push(nonSingleShotPath);\n }\n\n for (i in data.Query.ValueSet) {\n if (data.Query.ValueSet[i] == \"\") {\n data.Query.ValueSet[i] = null;\n }\n\n if (data.Query.ValueSet[i] != null && data.Query.ValueSet[i] != \"\") {\n if (typeof data.Query.ValueSet[i].getMonth == \"function\") {\n dateTimeText = this.GetDateTimeText(data.Query.ValueSet[i]);\n dateObject = new Date(dateTimeText); //dateText = moment(data.Query.ValueSet[i]).format(\"YYYY/MM/DD HH:mm:ss\");\n //dateText = dateText.replace(\" 00:00:00\", \"\");\n //data.Query.ValueSet[i] = dateText;\n\n data.Query.ValueSet[i] = dateObject;\n } else if (typeof data.Query.ValueSet[i] == \"string\") {\n data.Query.ValueSet[i] = data.Query.ValueSet[i].replace(/^\\s+|\\s+$/g, '');\n }\n\n if (typeof data.Query.ValueSet[i] == \"string\" && data.Query.AttributeSet[i] != null && (data.Query.AttributeSet[i].DataType == \"Date\" || data.Query.AttributeSet[i].DataType == \"DateTime\")) {\n data.Query.ValueSet[i] = new Date(data.Query.ValueSet[i]);\n }\n }\n }\n\n listViewRequest.OrderBy = data.OrderBy;\n\n if (data.Paging != null) {\n listViewRequest.Paging.RecordPerPage = data.Paging.RecordPerPage;\n listViewRequest.Paging.CurrentPageNumber = data.Paging.CurrentPageNumber;\n listViewRequest.Paging.TotalCount = data.Paging.TotalCount;\n }\n\n for (i = 0; i < data.Rows.length; i++) {\n if (data.Rows[i].Checked == true) {\n listViewRequest.SelectedRows.push(data.Rows[i]);\n }\n\n listViewRequest.SelectedRowsFromRequest = listViewRequest.SelectedRows;\n }\n\n this.ProcessRquestDateObject(vueComponent, listViewRequest);\n return listViewRequest;\n },\n ProcessResponseData: function ProcessResponseData(responseData) {\n var propertyName;\n var propertyValue;\n var i;\n\n for (propertyName in responseData) {\n propertyValue = responseData[propertyName];\n\n if (propertyValue != null) {\n if (propertyName == \"AttributeSet\" || propertyName == \"ValueSet\" || propertyName == \"SelectedRow\") {\n if (Array.isArray(propertyValue)) {\n responseData[propertyName] = this.ConvertResponseArrayToDictionary(propertyValue);\n }\n } else if (_typeof(propertyValue) == \"object\") {\n if (Array.isArray(propertyValue)) {\n for (i = 0; i < propertyValue.length; i++) {\n this.ProcessResponseData(propertyValue[i]);\n }\n } else {\n this.ProcessResponseData(propertyValue);\n }\n } else if ((propertyValue + \"\").indexOf(\"/Date(\") == 0) {\n responseData[propertyName] = ToJavaScriptDate(propertyValue);\n }\n }\n }\n },\n ResetSortOrder: function ResetSortOrder(vueComponent, orderBy) {\n var tdElements;\n var i;\n vueComponent.LastSortColumnName = null;\n vueComponent.LastSortOrder = null;\n vueComponent.OrderBy = orderBy;\n tdElements = vueComponent.$el.querySelectorAll(\".ListTable TD.ASC,.ListTable TD.DESC\");\n\n for (i = 0; i < tdElements.length; i++) {\n tdElements[i].classList.remove(\"ASC\");\n tdElements[i].classList.remove(\"DESC\");\n }\n },\n PrepareListTable: function PrepareListTable(vueComponent) {\n var listTableElements, listTableElement;\n var headerCellElements;\n var firstRowCellElements;\n var lastSortElement;\n var listViewRequest = {};\n var columnName, sortOrder;\n var headerTdElement;\n var i, j;\n vueComponent.$forceUpdate();\n listTableElements = vueComponent.$el.querySelectorAll(\".ListTable\");\n\n for (i = 0; i < listTableElements.length; i++) {\n listTableElement = listTableElements[i];\n headerCellElements = listTableElement.querySelectorAll(\"TR.Header > Td\");\n firstRowCellElements = listTableElement.querySelectorAll(\"TR.Row:nth-child(2) > Td\");\n\n for (j = 0; j < headerCellElements.length; j++) {\n columnName = headerCellElements[j].getAttribute(\"Name\");\n\n if (columnName == null || columnName == \"\") {\n if (firstRowCellElements.length > 0) {\n columnName = firstRowCellElements[j].getAttribute(\"Name\");\n\n if (columnName != null && columnName != \"\") {\n headerCellElements[j].setAttribute(\"Name\", columnName);\n }\n }\n }\n\n if (columnName != null && columnName != \"\") {\n headerCellElements[j].style.cursor = \"pointer\";\n headerCellElements[j].addEventListener(\"click\", function (e) {\n headerTdElement = Utility.GetParentElementByTagName(e.target, \"TD\");\n lastSortElement = listTableElement.querySelector(\"TR.Header > Td.ASC,TR.Header > Td.DESC\");\n\n if (lastSortElement != null) {\n lastSortElement.classList.remove(\"ASC\");\n lastSortElement.classList.remove(\"DESC\");\n }\n\n columnName = Utility.GetParentElementByTagName(e.target, \"TD\").getAttribute(\"Name\");\n\n if (vueComponent.LastSortColumnName == columnName) {\n if (vueComponent.LastSortOrder == null) {\n sortOrder = \"ASC\";\n } else if (vueComponent.LastSortOrder == \"ASC\") {\n sortOrder = \"DESC\";\n } else {\n sortOrder = \"ASC\";\n }\n } else {\n sortOrder = \"ASC\";\n }\n\n headerTdElement.classList.add(sortOrder);\n listViewRequest = Utility.PrepareListViewRequest(vueComponent);\n listViewRequest.Paging.CurrentPageNumber = 1;\n listViewRequest.OrderBy = \"\".concat(columnName, \" \").concat(sortOrder);\n vueComponent.LastSortColumnName = columnName;\n vueComponent.LastSortOrder = sortOrder;\n vueComponent.QueryList(listViewRequest);\n });\n }\n }\n }\n },\n ToJavaScriptDate: function ToJavaScriptDate(value) {\n var pattern = /Date\\(([^)]+)\\)/;\n var results = pattern.exec(value);\n var dt = new Date(parseFloat(results[1]));\n return dt;\n },\n //要把所有日期物件 轉為字串\n ProcessRquestDateObject: function ProcessRquestDateObject(vueComponent, targetObject) {\n var propertyName;\n var propertyValue = null;\n\n if (targetObject != null) {\n for (propertyName in targetObject) {\n propertyValue = targetObject[propertyName];\n\n if (propertyValue != null) {\n if (this.IsDateObject(propertyValue)) {\n targetObject[propertyName] = this.GetDateTimeText(propertyValue);\n } else if (_typeof(propertyValue) == \"object\") {\n if (Array.isArray(propertyValue)) {//Do Nothing\n } else {\n this.ProcessRquestDateObject(vueComponent, targetObject[propertyName]);\n }\n } //end if (typeof (propertyValue) == \"string\" && this.IsIso8601Text(propertyValue)) {\n\n } //end if (propertyValue != null) {\n\n } //end for (propertyName in targetObject) {\n\n }\n } //end ProcessRquestDateObject(vueComponent, targetObject) {\n ,\n ConvertResponseArrayToDictionary: function ConvertResponseArrayToDictionary(responseArray) {\n var dictionaryObject = {};\n var elementName;\n var elementValue;\n var i;\n\n for (i = 0; i < responseArray.length; i++) {\n elementName = responseArray[i].Key;\n\n if (_typeof(responseArray[i].Value) != \"object\") {\n elementValue = responseArray[i].Value;\n } else {\n elementValue = responseArray[i].Value;\n }\n\n if ((elementValue + \"\").indexOf(\"/Date(\") == 0) {\n elementValue = this.ToJavaScriptDate(elementValue);\n }\n\n dictionaryObject[elementName] = elementValue;\n }\n\n return dictionaryObject;\n },\n ProcessIso8601Text: function ProcessIso8601Text(vueComponent, targetObject) {\n var propertyName;\n var propertyValue = null;\n\n if (targetObject != null) {\n for (propertyName in targetObject) {\n propertyValue = targetObject[propertyName];\n\n if (propertyValue != null) {\n if (typeof propertyValue == \"string\" && this.IsIso8601Text(propertyValue)) {\n //把 ISO 8601 的字串轉換為日期物件\n targetObject[propertyName] = this.ConvertIso8601TextToDate(propertyValue);\n } else if (_typeof(propertyValue) == \"object\") {\n if (Array.isArray(propertyValue)) {//Do Nothing\n } else {\n this.ProcessIso8601Text(vueComponent, targetObject[propertyName]);\n }\n } //end if (typeof (propertyValue) == \"string\" && this.IsIso8601Text(propertyValue)) {\n\n } //end if (propertyValue != null) {\n\n } //end for (propertyName in targetObject) {\n\n }\n } //end ProcessIso8601Text(vueComponent, targetObject) {\n ,\n SetNotNullAttributes: function SetNotNullAttributes(vueComponent, targetObject, sourceObject) {\n var propertyName;\n\n for (propertyName in sourceObject) {\n if (sourceObject[propertyName] != null) {\n if (_typeof(sourceObject[propertyName]) == \"object\") {\n if (typeof sourceObject[propertyName].getMonth == \"function\") {\n //JavaScript 日期 物件\n //targetObject[propertyName] = sourceObject[propertyName];\n vueComponent.$set(targetObject, propertyName, sourceObject[propertyName]);\n } else if (Array.isArray(sourceObject[propertyName])) {\n //targetObject[propertyName] = sourceObject[propertyName];\n vueComponent.$set(targetObject, propertyName, sourceObject[propertyName]);\n } else {\n if (targetObject[propertyName] == null) {\n targetObject[propertyName] = {};\n }\n\n this.SetNotNullAttributes(vueComponent, targetObject[propertyName], sourceObject[propertyName]);\n }\n } else {\n if (sourceObject.AttributeSet == null || propertyName != \"ValidationMessage\" && propertyName != \"Success\") {\n //targetObject[propertyName] = sourceObject[propertyName];\n if (targetObject != null) {\n vueComponent.$set(targetObject, propertyName, sourceObject[propertyName]);\n }\n }\n }\n } else {//do nothing\n }\n } //end for (propertyName in sourceObject) {\n\n } //end SetNotNullAttributes(vueComponent,targetObject, sourceObject) {\n ,\n IsDateObject: function IsDateObject(dateObj) {\n var isDateObject = false;\n\n if (dateObj != null && _typeof(dateObj) == \"object\" && typeof dateObj.getMonth == \"function\") {\n isDateObject = true;\n }\n\n return isDateObject;\n },\n OnCheckAllButtonClick: function OnCheckAllButtonClick(vueComponent) {\n var data;\n var i = 0;\n data = vueComponent.$data;\n\n if (data.CheckedAll == true) {\n for (i = 0; i < data.Rows.length; i++) {\n data.Rows[i].Checked = true;\n }\n } else {\n for (i = 0; i < data.Rows.length; i++) {\n data.Rows[i].Checked = false;\n }\n }\n } //end OnCheckAllButtonClick: function (data) {\n ,\n SaveSession: function SaveSession(sessionName, sessionObject) {\n this.Session[sessionName] = sessionObject;\n },\n GetAllSessions: function GetAllSessions() {\n var sessions = [];\n\n for (var sessionName in this.Session) {\n sessions.push({\n Name: sessionName,\n Value: this.Session[sessionName]\n });\n }\n\n return sessions;\n },\n //#region Cookies\n GetCookie: function GetCookie(vueComponent, cookieName) {\n var cookieValue = null;\n cookieValue = vueComponent.$cookies.get(cookieName);\n return cookieValue;\n },\n SaveCookie: function SaveCookie(vueComponent, cookieName, cookieValue) {\n vueComponent.$cookies.set(cookieName, cookieValue);\n },\n //#endregion\n //#region Session\n GetSession: function GetSession(sessionName) {\n var sessionObject = null;\n sessionObject = this.Session[sessionName];\n return sessionObject;\n },\n ClearSession: function ClearSession(sessionName) {\n var sessionObject = null;\n\n if (sessionName == null || sessionName == \"\") {\n alert(\"Utility.ClearSession() , sessionName is null\");\n throw \"sessionName is null\";\n }\n\n this.Session[sessionName] = null;\n delete this.Session[sessionName];\n },\n ClearAllSessions: function ClearAllSessions() {\n var sessionObject = null;\n this.Session = {};\n },\n //#endregion\n SetArgument: function SetArgument(argumentName, argumentValue) {\n this.Argument[argumentName] = argumentValue;\n },\n GetArgument: function GetArgument(argumentName) {\n var argumentValue = null;\n argumentValue = this.Argument[argumentName];\n this.Argument = {};\n return argumentValue;\n },\n //#region Bags\n CheckBags: function CheckBags() {\n var bagUpdateTimeText;\n var bagUpdateTime;\n var currDateTime;\n bagUpdateTimeText = localStorage.getItem(\"BagUpdateTime\");\n\n if (bagUpdateTimeText == null) {\n this.ClearAllBags();\n } else {\n bagUpdateTime = new Date(bagUpdateTimeText);\n currDateTime = new Date(); //console.log(\"(currDateTime - bagUpdateTime)=\" + (currDateTime - bagUpdateTime));\n\n if (currDateTime - bagUpdateTime >= 120 * 1000) {\n console.log(\"Bags Expired\");\n this.ClearAllBags();\n }\n }\n },\n SaveBag: function SaveBag(bagName, bagValue) {\n this.CheckBags();\n localStorage.setItem(\"Bag_\" + bagName, bagValue);\n this.ModifyBagUpdateTime();\n },\n ModifyBagUpdateTime: function ModifyBagUpdateTime() {\n var dateTimeText = this.GetDateTimeText();\n localStorage.setItem(\"BagUpdateTime\", dateTimeText);\n },\n GetBagSet: function GetBagSet() {\n var bagSet = {};\n var bags;\n var bagName, bagValue;\n var i;\n bags = this.GetAllBags();\n bagSet = {};\n\n for (i = 0; i < bags.length; i++) {\n bagName = bags[i].Name;\n bagValue = bags[i].Value;\n bagSet[bagName] = bagValue;\n }\n\n return bagSet;\n },\n GetAllBags: function GetAllBags() {\n var bags = [];\n var keyName;\n var bagName, bagValue;\n var i;\n this.CheckBags();\n\n for (i = 0; i < localStorage.length; i++) {\n keyName = localStorage.key(i);\n\n if (keyName.indexOf(\"Bag_\") == 0) {\n bagName = keyName.replace(\"Bag_\", \"\");\n bagValue = localStorage.getItem(keyName);\n bags.push({\n Name: bagName,\n Value: bagValue\n });\n }\n }\n\n return bags;\n },\n GetBag: function GetBag(bagName) {\n var bagValue = null;\n this.CheckBags();\n bagValue = localStorage.getItem(\"Bag_\" + bagName);\n return bagValue;\n },\n ClearBag: function ClearBag(bagName) {\n if (bagName == null || bagName == \"\") {\n alert(\"Utility.ClearBag() , bagName is null\");\n throw \"bagName is null\";\n }\n\n localStorage.removeItem(\"Bag_\" + bagName);\n },\n ClearAllBags: function ClearAllBags() {\n var keyName;\n var i;\n\n for (i = localStorage.length - 1; i >= 0; i--) {\n keyName = localStorage.key(i);\n\n if (keyName.indexOf(\"Bag_\") == 0) {\n localStorage.removeItem(keyName);\n }\n }\n },\n //#endregion\n //#region LongBags\n CheckLongBags: function CheckLongBags() {\n var bagUpdateTimeText;\n var bagUpdateTime;\n var currDateTime;\n bagUpdateTimeText = localStorage.getItem(\"LongBagUpdateTime\");\n\n if (bagUpdateTimeText == null) {\n this.ClearAllBags();\n } else {\n bagUpdateTime = new Date(bagUpdateTimeText);\n currDateTime = new Date(); //console.log(\"(currDateTime - bagUpdateTime)=\" + (currDateTime - bagUpdateTime));\n\n if (currDateTime - bagUpdateTime >= 10 * 24 * 60 * 60 * 1000) {\n //保留 10 天內的瀏覽紀錄\n console.log(\"Long Bags Expired\");\n this.ClearAllBags();\n }\n }\n },\n SaveLongBag: function SaveLongBag(bagName, bagValue) {\n this.CheckBags();\n localStorage.setItem(\"LongBag_\" + bagName, bagValue);\n this.ModifyBagUpdateTime();\n },\n ModifyLongBagUpdateTime: function ModifyLongBagUpdateTime() {\n var dateTimeText = this.GetDateTimeText();\n localStorage.setItem(\"LongBagUpdateTime\", dateTimeText);\n },\n GetLongBagSet: function GetLongBagSet() {\n var bagSet = {};\n var bags;\n var bagName, bagValue;\n var i;\n bags = this.GetAllLongBags();\n bagSet = {};\n\n for (i = 0; i < bags.length; i++) {\n bagName = bags[i].Name;\n bagValue = bags[i].Value;\n bagSet[bagName] = bagValue;\n }\n\n return bagSet;\n },\n GetAllLongBags: function GetAllLongBags() {\n var bags = [];\n var keyName;\n var bagName, bagValue;\n var i;\n this.CheckBags();\n\n for (i = 0; i < localStorage.length; i++) {\n keyName = localStorage.key(i);\n\n if (keyName.indexOf(\"LongBag_\") == 0) {\n bagName = keyName.replace(\"LongBag_\", \"\");\n bagValue = localStorage.getItem(keyName);\n bags.push({\n Name: bagName,\n Value: bagValue\n });\n }\n }\n\n return bags;\n },\n GetLongBag: function GetLongBag(bagName) {\n var bagValue = null;\n this.CheckLongBags();\n bagValue = localStorage.getItem(\"LongBag_\" + bagName);\n return bagValue;\n },\n CleaLongBag: function CleaLongBag(bagName) {\n if (bagName == null || bagName == \"\") {\n alert(\"Utility.CleaLongBag() , bagName is null\");\n throw \"bagName is null\";\n }\n\n localStorage.removeItem(\"LongBag_\" + bagName);\n },\n ClearAllLongBags: function ClearAllLongBags() {\n var keyName;\n var i;\n\n for (i = localStorage.length - 1; i >= 0; i--) {\n keyName = localStorage.key(i);\n\n if (keyName.indexOf(\"LongBag_\") == 0) {\n localStorage.removeItem(keyName);\n }\n }\n },\n //#endregion\n GetValueText: function GetValueText(vueComponent, columnName) {\n var valueText = \"\";\n var valueSet, attributeSet;\n var columnValue;\n var options;\n var i;\n valueSet = vueComponent.ValueSet;\n attributeSet = vueComponent.AttributeSet;\n columnValue = valueSet[columnName];\n valueText = columnValue;\n\n if (attributeSet != null && attributeSet[columnName] != null && attributeSet[columnName].Options != null) {\n options = attributeSet[columnName].Options;\n\n for (i = 0; i < options.length; i++) {\n if (options[i].Value == columnValue) {\n valueText = options[i].Text;\n break;\n }\n }\n }\n\n return valueText;\n },\n GetBaseUrl: function GetBaseUrl() {\n var baseUrl = \"\";\n\n if (location.port == 8080 || location.port == 8081) {\n baseUrl = Configuration.BaseUrl;\n } else {\n baseUrl = window.location.protocol + \"//\" + window.location.host;\n }\n\n return baseUrl;\n },\n PrepareFormViewRequest: function PrepareFormViewRequest(vueComponent, extraPropertyName) {\n var formViewRequest = new FormViewRequest();\n var dateText;\n var queryStringList, singleShotQueryStringList;\n var singleShotTargetName;\n var nonSingleShotSearchPath;\n var nonSingleShotPath;\n var data;\n var i;\n data = vueComponent.$data;\n\n if (data.FirstQuery == null) {\n data.FirstQuery = true;\n } else {\n data.FirstQuery = false;\n }\n\n formViewRequest.FirstQuery = data.FirstQuery;\n formViewRequest.SourcePagePath = vueComponent.$route.path;\n Object.assign(formViewRequest.ValueSet, data.ValueSet); //#region SingShotQueryString\n\n queryStringList = this.GetQueryStringListBySearchPath(window.location.search.substr(1));\n singleShotQueryStringList = this.GetSingleShotQueryStringList(queryStringList);\n\n if (singleShotQueryStringList.length > 0) {\n for (i = 0; i < singleShotQueryStringList.length; i++) {\n if (singleShotQueryStringList[i].Name.indexOf(\"...\") == 0) {\n singleShotTargetName = singleShotQueryStringList[i].Name.replace(\"...\", \"\");\n this.SaveBag(singleShotTargetName, singleShotQueryStringList[i].Value);\n } else if (singleShotQueryStringList[i].Name.indexOf(\"..\") == 0) {\n singleShotTargetName = singleShotQueryStringList[i].Name.replace(\"..\", \"\");\n formViewRequest.ValueSet[singleShotTargetName] = singleShotQueryStringList[i].Value;\n }\n }\n\n nonSingleShotSearchPath = this.RenderSearchPathWithoutSingleShot(queryStringList);\n\n if (nonSingleShotSearchPath != \"\") {\n nonSingleShotPath = window.location.pathname + \"?\" + nonSingleShotSearchPath;\n } else {\n nonSingleShotPath = window.location.pathname;\n }\n\n vueComponent.$router.push(nonSingleShotPath);\n } //#endregion\n\n\n for (i in formViewRequest.ValueSet) {\n if (formViewRequest.ValueSet[i] === \"\" || formViewRequest.ValueSet[i] == null) {\n formViewRequest.ValueSet[i] = null;\n }\n }\n\n if (vueComponent.$route.query.Action != null) {\n formViewRequest.Action = vueComponent.$route.query.Action;\n }\n\n if (vueComponent.$data.Rows != null) {\n formViewRequest.Rows = vueComponent.$data.Rows;\n }\n\n if (extraPropertyName != null && vueComponent.$data[extraPropertyName] != null) {\n formViewRequest[extraPropertyName] = vueComponent.$data[extraPropertyName];\n } //把所有日期物件轉為字串\n\n\n this.ProcessRquestDateObject(vueComponent, formViewRequest);\n return formViewRequest;\n },\n LoadFormViewResponse: function LoadFormViewResponse(vueComponent, responseData) {\n var data;\n var columnName;\n var propertyName;\n var i;\n data = vueComponent.$data;\n\n if (responseData.Rows != null) {\n for (i = 0; i < responseData.Rows.length; i++) {\n responseData.Rows[i].ValueSet.SeqNo = i + 1;\n }\n }\n\n this.ProcessIso8601Text(vueComponent, responseData);\n this.SetNotNullAttributes(vueComponent, data, responseData);\n\n if (responseData.AttributeSet != null) {\n for (var colunName in data.AttributeSet) {\n var newAttributObj = {};\n var attributeObj = void 0;\n attributeObj = data.AttributeSet[colunName];\n\n for (propertyName in attributeObj) {\n newAttributObj[propertyName] = attributeObj[propertyName];\n } //end for (var propertyName in attributeObj) {\n\n\n data.AttributeSet[colunName] = newAttributObj;\n } //end for (var colunName in data.Query.AttributeSet) {\n\n }\n },\n //ConvertIso8601TextToDate(dateText) {\n // let dateObject = null;\n // let formattedDateText;\n // formattedDateText = moment(dateText).format(\"YYYY/MM/DD HH:mm:ss\");\n // formattedDateText = dateText.replace(\" 00:00:00\", \"\");\n // dateObject = new Date(formattedDateText);\n // return dateObject;\n //},\n ConvertIso8601TextToDate: function ConvertIso8601TextToDate(iso8601DateText) {\n var dateObject;\n var dateTime;\n var dateTimeText;\n dateTime = new Date(iso8601DateText);\n dateTimeText = this.GetDateTimeText(dateTime);\n dateObject = new Date(dateTimeText);\n return dateObject;\n },\n IsIso8601Text: function IsIso8601Text(dateText) {\n var isIso8601 = false;\n var iso8601Regex = /^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?(Z)?$/;\n\n if (dateText != null) {\n if (typeof dateText == \"string\" && dateText.length > 10 && dateText.indexOf(\"T\") > 0) {\n //isIso8601 = moment(dateText, moment.ISO_8601).isValid();\n isIso8601 = iso8601Regex.test(dateText);\n }\n }\n\n return isIso8601;\n },\n ShowServerError: function ShowServerError(errorMessage) {\n this.HasServerError = true;\n document.body.insertAdjacentHTML(\"AfterBegin\", \"
\" + errorMessage + \"\");\n },\n GenerateSerialNumber: function GenerateSerialNumber() {\n this.SerialNumber++;\n return this.SerialNumber;\n },\n GenerateUniqueId: function GenerateUniqueId() {\n var uniqueId = \"\";\n uniqueId = Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1) + Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1) + Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n return uniqueId;\n },\n OnDataModify: function OnDataModify() {\n this.LastModifyTime = new Date();\n },\n HasSingleShot: function HasSingleShot() {\n var hasSingleShot = false;\n\n if (window.location.href.indexOf(\"..\") > 0) {\n hasSingleShot = true;\n }\n\n return hasSingleShot;\n },\n NeedReQuery: function NeedReQuery(listResponseData) {\n var needReQuery = false;\n var currDateTime = new Date();\n\n if (listResponseData.CreateTime == null) {\n alert(\"listResponseData.CreateTime is null\");\n return;\n }\n\n if (window.location.href.indexOf(\"..\") > 0) {\n needReQuery = true;\n } else if (this.LastModifyTime > listResponseData.CreateTime) {\n needReQuery = true;\n } else if (currDateTime - listResponseData.CreateTime >= 5000) {\n needReQuery = true;\n }\n\n return needReQuery;\n },\n Confirm: function Confirm(vueComponent, description, confirmHandler) {\n var count = 0;\n var i;\n vueComponent.$modal.show(\"ConfirmDialog\", {\n Description: description,\n ConfirmHandler: confirmHandler\n });\n return;\n },\n ConfirmDelete: function ConfirmDelete(vueComponent, confirmHandler) {\n var count = 0;\n var i;\n\n for (i = 0; i < vueComponent.Rows.length; i++) {\n if (vueComponent.Rows[i].Checked == true) {\n count++;\n }\n }\n\n if (count > 0) {\n vueComponent.$modal.show(\"ConfirmDialog\", {\n Description: \"確認刪除所選之 \" + count + \" 筆資料?!\",\n ConfirmHandler: confirmHandler\n });\n }\n },\n ShowLoadingPicture: function ShowLoadingPicture(vueComponent) {\n if (vueComponent == null) {\n vueComponent = this.vueComponent;\n }\n\n if (vueComponent.$bus != null) {\n vueComponent.$bus.$emit(\"ShowLoading\");\n }\n },\n HideLoadingPicture: function HideLoadingPicture(vueComponent) {\n if (vueComponent == null) {\n vueComponent = this.vueComponent;\n }\n\n if (vueComponent.$bus != null) {\n vueComponent.$bus.$emit(\"HideLoading\");\n }\n },\n ShowSaveSuccess: function ShowSaveSuccess(vueComponent) {\n this.ShowMessage(vueComponent, \"儲存成功\", 1000);\n },\n ShowDeleteSuccess: function ShowDeleteSuccess(vueComponent) {\n this.ShowMessage(vueComponent, \"刪除成功\", 1000);\n },\n ShowMessage: function ShowMessage(vueComponent, description, duration) {\n vueComponent.$bus.$emit(\"ShowMessage\", {\n Description: description,\n Duration: duration\n });\n },\n ShowValidationMessage: function ShowValidationMessage(vueComponent, message, duration) {\n if (duration == null) {\n duration = 2000;\n }\n\n this.ShowMessage(vueComponent, \"