migrate to new git
This commit is contained in:
102
web/admin/item/index.aspx
Normal file
102
web/admin/item/index.aspx
Normal file
@@ -0,0 +1,102 @@
|
||||
<%@ Page Title="後端管理" Language="C#" MasterPageFile="~/admin/Templates/TBS5ADM001/MasterPage.master" AutoEventWireup="true" EnableEventValidation="false" CodeFile="index.aspx.cs" Inherits="admin_item_index" %>
|
||||
<%@ Register Src="~/admin/_uc/alert.ascx" TagPrefix="uc1" TagName="alert" %>
|
||||
|
||||
<asp:Content ID="Content1" ContentPlaceHolderID="page_header" runat="Server">
|
||||
</asp:Content>
|
||||
<asp:Content ID="Content3" ContentPlaceHolderID="page_nav" runat="Server">
|
||||
<nav class="mb-1">
|
||||
<asp:LinkButton ID="addButton" runat="server" CssClass="btn btn-primary" OnClick="ImageButton4_Click" ToolTip="新增主選項">
|
||||
<i class="mdi mdi-plus"></i> 新增</asp:LinkButton>
|
||||
<asp:LinkButton ID="sortButton" runat="server" CssClass="btn btn-primary" OnClick="sortButton_Click" ToolTip="排序選項">
|
||||
<i class="mdi mdi-sort"></i> 排序</asp:LinkButton>
|
||||
<asp:LinkButton ID="delall" runat="server" CssClass="btn btn-secondary"
|
||||
OnClick="delall_Click" OnClientClick="return msgconfirm('您確定要刪除勾選項目?',this)" CausesValidation="false" ToolTip="刪除勾選項目">
|
||||
<i class="mdi mdi-trash-can"></i> 刪除勾選</asp:LinkButton>
|
||||
</nav>
|
||||
<nav class="mb-1">
|
||||
<asp:Button ID="edit" runat="server" ToolTip="儲存修改" Text="儲存" Visible="false" OnClick="edit_Click" CssClass="btn btn-primary" />
|
||||
<asp:Button ID="add" runat="server" Text="儲存新選項" Visible="false" OnClick="add_Click" CssClass="btn btn-primary" />
|
||||
<asp:PlaceHolder ID="down_table" runat="server">
|
||||
<asp:LinkButton ID="ImageButton5" runat="server" OnClick="ImageButton5_Click" CssClass="btn btn-outline-secondary"
|
||||
CausesValidation="False"><i class="mdi mdi-arrow-down-right"></i> 建立下一層選項</asp:LinkButton>
|
||||
<asp:LinkButton ID="ImageButton6" runat="server" OnClick="ImageButton6_Click" CssClass="btn btn-outline-secondary"
|
||||
OnClientClick="return msgconfirm('是否確定刪除這筆資料?<br>注意!資料刪除後將一併刪除此資料的子選項!',this);">
|
||||
<i class="mdi mdi-trash-can"></i> 刪除</asp:LinkButton>
|
||||
</asp:PlaceHolder>
|
||||
</nav>
|
||||
</asp:Content>
|
||||
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
|
||||
<uc1:alert runat="server" ID="L_msg" Text="" />
|
||||
|
||||
<div id="content" class="container-fluid pb-4">
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<div class="card shadow-sm my-2" id="sec1">
|
||||
<div class="card-header">選擇權限</div>
|
||||
<div class="card-body">
|
||||
<asp:TreeView ID="TreeView2" runat="server" cssClass="aspxTree" ImageSet="Arrows"
|
||||
SkipLinkText="" ShowLines="false" EnableTheming="False" ShowExpandCollapse="True">
|
||||
</asp:TreeView>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<asp:Panel ID="table" runat="server" CssClass="card shadow-sm my-2">
|
||||
<div class="card-header">
|
||||
<div><asp:Label ID="start" runat="server" cssClass="text-danger" Display="Dynamic"></asp:Label></div>
|
||||
<div><asp:Label ID="title_msg" runat="server" cssClass="" ForeColor=""></asp:Label></div>
|
||||
</div>
|
||||
<div class="card-body form-horizontal" role="form">
|
||||
<div>
|
||||
<div class="form-text text-muted">以下 * 欄位為必填欄位</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-lg-3 col-form-label">選項名稱 *</label>
|
||||
<div class="col-sm-10 col-lg-9">
|
||||
<asp:TextBox ID="item_name" runat="server" CssClass="form-control" MaxLength="25"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="item_name" ErrorMessage="必填!" Display="Dynamic" SetFocusOnError="true"></asp:RequiredFieldValidator>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-lg-3 col-form-label">連結網址</label>
|
||||
<div class="col-sm-10 col-lg-9">
|
||||
<asp:TextBox ID="url" runat="server" CssClass="form-control" MaxLength="50"></asp:TextBox>
|
||||
<div class="form-text text-muted">若有上層目錄,請使用「~/」</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-lg-3 col-form-label">開啟視窗 *</label>
|
||||
<div class="col-sm-10 col-lg-9">
|
||||
<asp:DropDownList ID="target" runat="server" CssClass="form-select">
|
||||
<asp:ListItem Value="A">同視窗開啟</asp:ListItem>
|
||||
<asp:ListItem Value="B">另開視窗</asp:ListItem>
|
||||
</asp:DropDownList>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<%--功能未檢查, 故未編排--%>
|
||||
<asp:TextBox ID="price" runat="server" Visible="false"></asp:TextBox>
|
||||
<asp:TextBox ID="demo" runat="server" Visible="false"></asp:TextBox>
|
||||
<asp:TextBox ID="other" runat="server" Visible="false"></asp:TextBox>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-lg-3 col-form-label">相關檔案</label>
|
||||
<div class="col-sm-10 col-lg-9">
|
||||
<asp:TextBox ID="other_url" runat="server" CssClass="form-control"></asp:TextBox>
|
||||
<div class="form-text text-muted">若有多個相關檔案,請以逗號「,」分隔</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-3 col-md-offset-2 col-sm-9 col-md-10">
|
||||
<asp:HiddenField ID="HiddenField1" runat="server" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</asp:Panel>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</asp:Content>
|
||||
|
||||
414
web/admin/item/index.aspx.cs
Normal file
414
web/admin/item/index.aspx.cs
Normal file
@@ -0,0 +1,414 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.OleDb;
|
||||
using System.Web;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Configuration;
|
||||
|
||||
public partial class admin_item_index : MyWeb.config
|
||||
{
|
||||
DataTable treeDt = new DataTable();
|
||||
const int LevelMax = MyWeb.item.KindLevelMax; //分類層數
|
||||
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!IsPostBack) {
|
||||
|
||||
BuildTreeView();
|
||||
|
||||
if (!isStrNull(Request["num"]))
|
||||
{
|
||||
|
||||
MyWeb.sql sql = new MyWeb.sql();
|
||||
OleDbConnection sqlConn = sql.conn(db, p_name);
|
||||
try
|
||||
{
|
||||
sqlConn.Open();
|
||||
OleDbCommand sqlCmd = new OleDbCommand("", sqlConn);
|
||||
sqlCmd.CommandText = "SELECT * FROM item Where num=?";
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("num", Request["num"]));
|
||||
DataTable dt = sql.dataTable(sqlCmd);
|
||||
if (dt.Rows.Count > 0)
|
||||
{
|
||||
title_msg.Text = "修改<span class=\"text-primary\">【" + dt.Rows[0]["title"].ToString() + "】</span>的選項資料";
|
||||
item_name.Text = dt.Rows[0]["title"].ToString();
|
||||
url.Text = dt.Rows[0]["url"].ToString();
|
||||
target.SelectedValue = dt.Rows[0]["target"].ToString();
|
||||
price.Text = dt.Rows[0]["price"].ToString();
|
||||
demo.Text = dt.Rows[0]["demo"].ToString();
|
||||
other.Text = dt.Rows[0]["other"].ToString();
|
||||
other_url.Text = dt.Rows[0]["other_url"].ToString();
|
||||
HiddenField1.Value = dt.Rows[0]["title"].ToString();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Response.Write("PageLoad:" + ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
sqlConn.Close(); sqlConn.Dispose();
|
||||
}
|
||||
|
||||
edit.Visible = true;
|
||||
add.Visible = false;
|
||||
down_table.Visible = true;
|
||||
start.Visible = false;
|
||||
}
|
||||
else {
|
||||
table.Visible = false;
|
||||
down_table.Visible = false;
|
||||
if (Request["msg"] == "A"){start.Text = "【資料修改成功】";}
|
||||
else if (Request["msg"] == "B"){start.Text = "【資料新增成功】";}
|
||||
else if (Request["msg"] == "C") { start.Text = "【資料刪除成功】"; }
|
||||
else { start.Text = "【請點選下方欲新增、修改或刪除的選項分類】"; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#region 產生TreeView選單
|
||||
|
||||
protected void TreeTopology()
|
||||
{
|
||||
MyWeb.sql sql = new MyWeb.sql();
|
||||
OleDbConnection sqlConn = sql.conn(db, p_name);
|
||||
try
|
||||
{
|
||||
sqlConn.Open();
|
||||
OleDbCommand sqlCmd = new OleDbCommand("", sqlConn);
|
||||
sqlCmd.CommandText = "SELECT num,title,root FROM item ORDER BY root, range";
|
||||
treeDt = sql.dataTable(sqlCmd);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Response.Write(ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
sqlConn.Close();
|
||||
sqlConn.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public void BuildTreeView() {
|
||||
this.TreeView2.Nodes.Clear();
|
||||
TreeTopology();
|
||||
BuildChild(0, this.TreeView2.Nodes);
|
||||
treeDt.Dispose();
|
||||
}
|
||||
|
||||
public void BuildChild(int RootUid, TreeNodeCollection Nodes,int Level=1)
|
||||
{
|
||||
|
||||
DataTable dt = treeDt;
|
||||
|
||||
|
||||
if (dt.Rows.Count == 0 & RootUid == 0)
|
||||
{
|
||||
delall.Visible = false;
|
||||
}
|
||||
else if (dt.Rows.Count > 0 & RootUid == 0)
|
||||
{
|
||||
delall.Visible = true;
|
||||
}
|
||||
|
||||
foreach (DataRow row in dt.Rows)
|
||||
{
|
||||
if (row["root"].ToString() == RootUid.ToString())
|
||||
{
|
||||
TreeNode newNode = new TreeNode();
|
||||
|
||||
if (Convert.ToString(Request["num"]) == row["num"].ToString() & this.HiddenField1.Value != "AddMainItem")
|
||||
{
|
||||
newNode.Text = "<b><span style=\"color:blue\">" + row["title"].ToString() + "</span></b>";
|
||||
if (Level + 1 > LevelMax) { ImageButton5.Visible = false; }
|
||||
}
|
||||
else
|
||||
{
|
||||
newNode.Text = row["title"].ToString();
|
||||
}
|
||||
newNode.Value = row["num"].ToString();
|
||||
newNode.ShowCheckBox = true;
|
||||
newNode.NavigateUrl = "index.aspx?num=" + row["num"].ToString();
|
||||
newNode.Expand();
|
||||
Nodes.Add(newNode);
|
||||
if (Level + 1 <= LevelMax)
|
||||
{
|
||||
BuildChild((int)row["num"], newNode.ChildNodes, Level + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 修改
|
||||
|
||||
protected void edit_Click(object sender, EventArgs e)
|
||||
{
|
||||
L_msg.Text = "";
|
||||
MyWeb.sql sql = new MyWeb.sql();
|
||||
OleDbConnection sqlConn = sql.conn(db, p_name);
|
||||
try
|
||||
{
|
||||
sqlConn.Open();
|
||||
OleDbCommand sqlCmd = new OleDbCommand("", sqlConn);
|
||||
sqlCmd.CommandText = "UPDATE item SET title=?, url=?, price=?, demo=?, other=?, target=?, other_url=? WHERE num=?";
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("title", this.item_name.Text));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("url", this.url.Text));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("price", this.price.Text));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("demo", this.demo.Text));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("other", this.other.Text));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("target", this.target.SelectedValue));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("other_url", this.other_url.Text));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("num", Request["num"]));
|
||||
sqlCmd.ExecuteNonQuery();
|
||||
|
||||
sqlConn.Close(); sqlConn.Dispose();
|
||||
|
||||
L_msg.Type = alert_type.success;
|
||||
L_msg.Text = "操作成功";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//ScriptMsgTop("操作失敗!", msgIcon.error);
|
||||
start.Text = ex.Message;
|
||||
L_msg.Type = alert_type.danger;
|
||||
L_msg.Text = "ex.Message!";
|
||||
}
|
||||
finally
|
||||
{
|
||||
sqlConn.Close(); sqlConn.Dispose();
|
||||
}
|
||||
|
||||
BuildTreeView();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 新增
|
||||
|
||||
protected void add_Click(object sender, EventArgs e)
|
||||
{
|
||||
L_msg.Text = "";
|
||||
int range_num = 1;
|
||||
|
||||
MyWeb.sql sql = new MyWeb.sql();
|
||||
DataTable dt = sql.selectTable(db, p_name, "SELECT top 1 range FROM item order by range desc");
|
||||
if (dt.Rows.Count > 0) {
|
||||
range_num = (int)dt.Rows[0]["range"] + 1;
|
||||
}
|
||||
|
||||
OleDbConnection sqlConn = sql.conn(db, p_name);
|
||||
try
|
||||
{
|
||||
sqlConn.Open();
|
||||
OleDbCommand sqlCmd = new OleDbCommand("", sqlConn);
|
||||
string cu = "title,url,price,demo,other,target,root,range,other_url";
|
||||
sqlCmd.CommandText = "INSERT INTO item (" + cu + ") VALUES (" + sql.mark(cu) + ")";
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("title", item_name.Text));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("url", url.Text));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("price", price.Text));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("demo", demo.Text));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("other", other.Text));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("target", target.SelectedValue));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("root", (HiddenField1.Value == "AddMainItem"? "0": Convert.ToString(Request["num"]))));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("range", range_num));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("other_url", other_url.Text));
|
||||
sqlCmd.ExecuteNonQuery();
|
||||
|
||||
|
||||
L_msg.Type = alert_type.success;
|
||||
L_msg.Text = "操作成功";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
L_msg.Type = alert_type.danger;
|
||||
L_msg.Text = "ex.Message!";
|
||||
start.Text = ex.Message;
|
||||
}
|
||||
finally
|
||||
{
|
||||
sqlConn.Close(); sqlConn.Dispose();
|
||||
}
|
||||
|
||||
BuildTreeView();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 刪除
|
||||
|
||||
protected void delall_Click(object sender, EventArgs e)
|
||||
{
|
||||
int j = 0;
|
||||
for (int i = 0; i < TreeView2.CheckedNodes.Count; i++) {
|
||||
if (TreeView2.CheckedNodes[i].Checked) {
|
||||
MyWeb.sql sql = new MyWeb.sql();
|
||||
OleDbConnection sqlConn = sql.conn(db, p_name);
|
||||
try
|
||||
{
|
||||
sqlConn.Open();
|
||||
OleDbCommand sqlCmd = new OleDbCommand("", sqlConn);
|
||||
sqlCmd.CommandText = "Delete from item Where num=?";
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("num", TreeView2.CheckedNodes[i].Value));
|
||||
sqlCmd.ExecuteNonQuery();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Response.Write(ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
sqlConn.Close(); sqlConn.Dispose();
|
||||
}
|
||||
|
||||
Del_Ohter_Items(Convert.ToInt32(TreeView2.CheckedNodes[i].Value));
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
if (j > 0)
|
||||
{
|
||||
Response.Redirect("index.aspx?msg=C");
|
||||
}
|
||||
else {
|
||||
ScriptMsg("請勾選要刪除的項目", "", msgIcon.warning);
|
||||
}
|
||||
}
|
||||
|
||||
protected void ImageButton6_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
MyWeb.sql sql = new MyWeb.sql();
|
||||
OleDbConnection sqlConn = sql.conn(db, p_name);
|
||||
try
|
||||
{
|
||||
sqlConn.Open();
|
||||
OleDbCommand sqlCmd = new OleDbCommand("", sqlConn);
|
||||
sqlCmd.CommandText = "Delete from item Where num=?";
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("num", Request["num"]));
|
||||
sqlCmd.ExecuteNonQuery();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Response.Write(ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
sqlConn.Close(); sqlConn.Dispose();
|
||||
}
|
||||
|
||||
Del_Ohter_Items(Convert.ToInt32(Request["num"]));
|
||||
Response.Redirect("index.aspx?msg=C");
|
||||
}
|
||||
|
||||
public void Del_Ohter_Items(int d_num)
|
||||
{
|
||||
|
||||
MyWeb.sql sql = new MyWeb.sql();
|
||||
OleDbConnection sqlConn = sql.conn(db, p_name);
|
||||
try
|
||||
{
|
||||
sqlConn.Open();
|
||||
OleDbCommand sqlCmd = new OleDbCommand("", sqlConn);
|
||||
sqlCmd.CommandText = "SELECT * FROM item Where root=?";
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("root", d_num));
|
||||
DataTable dt = sql.dataTable(sqlCmd);
|
||||
for (int i = 0; i < dt.Rows.Count; i++) {
|
||||
sqlCmd = new OleDbCommand("", sqlConn);
|
||||
sqlCmd.CommandText = "Delete from item Where root=?";
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("root", d_num));
|
||||
sqlCmd.ExecuteNonQuery();
|
||||
Del_Ohter_Items((int)dt.Rows[i]["num"]);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Response.Write(ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
sqlConn.Close(); sqlConn.Dispose();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 按鈕事件
|
||||
|
||||
protected void ImageButton4_Click(object sender, EventArgs e)
|
||||
{
|
||||
title_msg.Text = "於根目錄下,新增主選項資料";
|
||||
table.Visible = true;
|
||||
item_name.Text = "";
|
||||
url.Text = "";
|
||||
target.SelectedValue = "A";
|
||||
price.Text = "";
|
||||
demo.Text = "";
|
||||
other.Text = "";
|
||||
other_url.Text = "";
|
||||
add.Visible = true;
|
||||
edit.Visible = false;
|
||||
down_table.Visible = false;
|
||||
start.Visible = false;
|
||||
HiddenField1.Value = "AddMainItem";
|
||||
BuildTreeView();
|
||||
}
|
||||
protected void ImageButton5_Click(object sender, EventArgs e)
|
||||
{
|
||||
title_msg.Text = "於<span class=text-primary>【" + HiddenField1.Value + "】</span>分類下,新增選項資料";
|
||||
item_name.Text = "";
|
||||
url.Text = "";
|
||||
target.SelectedValue = "A";
|
||||
price.Text = "";
|
||||
demo.Text = "";
|
||||
other.Text = "";
|
||||
add.Visible = true;
|
||||
edit.Visible = false;
|
||||
down_table.Visible = false;
|
||||
start.Visible = false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
protected void Button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
MyWeb.sql sql = new MyWeb.sql();
|
||||
OleDbConnection sqlConn = sql.conn(db, p_name);
|
||||
try
|
||||
{
|
||||
sqlConn.Open();
|
||||
OleDbCommand sqlCmd = new OleDbCommand("", sqlConn);
|
||||
sqlCmd.CommandText = "Delete from item Where num=?";
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("num", Request["num"]));
|
||||
sqlCmd.ExecuteNonQuery();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Response.Write(ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
sqlConn.Close(); sqlConn.Dispose();
|
||||
}
|
||||
|
||||
Del_Ohter_Items(Convert.ToInt32(Request["num"]));
|
||||
Response.Redirect("index.aspx?msg=C");
|
||||
}
|
||||
|
||||
protected void sortButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
Response.Redirect("range.aspx");
|
||||
}
|
||||
}
|
||||
39
web/admin/item/range.aspx
Normal file
39
web/admin/item/range.aspx
Normal file
@@ -0,0 +1,39 @@
|
||||
<%@ Page Title="後端管理" Language="C#" MasterPageFile="~/admin/Templates/TBS5ADM001/MasterPage.master" AutoEventWireup="true" CodeFile="range.aspx.cs" Inherits="admin_item_range" %>
|
||||
<asp:Content ID="Content1" ContentPlaceHolderID="page_header" runat="Server">
|
||||
</asp:Content>
|
||||
<asp:Content ID="Content3" ContentPlaceHolderID="page_nav" runat="Server">
|
||||
<nav class="mb-1">
|
||||
<a href="index.aspx" class="btn btn-outline-primary">
|
||||
<i class="mdi mdi-arrow-left"></i> 回選項編輯</a>
|
||||
<a href="range.aspx" class="btn btn-primary">
|
||||
<i class="mdi mdi-arrow-up-right"></i> 顯示主選項</a>
|
||||
</nav>
|
||||
<nav class="mb-1">
|
||||
</nav>
|
||||
</asp:Content>
|
||||
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
|
||||
|
||||
<div id="content" class="container-fluid pb-4">
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<div class="card shadow-sm my-2" id="sec1">
|
||||
<div class="card-header">選擇項目</div>
|
||||
<div class="card-body">
|
||||
<asp:TreeView ID="TreeView2" runat="server" cssClass="aspxTree" ImageSet="Arrows"
|
||||
SkipLinkText="" ShowLines="false" EnableTheming="False" ShowExpandCollapse="True">
|
||||
</asp:TreeView>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<div class="card shadow-sm my-2" id="sec2">
|
||||
<div class="card-header">請直接拖曳調整以下選項排序的順序</div>
|
||||
<div class="card-body">
|
||||
<iframe src="range2.aspx?num=<%= Convert.ToString(Request["num"]) %>" class="sort-iframe"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</asp:Content>
|
||||
|
||||
77
web/admin/item/range.aspx.cs
Normal file
77
web/admin/item/range.aspx.cs
Normal file
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.OleDb;
|
||||
using System.Web;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Configuration;
|
||||
|
||||
public partial class admin_item_range : MyWeb.config
|
||||
{
|
||||
DataTable treeDt = new DataTable();
|
||||
const int LevelMax = MyWeb.item.KindLevelMax; //分類層數
|
||||
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!IsPostBack) {
|
||||
TreeTopology();
|
||||
BuildChild(0, TreeView2.Nodes);
|
||||
}
|
||||
}
|
||||
|
||||
protected void TreeTopology()
|
||||
{
|
||||
MyWeb.sql sql = new MyWeb.sql();
|
||||
OleDbConnection sqlConn = sql.conn(db, p_name);
|
||||
try
|
||||
{
|
||||
sqlConn.Open();
|
||||
OleDbCommand sqlCmd = new OleDbCommand("", sqlConn);
|
||||
sqlCmd.CommandText = "SELECT num,title,root FROM item ORDER BY root, range";
|
||||
treeDt = sql.dataTable(sqlCmd);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Response.Write(ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
sqlConn.Close();
|
||||
sqlConn.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public void BuildChild(int RootUid, TreeNodeCollection Nodes, int Level=1)
|
||||
{
|
||||
DataTable dt = treeDt;
|
||||
|
||||
foreach (DataRow row in dt.Rows)
|
||||
{
|
||||
if (row["root"].ToString() == RootUid.ToString())
|
||||
{
|
||||
TreeNode NewNode = new TreeNode();
|
||||
if (Convert.ToString(Request["num"]) == row["num"].ToString())
|
||||
{
|
||||
NewNode.Text = "<b><font color=blue>" + row["title"].ToString() + "</font></b>";
|
||||
}
|
||||
else
|
||||
{
|
||||
NewNode.Text = row["title"].ToString();
|
||||
}
|
||||
NewNode.NavigateUrl = Request.Url.AbsolutePath + "?num=" + row["num"].ToString();
|
||||
NewNode.Expand();
|
||||
Nodes.Add(NewNode);
|
||||
|
||||
if (Level + 1 <= LevelMax)
|
||||
{
|
||||
BuildChild((int)row["num"], NewNode.ChildNodes, Level + 1);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
81
web/admin/item/range2.aspx
Normal file
81
web/admin/item/range2.aspx
Normal file
@@ -0,0 +1,81 @@
|
||||
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="range2.aspx.cs" Inherits="admin_item_range2" %>
|
||||
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head runat="server">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title></title>
|
||||
<link href="~/js/bootstrap5/css/bootstrap.min.css" rel="stylesheet" type="text/css">
|
||||
<style>
|
||||
.list-group-item.bg-light:hover{
|
||||
cursor:pointer;
|
||||
background-color: rgba(var(--bs-light-rgb),0)!important
|
||||
}
|
||||
|
||||
/* 修正 ReorderList 拖拽問題 */
|
||||
.list-group li {
|
||||
position: relative !important;
|
||||
transform: none !important;
|
||||
}
|
||||
|
||||
/* 確保拖拽視覺元素使用整數座標 */
|
||||
.ajax__reorderList_dragVisual {
|
||||
position: absolute !important;
|
||||
transform: none !important;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<form id="form1" runat="server">
|
||||
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
|
||||
<div>
|
||||
<asp:SqlDataSource ID="sqlDataSource1" runat="server"
|
||||
SelectCommand="SELECT [num], [title], [range] FROM [item] WHERE root=0 ORDER BY [range]"
|
||||
UpdateCommand="UPDATE [item] SET [title] = @title, [range] = @range WHERE [num] = @num">
|
||||
<UpdateParameters>
|
||||
<asp:Parameter Name="title" Type="String" />
|
||||
<asp:Parameter Name="range" Type="Int32" />
|
||||
<asp:Parameter Name="num" Type="Int32" />
|
||||
</UpdateParameters>
|
||||
</asp:SqlDataSource>
|
||||
|
||||
<asp:UpdatePanel ID="up1" runat="server">
|
||||
<ContentTemplate>
|
||||
<cc1:ReorderList ID="ReorderList1" runat="server" CssClass="list-group"
|
||||
AllowReorder="True" DataKeyField="num" DataSourceID="sqlDataSource1" PostBackOnReorder="False" SortOrderField="range" EnableTheming="False">
|
||||
<ItemTemplate>
|
||||
<%#Eval("title")%>
|
||||
</ItemTemplate>
|
||||
</cc1:ReorderList>
|
||||
</ContentTemplate>
|
||||
</asp:UpdatePanel>
|
||||
</div>
|
||||
</form>
|
||||
<script>
|
||||
// 確保 ReorderList 的樣式正確應用
|
||||
Sys.Application.add_load(function() {
|
||||
var reorderList = document.querySelector('.list-group');
|
||||
if (reorderList) {
|
||||
reorderList.className = "list-group";
|
||||
}
|
||||
|
||||
// 為 ReorderList 生成的 li 元素添加 CSS 類別
|
||||
var listItems = document.querySelectorAll('.list-group li');
|
||||
listItems.forEach(function(item) {
|
||||
item.className = "list-group-item bg-light";
|
||||
});
|
||||
});
|
||||
|
||||
// 修正拖拽座標問題
|
||||
if (typeof Sys !== 'undefined' && Sys.Extended && Sys.Extended.UI && Sys.Extended.UI.DragDropWatcher) {
|
||||
var originalSetLocation = Sys.Extended.UI._CommonToolkitScripts.setLocation;
|
||||
Sys.Extended.UI._CommonToolkitScripts.setLocation = function(element, x, y) {
|
||||
// 確保座標是整數
|
||||
var intX = Math.round(x);
|
||||
var intY = Math.round(y);
|
||||
return originalSetLocation.call(this, element, intX, intY);
|
||||
};
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
61
web/admin/item/range2.aspx.cs
Normal file
61
web/admin/item/range2.aspx.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using OfficeOpenXml.FormulaParsing.Utilities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Web;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
|
||||
public partial class admin_item_range2 : System.Web.UI.Page
|
||||
{
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
sqlDataSource1.ConnectionString = ConfigurationManager.ConnectionStrings["shopConn"].ConnectionString;
|
||||
//sqlDataSource1.ConnectionString = sqlDataSource1.ConnectionString.Replace("Encrypt=False;", "");
|
||||
//sqlDataSource1.ConnectionString = sqlDataSource1.ConnectionString.Replace("TrustServerCertificate=True;", "");
|
||||
sqlDataSource1.ConnectionString = sqlDataSource1.ConnectionString.Replace("Provider=SQLOLEDB;", "");
|
||||
sqlDataSource1.ConnectionString = sqlDataSource1.ConnectionString.Replace("Provider=SQLNCLI11", "");
|
||||
|
||||
sqlDataSource1.ProviderName = ConfigurationManager.ConnectionStrings["shopConn"].ProviderName;
|
||||
|
||||
if (Convert.ToString(Request["num"]) != "" & Request["num"] != null)
|
||||
{
|
||||
// 先查詢指定 num 的 root 值
|
||||
string rootValue = "0";
|
||||
try
|
||||
{
|
||||
using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(sqlDataSource1.ConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
string getRootSql = "SELECT [root] FROM [item] WHERE [num]=" + Request["num"];
|
||||
using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(getRootSql, conn))
|
||||
{
|
||||
object result = cmd.ExecuteScalar();
|
||||
if (result != null && result != DBNull.Value)
|
||||
{
|
||||
rootValue = result.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
rootValue = "0";
|
||||
}
|
||||
|
||||
// 使用找到的 root 值來查詢子項目
|
||||
sqlDataSource1.SelectCommand = "SELECT [num], [title], [range] FROM [item] WHERE [root]=" + rootValue + " ORDER BY [range]";
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果沒有傳入 num 參數,顯示所有 root=0 的項目
|
||||
sqlDataSource1.SelectCommand = "SELECT [num], [title], [range] FROM [item] WHERE [root]=0 ORDER BY [range]";
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 強制重新綁定資料
|
||||
ReorderList1.DataBind();
|
||||
|
||||
}
|
||||
}
|
||||
294
web/admin/item/setting.aspx
Normal file
294
web/admin/item/setting.aspx
Normal file
@@ -0,0 +1,294 @@
|
||||
<%@ Page Title="後端管理" Language="C#" MasterPageFile="~/admin/Templates/TBS5ADM001/MasterPage.master" AutoEventWireup="true" CodeFile="setting.aspx.cs" Inherits="admin_item_setting" %>
|
||||
<%@ Register Src="~/admin/_uc/alert.ascx" TagPrefix="uc1" TagName="alert" %>
|
||||
<asp:Content ID="Content1" ContentPlaceHolderID="footer_script" runat="Server">
|
||||
<link href="../../App_Script/bootstrap_toggle/css/bootstrap-toggle.min.css" rel="stylesheet" />
|
||||
<script src="../../App_Script/bootstrap_toggle/js/bootstrap-toggle.min.js"></script>
|
||||
<script>
|
||||
$(".scroll-nav a")
|
||||
.each((i, t) => {
|
||||
let v = $($(t).attr("href"));
|
||||
console.log(i, t, v.length);
|
||||
if (v.length==0) $(t).remove();
|
||||
})
|
||||
.click(function (e) {
|
||||
$(".scroll-nav a").removeClass("active");
|
||||
$(this).addClass("active");
|
||||
console.log($(this));
|
||||
});
|
||||
</script>
|
||||
</asp:Content>
|
||||
<asp:Content ID="Content3" ContentPlaceHolderID="page_nav" runat="Server">
|
||||
<div class="scroll-nav nav nav-tabs mb-2 mb-sm-0 d-none d-sm-flex">
|
||||
<a class="flex-sm-fill text-sm-center nav-link active" href="#sec1">1</a>
|
||||
<a class="flex-sm-fill text-sm-center nav-link" href="#sec2">2</a>
|
||||
<a class="flex-sm-fill text-sm-center nav-link" href="#sec3">3</a>
|
||||
<a class="flex-sm-fill text-sm-center nav-link" href="#sec4">4</a>
|
||||
</div>
|
||||
<div class="">
|
||||
<asp:LinkButton ID="mailsend" runat="server" OnClick="mailsend_Click"
|
||||
CssClass="btn btn-outline-primary" >
|
||||
<i class="mdi mdi-email-newsletter"></i>
|
||||
儲存設定並測試發送信件
|
||||
</asp:LinkButton>
|
||||
</div>
|
||||
</asp:Content>
|
||||
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
|
||||
<uc1:alert runat="server" ID="L_msg" Text=""/>
|
||||
<div id="content" class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card shadow-sm my-2" id="sec1">
|
||||
<div class="card-header"><span class="badge rounded-pill bg-secondary me-1">1</span><span>網站資料設定</span></div>
|
||||
<div class="card-body label-sm-right">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-lg-3 col-form-label">* 公司名稱</label>
|
||||
<div class="col-sm-10 col-lg-9">
|
||||
<asp:TextBox ID="com_name" runat="server" CssClass="form-control" MaxLength="50"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="RF1" ControlToValidate="com_name" runat="server" ErrorMessage="必填!" Display="Dynamic" SetFocusOnError="true"></asp:RequiredFieldValidator>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-lg-3 col-form-label">* 公司信箱</label>
|
||||
<div class="col-sm-10 col-lg-9">
|
||||
<asp:TextBox ID="email" runat="server" CssClass="form-control"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ControlToValidate="email" Display="Dynamic" SetFocusOnError="true" ErrorMessage="必填!" ID="v_email" runat="server" />
|
||||
<asp:RegularExpressionValidator ControlToValidate="email" Display="Dynamic" SetFocusOnError="true" ErrorMessage="您所輸入的Email格式有誤!" ID="RegularExpressionValidator1" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-lg-3 col-form-label">BCC</label>
|
||||
<div class="col-sm-10 col-lg-9">
|
||||
<asp:TextBox ID="bcc_mail" TextMode="MultiLine" Height="100" runat="server" CssClass="form-control"></asp:TextBox>
|
||||
<div class="form-text text-muted">說明:設定密件請一行輸入一個E-mail。</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-lg-3 col-form-label">* 目前網址</label>
|
||||
<div class="col-sm-10 col-lg-9">
|
||||
<asp:TextBox ID="pic_url" runat="server" CssClass="form-control" MaxLength="50"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="RF2" ControlToValidate="pic_url" runat="server" ErrorMessage="請輸入目前網址(編輯器圖片路徑用)!" Display="Dynamic" SetFocusOnError="true"></asp:RequiredFieldValidator>
|
||||
<div class="form-text text-muted">編輯器圖片路徑用</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="card shadow-sm my-2" id="sec2">
|
||||
<div class="card-header"><span class="badge rounded-pill bg-secondary me-1">2</span>SMTP 設定</div>
|
||||
<div class="card-body label-sm-right">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-lg-3 col-xxl-2 mb-1 col-form-label">* 主機位址</label>
|
||||
<div class="col-sm-10 col-lg-9 col-xxl-4">
|
||||
<asp:TextBox ID="smtp_url" runat="server" CssClass="form-control" MaxLength="100"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="smtp_url" runat="server"
|
||||
ErrorMessage="必填!" Display="Dynamic" SetFocusOnError="true"></asp:RequiredFieldValidator>
|
||||
</div>
|
||||
|
||||
<label class="col-sm-2 col-lg-3 col-xxl-2 col-form-label">* Port</label>
|
||||
<div class="col-sm-10 col-lg-9 col-xxl-4">
|
||||
<asp:TextBox ID="smtp_port" runat="server" CssClass="form-control" MaxLength="10"
|
||||
TextMode="Number" Min="0" Max="65535" Step="1"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" ControlToValidate="smtp_port" runat="server"
|
||||
ErrorMessage="必填!" Display="Dynamic" SetFocusOnError="true"></asp:RequiredFieldValidator>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-lg-3 col-xxl-2 col-form-label">帳號</label>
|
||||
<div class="col-sm-10 col-lg-9 col-xxl-4">
|
||||
<asp:TextBox ID="smtp_user" runat="server" CssClass="form-control inline" MaxLength="50"
|
||||
placeholder="有需要才填"></asp:TextBox>
|
||||
<asp:CheckBox ID="use_sender" runat="server" Text="用此帳號作為寄件者" />
|
||||
</div>
|
||||
<label class="col-sm-2 col-lg-3 col-xxl-2 col-form-label">密碼</label>
|
||||
<div class="col-sm-10 col-lg-9 col-xxl-4">
|
||||
<asp:TextBox ID="smtp_password" runat="server" CssClass="form-control inline" MaxLength="50"
|
||||
TextMode="Password" placeholder="有需要才填"></asp:TextBox>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-lg-3 col-xxl-2 col-form-label">SSL</label>
|
||||
<div class="col-sm-10 col-lg-9 col-xxl-10">
|
||||
<label class="col-form-control">
|
||||
<input type="checkbox" id="smtp_ssl" runat="server"
|
||||
data-toggle="toggle" data-on="啟用" data-off="未啟用" data-onstyle="success" />
|
||||
<span class="form-text text-muted">(若啟用請確認您填的Port是否正確)</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-lg-3 col-xxl-3 col-form-label">使用預設驗證</label>
|
||||
<div class="col-sm-10 col-lg-9 col-xxl-9">
|
||||
<asp:DropDownList ID="smtp_def" runat="server" CssClass="form-select">
|
||||
<asp:ListItem Value="" Text="不設定(視SMTP主機設定調整)"></asp:ListItem>
|
||||
<asp:ListItem Value="Y" Text="是"></asp:ListItem>
|
||||
<asp:ListItem Value="N" Text="否"></asp:ListItem>
|
||||
</asp:DropDownList>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1 gy-2 gy-sm-3">
|
||||
<div class="col-12">
|
||||
<div>
|
||||
<asp:Label ID="mailtest" runat="server" class="text-danger"></asp:Label>
|
||||
</div>
|
||||
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="500">
|
||||
<ProgressTemplate>
|
||||
<div class="text-success">測試中,請稍候…</div>
|
||||
</ProgressTemplate>
|
||||
</asp:UpdateProgress>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<asp:PlaceHolder ID="PlaceHolder2" runat="server" Visible="false">
|
||||
<div class="card shadow-sm my-2" id="sec3">
|
||||
<div class="card-header"><span class="badge rounded-pill bg-secondary me-1">3</span>後台模組設定 (僅設計師模式)</div>
|
||||
<div class="card-body">
|
||||
<div class="row mb-1 g-2">
|
||||
<label class="col-sm-2 col-form-label">選單設定</label>
|
||||
<div class="col-sm-10 col-md-2">
|
||||
<label class="col-form-control">
|
||||
<input type="checkbox" id="menu" runat="server" data-toggle="toggle" data-on="全部展開" data-off="點選展開" data-onstyle="success" data-offstyle="info" />
|
||||
</label>
|
||||
</div>
|
||||
<label class="col-sm-2 col-form-label">登錄設定</label>
|
||||
<div class="col-sm-10 col-md-2">
|
||||
<label class="col-form-control">
|
||||
<input type="checkbox" id="log_class" runat="server" data-toggle="toggle" data-on="使用Cookies" data-off="使用Session" data-onstyle="success" data-offstyle="info" />
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-form-label">後台首頁</label>
|
||||
<div class="col-sm-10">
|
||||
<asp:CheckBoxList CssClass="log_menu" ID="shop_kind1" runat="server"
|
||||
RepeatColumns="1" RepeatDirection="Horizontal" RepeatLayout="Flow" >
|
||||
<asp:ListItem Value="A">流量統計區塊 (需有「流量統計」及「會員管理」系統)</asp:ListItem>
|
||||
<asp:ListItem Value="B">訂單資訊區塊 (需有「訂單管理」系統)</asp:ListItem>
|
||||
<asp:ListItem Value="C">客服資訊區塊 (需有「客服管理」系統)</asp:ListItem>
|
||||
<asp:ListItem Value="D">測試變數區塊 (開發人員測試登錄變數用,上線後,務必關閉此區塊)</asp:ListItem>
|
||||
</asp:CheckBoxList>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-form-label"></label>
|
||||
<div class="col-sm-10">
|
||||
<asp:Button ID="Button1" runat="server" Text="儲存設定" OnClick="Button1_Click"
|
||||
CssClass="btn btn-outline-primary"></asp:Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</asp:PlaceHolder>
|
||||
<asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible="false">
|
||||
<div class="card shadow-sm my-2" id="sec4">
|
||||
<div class="card-header"><span class="badge rounded-pill bg-secondary me-1">4</span>執行SQL指令 (僅設計師模式)</div>
|
||||
<asp:Panel ID="Panel1" runat="server" DefaultButton="sqlrun" role="form"
|
||||
CssClass="card-body">
|
||||
<asp:TextBox ID="sqltxt" runat="server" CssClass="form-control" Style="margin-bottom: 10px"></asp:TextBox>
|
||||
<asp:Button ID="sqlrun" runat="server" Text="執行" OnClick="sqlrun_Click" CssClass="btn btn-outline-primary" />
|
||||
</asp:Panel>
|
||||
</div>
|
||||
</asp:PlaceHolder>
|
||||
</div>
|
||||
<div id="content" class="container-fluid">
|
||||
<div class="card shadow-sm my-3">
|
||||
<div class="card-header">
|
||||
示範區段標題
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-form-label">* 欄位名稱</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="type" name="name" value="" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-form-label">* 欄位名稱</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="type" name="name" value="" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1 gy-2 gy-sm-3">
|
||||
<label class="col-sm-2 col-form-label">* 欄位名稱</label>
|
||||
<div class="col-sm-10 col-lg-4">
|
||||
<input type="type" name="name" value="" class="form-control"/>
|
||||
</div>
|
||||
<label class="col-sm-2 col-form-label">* 欄位名稱</label>
|
||||
<div class="col-sm-10 col-lg-4">
|
||||
<input type="type" name="name" value="" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-top p-2">
|
||||
<button type="button" class="btn btn-primary">按鈕文字</button>
|
||||
<button type="button" class="btn btn-secondary">按鈕文字</button>
|
||||
<button type="button" class="btn btn-success">按鈕文字</button>
|
||||
<button type="button" class="btn btn-danger">按鈕文字</button>
|
||||
<button type="button" class="btn btn-warning">按鈕文字</button>
|
||||
<button type="button" class="btn btn-info">按鈕文字</button>
|
||||
<button type="button" class="btn btn-light">按鈕文字</button>
|
||||
<button type="button" class="btn btn-dark">按鈕文字</button>
|
||||
<button type="button" class="btn btn-link">按鈕文字</button>
|
||||
</div>
|
||||
<div class="border-top p-2">
|
||||
<button type="button" class="btn btn-outline-primary">按鈕文字</button>
|
||||
<button type="button" class="btn btn-outline-secondary">按鈕文字</button>
|
||||
<button type="button" class="btn btn-outline-success">按鈕文字</button>
|
||||
<button type="button" class="btn btn-outline-danger">按鈕文字</button>
|
||||
<button type="button" class="btn btn-outline-warning">按鈕文字</button>
|
||||
<button type="button" class="btn btn-outline-info">按鈕文字</button>
|
||||
<button type="button" class="btn btn-outline-light">按鈕文字</button>
|
||||
<button type="button" class="btn btn-outline-dark">按鈕文字</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<div class="card shadow-sm my-2" id="sec1">
|
||||
<div class="card-header">Card Header</div>
|
||||
<div class="card-body">
|
||||
Card Body
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<div class="card shadow-sm my-2" id="sec2">
|
||||
<div class="card-header py-0">
|
||||
<nav class="navbar py-0">
|
||||
<div class="nav nav-tabs">
|
||||
<button class="nav-link active" id="sec2-tab1" data-bs-toggle="tab" data-bs-target="#sec2-page1"
|
||||
type="button" role="tab" aria-controls="home" aria-selected="true">頁籤一</button>
|
||||
<button class="nav-link" id="sec2-tab2" data-bs-toggle="tab" data-bs-target="#sec2-page2"
|
||||
type="button" role="tab" aria-controls="profile" aria-selected="false">頁籤二</button>
|
||||
<button class="nav-link" id="sec2-tab3" data-bs-toggle="tab" data-bs-target="#sec2-page3"
|
||||
type="button" role="tab" aria-controls="contact" aria-selected="false">頁籤三</button>
|
||||
</div>
|
||||
<div>
|
||||
<a href="#" class="btn btn-primary btn-sm">OK</a>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="tab-content" id="myTabContent">
|
||||
<div class="tab-pane fade show active" id="sec2-page1" role="tabpanel" aria-labelledby="sec2-tab1">
|
||||
<h4>Home</h4>
|
||||
<p>is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="sec2-page2" role="tabpanel" aria-labelledby="sec2-tab2">
|
||||
<h4>Profile</h4>
|
||||
<p>is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="sec2-page3" role="tabpanel" aria-labelledby="sec2-tab3">
|
||||
<h4>Contact</h4>
|
||||
<p>is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</asp:Content>
|
||||
|
||||
212
web/admin/item/setting.aspx.cs
Normal file
212
web/admin/item/setting.aspx.cs
Normal file
@@ -0,0 +1,212 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.OleDb;
|
||||
using System.Web;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Configuration;
|
||||
|
||||
public partial class admin_item_setting : MyWeb.config
|
||||
{
|
||||
|
||||
MyWeb.encrypt encrypt = new MyWeb.encrypt();
|
||||
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!IsPostBack) {
|
||||
|
||||
MyWeb.sql sql = new MyWeb.sql();
|
||||
DataTable dt = sql.selectTable(db, p_name, "Select * from company where num=1");
|
||||
|
||||
if (dt.Rows.Count > 0) {
|
||||
com_name.Text = dt.Rows[0]["com_name"].ToString();
|
||||
email.Text = dt.Rows[0]["com_mail"].ToString();
|
||||
bcc_mail.Text = dt.Rows[0]["bcc_mail"].ToString();
|
||||
pic_url.Text = dt.Rows[0]["pic_url"].ToString();
|
||||
|
||||
smtp_url.Text = dt.Rows[0]["smtp_url"].ToString();
|
||||
smtp_port.Text = dt.Rows[0]["smtp_port"].ToString();
|
||||
smtp_ssl.Checked = (dt.Rows[0]["smtp_ssl"].ToString() == "Y" ? true : false);
|
||||
use_sender.Checked = (dt.Rows[0]["use_sender"].ToString() == "Y" ? true : false);
|
||||
smtp_user.Text = dt.Rows[0]["smtp_user"].ToString();
|
||||
if (!isStrNull(dt.Rows[0]["smtp_password"]))
|
||||
smtp_password.Text = encrypt.DecryptAutoKey(dt.Rows[0]["smtp_password"].ToString());
|
||||
smtp_def.SelectedValue = dt.Rows[0]["smtp_def"].ToString();
|
||||
|
||||
menu.Checked = (bool)dt.Rows[0]["menu"];
|
||||
log_class.Checked = (bool)dt.Rows[0]["log_class"];
|
||||
if (dt.Rows[0]["log_menu"]!=null){
|
||||
string log_menu="," + dt.Rows[0]["log_menu"].ToString();
|
||||
for (int i=0; i<shop_kind1.Items.Count;i++){
|
||||
string value="," + shop_kind1.Items[i].Value + ",";
|
||||
if (log_menu.IndexOf(value,0)>-1){
|
||||
shop_kind1.Items[i].Selected=true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (ValString(admin.info.group) == "EZ")
|
||||
{
|
||||
PlaceHolder1.Visible = true;
|
||||
PlaceHolder2.Visible = true;
|
||||
}
|
||||
|
||||
}
|
||||
smtp_password.Attributes.Add("value", smtp_password.Text);
|
||||
}
|
||||
|
||||
protected void Button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
mailtest.Text = "";
|
||||
L_msg.Text = "";
|
||||
|
||||
MyWeb.sql sql = new MyWeb.sql();
|
||||
OleDbConnection sqlConn = sql.conn(db, p_name);
|
||||
try{
|
||||
|
||||
sqlConn.Open();
|
||||
UpdateSetOptions(sqlConn);
|
||||
ScriptMsgTop("操作成功!", msgIcon.success);
|
||||
//L_msg.Text = "設定資料變更完成!";
|
||||
}catch (Exception ex){
|
||||
ScriptMsgTop("操作失敗!", msgIcon.error);
|
||||
L_msg.Type = alert_type.danger;
|
||||
L_msg.Text = ex.Message;
|
||||
}finally{
|
||||
sqlConn.Close(); sqlConn.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
protected void UpdateSetOptions(OleDbConnection sqlConn)
|
||||
{
|
||||
string log_menu = "";
|
||||
for (int i = 0; i < shop_kind1.Items.Count; i++)
|
||||
{
|
||||
string value = "," + shop_kind1.Items[i].Value + ",";
|
||||
if (shop_kind1.Items[i].Selected)
|
||||
{
|
||||
shop_kind1.Items[i].Selected = true;
|
||||
log_menu = log_menu + shop_kind1.Items[i].Value + ",";
|
||||
}
|
||||
}
|
||||
|
||||
MyWeb.sql sql = new MyWeb.sql();
|
||||
string cu = "com_name,com_mail,bcc_mail,pic_url,menu,log_class,log_menu,smtp_url,smtp_port,smtp_ssl,use_sender,smtp_user,smtp_password,smtp_def";
|
||||
|
||||
OleDbCommand sqlCmd = new OleDbCommand("", sqlConn);
|
||||
sqlCmd.CommandText = "UPDATE company SET " + sql.mark2(cu) + " WHERE num=1";
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("com_name", com_name.Text.Trim()));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("com_mail", email.Text.Trim()));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("bcc_mail", bcc_mail.Text.Trim()));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("pic_url", pic_url.Text.Trim()));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("menu", (menu.Checked ? 1 : 0)));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("log_class", (log_class.Checked ? 1 : 0)));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("log_menu", log_menu));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("smtp_url", smtp_url.Text.Trim()));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("smtp_port", smtp_port.Text.Trim()));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("smtp_ssl", (smtp_ssl.Checked ? "Y" : "N")));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("use_sender", (use_sender.Checked ? "Y" : "N")));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("smtp_user", smtp_user.Text.Trim()));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("smtp_password", !isStrNull(smtp_password.Text.Trim()) ? encrypt.EncryptAutoKey(smtp_password.Text.Trim()) : (object)DBNull.Value));
|
||||
sqlCmd.Parameters.Add(new OleDbParameter("smtp_def", smtp_def.SelectedValue));
|
||||
sqlCmd.ExecuteNonQuery();
|
||||
|
||||
HttpContext.Current.Application[scc + "WebInfo"] = null;
|
||||
}
|
||||
|
||||
protected void Button2_Click(object sender, EventArgs e)
|
||||
{
|
||||
Response.Redirect("~/admin/index2.aspx");
|
||||
}
|
||||
|
||||
protected void sqlrun_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
if (this.sqltxt.Text == null)
|
||||
{
|
||||
ScriptMsg("請填寫sql指令", "", msgIcon.warning);
|
||||
}
|
||||
else {
|
||||
OleDbCommand cmd;
|
||||
OleDbConnection conn = new OleDbConnection(db);
|
||||
try{
|
||||
conn.Open();
|
||||
cmd = new OleDbCommand(sqltxt.Text, conn);
|
||||
cmd.ExecuteNonQuery();
|
||||
ScriptMsg("執行成功!", "", msgIcon.success);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ScriptMsg("執行失敗!", "", msgIcon.error);
|
||||
}
|
||||
finally
|
||||
{
|
||||
conn.Close();
|
||||
conn.Dispose();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
#region 寄件測試
|
||||
|
||||
protected void mailsend_Click(object sender, EventArgs e)
|
||||
{
|
||||
mailtest.Text = ""; mailtest.ForeColor = System.Drawing.Color.Red;
|
||||
MyWeb.sql sql = new MyWeb.sql();
|
||||
OleDbConnection sqlConn = sql.conn(db, p_name);
|
||||
try
|
||||
{
|
||||
|
||||
sqlConn.Open();
|
||||
UpdateSetOptions(sqlConn);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
mailtest.Text = ex.Message;
|
||||
}
|
||||
finally
|
||||
{
|
||||
sqlConn.Close();
|
||||
sqlConn.Dispose();
|
||||
}
|
||||
|
||||
MyWeb.company company = new MyWeb.company();
|
||||
|
||||
string mailSubject = company.name + "【信件發送測試】";
|
||||
string Detail = "<table width='650' border='1' align='center' cellpadding='0' cellspacing='0' bordercolorlight='#CCCCCC' bordercolordark='#FFFFFF'>";
|
||||
Detail += "<tr><td bgcolor='#a9c95a' height='30'><div align='center'><font color='#FFFFFF' size='2'>信件發送測試</font></div></td></tr>";
|
||||
Detail += "<tr><td>";
|
||||
Detail += "<table width='90%' border='0' align='center' cellpadding='0' cellspacing='0'>";
|
||||
Detail += "<tr><td><font color='#333333' size='2'>親愛的管理者您好:<br>如果您收到這封信代表您網站的SMTP設定正確!</font></td></tr>";
|
||||
Detail += "<tr><td>此信為系統自動發送,請勿回覆,謝謝!";
|
||||
Detail += "</td></tr></table>";
|
||||
Detail += "</td></tr></table>";
|
||||
|
||||
//寄給管理者和BCC
|
||||
MyWeb.emailSystem emailSystem = new MyWeb.emailSystem();
|
||||
if (emailSystem.send(company.email, company.bcc, company.name + "<" + company.email + ">", mailSubject, Detail))
|
||||
{
|
||||
ScriptMsgTop("寄出成功!", msgIcon.success);
|
||||
mailtest.ForeColor = System.Drawing.Color.Green;
|
||||
}
|
||||
else
|
||||
{
|
||||
ScriptMsgTop("寄出失敗!", msgIcon.error);
|
||||
mailtest.Text = emailSystem.log;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user