migrate to new git

This commit is contained in:
2025-08-29 01:27:25 +08:00
parent 946eb9961e
commit af2c152ef6
8623 changed files with 1000453 additions and 1 deletions

View File

@@ -0,0 +1,11 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="footer.ascx.cs" Inherits="admin_Templates_TBS5ADM001_uc_footer" %>
<footer class="py-4 bg-light mt-auto">
<div class="container-fluid px-4">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; 17168ERP</div>
<div>
<a href="#">17168ERP</a>
</div>
</div>
</div>
</footer>

View File

@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class admin_Templates_TBS5ADM001_uc_footer : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}

View File

@@ -0,0 +1,112 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="menu.ascx.cs" Inherits="admin_Templates_TBS5ADM001_uc_sideNav" %>
<nav class="sb-sidenav accordion sb-sidenav-light pt-2" id="sidenavAccordion">
<div class="sb-sidenav-menu">
<div class="nav" id="sideNav_1">
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<a class="nav-link collapsed num<%#Eval("num") %>" href="#"
data-bs-toggle="collapse" data-bs-target="#navitem_<%#Eval("num") %>" aria-expanded="false" aria-controls="navitem_<%#Eval("num") %>">
<div class="sb-nav-link-icon"><i class="mdi mdi-folder"></i></div>
<%#Eval("title") %>
<div class="sb-sidenav-collapse-arrow"><i class="mdi mdi-chevron-down"></i></div>
</a>
<div class="collapse" id="navitem_<%#Eval("num") %>" aria-labelledby="headingOne"
data-bs-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav">
<asp:Repeater ID="Repeater2" runat="server" OnItemDataBound="Repeater2_ItemDataBound">
<ItemTemplate>
<a class="nav-link" href="<%#ResolveUrl(ValString(Eval("url"))) %>"
target="<%#(ValString(Eval("target"))=="B"?"_blank":"_self") %>">
<%#Eval("title") %></a>
</ItemTemplate>
</asp:Repeater>
</nav>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
<div class="nav d-none">
<div class="sb-sidenav-menu-heading">Core</div>
<a class="nav-link" href="index.html">
<div class="sb-nav-link-icon"><i class="mdi mdi-gauge"></i></div>
Dashboard
</a>
<div class="sb-sidenav-menu-heading">Interface</div>
<a class="nav-link collapsed" href="#" data-bs-toggle="collapse" data-bs-target="#collapseLayouts" aria-expanded="false" aria-controls="collapseLayouts">
<div class="sb-nav-link-icon"><i class="mdi mdi-television-guide"></i></div>
Layouts
<div class="sb-sidenav-collapse-arrow"><i class="mdi mdi-chevron-down"></i></div>
</a>
<div class="collapse" id="collapseLayouts" aria-labelledby="headingOne" data-bs-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="layout-static.html">Static Navigation</a>
<a class="nav-link" href="layout-sidenav-light.html">Light Sidenav</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-bs-toggle="collapse" data-bs-target="#collapsePages" aria-expanded="false" aria-controls="collapsePages">
<div class="sb-nav-link-icon"><i class="mdi mdi-book-open-blank-variant"></i></div>
Pages
<div class="sb-sidenav-collapse-arrow"><i class="mdi mdi-chevron-down"></i></div>
</a>
<div class="collapse" id="collapsePages" aria-labelledby="headingTwo" data-bs-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav accordion" id="sidenavAccordionPages">
<a class="nav-link collapsed" href="#" data-bs-toggle="collapse" data-bs-target="#pagesCollapseAuth" aria-expanded="false" aria-controls="pagesCollapseAuth">Authentication
<div class="sb-sidenav-collapse-arrow"><i class="mdi mdi-chevron-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseAuth" aria-labelledby="headingOne" data-bs-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="login.html">Login</a>
<a class="nav-link" href="register.html">Register</a>
<a class="nav-link" href="password.html">Forgot Password</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-bs-toggle="collapse" data-bs-target="#pagesCollapseError" aria-expanded="false" aria-controls="pagesCollapseError">Error
<div class="sb-sidenav-collapse-arrow"><i class="mdi mdi-chevron-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseError" aria-labelledby="headingOne" data-bs-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="401.html">401 Page</a>
<a class="nav-link" href="404.html">404 Page</a>
<a class="nav-link" href="500.html">500 Page</a>
<hr />
<a class="nav-link" href="401.html">401 Page</a>
<a class="nav-link" href="404.html">404 Page</a>
<a class="nav-link" href="500.html">500 Page</a>
<a class="nav-link" href="401.html">401 Page</a>
<a class="nav-link" href="404.html">404 Page</a>
<a class="nav-link" href="500.html">500 Page</a>
<a class="nav-link" href="401.html">401 Page</a>
<a class="nav-link" href="404.html">404 Page</a>
<a class="nav-link" href="500.html">500 Page</a>
<a class="nav-link" href="401.html">401 Page</a>
<a class="nav-link" href="404.html">404 Page</a>
<a class="nav-link" href="500.html">500 Page</a>
<a class="nav-link" href="401.html">401 Page</a>
<a class="nav-link" href="404.html">404 Page</a>
<a class="nav-link" href="500.html">500 Page</a>
</nav>
</div>
</nav>
</div>
<div class="sb-sidenav-menu-heading">Addons</div>
<a class="nav-link" href="charts.html">
<div class="sb-nav-link-icon"><i class="mdi mdi-chart-areaspline-variant"></i></div>
Charts
</a>
<a class="nav-link" href="tables.html">
<div class="sb-nav-link-icon"><i class="mdi mdi-table"></i></div>
Tables
</a>
</div>
</div>
<div class="sb-sidenav-footer">
<div class="small">名稱:</div>
17168ERP
</div>
</nav>
<asp:HiddenField ID="rtmp" runat="server" />
<asp:HiddenField ID="HiddenField1" runat="server" />
<asp:Literal ID="ExpandMenu" runat="server"></asp:Literal>

View File

@@ -0,0 +1,156 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.OleDb;
public partial class admin_Templates_TBS5ADM001_uc_sideNav :
MyWeb.web_uc, MyWeb.config.IMenu
{
string PageUrl = ""; //目前後台的路徑
string Power = ""; //帳號權限
bool isDesigner = false;
List<string> nItem = new List<string>();
int setNav = 0;
DataTable menuDt = new DataTable();
private string item_collapsed { get; set; }
private string item_active { get; set; }
public void Data(DataTable dt)
{
menuDt = dt;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
MyWeb.admin admin = new MyWeb.admin();
if (admin.isLoign() && HttpContext.Current.Request.RawUrl.ToLower().IndexOf("admin/index.aspx") == -1)
{
Power = admin.info.power;
if (Left(Power, 1) == ",") { Power = Right(Power, Power.Length - 1); }
if (Right(Power, 1) == ",") { Power = Left(Power, Power.Length - 1); }
string[] UrlTmp = Request.Url.AbsolutePath.ToLower().Split('/');
PageUrl = UrlTmp[UrlTmp.Length - 2] + "/" + UrlTmp[UrlTmp.Length - 1];
if (admin.info.u_id == "Designer" && admin.info.group == "EZ") { isDesigner = true; }
Repeater1.DataSource = MenuRows();
Repeater1.DataBind();
((MyWeb.config.MenuNav)Page.Master.FindControl("nav")).InitNav(nItem);
}
}
}
protected DataTable MenuRows(int root = 0)
{
DataTable dt = new DataTable();
MyWeb.sql sql = new MyWeb.sql();
OleDbConnection sqlConn = sql.conn(db, p_name);
try
{
sqlConn.Open();
OleDbCommand sqlCmd = new OleDbCommand("", sqlConn);
if (!isDesigner)
{
//非設計師模式檢查權限
if (!isStrNull(Power))
{
sqlCmd.CommandText = "SELECT * FROM [item] Where root=? and num in (" + Power + ") order by range";
sqlCmd.Parameters.Add(new OleDbParameter("root", root));
dt = sql.dataTable(sqlCmd);
}
}
else
{
sqlCmd.CommandText = "SELECT * FROM [item] Where root=? order by range";
sqlCmd.Parameters.Add(new OleDbParameter("root", root));
dt = sql.dataTable(sqlCmd);
}
}
catch (Exception ex)
{
//Response.Write(ex.Message);
}
finally
{
sqlConn.Close(); sqlConn.Dispose();
}
return dt;
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
try
{
DataRowView row = (DataRowView)e.Item.DataItem;
HiddenField1.Value = ValString(row["num"]);
rtmp.Value = ValString(row["title"]);
if (menuDt.Rows.Count > 0)
{
DataTable dt = menuDt.Copy();
for (int i = dt.Rows.Count - 1; i >= 0; i--) {
if (dt.Rows[i]["root"].ToString() != HiddenField1.Value) { dt.Rows.Remove(dt.Rows[i]); }
}
if (dt.Rows.Count > 0)
{
Repeater Repeater2 = (Repeater)e.Item.FindControl("Repeater2");
Repeater2.DataSource = dt;
Repeater2.DataBind();
Repeater2.DataBind();
dt.Dispose();
}
else
{
}
}
else
{
}
}
catch(Exception ex)
{
}
}
protected void Repeater2_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
DataRowView row = (DataRowView)e.Item.DataItem;
if (ValString(row["url"]).ToLower().IndexOf(PageUrl) > -1)
{
setNav++;
}
else if (ValString(row["other_url"]).ToLower().IndexOf(PageUrl) > -1)
{
setNav++;
}
if (setNav == 1)
{
setNav++;
ExpandMenu.Text = "<input type=\"hidden\" id=\"ExpandMenuNum\" value=\"" + HiddenField1.Value + "\" />";
nItem.Add(rtmp.Value);
if ((PageUrl.IndexOf("reg.aspx") > -1 || PageUrl.IndexOf("edit.aspx") > -1) && !isStrNull(Request["num"]))
{
nItem.Add(ValString(row["title"]).Replace("登錄", "修改").Replace("查詢", "修改").Replace("新增", "修改"));
}
else
{
nItem.Add(ValString(row["title"]));
}
}
}
}

View File

@@ -0,0 +1,69 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="nav.ascx.cs" Inherits="admin_Templates_TBS5ADM001_uc_nav" %>
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark ps-1 ps-md-2">
<!-- Sidebar Toggle-->
<button class="btn btn-link btn-sm order-0 me-0 bg-white bg-opacity-10 rounded-circle" id="sidebarToggle" href="#!">
<i class="mdi mdi-menu"></i>
</button>
<!-- Navbar Brand-->
<asp:HyperLink ID="pageTitle" runat="server" CssClass="navbar-brand ps-sm-2 me-2"></asp:HyperLink>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="<%=ResolveUrl("~/admin/index2.aspx") %>">
<i class="mdi mdi-home"></i></a>
</li>
<asp:Repeater ID="breadCrumb" runat="server" ItemType="System.String" >
<ItemTemplate>
<li class="breadcrumb-item d-none d-lg-inline-block"><%# Item %></li>
</ItemTemplate>
</asp:Repeater>
</ol>
</nav>
<!-- Navbar Search-->
<div class="d-none d-md-none form-inline ms-auto me-0 me-md-3 my-2 my-md-0">
<div class="input-group rounded-pill overflow-hidden">
<input class="form-control" type="text" placeholder="搜尋..." aria-label="搜尋..." aria-describedby="btnNavbarSearch" />
<button class="btn btn-primary" id="btnNavbarSearch" type="button"><i class="mdi mdi-magnify"></i></button>
</div>
</div>
<!-- Navbar-->
<ul class="navbar-nav ms-auto ms-md-auto me-3 me-lg-4">
<li class="nav-item me-2" id="search_btn">
<a href="#search_panel" class="btn btn-outline-light rounded-pill" title="查詢"
data-bs-toggle="offcanvas" data-bs-target="#offcanvasRight" aria-controls="offcanvasRight">
<i class="mdi mdi-magnify"></i>查詢
</a>
</li>
<li class="nav-item dropdown bg-light bg-opacity-25 px-1 rounded-pill">
<a class="nav-link dropdown-toggle text-white" id="navbarDropdown" href="#"
role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="mdi mdi-account"></i>
<span class="d-none d-md-inline"> <%=admin.info.u_id %></span>
</a>
<ul class="dropdown-menu dropdown-menu-macos dropdown-menu-end" aria-labelledby="navbarDropdown">
<li class="d-md-none dropdown-item text-muted">
<i class="mdi mdi-card-account-details-outline text-primary me-2"></i> <%=admin.info.u_id %></li>
<li class="d-md-none"><hr class="dropdown-divider" /></li>
<li><a class="dropdown-item text-secondary" href="#!">
<i class="mdi mdi-cog text-primary me-2"></i> 設定</a></li>
<li><a class="dropdown-item text-secondary" href="#!">
<i class="mdi mdi-bell-outline text-primary me-2"></i> 通知</a></li>
<li><a class="dropdown-item text-secondary" href="#!">
<i class="mdi mdi-help-circle-outline text-primary me-2"></i>說明</a></li>
<li id="attenAddLi" runat="server">
<asp:LinkButton ID="attenAdd" runat="server" CausesValidation="false" OnClick="attenAdd_Click" CssClass="dropdown-item text-secondary">
<i class="mdi mdi-account-check text-primary me-2"></i> 上班</asp:LinkButton>
</li>
<li id="attenOutLi" runat="server">
<asp:LinkButton ID="attenOut" runat="server" CausesValidation="false" OnClick="attenOut_Click" CssClass="dropdown-item text-secondary">
<i class="mdi mdi-account-arrow-down text-primary me-2"></i> 下班</asp:LinkButton>
</li>
<li><hr class="dropdown-divider" /></li>
<li>
<asp:LinkButton ID="logout" OnClick="logout_Click" runat="server" CausesValidation="false" CssClass="dropdown-item text-secondary">
<i class="mdi mdi-power text-primary me-2"></i> 登出</asp:LinkButton>
</li>
</ul>
</li>
</ul>
</nav>

View File

@@ -0,0 +1,168 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class admin_Templates_TBS5ADM001_uc_nav : MyWeb.web_uc, MyWeb.config.MenuNav
{
public MyWeb.admin admin = new MyWeb.admin();
private Model.ezEntities _db = new Model.ezEntities();
protected void Page_Load(object sender, EventArgs e)
{
admin.isLoign();
MyWeb.master m = (MyWeb.master)Page.Master;
pageTitle.Text = m.company.name;
pageTitle.NavigateUrl = "~/admin/index2.aspx";
if (!IsPostBack)
{
//設計師模式不可打卡
if(admin.info.u_id == "Designer")
{
attenAddLi.Visible = false;
attenOutLi.Visible = false;
}
//判斷考勤IP
List<string> IPs = new List<string>();
string[] ips = System.Configuration.ConfigurationManager.AppSettings["attendancesIP"].ToString().Split(',');
if (ips.Length > 0)
{
bool success = false;
for (int i = 0; i <= ips.Length - 1; i++)
IPs.Add(ips[i]);
string myip = MyWeb.ip.Get();
if (IPs.Count > 0)
foreach (string IP in IPs)
if (myip.IndexOf(IP) == 0)
success = true;
if (!success)
{
attenAddLi.Visible = false;
attenOutLi.Visible = false;
}
}
}
}
protected void logout_Click(object sender, EventArgs e)
{
admin.ClearInfo();
Response.Redirect("~/admin/index.aspx");
}
public void InitNav(List<string> nItem)
{
breadCrumb.DataSource = nItem;
breadCrumb.DataBind();
this.Page.Title = String.Join("-",nItem.ToArray());
}
#region
protected void attenAdd_Click(object sender, EventArgs e)
{
int hr = _db.members.Where(q => q.admin_num == admin.info.num).Select(q => q.num).FirstOrDefault(); //人員num
//檢查是否已打卡
var qry = _db.member_check.Where(q => q.mem_num == hr);
qry = qry.Where(q => q.check_type == (int)Model.member.attendances.type.Start);
qry = qry.Where(q => q.check_date == DateTime.Today);
Model.member_check member_check = qry.FirstOrDefault();
if (member_check != null)
{
//已打卡
ScriptManager.RegisterStartupScript(Page, GetType(), "JsStatus", "msgtop('重複打卡','" + MyWeb.function.msgIcon.warning + "')", true);
}
else
{
if (hr != 0)
{
member_check = new Model.member_check();
member_check.login_ip = Request.UserHostAddress;
member_check.login_type = (int)Model.member.attendances.login.Account;
member_check.mem_num = hr;
member_check.check_type = (int)Model.member.attendances.type.Start;
member_check.check_date = DateTime.Today;
member_check.check_time = TimeSpan.Parse(DateTime.Now.ToString("HH:mm"));
try
{
_db.member_check.Add(member_check);
_db.SaveChanges();
ScriptManager.RegisterStartupScript(Page, GetType(), "JsStatus", "msgtop('打卡成功','" + MyWeb.function.msgIcon.success + "')", true);
}
catch (Exception ex)
{
ScriptManager.RegisterStartupScript(Page, GetType(), "JsStatus", "msgtop('打卡失敗','" + MyWeb.function.msgIcon.error + "')", true);
}
}
else
{
//未建立系統帳號
ScriptManager.RegisterStartupScript(Page, GetType(), "JsStatus", "msgtop('人員資料請先綁定系統帳號','" + MyWeb.function.msgIcon.warning + "')", true);
}
}
}
#endregion
#region
protected void attenOut_Click(object sender, EventArgs e)
{
int hr = _db.members.Where(q => q.admin_num == admin.info.num).Select(q => q.num).FirstOrDefault(); //人員num
//檢查是否已打卡
var qry = _db.member_check.Where(q => q.mem_num == hr);
qry = qry.Where(q => q.check_type == (int)Model.member.attendances.type.GetOff);
qry = qry.Where(q => q.check_date == DateTime.Today);
Model.member_check member_check = qry.FirstOrDefault();
if (member_check != null)
{
//已打卡
ScriptManager.RegisterStartupScript(Page, GetType(), "JsStatus", "msgtop('重複打卡','" + MyWeb.function.msgIcon.warning + "')", true);
}
else
{
if (hr != 0)
{
member_check = new Model.member_check();
member_check.login_ip = Request.UserHostAddress;
member_check.login_type = (int)Model.member.attendances.login.Account;
member_check.mem_num = hr;
member_check.check_type = (int)Model.member.attendances.type.GetOff;
member_check.check_date = DateTime.Today;
member_check.check_time = TimeSpan.Parse(DateTime.Now.ToString("HH:mm"));
try
{
_db.member_check.Add(member_check);
_db.SaveChanges();
ScriptManager.RegisterStartupScript(Page, GetType(), "JsStatus", "msgtop('打卡成功','" + MyWeb.function.msgIcon.success + "')", true);
}
catch (Exception ex)
{
ScriptManager.RegisterStartupScript(Page, GetType(), "JsStatus", "msgtop('打卡失敗','" + MyWeb.function.msgIcon.error + "')", true);
}
}
else
{
//未建立系統帳號
ScriptManager.RegisterStartupScript(Page, GetType(), "JsStatus", "msgtop('人員資料請先綁定系統帳號','" + MyWeb.function.msgIcon.warning + "')", true);
}
}
}
#endregion
}