This commit is contained in:
2024-03-26 15:56:31 +08:00
parent 634e8b71ab
commit 0855ae42cd
547 changed files with 94818 additions and 60463 deletions

View File

@ -3,157 +3,19 @@
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
<link href="../css/jquery.datetimepicker.css" rel="stylesheet" />
<style type="text/css">
.itemselcted {
background-color: #ccc;
}
.itemhidden {
display: none;
}
.itemsuggested {
background-color: #ffff99;
}
#tbMachineTypes tbody tr:hover {
cursor: default;
background: #ddd;
}
#tbodyAssigned tr:hover {
cursor: default;
background: #ddd;
}
#tbodyUnassigned tr:hover {
cursor: default;
background: #ddd;
}
#tbodySelected tr:hover {
cursor: default;
background: #ddd;
}
#contentctrl {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.float_left {
float: left;
}
.function_bar {
float: right;
}
.user_main {
padding: 0 4px;
}
.edit-content table {
border-collapse: collapse;
width: 100%;
}
.edit-content table td.label {
width: 130px;
text-align: right;
padding-right: 10px;
line-height: 24px;
height: 24px;
vertical-align: top;
}
.edit-content table td input,
.edit-content table td textarea {
border: 1px solid #a9a9a9;
width: 320px;
height: 18px;
padding: 1px;
}
.edit-content table td input[type="checkbox"] {
border: none;
}
.edit-content table td textarea {
height: 100px;
resize: none;
/*max-width: 200px;*/
}
.icon {
font-family: CalciteWebCoreIcons;
cursor: default;
}
.ybutton {
width: 80px;
line-height: normal;
margin-left: 6px;
border: none;
background: rgb(249, 189, 117);
padding: 5px 14px;
cursor: pointer;
}
.ybutton:hover {
background: #d7690E;
}
.td_controller {
vertical-align: middle;
padding: 40px 8px;
/*border-left: 1px solid #b0b0b0;
border-right: 1px solid #b0b0b0;*/
}
.ctl_button {
font-family: 'CalciteWebCoreIcons';
display: block;
margin: 6px auto;
width: 60px;
height: 22px;
line-height: 21px;
padding: 0;
}
.subdialog {
width: -moz-calc(100% - 24px);
width: -webkit-calc(100% - 24px);
width: calc(100% - 24px);
}
.machine_maskbg {
top: 0;
left: 0;
width: 100%;
height: 100%;
position: absolute;
background: #000;
opacity: 0.2;
}
#machine-name {
margin: 10px 10px 6px;
/*color: gray;*/
font-weight: lighter;
font-size: 18px;
width: 770px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.div_filter .dropdown {
width: 100px;
.assetlabel {
width: 200px;
text-align: right;
padding-right: 10px;
line-height: 24px;
height: 24px;
font-weight: 500;
}
.span-caption {
@ -175,7 +37,12 @@
height: 24px;
font-weight: 500;
}
.edit-content table td.label {
width: 130px;
}
</style>
<link href="<%=GetFileUrlWithVersion("../css/panel.css")%>" rel="stylesheet" />
<script src="<%=GetFileUrlWithVersion("../js/vue.min.js")%>" type="text/javascript"></script>
<script>Vue.config.productionTip = false; Vue.config.silent = true;</script>
<script src="<%=GetFileUrlWithVersion("../js/components/datagrid.js")%>" type="text/javascript"></script>
@ -184,15 +51,17 @@
<link href="<%=GetFileUrlWithVersion("../css/spectrum.css")%>" rel="stylesheet" type="text/css" />
<script src="../js/spectrum.js?v=1" type="text/javascript"></script>
<script src="../js/jquery.datetimepicker.full.js"></script>
<script src="<%=GetFileUrlWithVersion("../js/gridlayout.js")%>" type="text/javascript"></script>
<script src="../Maintenance/js/inputdatactr.js"></script>
<script src="<%=GetFileUrlWithVersion("../js/editmultiselect.js")%>" type="text/javascript"></script>
<script src="<%=GetFileUrlWithVersion("js/scheduler.js")%>" type="text/javascript"></script>
<script>
jobsitequery = function (method, param, callback, error, nolog) {
_network.request("JobSite/SchedulerManagement.aspx?tp=ashx", -1, method, param, callback, error, nolog);
}
var IsAdmin =<%=IsAdmin ?"true":"false"%>;
var IsReadOnly = <%=IsReadOnly ?"true":"false"%>;
var currentdate = "<%=CurrentDate %>";
var currentdate = "<%=CurrentDate %>";
var gridLayoutID = "JobSiteScheduler";
/***************************Jobsites***************************/
@ -228,49 +97,29 @@
var assetsObj;
function OnRefresh() {
var alerttitle = GetTextByKey('P_JS_SCHEDULER', 'Scheduler');
var begindate = $.trim($('#txtbegindate').val());
var enddate = $.trim($('#txtenddate').val());
if (begindate && !checkDate(begindate)) {
showAlert(GetTextByKey("P_JS_BEGINDATEFORMATERROR", "Begin Date format error."), alerttitle);
if (begindate && !$('#txtbegindate').is(':valid')) {
showAlert(GetTextByKey('P_COMMON_BEGINDATEISINVALID', "The begin date is invalid."), GetTextByKey("P_FR_ERROR", 'Error'));
return;
}
if (enddate && !checkDate(enddate)) {
showAlert(GetTextByKey("P_JS_ENDDATEFORMATERROR", "End Date format error."), alerttitle);
if (enddate && !$('#txtenddate').is(':valid')) {
showAlert(GetTextByKey('P_COMMON_ENDDATEISINVALID', "The end date is invalid."), GetTextByKey("P_FR_ERROR", 'Error'));
return;
}
if (begindate && enddate) {
var sdate = begindate;
var stdt = new Date(sdate.replace("-", "/"));
var edate = enddate;
var etdt = new Date(edate.replace("-", "/"));
if (stdt > etdt) {
showAlert(GetTextByKey("P_JS_ENDDATEMUSTBELATERTHANBEGINDATE", "End Date must be later than Begin Date."), alerttitle);
return;
}
if (begindate && enddate && begindate > enddate) {
showAlert(GetTextByKey("P_JS_ENDDATEMUSTBELATERTHANBEGINDATE", "End Date must be later than Begin Date."), GetTextByKey("P_FR_ERROR", 'Error'));
return;
}
showloading(true);
var jobsites = [];
if (jobsiteparam)
jobsites = jobsiteparam.selectedvalue;
var jobsites = $('#div_jobsites').dropdownVals() || [];
var regions = $('#div_region').dropdownVals() || [];
var agroups = $('#div_assetgroup').dropdownVals() || [];
var atypes = $('#div_assettypes').dropdownVals() || [];
var regions = [];
if (regionparam)
regions = regionparam.selectedvalue;
var agroups = [];
if (assetgroupparam)
agroups = assetgroupparam.selectedvalue;
var atypes = [];
if (assettypeparam)
atypes = assettypeparam.selectedvalue;
var unscheduled = $('#chk_unscheduled').prop('checked') ? "1" : "0";
var scheduled = $('#sel_scheduled').val()
var p = [
JSON.stringify(jobsites),
JSON.stringify(regions),
@ -279,7 +128,7 @@
$.trim($('#searchinputtxt').val()),
begindate,
enddate,
unscheduled
scheduled
];
jobsitequery("GetAssetSchedulers", htmlencode(JSON.stringify(p)), function (data) {
showloading(false);
@ -300,49 +149,30 @@
}
var alljobsites;
var jobsiteparam;
var regionparam;
var jobsite_editmultiselect;
function getJobsitesAndRegions() {
jobsitequery('GetJobsitesAndRegions', '', function (data) {
jobsitequery('GetJobsitesAndRegions', '1', function (data) {
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_AM_ERROR", 'Error'));
return;
}
alljobsites = data.Jobsites;
jobsiteparam = {
allitems: data.Jobsites,
items: JSON.parse(JSON.stringify(data.Jobsites)),
selectedvalue: [],
width: 240
};
jobsite_editmultiselect = editmultiselect(jobsiteparam);
$('#div_jobsites').append(jobsite_editmultiselect);
$("#div_jobsites").dropdownSource(data.Jobsites);
setJobsites();
regionparam = {
items: data.Regions,
selectedvalue: [],
width: 240,
oncompleted: onregioncompleted
};
var ipt = editmultiselect(regionparam);
$('#div_region').append(ipt);
$('#div_region').dropdownSource(data.Regions);
});
}
function onregioncompleted() {
if (!jobsiteparam || !jobsiteparam.allitems) return;
jobsiteparam.items.length = 0;
for (var i in jobsiteparam.allitems) {
var item = jobsiteparam.allitems[i];
if (!regionparam.selectedvalue
|| regionparam.selectedvalue.length == 0
|| regionparam.selectedvalue.indexOf(item.Tag3) >= 0)
jobsiteparam.items.push(item);
}
jobsite_editmultiselect.reset();
if (!alljobsites) return;
var regions = $('#div_region').dropdownVals();
var jss = [...alljobsites];
if (regions && regions.length > 0)
jss = jss.filter(t => regions.indexOf(t.Tag3) >= 0);
$("#div_jobsites").dropdownSource(jss);
var seljss = $("#div_jobsites").dropdownVals();
$("#div_jobsites").dropdownSource(jss).dropdownVals(seljss);
}
function setJobsites() {
@ -358,32 +188,25 @@
}
var assettypes;
var assettypeparam;
function getAssetTypes() {
if (assettypes)
return;
$('#div_assettypes').empty();
jobsitequery('GetAssetTypes', '', function (data) {
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_AM_ERROR", 'Error'));
return;
}
assettypes = data;
assettypeparam = {
items: data,
selectedvalue: [],
allowall: false,
width: 280
};
var ipt = editmultiselect(assettypeparam);
$('#div_assettypes').append(ipt);
var ats = [...assettypes];
ats = ats.filter(t => t.Tag1 == "1");
$("#div_assettypes").dropdownSource(ats);
});
}
var assetgroups;
var assetgroupparam;
function getAssetGroups() {
jobsitequery('GetAssetGroups', '', function (data) {
if (typeof (data) === "string") {
@ -391,21 +214,22 @@
return;
}
assetgroups = data;
assetgroupparam = {
items: data,
selectedvalue: [],
width: 240
};
var ipt = editmultiselect(assetgroupparam);
$('#div_assetgroup').append(ipt);
$("#div_assetgroup").dropdownSource(assetgroups);
});
}
function OnSorts() {
grid_dt.showSortPanel();
}
$(function () {
setPageTitle(GetTextByKey("P_JS_SCHEDULER", "Scheduler"), true);
$('.iconlayout').on('click', function (ev) {
CreateLayoutMenus(ev.target, gridLayoutID, grid_dt);
return false;
});
InitGridData();
jobsiteschedulerCtrl = new $jobsiteschedulerCtrl();
jobsiteschedulerCtrl.Init($("#schedulerlist1"), false);
InitJobsiteschedulerGridData();
getJobsitesAndRegions();
getAssetGroups();
getAssetTypes();
@ -417,6 +241,48 @@
}).resize();
OnRefresh();
$("#div_assettypes").css('width', 120).dropdown([], {
search: true,
multiselect: true,
allowselectall: false,
textKey: 'Value',
valueKey: 'Key'
});
$("#div_region").css('width', 120).dropdown([], {
search: true,
multiselect: true,
allowselectall: true,
textKey: 'Value',
valueKey: 'Key'
}).on('collapsed', onregioncompleted);
$("#div_jobsites").css('width', 120).dropdown([], {
search: true,
multiselect: true,
allowselectall: true,
textKey: 'Value',
valueKey: 'Key'
});
$("#div_assetgroup").css('width', 120).dropdown([], {
search: true,
multiselect: true,
allowselectall: true,
textKey: 'Value',
valueKey: 'Key'
});
$("#chkmanagetypeonly").on('change', function () {
var selectedtypes = $("#div_assettypes").dropdownVals() || [];
var ats = [...assettypes];
if ($(this).prop('checked')) {
ats = ats.filter(t => t.Tag1 == "1");
}
$("#div_assettypes").dropdownSource(ats);
$("#div_assettypes").dropdownVals(selectedtypes);
});
$('#searchinputtxt').keydown(searchEnter);
$('#dialog_managescheduler').dialog(function () {
@ -428,15 +294,7 @@
$('#dialogmask').hide();
$('#dialogmask1').hide();
})
$("#txtbegindate").datetimepicker({
timepicker: false,
format: 'm/d/Y'
});
$("#txtenddate").datetimepicker({
timepicker: false,
format: 'm/d/Y'
}); $('#dialog_addbegindate').datetimepicker({
$('#dialog_addbegindate').datetimepicker({
timepicker: false,
format: 'm/d/Y',
enterLikeTab: false,
@ -459,17 +317,17 @@
</script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<div id="contentctrl">
<div id="contentctrl" style="min-width: 1540px;">
<div class="page_title" data-lgid="P_JS_SCHEDULER">Scheduler</div>
<div class="search_bar" style="min-width: 1300px;">
<div class="search_bar">
<input type="password" autocomplete="new-password" style="display: none" />
<span data-lgid="P_AM_BEGINDATE_COLON">Begin Date:</span>
<div>
<input type="text" style="margin-left: 5px; width: 75px;" id="txtbegindate" value="<%=BeginDate %>" autocomplete="off" />
<input id="txtbegindate" type="date" class="type-date" required min="1900-01-01" style="margin-left: 5px; width: 90px;" value="<%=BeginDate %>" autocomplete="off" />
</div>
<span data-lgid="P_AM_ENDDATE_COLON">End Date:</span>
<div>
<input type="text" style="margin-left: 5px; width: 75px;" id="txtenddate" autocomplete="off" />
<input id="txtenddate" type="date" class="type-date" required min="1900-01-01" style="margin-left: 5px; width: 90px;" autocomplete="off" />
</div>
<span data-lgid="P_JS_REGION_COLON">Region:</span>
<div id="div_region" style="margin-top: 1px;"></div>
@ -479,10 +337,15 @@
<div id="div_assetgroup" style="margin-top: 1px;"></div>
<span data-lgid="P_JS_ASSETTYPE_COLON" style="margin-left: 10px;">Asset Type:</span>
<div id="div_assettypes" style="margin-top: 1px;"></div>
<input type="checkbox" id="chkmanagetypeonly" style="margin-left: 5px;" checked="checked" />
<label for="chkmanagetypeonly" data-lgid="P_JS_MANAGEDTYPESONLY">Managed Types Only</label>
<input type="text" id="searchinputtxt" autocomplete="off" style="margin-left: 5px; width: 100px;" />
<input class="search" type="button" onclick="OnRefresh();" value="Search" data-lgid="P_CM_SEARCH" style="margin-left: 5px;" />
<input id="chk_unscheduled" type="checkbox" onclick="OnRefresh();" />
<label data-lgid="P_JS_UNSCHEDULED" for="chk_unscheduled">Unscheduled</label>
<select id="sel_scheduled" onchange="OnRefresh();" style="margin-left: 5px; width: 160px;">
<option value="0" data-lgid="P_JS_SCHEDULEDONLY">Scheduled Only</option>
<option value="1" data-lgid="P_JS_UNSCHEDULEDONLY">Unscheduled Only</option>
<option value="-1" data-lgid="P_JS_BOTHSCHEDULEDUNSCHEDULED">Both Scheduled & Unscheduled</option>
</select>
</div>
<div class="function_title">
<%if (!IsReadOnly)
@ -490,11 +353,15 @@
<span class="sbutton iconadd" onclick="OnAdd();" data-lgid="P_JS_ADD"></span>
<%} %>
<span class="sbutton iconrefresh" onclick="OnRefresh();" data-lgid="P_JS_REFRESH"></span>
<span class="sbutton iconlayout iconmenu" data-lgid="P_MR_LAYOUT">Layout</span>
<span class="sbutton iconfilter" onclick="OnSorts();" data-lgid="P_GRID_SORT">Sort</span>
</div>
<div id="schedulerlist"></div>
<div id="schedulerlist" style="position: relative"></div>
</div>
<div id="mask_bg" style="display: none;"><div class="loading c-spin"></div></div>
<div id="mask_bg" style="display: none;">
<div class="loading c-spin"></div>
</div>
<div class="dialog subdialog" id="dialog_scheduler" style="display: none; border-bottom: 0; border-top: 0;">
<%--<div class="dialog-title"><span class="title">Add Work Order</span></div>--%>
<iframe id="iframescheduler" src="AddScheduler.aspx" style="width: 100%; height: 100%; display: block; border: none;"></iframe>
@ -523,7 +390,7 @@
<span class="sbutton iconadd" onclick="openAddScheduler()" data-lgid="P_JS_ADD">Add</span>
<span class="sbutton icondelete" onclick="onDeleteScheduler()" data-lgid="P_JS_DELETE">Delete</span>
</div>
<div id="schedulerlist1" style="height: 300px; width: 600px;"></div>
<div id="schedulerlist1" style="height: 360px; width: 720px;"></div>
<div class="dialog-func">
<input type="button" value="Close" data-lgid="P_JS_CANCEL" class="dialog-close" tabindex="28" />
@ -535,10 +402,10 @@
</div>
</div>
<div class="dialog" id="dialog_addscheduler" style="display: none; width: 500px;">
<div class="dialog" id="dialog_addscheduler" style="display: none; width: 480px;">
<div class="dialog-title"><span class="title" data-lgid="P_JS_ADDSCHEDULER"></span><em class="dialog-close"></em></div>
<div class="edit-content">
<table style="line-height: 30px;">
<table style="line-height: 30px; margin-top: 10px;">
<tr>
<td class="label" data-lgid="P_JS_JOBSITE_COLON"></td>
<td>
@ -558,7 +425,7 @@
<tr>
<td class="label" data-lgid="P_JS_POINTOFCONTACT_COLON">Point of Contact:</td>
<td>
<input type="text" id="dialog_pointofcontact" maxlength="100" autocomplete="off" style="width: 100px;" />
<input type="text" id="dialog_pointofcontact" maxlength="100" tabindex="1" autocomplete="off" style="width: 100px;" />
</td>
</tr>
<tr>
@ -570,8 +437,8 @@
</table>
</div>
<div class="dialog-func">
<input type="button" value="Close" data-lgid="P_JS_CANCEL" class="dialog-close" tabindex="28" />
<input type="button" onclick="onAddScheduler();" data-lgid="P_JS_OK" value="OK" tabindex="27" />
<input type="button" value="Close" data-lgid="P_JS_CANCEL" class="dialog-close" tabindex="3" />
<input type="button" onclick="onAddScheduler();" data-lgid="P_JS_OK" value="OK" tabindex="2" />
<div class="clear"></div>
</div>
<div id="dialogmask1" class="maskbg" style="display: none;">