forked from dk96/QuotationMaker
updates
parent
ee7984a6c1
commit
2fe6d5c533
|
|
@ -47,7 +47,7 @@ namespace QuotationMaker.Controllers
|
||||||
string contactPerson_name = obj["contactPerson_name"].ToString();
|
string contactPerson_name = obj["contactPerson_name"].ToString();
|
||||||
string contactPerson_email = obj["contactPerson_email"].ToString();
|
string contactPerson_email = obj["contactPerson_email"].ToString();
|
||||||
string contactPerson_tel = obj["contactPerson_tel"].ToString();
|
string contactPerson_tel = obj["contactPerson_tel"].ToString();
|
||||||
|
string contactPerson_fax = obj["contactPerson_fax"].ToString();
|
||||||
string method = obj["method"].ToString();
|
string method = obj["method"].ToString();
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -83,6 +83,7 @@ namespace QuotationMaker.Controllers
|
||||||
|
|
||||||
newItem.contactPerson_tel = contactPerson_tel;
|
newItem.contactPerson_tel = contactPerson_tel;
|
||||||
newItem.contactPerson_email = contactPerson_email;
|
newItem.contactPerson_email = contactPerson_email;
|
||||||
|
newItem.contactPerson_fax = contactPerson_fax;
|
||||||
|
|
||||||
newItem.contactPerson_lastmodify_uid = token.user_uid;
|
newItem.contactPerson_lastmodify_uid = token.user_uid;
|
||||||
newItem.contactPerson_createdate = DateTime.Now;
|
newItem.contactPerson_createdate = DateTime.Now;
|
||||||
|
|
@ -132,6 +133,7 @@ namespace QuotationMaker.Controllers
|
||||||
|
|
||||||
editItem.contactPerson_tel = contactPerson_tel;
|
editItem.contactPerson_tel = contactPerson_tel;
|
||||||
editItem.contactPerson_email = contactPerson_email;
|
editItem.contactPerson_email = contactPerson_email;
|
||||||
|
editItem.contactPerson_fax = contactPerson_fax;
|
||||||
|
|
||||||
editItem.contactPerson_lastmodify_uid = token.user_uid;
|
editItem.contactPerson_lastmodify_uid = token.user_uid;
|
||||||
editItem.contactPerson_modifydate = DateTime.Now;
|
editItem.contactPerson_modifydate = DateTime.Now;
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,172 @@ namespace QuotationMaker.Controllers
|
||||||
this._httpContextAccessor = httpContextAccessor;
|
this._httpContextAccessor = httpContextAccessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Route("addEditDelGetModelProj")]
|
||||||
|
public ActionResult AddEditDelGetModelProj(IFormCollection obj) {
|
||||||
|
modelProjListResult ret = new modelProjListResult();
|
||||||
|
|
||||||
|
authToken token = new authToken(this._httpContextAccessor);
|
||||||
|
if (token.user_isLogin == false)
|
||||||
|
{
|
||||||
|
HttpContext.Response.Cookies.Delete("token_key");
|
||||||
|
ret.ret = "no";
|
||||||
|
ret.err_code = "99999";
|
||||||
|
ret.message = "非登入狀態!";
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (token.user_perm != "system")
|
||||||
|
{
|
||||||
|
ret.ret = "no";
|
||||||
|
ret.err_code = "90001";
|
||||||
|
ret.message = "此帳號無此api使用權限!";
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
string modelProj_uid = obj["modelProj_uid"].ToString();
|
||||||
|
string modelProj_name = obj["modelProj_name"].ToString();
|
||||||
|
string method = obj["method"].ToString();
|
||||||
|
string dept_uid = obj["dept_uid"].ToString();
|
||||||
|
|
||||||
|
if (method == "")
|
||||||
|
{
|
||||||
|
ret.ret = "no";
|
||||||
|
ret.err_code = "0001";
|
||||||
|
ret.message = "沒有method!";
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (dept_uid.Trim() == "")
|
||||||
|
{
|
||||||
|
ret.ret = "no";
|
||||||
|
ret.err_code = "0003";
|
||||||
|
ret.message = "沒有dept_uid!";
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (method == "add")
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
modelProj_uid = GlobalClass.CreateRandomCode(24);
|
||||||
|
modelProj newItem = new modelProj();
|
||||||
|
newItem.modelProj_name = modelProj_name;
|
||||||
|
newItem.dept_uid = dept_uid;
|
||||||
|
newItem.modelProj_uid = modelProj_uid;
|
||||||
|
|
||||||
|
|
||||||
|
newItem.modelProj_lastmodify_uid = token.user_uid;
|
||||||
|
newItem.modelProj_createdate = DateTime.Now;
|
||||||
|
newItem.modelProj_modifydate = DateTime.Now;
|
||||||
|
newItem.modelProj_isdel = "N";
|
||||||
|
|
||||||
|
conn.Insert(newItem);
|
||||||
|
ret.modelProjs.Add(newItem);
|
||||||
|
ret.ret = "yes";
|
||||||
|
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modelProj_uid.Trim() == "")
|
||||||
|
{
|
||||||
|
ret.ret = "no";
|
||||||
|
ret.err_code = "0002";
|
||||||
|
ret.message = "沒有modelProj_uid!";
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
modelProj editItem = conn.QueryFirstOrDefault<modelProj>("select * from modelProj where modelProj_isdel = 'N' and modelProj_uid = @modelProj_uid ", new { modelProj_uid = modelProj_uid });
|
||||||
|
|
||||||
|
if (editItem == null)
|
||||||
|
{
|
||||||
|
ret.ret = "no";
|
||||||
|
ret.err_code = "0004";
|
||||||
|
ret.message = "沒有modelProj_uid此筆資料!";
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (method == "edit")
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
if (modelProj_name.Trim() == "")
|
||||||
|
{
|
||||||
|
ret.ret = "no";
|
||||||
|
ret.err_code = "0002";
|
||||||
|
ret.message = "沒有modelProj_name!";
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
editItem.modelProj_name = modelProj_name;
|
||||||
|
|
||||||
|
|
||||||
|
editItem.modelProj_lastmodify_uid = token.user_uid;
|
||||||
|
editItem.modelProj_modifydate = DateTime.Now;
|
||||||
|
editItem.dept_uid = dept_uid;
|
||||||
|
|
||||||
|
conn.Update(editItem);
|
||||||
|
ret.modelProjs.Add(editItem);
|
||||||
|
ret.ret = "yes";
|
||||||
|
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (method == "get")
|
||||||
|
{
|
||||||
|
ret.modelProjs.Add(editItem);
|
||||||
|
ret.ret = "yes";
|
||||||
|
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (method == "del")
|
||||||
|
{
|
||||||
|
editItem.modelProj_isdel= "Y";
|
||||||
|
|
||||||
|
|
||||||
|
editItem.modelProj_lastmodify_uid = token.user_uid;
|
||||||
|
editItem.modelProj_modifydate = DateTime.Now;
|
||||||
|
|
||||||
|
conn.Update(editItem);
|
||||||
|
ret.ret = "yes";
|
||||||
|
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Route("authModalProjList")]
|
||||||
|
public ActionResult AuthModalProjList(IFormCollection obj) {
|
||||||
|
modelProjListResult ret = new modelProjListResult();
|
||||||
|
|
||||||
|
authToken token = new authToken(this._httpContextAccessor);
|
||||||
|
if (token.user_isLogin == false)
|
||||||
|
{
|
||||||
|
HttpContext.Response.Cookies.Delete("token_key");
|
||||||
|
ret.ret = "no";
|
||||||
|
ret.err_code = "99999";
|
||||||
|
ret.message = "非登入狀態!";
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (token.user_perm != "system")
|
||||||
|
{
|
||||||
|
ret.ret = "no";
|
||||||
|
ret.err_code = "90001";
|
||||||
|
ret.message = "此帳號無此api使用權限!";
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
string dept_uid = obj["dept_uid"].ToString();
|
||||||
|
|
||||||
|
ret.modelProjs = conn.Query<modelProj>("select * from modelProj where modelProj_isdel = 'N' and dept_uid = @dept_uid", new { dept_uid = dept_uid}).ToList();
|
||||||
|
ret.ret = "yes";
|
||||||
|
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
[Route("addEditDelGetSubItem")]
|
[Route("addEditDelGetSubItem")]
|
||||||
public ActionResult AddEditDelSubItem(IFormCollection obj) {
|
public ActionResult AddEditDelSubItem(IFormCollection obj) {
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,22 @@ namespace QuotationMaker.Controllers
|
||||||
this._objToken = new authToken(this._httpContextAccessor);
|
this._objToken = new authToken(this._httpContextAccessor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IActionResult ModalList()
|
||||||
|
{
|
||||||
|
if (checkToken() == false)
|
||||||
|
{
|
||||||
|
HttpContext.Response.Cookies.Delete("token_key");
|
||||||
|
return Redirect("~/Home/Login");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._objToken.user_perm != "system")
|
||||||
|
{
|
||||||
|
return Redirect("~/");
|
||||||
|
}
|
||||||
|
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
public IActionResult Login()
|
public IActionResult Login()
|
||||||
{
|
{
|
||||||
return View();
|
return View();
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,79 @@ using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Org.BouncyCastle.Bcpg.OpenPgp;
|
||||||
|
|
||||||
public class DbTableClass
|
public class DbTableClass
|
||||||
{
|
{
|
||||||
|
[Table("modelSubItem")]
|
||||||
|
public class modelSubItem
|
||||||
|
{
|
||||||
|
[JsonIgnore]
|
||||||
|
[Key]
|
||||||
|
public int modelSubItem_sn { get; set; }
|
||||||
|
public string modelSubItem_uid { get; set; } = "";
|
||||||
|
public string modelMainItem_uid { get; set; } = "";
|
||||||
|
public string subItem_uid { get; set; } = "";
|
||||||
|
public string modelSubItem_name { get; set; } = "";
|
||||||
|
public string modelSubItem_descript { get; set; } = "";
|
||||||
|
public double modelSubItem_price { get; set; } = 0.0;
|
||||||
|
public string modelSubItem_unitType { get; set; } = "";
|
||||||
|
public DateTime modelSubItem_createdate { get; set; } = DateTime.Now;
|
||||||
|
public DateTime modelSubItem_modifydate { get; set; } = DateTime.Now;
|
||||||
|
public string modelSubItem_lastModify_uid { get; set; } = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[Table("modelMainItem")]
|
||||||
|
public class modelMainItem
|
||||||
|
{
|
||||||
|
[JsonIgnore]
|
||||||
|
[Key]
|
||||||
|
public int modelMainItem_sn { get; set; }
|
||||||
|
public string modelMainItem_uid { get; set; } = "";
|
||||||
|
public string modelQuotation_uid { get; set; } = "";
|
||||||
|
public string mainItem_uid { get; set; } = "";
|
||||||
|
public string modelMainItem_name { get; set; } = "";
|
||||||
|
public DateTime modelMainItem_createdate { get; set; } = DateTime.Now;
|
||||||
|
public DateTime modelMainItem_modifydate { get; set; } = DateTime.Now;
|
||||||
|
public string modelMainItem_lastModify_uid { get; set; } = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
[Table("modelQuotation")]
|
||||||
|
public class modelQuotation
|
||||||
|
{
|
||||||
|
[JsonIgnore]
|
||||||
|
[Key]
|
||||||
|
public int modelQuotation_sn { get; set; }
|
||||||
|
public string modelQuotation_uid { get; set; } = "";
|
||||||
|
public string dept_uid { get; set; } = "";
|
||||||
|
public string modelProj_uid { get; set; } = "";
|
||||||
|
public string modelQuotation_name { get; set; } = "";
|
||||||
|
public string company_uid { get; set; } = "";
|
||||||
|
public string contactPerson_uid { get; set; } = "";
|
||||||
|
public DateTime modelQuotation_createdate { get; set; } = DateTime.Now;
|
||||||
|
public DateTime modelQuotation_modifydate { get; set; } = DateTime.Now;
|
||||||
|
public string modelQuotation_lastmodify_uid { get; set; } = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[Table("modelProj")]
|
||||||
|
public class modelProj
|
||||||
|
{
|
||||||
|
[JsonIgnore]
|
||||||
|
[Key]
|
||||||
|
public int modelProj_sn { get; set; }
|
||||||
|
public string dept_uid { get; set; } = "";
|
||||||
|
public string modelProj_uid { get; set; } = "";
|
||||||
|
public string modelProj_name { get; set; } = "";
|
||||||
|
public DateTime modelProj_createdate { get; set; } = DateTime.Now;
|
||||||
|
public DateTime modelProj_modifydate { get; set; } = DateTime.Now;
|
||||||
|
public string modelProj_lastmodify_uid { get; set; } = "";
|
||||||
|
public string modelProj_isdel { get; set; } = "";
|
||||||
|
}
|
||||||
|
|
||||||
[Table("contactPerson")]
|
[Table("contactPerson")]
|
||||||
public class contactPerson
|
public class contactPerson
|
||||||
{
|
{
|
||||||
|
|
@ -19,6 +89,8 @@ public class DbTableClass
|
||||||
public string contactPerson_name { get; set; } = "";
|
public string contactPerson_name { get; set; } = "";
|
||||||
public string contactPerson_email { get; set; } = "";
|
public string contactPerson_email { get; set; } = "";
|
||||||
public string contactPerson_tel { get; set; } = "";
|
public string contactPerson_tel { get; set; } = "";
|
||||||
|
|
||||||
|
public string contactPerson_fax { get; set; } = "";
|
||||||
public string contactPerson_isdel { get; set; } = "N";
|
public string contactPerson_isdel { get; set; } = "N";
|
||||||
public DateTime contactPerson_createdate { get; set; } = DateTime.Now;
|
public DateTime contactPerson_createdate { get; set; } = DateTime.Now;
|
||||||
public DateTime contactPerson_modifydate { get; set; } = DateTime.Now;
|
public DateTime contactPerson_modifydate { get; set; } = DateTime.Now;
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,14 @@ using Dapper;
|
||||||
using static DbTableClass;
|
using static DbTableClass;
|
||||||
public class resultClass
|
public class resultClass
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public class modelProjListResult
|
||||||
|
{
|
||||||
|
public string ret = "no";
|
||||||
|
public string err_code = "0000";
|
||||||
|
public string message = "";
|
||||||
|
public List<modelProj> modelProjs = new List<modelProj>();
|
||||||
|
}
|
||||||
public class contactPersonListResult
|
public class contactPersonListResult
|
||||||
{
|
{
|
||||||
public string ret = "no";
|
public string ret = "no";
|
||||||
|
|
|
||||||
|
|
@ -150,6 +150,7 @@
|
||||||
<th> 姓名 </th>
|
<th> 姓名 </th>
|
||||||
<th> Email </th>
|
<th> Email </th>
|
||||||
<th> 電話 </th>
|
<th> 電話 </th>
|
||||||
|
<th> 傳真 </th>
|
||||||
<th style="width: 25px;"> </th>
|
<th style="width: 25px;"> </th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
@ -208,7 +209,12 @@
|
||||||
<input type="text" id="modal_contactPerson_tel" class="form-control" value="" placeholder="電話" maxlength="20" required=""> <label for="modal_contactPerson_tel">電話</label>
|
<input type="text" id="modal_contactPerson_tel" class="form-control" value="" placeholder="電話" maxlength="20" required=""> <label for="modal_contactPerson_tel">電話</label>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /.form-group -->
|
</div><!-- /.form-group -->
|
||||||
|
<!-- .form-group -->
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="form-label-group">
|
||||||
|
<input type="text" id="modal_contactPerson_fax" class="form-control" value="" placeholder="傳真" maxlength="20" required=""> <label for="modal_contactPerson_fax">傳真</label>
|
||||||
|
</div>
|
||||||
|
</div><!-- /.form-group -->
|
||||||
</div><!-- /.modal-body -->
|
</div><!-- /.modal-body -->
|
||||||
<!-- .modal-footer -->
|
<!-- .modal-footer -->
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,114 @@
|
||||||
|
@*
|
||||||
|
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
|
||||||
|
*@
|
||||||
|
@{
|
||||||
|
Layout = "_LooperLayout";
|
||||||
|
}
|
||||||
|
|
||||||
|
@section Style {
|
||||||
|
<link rel="stylesheet" href="~/assets/vendor/datatables.net-responsive-bs4/css/responsive.bootstrap4.min.css">
|
||||||
|
}
|
||||||
|
@section Script {
|
||||||
|
<script src="~/assets/vendor/datatables.net/js/jquery.dataTables.min.js"></script>
|
||||||
|
<script src="~/assets/vendor/datatables.net-responsive/js/dataTables.responsive.min.js"></script>
|
||||||
|
<script src="~/assets/vendor/datatables.net-responsive-bs4/js/responsive.bootstrap4.min.js"></script>
|
||||||
|
<script src="~/assets/javascript/pages/dataTables.bootstrap.js"></script>
|
||||||
|
<script src="~/assets/javascript/custom/modallist.js" asp-append-version="true"></script>
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="page-inner">
|
||||||
|
<!-- .page-title-bar -->
|
||||||
|
<header class="page-title-bar">
|
||||||
|
<!-- .breadcrumb -->
|
||||||
|
<nav aria-label="breadcrumb">
|
||||||
|
<ol class="breadcrumb">
|
||||||
|
<li class="breadcrumb-item active">
|
||||||
|
<a href="#"><i class="breadcrumb-icon fa fa-angle-left mr-2"></i>主項目清單</a>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</nav><!-- /.breadcrumb -->
|
||||||
|
<!-- title -->
|
||||||
|
<h1 class="page-title"> 主項目清單 </h1>
|
||||||
|
<p class="text-muted"> </p><!-- /title -->
|
||||||
|
</header><!-- /.page-title-bar -->
|
||||||
|
<!-- .page-section -->
|
||||||
|
<div class="page-section">
|
||||||
|
<button type="button" id="modelProjNewBtn" class="btn btn-primary btn-floated position-absolute" title="Add new client"><i class="fa fa-plus"></i></button>
|
||||||
|
<!-- .card -->
|
||||||
|
<div class="card card-fluid">
|
||||||
|
<!-- .card-body -->
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="col-md-3">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="dept_select">單位</label>
|
||||||
|
<select class="custom-select custom-select-sm" id="dept_select" name="dept_select" required="">
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-2">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="search_btn" style="display: block;"> </label>
|
||||||
|
<button type="button" class="btn btn-info btn-sm" id="search_btn">切換單位</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div><!-- /.card-body -->
|
||||||
|
</div><!-- /.card -->
|
||||||
|
<!-- .card -->
|
||||||
|
<div class="card card-fluid">
|
||||||
|
<!-- .card-body -->
|
||||||
|
<div class="card-body">
|
||||||
|
<!-- .table -->
|
||||||
|
<table id="dt-responsive" class="table dt-responsive nowrap w-100">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th> 專案類型 </th>
|
||||||
|
<th> 建立時間 </th>
|
||||||
|
<th> 功能 </th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
</table><!-- /.table -->
|
||||||
|
</div><!-- /.card-body -->
|
||||||
|
</div><!-- /.card -->
|
||||||
|
</div><!-- /.page-section -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- .modal -->
|
||||||
|
<form id="clientModelProjForm" name="clientModelProjForm">
|
||||||
|
<div class="modal fade" id="modelProjModal" tabindex="-1" role="dialog" aria-labelledby="modelProjModalLabel" data-backdrop="static"
|
||||||
|
data-keyboard="false" aria-hidden="true">
|
||||||
|
<!-- .modal-dialog -->
|
||||||
|
<div class="modal-dialog" role="document">
|
||||||
|
<!-- .modal-content -->
|
||||||
|
<div class="modal-content">
|
||||||
|
<!-- .modal-header -->
|
||||||
|
<div class="modal-header">
|
||||||
|
<h6 id="modelProjModalLabel" class="modal-title inline-editable">
|
||||||
|
<span class="sr-only">專案類型</span> <input id="group_content" type="text" class="form-control form-control-lg" value="" placeholder="專案類型" readonly="readonly " required="">
|
||||||
|
</h6>
|
||||||
|
</div><!-- /.modal-header -->
|
||||||
|
<!-- .modal-body -->
|
||||||
|
<div class="modal-body">
|
||||||
|
<input type="hidden" id="modelProj_method" />
|
||||||
|
<input type="hidden" id="modelProj_uid" />
|
||||||
|
<input type="hidden" id="dept_uid" />
|
||||||
|
<!-- .form-group -->
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="form-label-group">
|
||||||
|
<input type="text" id="modelProj_name" class="form-control" value="" placeholder="專案類型名稱" maxlength="12" required=""> <label for="modelProj_name">專案類型名稱</label>
|
||||||
|
</div>
|
||||||
|
</div><!-- /.form-group -->
|
||||||
|
|
||||||
|
</div><!-- /.modal-body -->
|
||||||
|
<!-- .modal-footer -->
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" id="modelProjDialogSaveBtn" class="btn btn-primary">Save</button> <button type="button" class="btn btn-light" data-dismiss="modal" data-target="#modelProjModal">Close</button>
|
||||||
|
</div><!-- /.modal-footer -->
|
||||||
|
</div><!-- /.modal-content -->
|
||||||
|
</div><!-- /.modal-dialog -->
|
||||||
|
</div>
|
||||||
|
</form><!-- /.modal -->
|
||||||
|
|
||||||
|
|
@ -139,6 +139,9 @@
|
||||||
<li class="menu-item has-child" id="authMenu" style='@ViewData["authMenu"]'>
|
<li class="menu-item has-child" id="authMenu" style='@ViewData["authMenu"]'>
|
||||||
<a href="#" class="menu-link"><span class="menu-icon oi oi-wrench"></span> <span class="menu-text">Auth</span></a> <!-- child menu -->
|
<a href="#" class="menu-link"><span class="menu-icon oi oi-wrench"></span> <span class="menu-text">Auth</span></a> <!-- child menu -->
|
||||||
<ul class="menu">
|
<ul class="menu">
|
||||||
|
<li class="menu-item">
|
||||||
|
<a href="~/Home/ModalList" class="menu-link">報價範本管理</a>
|
||||||
|
</li>
|
||||||
<li class="menu-item">
|
<li class="menu-item">
|
||||||
<a href="~/Home/RateList" class="menu-link">報價項目管理</a>
|
<a href="~/Home/RateList" class="menu-link">報價項目管理</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,7 @@ $(document).ready(function () {
|
||||||
var contactPerson_name = $('#modal_contactPerson_name').val();
|
var contactPerson_name = $('#modal_contactPerson_name').val();
|
||||||
var contactPerson_email = $('#modal_contactPerson_email').val();
|
var contactPerson_email = $('#modal_contactPerson_email').val();
|
||||||
var contactPerson_tel = $('#modal_contactPerson_tel').val();
|
var contactPerson_tel = $('#modal_contactPerson_tel').val();
|
||||||
|
var contactPerson_fax = $('#modal_contactPerson_fax').val();
|
||||||
|
|
||||||
var msg = '';
|
var msg = '';
|
||||||
|
|
||||||
|
|
@ -106,7 +107,8 @@ $(document).ready(function () {
|
||||||
method: method,
|
method: method,
|
||||||
contactPerson_name: contactPerson_name,
|
contactPerson_name: contactPerson_name,
|
||||||
contactPerson_email: contactPerson_email,
|
contactPerson_email: contactPerson_email,
|
||||||
contactPerson_tel: contactPerson_tel
|
contactPerson_tel: contactPerson_tel,
|
||||||
|
contactPerson_fax: contactPerson_fax
|
||||||
}
|
}
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
|
@ -548,6 +550,7 @@ function loadSubItemDataTable() {
|
||||||
{ data: 'contactPerson_name', className: 'align-top text-left', orderable: true, searchable: true },
|
{ data: 'contactPerson_name', className: 'align-top text-left', orderable: true, searchable: true },
|
||||||
{ data: 'contactPerson_email', className: 'align-top text-right', orderable: true, searchable: true },
|
{ data: 'contactPerson_email', className: 'align-top text-right', orderable: true, searchable: true },
|
||||||
{ data: 'contactPerson_tel', className: 'align-top text-right', orderable: true, searchable: true },
|
{ data: 'contactPerson_tel', className: 'align-top text-right', orderable: true, searchable: true },
|
||||||
|
{ data: 'contactPerson_fax', className: 'align-top text-right', orderable: true, searchable: true },
|
||||||
{ data: 'contactPerson_uid', className: 'align-top text-center', orderable: false, searchable: false }
|
{ data: 'contactPerson_uid', className: 'align-top text-center', orderable: false, searchable: false }
|
||||||
],
|
],
|
||||||
columnDefs: [
|
columnDefs: [
|
||||||
|
|
@ -564,7 +567,7 @@ function loadSubItemDataTable() {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
targets: 3,
|
targets: 4,
|
||||||
className: 'align-middle text-center',
|
className: 'align-middle text-center',
|
||||||
orderable: false,
|
orderable: false,
|
||||||
searchable: false,
|
searchable: false,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,374 @@
|
||||||
|
var modelProjTable;
|
||||||
|
var modelProjRowPos;
|
||||||
|
var modelProjRowID;
|
||||||
|
$(document).ready(function () {
|
||||||
|
deptList();
|
||||||
|
|
||||||
|
$('#modelProjNewBtn').on('click', function () {
|
||||||
|
$("#modelProj_method").val('add');
|
||||||
|
$("#dept_uid").val($("#dept_select").val()).trigger('change');
|
||||||
|
|
||||||
|
|
||||||
|
$('#modelProjModal').modal('toggle');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#search_btn').on('click', function () {
|
||||||
|
$('#dt-responsive').DataTable().ajax.reload();
|
||||||
|
});
|
||||||
|
|
||||||
|
//專案類型對話框儲存鈕
|
||||||
|
$('#modelProjDialogSaveBtn').on('click', function () {
|
||||||
|
var errmsg = '';
|
||||||
|
var method = $('#modelProj_method').val();
|
||||||
|
var modelProj_uid = $('#modelProj_uid').val();
|
||||||
|
var dept_uid = $('#dept_uid').val();
|
||||||
|
var modelProj_name = $('#modelProj_name').val();
|
||||||
|
|
||||||
|
if (modelProj_name == '') {
|
||||||
|
alert('請輸入專案類型名稱!\n');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var formData = {
|
||||||
|
method: method,
|
||||||
|
modelProj_uid: modelProj_uid,
|
||||||
|
modelProj_name: modelProj_name,
|
||||||
|
dept_uid: dept_uid
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: "/AuthApi/addEditDelGetModelProj",
|
||||||
|
type: "post",
|
||||||
|
data: formData,
|
||||||
|
success: function (data, textStatus, jqXHR) {
|
||||||
|
if (data.ret == "yes") {
|
||||||
|
var obj = data.modelProjs[0];
|
||||||
|
|
||||||
|
if (method == "add") {
|
||||||
|
modelProjTable.fnAddData(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (method == "edit") {
|
||||||
|
modelProjTable.fnUpdate(obj, modelProjRowPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$('#modelProjModal').modal('toggle');
|
||||||
|
} else {
|
||||||
|
alert(data.message);
|
||||||
|
|
||||||
|
if (data.err_code == "99999") {
|
||||||
|
location.href = "/Root/Login";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
alert('網路或伺服器發生錯誤,請稍後重試!');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function loadDataTable() {
|
||||||
|
var dataTables = {
|
||||||
|
init: function init() {
|
||||||
|
|
||||||
|
this.bindUIActions();
|
||||||
|
},
|
||||||
|
bindUIActions: function bindUIActions() {
|
||||||
|
|
||||||
|
// event handlers
|
||||||
|
this.table = this.handleDataTables();
|
||||||
|
|
||||||
|
// add buttons
|
||||||
|
//this.table.buttons().container().appendTo('#dt-buttons').unwrap();
|
||||||
|
},
|
||||||
|
handleDataTables: function handleDataTables() {
|
||||||
|
//$('#myTable').append("<tfoot><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></tfoot>");
|
||||||
|
return $('#dt-responsive').DataTable({
|
||||||
|
dom: '<\'text-muted\'Bif>\n <\'table-responsive\'trl>\n <\'mt-4\'p>',
|
||||||
|
lengthChange: true,
|
||||||
|
lengthMenu: [[25, 50, 100, -1], [25, 50, 100, "All"]],
|
||||||
|
pageLength: 50,
|
||||||
|
buttons: [
|
||||||
|
//{
|
||||||
|
// text: '休假設定',
|
||||||
|
// action: function (e, dt, node, config) {
|
||||||
|
// vacationBtnFun();
|
||||||
|
|
||||||
|
// }
|
||||||
|
//},
|
||||||
|
//'excelHtml5'
|
||||||
|
],
|
||||||
|
language: {
|
||||||
|
paginate: {
|
||||||
|
previous: '<i class="fa fa-lg fa-angle-left"></i>',
|
||||||
|
next: '<i class="fa fa-lg fa-angle-right"></i>'
|
||||||
|
},
|
||||||
|
buttons: {
|
||||||
|
copyTitle: 'Data copied',
|
||||||
|
copyKeys: 'Use your keyboard or menu to select the copy command'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
autoWidth: false,
|
||||||
|
ajax: {
|
||||||
|
url: '/authApi/authModalProjList',
|
||||||
|
type: 'POST',
|
||||||
|
data: function (d) {
|
||||||
|
Object.assign(d, {
|
||||||
|
dept_uid: $('#dept_select').val()
|
||||||
|
});
|
||||||
|
|
||||||
|
return d;
|
||||||
|
},
|
||||||
|
dataSrc: 'modelProjs'
|
||||||
|
},
|
||||||
|
rowId: 'modelProj_uid',
|
||||||
|
deferRender: true,
|
||||||
|
initComplete: function () {
|
||||||
|
modelProjTable = $('#dt-responsive').dataTable();
|
||||||
|
$('#dt-responsive').on('click', 'a', function () {
|
||||||
|
buttonClick(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#dt-responsive').on('click', 'button', function () {
|
||||||
|
buttonClick(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
order: [[1, 'desc']],
|
||||||
|
info: true,
|
||||||
|
search: "搜尋:",
|
||||||
|
searching: true,
|
||||||
|
columns: [
|
||||||
|
{ data: 'modelProj_name', className: 'align-top text-left', orderable: true, searchable: true },
|
||||||
|
{ data: 'modelProj_createdate', className: 'align-top text-left', orderable: true, searchable: true },
|
||||||
|
{ data: 'modelProj_uid', className: 'align-top text-center', orderable: false, searchable: false }
|
||||||
|
],
|
||||||
|
columnDefs: [
|
||||||
|
{
|
||||||
|
targets: 0,
|
||||||
|
className: 'align-middle text-left',
|
||||||
|
orderable: false,
|
||||||
|
searchable: true,
|
||||||
|
render: function render(data, type, row, meta) {
|
||||||
|
|
||||||
|
|
||||||
|
return '<a href="javascript: void(0);" data-uid="' + row.modelProj_name + '" data-method="preview" >' + row.modelProj_name + '</a>';
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 1,
|
||||||
|
className: 'align-middle text-left',
|
||||||
|
orderable: false,
|
||||||
|
searchable: true,
|
||||||
|
render: function render(data, type, row, meta) {
|
||||||
|
|
||||||
|
|
||||||
|
return (new Date(row.modelProj_createdate)).format("yyyy/MM/dd hh:mm:ss");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 2,
|
||||||
|
orderable: false,
|
||||||
|
searchable: false,
|
||||||
|
render: function render(data, type, row, meta) {
|
||||||
|
var ret = '';
|
||||||
|
|
||||||
|
ret += '<button type="button" data-uid="' + row.modelProj_uid + '" data-method="edit" class="btn btn-sm btn-icon btn-secondary" ><i class="fa fa-pencil-alt"></i> <span class="sr-only">Edit</span></button>';
|
||||||
|
ret += '<button type="button" data-uid="' + row.modelProj_uid + '" data-method="del" class="btn btn-sm btn-icon btn-secondary"><i class="far fa-trash-alt"></i> <span class="sr-only">Remove</span></button>';
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
responsive: {
|
||||||
|
details: {
|
||||||
|
display: $.fn.dataTable.Responsive.display.childRowImmediate,
|
||||||
|
type: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleSearchRecords: function handleSearchRecords() {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
$('#table-search, #filterBy').on('keyup change focus', function (e) {
|
||||||
|
var filterBy = $('#filterBy').val();
|
||||||
|
var hasFilter = filterBy !== '';
|
||||||
|
var value = $('#table-search').val();
|
||||||
|
|
||||||
|
self.table.search('').columns().search('').draw();
|
||||||
|
|
||||||
|
if (hasFilter) {
|
||||||
|
self.table.columns(filterBy).search(value).draw();
|
||||||
|
} else {
|
||||||
|
self.table.search(value).draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dataTables.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
function deptList() {
|
||||||
|
$.ajax({
|
||||||
|
url: "/AuthApi/authDeptList",
|
||||||
|
type: "post",
|
||||||
|
data: null,
|
||||||
|
success: function (data, textStatus, jqXHR) {
|
||||||
|
if (data.ret == "yes") {
|
||||||
|
var obj = data.depts;
|
||||||
|
var items = "";
|
||||||
|
$.each(obj, function (i, item) {
|
||||||
|
|
||||||
|
|
||||||
|
$("#dept_select").append($("<option>", {
|
||||||
|
value: item.dept_uid,
|
||||||
|
text: item.dept_name
|
||||||
|
}));
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
loadDataTable();
|
||||||
|
} else {
|
||||||
|
alert(data.message);
|
||||||
|
|
||||||
|
if (data.err_code == "99999") {
|
||||||
|
location.href = "/Root/Login";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
alert('網路或伺服器發生錯誤,請稍後重試!');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function buttonClick(obj) {
|
||||||
|
|
||||||
|
var type = obj.getAttribute('data-method');
|
||||||
|
var uid = obj.getAttribute('data-uid');
|
||||||
|
var dept_uid = $('#dept_select').val();
|
||||||
|
|
||||||
|
modelProjRowID = $('#' + uid);
|
||||||
|
|
||||||
|
modelProjRowPos = modelProjTable.fnGetPosition($('#' + uid)[0]);
|
||||||
|
|
||||||
|
if (type == "preview") {
|
||||||
|
var mainItem_name = obj.innerText.trim();
|
||||||
|
var formData = {
|
||||||
|
dept_uid: dept_uid,
|
||||||
|
mainItem_uid: uid
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: "/AuthApi/authSubItemList",
|
||||||
|
type: "post",
|
||||||
|
data: formData,
|
||||||
|
success: function (data, textStatus, jqXHR) {
|
||||||
|
if (data.ret == "yes") {
|
||||||
|
var obj = data.subItems;
|
||||||
|
|
||||||
|
$('#dt-responsive-subItem').dataTable().fnClearTable();
|
||||||
|
if (obj.length > 0) {
|
||||||
|
|
||||||
|
$('#dt-responsive-subItem').dataTable().fnAddData(obj);
|
||||||
|
}
|
||||||
|
$('#mainItemTitle').val(mainItem_name + ' 的子項目列表').trigger('change');
|
||||||
|
|
||||||
|
$('#subItemList_mainItem_uid').val(uid);
|
||||||
|
$('#clientSubItemListModal').modal('toggle');
|
||||||
|
} else {
|
||||||
|
alert(data.message);
|
||||||
|
|
||||||
|
if (data.err_code == "99999") {
|
||||||
|
location.href = "/Root/Login";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
alert('網路或伺服器發生錯誤,請稍後重試!');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == "edit") {
|
||||||
|
var formData = {
|
||||||
|
method: 'get',
|
||||||
|
modelProj_uid: uid,
|
||||||
|
dept_uid: dept_uid
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: "/AuthApi/addEditDelGetModelProj",
|
||||||
|
type: "post",
|
||||||
|
data: formData,
|
||||||
|
success: function (data, textStatus, jqXHR) {
|
||||||
|
if (data.ret == "yes") {
|
||||||
|
var obj = data.modelProjs[0];
|
||||||
|
|
||||||
|
$("#modelProj_method").val('edit');
|
||||||
|
$("#modelProj_uid").val(obj.modelProj_uid);
|
||||||
|
$("#dept_uid").val(obj.dept_uid).trigger('change');
|
||||||
|
$("#modelProj_name").val(obj.modelProj_name).trigger('change');
|
||||||
|
|
||||||
|
|
||||||
|
$('#modelProjModal').modal('toggle');
|
||||||
|
} else {
|
||||||
|
alert(data.message);
|
||||||
|
|
||||||
|
if (data.err_code == "99999") {
|
||||||
|
location.href = "/Root/Login";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
alert('網路或伺服器發生錯誤,請稍後重試!');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == "del") {
|
||||||
|
if (confirm('確定刪除此筆資料? 所有子項目也會一併刪除~')) {
|
||||||
|
if (confirm('再次確認是否刪除所有此項目與子項目?')) {
|
||||||
|
var formData = {
|
||||||
|
method: 'del',
|
||||||
|
modelProj_uid: uid,
|
||||||
|
dept_uid: dept_uid
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: "/AuthApi/addEditDelGetModelProj",
|
||||||
|
type: "post",
|
||||||
|
data: formData,
|
||||||
|
success: function (data, textStatus, jqXHR) {
|
||||||
|
if (data.ret == "yes") {
|
||||||
|
var row = modelProjTable.api().row(modelProjRowID).remove().draw(false);
|
||||||
|
alert('刪除成功');
|
||||||
|
|
||||||
|
} else {
|
||||||
|
alert(data.message);
|
||||||
|
|
||||||
|
if (data.err_code == "99999") {
|
||||||
|
location.href = "/Root/Login";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
alert('網路或伺服器發生錯誤,請稍後重試!');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -150,6 +150,9 @@ $(document).ready(function () {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#search_btn').on('click', function () {
|
||||||
|
$('#dt-responsive').DataTable().ajax.reload();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function loadSubItemDataTable() {
|
function loadSubItemDataTable() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue