diff --git a/AMESCoreStudio.Web/Controllers/JIGController.cs b/AMESCoreStudio.Web/Controllers/JIGController.cs
new file mode 100644
index 00000000..e07ea497
--- /dev/null
+++ b/AMESCoreStudio.Web/Controllers/JIGController.cs
@@ -0,0 +1,654 @@
+using AMESCoreStudio.CommonTools.Result;
+using AMESCoreStudio.Web.Models;
+using AMESCoreStudio.WebApi.Models.AMES;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Rendering;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace AMESCoreStudio.Web.Controllers
+{
+    public class JIGController : Controller
+    {
+        private readonly ILogger<JIGController> _logger;
+        public readonly IJIG _jigApi;
+        public readonly IWHS _whsApi;
+        public readonly IBAS _basApi;
+        public readonly IPCS _pcsApi;
+        public readonly ISYS _sysApi;
+        public readonly IPPS _ppsApi;
+        private readonly IWebHostEnvironment _env;
+
+        public JIGController(ILogger<JIGController> logger, IJIG jigApi, IWHS whsApi,IBAS basApi, IPCS pcsApi, ISYS sysApi, IPPS ppsApi, IWebHostEnvironment env)
+        {
+            _logger = logger;
+            _jigApi = jigApi;
+            _whsApi = whsApi;
+            _basApi = basApi;
+            _pcsApi = pcsApi;
+            _sysApi = sysApi;
+            _ppsApi = ppsApi;
+            _env = env;
+        }
+
+        #region
+        private async Task GetOutfitCommodityInfoesList()
+        {
+            var result = await _jigApi.GetOutfitCommodityInfoes();
+
+            var GroupList = new List<SelectListItem>();
+            for (int i = 0; i < result.Count; i++)
+            {
+                GroupList.Add(new SelectListItem(result[i].CommodityName, result[i].CommodityID.ToString()));
+            }
+            ViewBag.TypesList = GroupList;
+        }
+        private async Task GetOutfitVarityInfoesList()
+        {
+            var result = await _jigApi.GetOutfitVarityInfoes();
+
+            var GroupList = new List<SelectListItem>();
+            for (int i = 0; i < result.Count; i++)
+            {
+                GroupList.Add(new SelectListItem(result[i].VarityName, result[i].VarityID.ToString()));
+            }
+            ViewBag.VarityList = GroupList;
+        }
+        private async Task GetOutfitVendorInfoesList()
+        {
+            var result = await _jigApi.GetOutfitVendorInfoes();
+
+            var GroupList = new List<SelectListItem>();
+            for (int i = 0; i < result.Count; i++)
+            {
+                GroupList.Add(new SelectListItem(result[i].VendorName, result[i].VendorID.ToString()));
+            }
+            ViewBag.VendorList = GroupList;
+        }
+        private async Task GetFactoryList()
+        {
+            var result = await _basApi.GetFactoryInfoes();
+
+            var UnitItems = new List<SelectListItem>();
+            for (int i = 0; i < result.Count; i++)
+            {
+                UnitItems.Add(new SelectListItem(result[i].FactoryNameCh, result[i].FactoryID.ToString()));
+            }
+            ViewBag.Factory = UnitItems;
+        }
+        private async Task GetFactoryUnitsList3()
+        {
+            var result = await _basApi.GetFactoryUnits();
+
+            var UnitItems = new List<SelectListItem>();
+            for (int i = 0; i < result.Count; i++)
+            {
+                UnitItems.Add(new SelectListItem(result[i].UnitName, result[i].UnitNo.ToString()));
+            }
+            ViewBag.FactoryUnit = UnitItems;
+        }
+        private async Task GetStationList()
+        {
+            var result = await _basApi.GetStationses();
+
+            var StationItems = new List<SelectListItem>();
+            StationItems.Add(new SelectListItem("N/A", "0"));
+            for (int i = 0; i < result.Count; i++)
+            {
+                StationItems.Add(new SelectListItem(result[i].StationName, result[i].StationID.ToString()));
+            }
+            ViewBag.StationList = StationItems;
+        }
+        private async Task GetLineList()
+        {
+            var result = await _basApi.GetLineInfoes();
+
+            var LineItems = new List<SelectListItem>();
+            LineItems.Add(new SelectListItem("N/A", "0"));
+            for (int i = 0; i < result.Count; i++)
+            {
+                LineItems.Add(new SelectListItem(result[i].LineDesc, result[i].LineID.ToString()));
+            }
+            ViewBag.LineList = LineItems;
+        }
+        private async Task GetDeptList()
+        {
+            var result = await _sysApi.GetDeptInfoes();
+
+            var DeptItems = new List<SelectListItem>();
+            DeptItems.Add(new SelectListItem("N/A", "0"));
+            for (int i = 0; i < result.Count; i++)
+            {
+                DeptItems.Add(new SelectListItem(result[i].DeptName, result[i].DeptID.ToString()));
+            }
+            ViewBag.DeptList = DeptItems;
+        }
+        private async Task GetUserInfo()
+        {
+            var result = await _sysApi.GetUserInfoes();
+
+            var UserItems = new List<SelectListItem>();
+            UserItems.Add(new SelectListItem("N/A", "-1"));
+            for (int i = 0; i < result.Count; i++)
+            {
+                UserItems.Add(new SelectListItem(result[i].UserName, result[i].UserID.ToString()));
+            }
+            ViewBag.UserList = UserItems;
+        }
+        private async Task GetFactoryUnitsList()
+        {
+            var result = await _basApi.GetFactoryUnits();
+
+            var UnitItems = new List<SelectListItem>();
+            UnitItems.Add(new SelectListItem("NA", "0"));
+            for (int i = 0; i < result.Count; i++)
+            {
+                UnitItems.Add(new SelectListItem(result[i].UnitName, result[i].UnitNo.ToString()));
+            }
+            ViewBag.FactoryUnit = UnitItems;
+        }
+        public void GetUserID()
+        {
+            var userID = "";
+            HttpContext.Request.Cookies.TryGetValue("UserID", out userID);
+            int user_id = 0;
+            if (userID != null)
+            {
+                if (int.Parse(userID.ToString()) >= 0)
+                {
+                    user_id = int.Parse(userID.ToString());
+                }
+            }
+            ViewBag.UserID = user_id;
+        }
+
+        #endregion
+
+        #region JIG001 設備種類維護相關
+
+        public IActionResult JIG001()
+        {
+            return View();
+        }
+
+        //新增頁面
+        public IActionResult JIG001C()
+        {
+            GetUserID();
+            return View();
+        }
+
+        //修改页面
+        [HttpGet]
+        public async Task<IActionResult> JIG001UAsync(int id)
+        {
+            var result = await _jigApi.GetOutfitCommodityInfo(id);
+            GetUserID();
+
+            if (result.Count == 0)
+            {
+                return View();
+            }
+            return View(result[0]);
+        }
+
+        public async Task<IActionResult> JIG001DAsync(int id)
+        {
+            var result = await _jigApi.DeleteOutfitCommodityInfo(id);
+            return Json(new Result() { success = true, msg = "" });
+        }
+
+        //頁面提交,id=0 添加,id>0 修改
+        [HttpPost]
+        public async Task<IActionResult> JIG001CSaveAsync(OutfitCommodityInfo model)
+        {
+            if (ModelState.IsValid)
+            {
+                IResultModel result;
+
+                result = await _jigApi.PostOutfitCommodityInfo(JsonConvert.SerializeObject(model));
+
+
+                if (result.Success)
+                {
+                    var _msg = "添加成功!";
+                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
+                }
+                else
+                {
+                    if (result.Errors.Count > 0)
+                    {
+                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
+                    }
+                    else
+                    {
+                        ModelState.AddModelError("error", result.Msg);
+                    }
+                }
+            }
+            return View("JIG001C", model);
+        }
+
+        public async Task<IActionResult> JIG001USaveAsync(OutfitCommodityInfo model)
+        {
+            if (ModelState.IsValid)
+            {
+                IResultModel result;
+
+                result = await _jigApi.PutOutfitCommodityInfo(model.CommodityID, JsonConvert.SerializeObject(model));
+
+                if (result.Success)
+                {
+                    var _msg = "修改成功!";
+                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
+                }
+                else
+                {
+                    if (result.Errors.Count > 0)
+                    {
+                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
+                    }
+                    else
+                    {
+                        ModelState.AddModelError("error", result.Msg);
+                    }
+                }
+            }
+            return View("JIG001U", model);
+        }
+
+        [ResponseCache(Duration = 0)]
+        [HttpGet]
+        public async Task<IActionResult> GetOutfitCommodityInfoesAsync()
+        {
+            var result = await _jigApi.GetOutfitCommodityInfoes();
+
+            if (result.Count > 0)
+            {
+                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
+            }
+
+            return Json(new Table() { count = 0, data = null });
+        }
+        public async Task<IActionResult> GetOutfitCommodityInfoesByQueryAsync(int TypeFlag, string Status)
+        {
+            var result = await _jigApi.GetOutfitCommodityInfoesByQuery(TypeFlag, Status);
+
+            if (result.Count > 0)
+            {
+                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
+            }
+
+            return Json(new Table() { count = 0, data = null });
+        }
+
+        #endregion
+
+        #region JIG002設備規格維護相關
+
+        public async Task<IActionResult> JIG002()
+        {
+            await GetOutfitCommodityInfoesList();
+            return View();
+        }
+
+        //新增頁面
+        public async Task<IActionResult> JIG002C()
+        {
+            await GetOutfitCommodityInfoesList();
+            GetUserID();
+            return View();
+        }
+
+        //修改页面
+        [HttpGet]
+        public async Task<IActionResult> JIG002UAsync(int id)
+        {
+            await GetOutfitCommodityInfoesList();
+            GetUserID();
+            var result = await _jigApi.GetOutfitVarityInfo(id);
+
+            if (result.Count == 0)
+            {
+                return View();
+            }
+            return View(result[0]);
+        }
+
+        public async Task<IActionResult> JIG002DAsync(int id)
+        {
+            var result = await _jigApi.DeleteOutfitVarityInfo(id);
+            return Json(new Result() { success = true, msg = "" });
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> JIG002CSaveAsync(OutfitVarityInfo model)
+        {
+            if (ModelState.IsValid)
+            {
+                IResultModel result;
+
+                    result = await _jigApi.PostOutfitVarityInfo(JsonConvert.SerializeObject(model));
+               
+
+                if (result.Success)
+                {
+                    var _msg = "添加成功!";
+                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
+                }
+                else
+                {
+                    if (result.Errors.Count > 0)
+                    {
+                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
+                    }
+                    else
+                    {
+                        ModelState.AddModelError("error", result.Msg);
+                    }
+                }
+            }
+            return View("JIG002C", model);
+        }
+
+        public async Task<IActionResult> JIG002USaveAsync(OutfitVarityInfo model)
+        {
+            if (ModelState.IsValid)
+            {
+                IResultModel result;
+
+                result = await _jigApi.PutOutfitVarityInfo(model.VarityID, JsonConvert.SerializeObject(model));
+
+                if (result.Success)
+                {
+                    var _msg = "修改成功!";
+                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
+                }
+                else
+                {
+                    if (result.Errors.Count > 0)
+                    {
+                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
+                    }
+                    else
+                    {
+                        ModelState.AddModelError("error", result.Msg);
+                    }
+                }
+            }
+            return View("JIG002U", model);
+        }
+
+        [ResponseCache(Duration = 0)]
+        [HttpGet]
+        public async Task<IActionResult> GetOutfitVarityInfoesAsync()
+        {
+            var result = await _jigApi.GetOutfitVarityInfoes();
+
+            if (result.Count > 0)
+            {
+                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
+            }
+
+            return Json(new Table() { count = 0, data = null });
+        }
+        public async Task<IActionResult> GetOutfitVarityInfoesByQueryAsync(int TypeFlag, int CommodityID, string Status)
+        {
+            var result = await _jigApi.GetOutfitVarityInfoesByQuery(TypeFlag, CommodityID, Status);
+
+            if (result.Count > 0)
+            {
+                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
+            }
+
+            return Json(new Table() { count = 0, data = null });
+        }
+
+        #endregion
+
+        #region JIG003設備廠商維護相關
+        public IActionResult JIG003()
+        {
+            return View();
+        }
+        //新增頁面
+        public IActionResult JIG003C(int id)
+        {
+            GetUserID();
+            return View();
+        }
+        //修改页面
+        [HttpGet]
+        public async Task<IActionResult> JIG003UAsync(int id)
+        {
+            var result = await _jigApi.GetOutfitVendorInfo(id);
+            GetUserID();
+
+            if (result.Count == 0)
+            {
+                return View();
+            }
+
+            return View(result[0]);
+        }
+        public async Task<IActionResult> JIG003DAsync(int id)
+        {
+            var result = await _jigApi.DeleteOutfitVendorInfo(id);
+            return Json(new Result() { success = true, msg = "" });
+        }
+        [HttpPost]
+        public async Task<IActionResult> JIG003CSaveAsync(OutfitVendorInfo model)
+        {
+            if (ModelState.IsValid)
+            {
+                IResultModel result;
+
+                result = await _jigApi.PostOutfitVendorInfo(JsonConvert.SerializeObject(model));
+
+                if (result.Success)
+                {
+                    var _msg = "添加成功!";
+                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
+                }
+                else
+                {
+                    if (result.Errors.Count > 0)
+                    {
+                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
+                    }
+                    else
+                    {
+                        ModelState.AddModelError("error", result.Msg);
+                    }
+                }
+            }
+            return View("JIG003C", model);
+        }
+        public async Task<IActionResult> JIG003USaveAsync(OutfitVendorInfo model)
+        {
+            if (ModelState.IsValid)
+            {
+                IResultModel result;
+
+                result = await _jigApi.PutOutfitVendorInfo(model.VendorID, JsonConvert.SerializeObject(model));
+
+                if (result.Success)
+                {
+                    var _msg = "修改成功!";
+                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
+                }
+                else
+                {
+                    if (result.Errors.Count > 0)
+                    {
+                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
+                    }
+                    else
+                    {
+                        ModelState.AddModelError("error", result.Msg);
+                    }
+                }
+            }
+            return View("JIG003U", model);
+        }
+
+        [ResponseCache(Duration = 0)]
+        [HttpGet]
+        public async Task<IActionResult> GetOutfitVendorInfoesAsync()
+        {
+            var result = await _jigApi.GetOutfitVendorInfoes();
+
+            if (result.Count > 0)
+            {
+                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
+            }
+
+            return Json(new Table() { count = 0, data = null });
+        }
+
+        #endregion
+
+        #region JIG004巡檢結果維護相關
+
+        public async Task<IActionResult> JIG004()
+        {
+            await GetOutfitCommodityInfoesList();
+            return View();
+        }
+        //修改页面
+        [HttpGet]
+        public async Task<IActionResult> JIG004C(int id)
+        {
+            GetUserID();
+            await GetFactoryList();
+            await GetOutfitCommodityInfoesList();
+            await GetOutfitVarityInfoesList();
+            await GetOutfitVendorInfoesList();
+            return View();
+        }
+        public async Task<IActionResult> JIG004UAsync(int id)
+        {
+
+            GetUserID();
+            await GetFactoryList();
+            await GetOutfitCommodityInfoesList();
+            await GetOutfitVarityInfoesList();
+            await GetOutfitVendorInfoesList();
+            var result = await _jigApi.GetOutfitInfo(id);
+
+            if (result.Count == 0)
+            {
+                return View();
+            }
+
+            return View(result[0]);
+        }
+        public async Task<IActionResult> JIG004DAsync(int id)
+        {
+            var result = await _jigApi.DeleteOutfitInfo(id);
+            return Json(new Result() { success = true, msg = "" });
+        }
+        [HttpPost]
+        public async Task<IActionResult> JIG004CSaveAsync(OutfitInfo model)
+        {
+            if (ModelState.IsValid)
+            {
+                IResultModel result;
+
+                var commodity = await _jigApi.GetOutfitCommodityInfo(model.CommodityID);
+                model.TypeFlag = commodity[0].TypeFlag;
+
+                result = await _jigApi.PostOutfitInfo(JsonConvert.SerializeObject(model));
+
+                if (result.Success)
+                {
+                    var _msg = "添加成功!";
+                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
+                }
+                else
+                {
+                    if (result.Errors.Count > 0)
+                    {
+                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
+                    }
+                    else
+                    {
+                        ModelState.AddModelError("error", result.Msg);
+                    }
+                }
+            }
+            return View("JIG004C", model);
+        }
+        public async Task<IActionResult> JIG004USaveAsync(OutfitInfo model)
+        {
+            if (ModelState.IsValid)
+            {
+                IResultModel result;
+
+                result = await _jigApi.PutOutfitInfo(model.OutfitID, JsonConvert.SerializeObject(model));
+
+                if (result.Success)
+                {
+                    var _msg = "修改成功!";
+                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
+                }
+                else
+                {
+                    if (result.Errors.Count > 0)
+                    {
+                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
+                    }
+                    else
+                    {
+                        ModelState.AddModelError("error", result.Msg);
+                    }
+                }
+            }
+            return View("JIG004U", model);
+        }
+
+        [ResponseCache(Duration = 0)]
+        [HttpGet]
+        public async Task<IActionResult> GetOutfitInfoesAsync()
+        {
+
+            var result = await _jigApi.GetOutfitInfoes();
+
+            if (result.Count > 0)
+            {
+                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
+            }
+
+            return Json(new Table() { count = 0, data = null });
+        }
+
+        public async Task<IActionResult> GetOutfitInfoesByQueryAsync(int TypeFlag, int CommodityID, int VarityID, string Status, string QANo, string PartNo)
+        {
+
+
+            if (string.IsNullOrWhiteSpace(PartNo))
+                PartNo = "*";
+            if (string.IsNullOrWhiteSpace(QANo))
+                QANo = "*";
+
+            var result = await _jigApi.GetOutfitInfoesByQuery( TypeFlag,  CommodityID,  VarityID,  Status,  QANo,  PartNo);
+
+            if (result.Count > 0)
+            {
+                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
+            }
+
+            return Json(new Table() { count = 0, data = null });
+        }
+
+        #endregion
+
+
+
+
+    }
+}
diff --git a/AMESCoreStudio.Web/Controllers/SPCController.cs b/AMESCoreStudio.Web/Controllers/SPCController.cs
index 6afa040a..6c08cea5 100644
--- a/AMESCoreStudio.Web/Controllers/SPCController.cs
+++ b/AMESCoreStudio.Web/Controllers/SPCController.cs
@@ -299,7 +299,7 @@ namespace AMESCoreStudio.Web.Controllers
                 result = await _spcApi.PostInspectionType(JsonConvert.SerializeObject(model));
 
 
-                if (!result.Success)
+                if (result.Success)
                 {
                     var _msg = "添加成功!";
                     return RedirectToAction("Refresh", "Home", new { msg = _msg });
@@ -327,7 +327,7 @@ namespace AMESCoreStudio.Web.Controllers
 
                 result = await _spcApi.PutInspectionType(model.InspectionTypeID, JsonConvert.SerializeObject(model));
 
-                if (!result.Success)
+                if (result.Success)
                 {
                     var _msg = "修改成功!";
                     return RedirectToAction("Refresh", "Home", new { msg = _msg });
@@ -411,7 +411,7 @@ namespace AMESCoreStudio.Web.Controllers
                     result = await _spcApi.PostInspectionForm(JsonConvert.SerializeObject(model));
                
 
-                if (!result.Success)
+                if (result.Success)
                 {
                     var _msg = "添加成功!";
                     return RedirectToAction("Refresh", "Home", new { msg = _msg });
@@ -439,7 +439,7 @@ namespace AMESCoreStudio.Web.Controllers
 
                 result = await _spcApi.PutInspectionForm(model.InspectionFormID, JsonConvert.SerializeObject(model));
 
-                if (!result.Success)
+                if (result.Success)
                 {
                     var _msg = "修改成功!";
                     return RedirectToAction("Refresh", "Home", new { msg = _msg });
diff --git a/AMESCoreStudio.Web/HttpApis/AMES/IJIG.cs b/AMESCoreStudio.Web/HttpApis/AMES/IJIG.cs
new file mode 100644
index 00000000..5c0d6c54
--- /dev/null
+++ b/AMESCoreStudio.Web/HttpApis/AMES/IJIG.cs
@@ -0,0 +1,242 @@
+using System.Collections.Generic;
+using WebApiClient;
+using WebApiClient.Attributes;
+using AMESCoreStudio.WebApi;
+using Microsoft.AspNetCore.Mvc;
+using AMESCoreStudio.WebApi.Models.AMES;
+using AMESCoreStudio.WebApi.Models.BAS;
+using AMESCoreStudio.CommonTools.Result;
+using AMESCoreStudio.WebApi.DTO.AMES;
+
+namespace AMESCoreStudio.Web
+{
+    [JsonReturn]
+    public interface IJIG : IHttpApi
+    {
+        #region JIG001 設備種類資料維護
+
+        /// <summary>
+        /// 新增設備種類
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpPost("api/OutfitCommodityInfoes")]
+        ITask<ResultModel<OutfitCommodityInfo>> PostOutfitCommodityInfo([FromBody, RawJsonContent] string model);
+
+        /// <summary>
+        /// 更新設備種類
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpPut("api/OutfitCommodityInfoes/{id}")]
+        ITask<ResultModel<OutfitCommodityInfo>> PutOutfitCommodityInfo(int id, [FromBody, RawJsonContent] string model);
+
+        /// <summary>
+        /// 刪除設備種類
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpDelete("api/OutfitCommodityInfoes/{id}")]
+        ITask<ResultModel<string>> DeleteOutfitCommodityInfo(int id);
+
+        /// <summary>
+        /// 根據ID獲取指定設備種類資料
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpGet("api/OutfitCommodityInfoes/{id}")]
+        ITask<List<OutfitCommodityInfo>> GetOutfitCommodityInfo(int id);
+
+        /// <summary>
+        /// 獲取設備種類資料
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpGet("api/OutfitCommodityInfoes")]
+        ITask<List<OutfitCommodityInfo>> GetOutfitCommodityInfoes();
+
+        /// <summary>
+        /// 獲取設備種類BY QUERY
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpGet("api/OutfitCommodityInfoes/Query/{TypeFlag}/{Status}")]
+        ITask<List<OutfitCommodityInfo>> GetOutfitCommodityInfoesByQuery(int TypeFlag, string Status);
+
+        #endregion
+
+        #region JIG002 設備規格資料維護
+
+        /// <summary>
+        /// 新增設備規格
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpPost("api/OutfitVarityInfoes")]
+        ITask<ResultModel<OutfitVarityInfo>> PostOutfitVarityInfo([FromBody, RawJsonContent] string model);
+
+        /// <summary>
+        /// 更新設備規格
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpPut("api/OutfitVarityInfoes/{id}")]
+        ITask<ResultModel<OutfitVarityInfo>> PutOutfitVarityInfo(int id, [FromBody, RawJsonContent] string model);
+
+        /// <summary>
+        /// 刪除設備規格
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpDelete("api/OutfitVarityInfoes/{id}")]
+        ITask<ResultModel<string>> DeleteOutfitVarityInfo(int id);
+
+        /// <summary>
+        /// 根據ID獲取指定設備規格資料
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpGet("api/OutfitVarityInfoes/{id}")]
+        ITask<List<OutfitVarityInfo>> GetOutfitVarityInfo(int id);
+
+        /// <summary>
+        /// 獲取設備規格資料
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpGet("api/OutfitVarityInfoes")]
+        ITask<List<OutfitVarityInfo>> GetOutfitVarityInfoes();
+
+        /// <summary>
+        /// 獲取設備種類BY QUERY
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpGet("api/OutfitVarityInfoes/Query/{TypeFlag}/{CommodityID}/{Status}")]
+        ITask<List<OutfitVarityInfo>> GetOutfitVarityInfoesByQuery(int TypeFlag, int CommodityID, string Status);
+
+        #endregion
+
+        #region JIG003 設備廠商資料維護
+
+        /// <summary>
+        /// 新增設備廠商
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpPost("api/OutfitVendorInfoes")]
+        ITask<ResultModel<OutfitVendorInfo>> PostOutfitVendorInfo([FromBody, RawJsonContent] string model);
+
+        /// <summary>
+        /// 更新設備廠商
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpPut("api/OutfitVendorInfoes/{id}")]
+        ITask<ResultModel<OutfitVendorInfo>> PutOutfitVendorInfo(int id, [FromBody, RawJsonContent] string model);
+
+        /// <summary>
+        /// 刪除設備廠商
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpDelete("api/OutfitVendorInfoes/{id}")]
+        ITask<string> DeleteOutfitVendorInfo(int id);
+
+        /// <summary>
+        /// 根據ID獲取指定設備廠商資料
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpGet("api/OutfitVendorInfoes/{id}")]
+        ITask<List<OutfitVendorInfo>> GetOutfitVendorInfo(int id);
+
+        /// <summary>
+        /// 獲取設備廠商資料
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpGet("api/OutfitVendorInfoes")]
+        ITask<List<OutfitVendorInfo>> GetOutfitVendorInfoes();
+
+        #endregion
+
+        #region JIG004 設備基本數據維護
+
+        /// <summary>
+        /// 新增設備基本數據
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpPost("api/OutfitInfoes")]
+        ITask<ResultModel<OutfitInfo>> PostOutfitInfo([FromBody, RawJsonContent] string model);
+
+        /// <summary>
+        /// 更新設備基本數據
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpPut("api/OutfitInfoes/{id}")]
+        ITask<ResultModel<OutfitInfo>> PutOutfitInfo(int id, [FromBody, RawJsonContent] string model);
+
+        /// <summary>
+        /// 更新設備基本數據
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpPut("api/InspectionResultDetails/{id}")]
+        ITask<ResultModel<InspectionResultDetail>> PutInspectionResultDetail(int id, [FromBody, RawJsonContent] string model);
+
+
+        /// <summary>
+        /// 刪除設備基本數據
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpDelete("api/OutfitInfoes/{id}")]
+        ITask<ResultModel<string>> DeleteOutfitInfo(int id);
+
+        /// <summary>
+        /// 根據ID獲取指定設備基本數據
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpGet("api/OutfitInfoes/{id}")]
+        ITask<List<OutfitInfo>> GetOutfitInfo(int id);
+
+        /// <summary>
+        /// 獲取設備基本數據
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpGet("api/OutfitInfoes")]
+        ITask<List<OutfitInfo>> GetOutfitInfoes();
+
+        /// <summary>
+        /// 根据設備基本數據
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpGet("api/OutfitInfoes/Query/{TypeFlag}/{CommodityID}/{VarityID}/{Status}/{QANo}/{PartNo}")]
+        ITask<List<OutfitInfo>> GetOutfitInfoesByQuery(int TypeFlag, int CommodityID, int VarityID, string Status, string QANo, string PartNo);
+
+        #endregion
+
+
+
+        #region JIG006 巡檢結果維護
+
+        /// <summary>
+        /// 新增巡檢結果Detail
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpPost("api/InspectionResultDetails")]
+        ITask<ResultModel<InspectionResultDetail>> PostInspectionResultDetail([FromBody, RawJsonContent] string model);
+
+        /// <summary>
+        /// 新增巡檢結果Blob
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpPost("api/InspectionResultBlobs")]
+        ITask<ResultModel<InspectionResultBlob>> PostInspectionResultBlob([FromBody, RawJsonContent] string model);
+
+        /// <summary>
+        /// 獲取指定巡檢表單Blob資料By Query
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpGet("api/InspectionResultBlobs/Query/{id}/{itemID}")]
+        ITask<List<InspectionResultBlob>> GetInspectionResultBlobsByQuery(int id, int itemID);
+
+
+        /// <summary>
+        /// 根據ID獲取指定巡檢結果Details
+        /// </summary>
+        /// <returns></returns>
+        [WebApiClient.Attributes.HttpGet("api/InspectionResultDetails/{id}")]
+        ITask<List<InspectionResultDetail>> GetInspectionResultDetails(int id);
+
+        
+
+
+        #endregion
+
+
+
+    }
+}
diff --git a/AMESCoreStudio.Web/Views/JIG/JIG001.cshtml b/AMESCoreStudio.Web/Views/JIG/JIG001.cshtml
new file mode 100644
index 00000000..e8187d87
--- /dev/null
+++ b/AMESCoreStudio.Web/Views/JIG/JIG001.cshtml
@@ -0,0 +1,201 @@
+@{
+    ViewData["Title"] = "設備種類資料維護";
+    Layout = "~/Views/Shared/_AMESLayout.cshtml";
+}
+
+<div class="layui-card">
+    <div class="layui-card-header">
+        <div class="layui-form">
+            <div class="layui-form-item ">
+                <div class="layui-inline"><i class="fa fa-file-text-o fa-fw"></i> @ViewBag.Title</div>
+            </div>
+        </div>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form" style="margin-bottom:5px;">
+            <div class="layui-form-item">
+                <div class="layui-inline" style="margin-right:5px;">
+                    <label class="layui-inline layui-form-label">種類歸屬</label>
+                    <div class="layui-input-inline">
+                        <select name="TypeFlag" id="TypeFlag" class="custom-select col-sm-4">
+                            <option value="-99">全部</option>
+                            <option value="0">設備</option>
+                            <option value="1">料件</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline" style="margin-right:5px;">
+                    <label class="layui-inline layui-form-label">是否有效</label>
+                    <div class="layui-input-inline">
+                        <select name="Status" id="Status" class="custom-select col-sm-4">
+                            <option value="A">可用</option>
+                            <option value="S">停用</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline" style="margin-left:0px;">
+                    <div class="layui-btn-group">
+                        <button class="layui-btn layui-btn-sm layui-btn-normal" id="querysubmit" lay-filter="querysubmit">
+                            <i class="layui-icon layui-icon-sm">&#xe615;</i>
+                        </button>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <table class="layui-hide" id="test" lay-filter="test"></table>
+    </div>
+</div>
+
+@section Scripts{
+    <script type="text/javascript">
+        //监听表单提交事件
+        //hg.form.onsubmit('querysubmit', function (data) {
+        //    table && table.reload(data);
+        //});
+        var tableCols = [[
+            {
+                field: 'commodityID',
+                width: 80,
+                title: '#'
+            },
+            {
+                field: 'commodityNo',
+                title: '種類代碼',
+                sort: true
+            },
+            {
+                field: 'commodityName',
+                title: '種類名稱',
+                sort: true
+            },
+            {
+                field: 'commodityEn',
+                title: '種類英文名稱'
+            },
+            {
+                field: 'alertForeDays',
+                title: '保養預警提前天數'
+            },
+            {
+                field: 'useLimitDays',
+                title: '累計天數'
+            },
+            {
+                field: 'typeFlag',
+                title: '種類歸屬',
+                templet: function (d) {
+                    var str = '';
+                    if (d.typeFlag == 0)
+                        str = '設備/料件';
+                    else
+                        str = '耗材';
+                    return str
+                }
+            },
+            {
+                field: 'status',
+                title: '狀態',
+                templet: function (d) {
+                    var str = '';
+                    if (d.status == "A")
+                        str = '啟用';
+                    else 
+                        str = '停用';
+                    return str
+                }
+            },
+            {
+                field: 'smtFlag',
+                title: '特殊種類',
+                templet: function (d) {
+                    var str = '';
+                    if (d.smtFlag == "X")
+                        str = '錫膏';
+                    else if (d.smtFlag == "H")
+                        str = '紅膠';
+                    else if (d.smtFlag == "G")
+                        str = '鋼網';
+                    return str                   
+                }
+            },
+            {
+                field: 'right',
+                width: 200,
+                title: '操作',
+                fixed: 'right',
+                templet: function (d) {
+                    var btn = '<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">修改</a>';
+                    if (d.status == "A")
+                        btn += ' <a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" lay-event="del">停用</a>';
+                    else
+                        btn += ' <a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="del">啟用</a>';
+                    return btn
+                    //return '<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">修改</a> <a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" lay-event="del">删除</a>'
+                }
+            }]
+        ];
+
+        //通过行tool编辑,lay-event="edit"
+        function edit(obj) {
+            if (obj.data.commodityID) {
+                hg.open('修改設備種類', '/JIG/JIG001U/' + obj.data.commodityID, 640,320);
+            }
+        }
+
+        //通过行tool删除,lay-event="del"
+        function del(obj) {
+            var status;
+            if (obj.data.status=="A")
+                status = "停用";
+            else
+                status = "啟用";
+
+            if (obj.data.commodityID) {
+                hg.confirm("設備種類:" + obj.data.commodityName + ",确定要" + status+"吗?", function () {
+                    $.ajax({
+                        url: '/JIG/JIG001D',
+                        data: { id: obj.data.commodityID },
+                        type: 'POST',
+                        success: function (data) {
+                            if (data.success) {
+                                obj.del(); //只删本地数据
+                                hg.msghide(status + "成功!");
+                            }
+                            else {
+                                hg.msg(data.msg);
+                            }
+                        },
+                        error: function () {
+                            hg.msg("网络请求失败!");
+                        }
+                    });
+                });
+            }
+        }
+        var toolbar = [{
+            text: '新增',
+            layuiicon: '&#xe608;',
+            class: 'layui-btn-normal',
+            handler: function () {
+                hg.open('新增設備種類', '/JIG/JIG001C', 640, 320);
+
+            }
+        }];
+
+        ////搜索
+        $('#querysubmit').click(function () {
+            hg.msghide("刷新数据!");
+            tt();
+        });
+
+        var table;
+        $(function () {
+            tt();
+        });
+        //基本数据表格
+        function tt() {
+           table = hg.table.datatable('test', '設備種類', '/JIG/GetOutfitCommodityInfoesByQuery?TypeFlag=' + $("#TypeFlag").val() + '&Status=' + $("#Status").val(), {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']);
+        }
+        
+    </script>
+}
\ No newline at end of file
diff --git a/AMESCoreStudio.Web/Views/JIG/JIG001C.cshtml b/AMESCoreStudio.Web/Views/JIG/JIG001C.cshtml
new file mode 100644
index 00000000..bc7d2219
--- /dev/null
+++ b/AMESCoreStudio.Web/Views/JIG/JIG001C.cshtml
@@ -0,0 +1,100 @@
+@model AMESCoreStudio.WebApi.Models.AMES.OutfitCommodityInfo
+
+
+@{ ViewData["Title"] = "SPC001C";
+    Layout = "~/Views/Shared/_FormLayout.cshtml"; }
+
+
+<style>
+    .control-label {
+        justify-content: flex-end !important;
+    }
+</style>
+
+<div class="row">
+    <div class="col-sm-12">
+        <form enctype="multipart/form-data" method="post" asp-action="JIG001CSave">
+            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
+            <input type="hidden" asp-for="CommodityID" value="0" />
+            <input type="hidden" asp-for="CreateUserID" value="@ViewBag.UserID" />
+            <input type="hidden" asp-for="UpdateUserID" value="@ViewBag.UserID" />
+            <input type="hidden" asp-for="CreateDate" value="@System.DateTime.Now" />
+            <input type="hidden" asp-for="UpdateDate" value="@System.DateTime.Now" />
+            <input type="hidden" asp-for="Status" value="A" />
+
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CommodityNo" class="control-label col-sm-3"></label>
+                <input asp-for="CommodityNo" class="form-control col-sm-9" />
+                <span asp-validation-for="CommodityNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CommodityName" class="control-label col-sm-3"></label>
+                <input asp-for="CommodityName" class="form-control col-sm-9" />
+                <span asp-validation-for="CommodityName" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CommodityEn" class="control-label col-sm-3"></label>
+                <input asp-for="CommodityEn" class="form-control col-sm-9" />
+                <span asp-validation-for="CommodityEn" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="AlertForeDays" class="control-label col-sm-3"></label>
+                <input asp-for="AlertForeDays" class="form-control col-sm-9" />
+                <span asp-validation-for="AlertForeDays" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="UseLimitDays" class="control-label col-sm-3"></label>
+                <input asp-for="UseLimitDays" class="form-control col-sm-9" />
+                <span asp-validation-for="UseLimitDays" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="TypeFlag" class="control-label col-sm-3"></label>
+                <select asp-for="TypeFlag" class="custom-select col-sm-9">
+                    <option value="0">設備</option>
+                    <option value="1">料件</option>
+                </select>
+                <span asp-validation-for="Status" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="StorageFlag" class="control-label col-sm-3"></label>
+                <select asp-for="StorageFlag" class="custom-select col-sm-9">
+                    <option value="Y">是</option>
+                    <option value="N">否</option>
+                </select>
+                <span asp-validation-for="StorageFlag" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="SmtFlag" class="control-label col-sm-3"></label>
+                <select asp-for="SmtFlag" class="custom-select col-sm-9">
+                    <option value="">NA</option>
+                    <option value="X">錫膏</option>
+                    <option value="H">紅膠</option>
+                    <option value="G">鋼網</option>
+                </select>
+                <span asp-validation-for="StorageFlag" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>
+            <div class="form-group">
+                <input type="submit" value="保存" class="btn btn-primary offset-sm-3" />
+            </div>
+
+        </form>
+    </div>
+</div>
+
+@section Scripts {
+    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial");
+        await Html.RenderPartialAsync("_FileinputScriptsPartial"); }
+
+<script type="text/javascript">
+    $(document).ready(function () {
+        var error = '@Html.ValidationMessage("error")';
+        if ($(error).text() != '') {
+            parent.hg.msg(error);
+        }
+    });
+</script>
+
+
+}
+
diff --git a/AMESCoreStudio.Web/Views/JIG/JIG001U.cshtml b/AMESCoreStudio.Web/Views/JIG/JIG001U.cshtml
new file mode 100644
index 00000000..00a3003e
--- /dev/null
+++ b/AMESCoreStudio.Web/Views/JIG/JIG001U.cshtml
@@ -0,0 +1,107 @@
+@model AMESCoreStudio.WebApi.Models.AMES.OutfitCommodityInfo
+
+
+@{ ViewData["Title"] = "SPC001U";
+    Layout = "~/Views/Shared/_FormLayout.cshtml"; }
+
+
+<style>
+    .control-label {
+        justify-content: flex-end !important;
+    }
+</style>
+
+<div class="row">
+    <div class="col-sm-12">
+        <form enctype="multipart/form-data" method="post" asp-action="JIG001USave">
+            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
+            <input type="hidden" asp-for="CommodityID" />
+            <input type="hidden" asp-for="CreateUserID" />
+            <input type="hidden" asp-for="UpdateUserID" value="@ViewBag.UserID" />
+            <input type="hidden" asp-for="CreateDate" />
+            <input type="hidden" asp-for="UpdateDate" value="@System.DateTime.Now" />
+
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CommodityNo" class="control-label col-sm-3"></label>
+                <input asp-for="CommodityNo" class="form-control col-sm-9" />
+                <span asp-validation-for="CommodityNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CommodityName" class="control-label col-sm-3"></label>
+                <input asp-for="CommodityName" class="form-control col-sm-9" />
+                <span asp-validation-for="CommodityName" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CommodityEn" class="control-label col-sm-3"></label>
+                <input asp-for="CommodityEn" class="form-control col-sm-9" />
+                <span asp-validation-for="CommodityEn" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="AlertForeDays" class="control-label col-sm-3"></label>
+                <input asp-for="AlertForeDays" class="form-control col-sm-9" />
+                <span asp-validation-for="AlertForeDays" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="UseLimitDays" class="control-label col-sm-3"></label>
+                <input asp-for="UseLimitDays" class="form-control col-sm-9" />
+                <span asp-validation-for="UseLimitDays" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="TypeFlag" class="control-label col-sm-3"></label>
+                <select asp-for="TypeFlag" class="custom-select col-sm-9">
+                    <option value="0">設備</option>
+                    <option value="1">料件</option>
+                </select>
+                <span asp-validation-for="Status" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="StorageFlag" class="control-label col-sm-3"></label>
+                <select asp-for="StorageFlag" class="custom-select col-sm-9">
+                    <option value="Y">是</option>
+                    <option value="N">否</option>
+                </select>
+                <span asp-validation-for="StorageFlag" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="SmtFlag" class="control-label col-sm-3"></label>
+                <select asp-for="SmtFlag" class="custom-select col-sm-9">
+                    <option value="">NA</option>
+                    <option value="X">錫膏</option>
+                    <option value="H">紅膠</option>
+                    <option value="G">鋼網</option>
+                </select>
+                <span asp-validation-for="StorageFlag" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="Status" class="control-label col-sm-3"></label>
+                <select asp-for="Status" class="custom-select col-sm-9">
+                    <option value="A">是</option>
+                    <option value="S">否</option>
+                </select>
+                <span asp-validation-for="Status" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>
+            <div class="form-group">
+                <input type="submit" value="保存" class="btn btn-primary offset-sm-3" />
+            </div>
+
+        </form>
+    </div>
+</div>
+
+@section Scripts {
+    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial");
+        await Html.RenderPartialAsync("_FileinputScriptsPartial"); }
+
+    <script type="text/javascript">
+    $(document).ready(function () {
+        var error = '@Html.ValidationMessage("error")';
+        if ($(error).text() != '') {
+            parent.hg.msg(error);
+        }
+    });
+    </script>
+
+
+}
+
diff --git a/AMESCoreStudio.Web/Views/JIG/JIG002.cshtml b/AMESCoreStudio.Web/Views/JIG/JIG002.cshtml
new file mode 100644
index 00000000..a70d83e6
--- /dev/null
+++ b/AMESCoreStudio.Web/Views/JIG/JIG002.cshtml
@@ -0,0 +1,243 @@
+@{
+    ViewData["Title"] = "設備規格資料維護";
+    Layout = "~/Views/Shared/_AMESLayout.cshtml";
+}
+
+<div class="layui-card">
+    <div class="layui-card-header">
+        <div class="layui-form">
+            <div class="layui-form-item ">
+                <div class="layui-inline"><i class="fa fa-file-text-o fa-fw"></i> @ViewBag.Title</div>
+            </div>
+        </div>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form" style="margin-bottom:5px;">
+            <div class="layui-form-item">
+                <div class="layui-inline" style="margin-right:5px;">
+                    <label class="layui-inline layui-form-label">種類歸屬</label>
+                    <div class="layui-input-inline"  style="width:100px;">
+                        <select lay-filter="TypeFlag"  name="TypeFlag" id="TypeFlag"  style="width:100px;">
+                            <option value="-99">全部</option>
+                            <option value="0">設備</option>
+                            <option value="1">料件</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline" style="margin-right:5px;">
+                    <label class="layui-inline layui-form-label">設備種類</label>
+                    <div class="layui-input-inline">
+                        <select name="Commodity" id="Commodity" asp-items="@ViewBag.TypesList" class="custom-select col-sm-2">
+                            <option value="-99">請選擇</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline" style="margin-right:0px;">
+                    <label class="layui-inline layui-form-label">是否有效</label>
+                    <div class="layui-input-inline" style="width:80px;">
+                        <select name="Status" id="Status"  style="width:80px;">
+                            <option value="A">可用</option>
+                            <option value="S">停用</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline" style="margin-left:0px;">
+                    <div class="layui-btn-group">
+                        <button class="layui-btn layui-btn-sm layui-btn-normal" id="querysubmit" lay-filter="querysubmit">
+                            <i class="layui-icon layui-icon-sm">&#xe615;</i>
+                        </button>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <table class="layui-hide" id="test" lay-filter="test"></table>
+    </div>
+</div>
+
+@section Scripts{
+    <script type="text/javascript">
+        //监听表单提交事件
+        //hg.form.onsubmit('querysubmit', function (data) {
+        //    table && table.reload(data);
+        //});
+        var tableCols = [[
+            {
+                field: 'varityID',
+                width: 80,
+                title: '#'
+            },
+            {
+                field: 'varityNo',
+                title: '規格代碼'
+            },
+            {
+                field: 'varityName',
+                title: '規格名稱'
+            },
+            {
+                field: 'safeStock',
+                title: '安全庫存數量'
+            },
+            {
+                field: 'useLimitTimes',
+                title: '預定試用次數'
+            },
+            {
+                field: 'right',
+                width: 200,
+                title: '操作',
+                fixed: 'right',
+                templet: function (d) {
+                    var btn = '<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">修改</a>';
+                    if (d.status == "A")
+                        btn += ' <a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" lay-event="del">停用</a>';
+                    else
+                        btn += ' <a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="del">啟用</a>';
+                    return btn
+                    //return '<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">修改</a> <a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" lay-event="del">删除</a>'
+                }
+            }]
+        ];
+
+        //通过行tool编辑,lay-event="edit"
+        function edit(obj) {
+            if (obj.data.varityID) {
+                hg.open('修改設備規格', '/JIG/JIG002U/' + obj.data.varityID, 640,320);
+            }
+        }
+
+        //通过行tool删除,lay-event="del"
+        function del(obj) {
+            var status;
+            if (obj.data.status == "A")
+                status = "停用";
+            else
+                status = "啟用";
+            if (obj.data.varityID) {
+                hg.confirm("設備規格:" + obj.data.varityName + ",确定要" + status +"吗?", function () {
+                    $.ajax({
+                        url: '/JIG/JIG002D',
+                        data: { id: obj.data.varityID },
+                        type: 'POST',
+                        success: function (data) {
+                            if (data.success) {
+                                obj.del(); //只删本地数据
+                                hg.msghide(status +"成功!");
+                            }
+                            else {
+                                hg.msg(data.msg);
+                            }
+                        },
+                        error: function () {
+                            hg.msg("网络请求失败!");
+                        }
+                    });
+                });
+            }
+        }
+        var toolbar = [{
+            text: '新增',
+            layuiicon: '&#xe608;',
+            class: 'layui-btn-normal',
+            handler: function () {
+                hg.open('新增設備規格', '/JIG/JIG002C', 640, 320);
+
+            }
+        }
+        ];
+
+        ////搜索
+        $('#querysubmit').click(function () {
+
+            hg.msghide("刷新数据!");
+            tt();
+
+        });
+
+        //$("#TypeFlag").change(function () {
+        //    alert("123");
+        //    var data = $("#TypeFlag").val();
+        //    getCommodityByType(data);
+        //});
+        layui.use(['form', 'layer', 'laydate'], function () {
+            form = layui.form;
+            form.on('select(TypeFlag)', function (data) {
+                var data = $("#TypeFlag").val();
+                console.info(data);
+                getCommodityByType(data);
+            });
+
+        });
+
+        function getCommodityByType(data) {
+            var TypeFlag = $("#TypeFlag").val();
+            $.ajax({
+                url: "/JIG/GetOutfitCommodityInfoesByQuery?TypeFlag=" + data +"&Status=A",
+                dataType: 'json',
+                //data: { id: data },
+                contentType: "application/json",
+                type: 'get',
+                success: function (result) {
+                    if (result.data) {
+                        $("#Commodity").empty();
+                        var count = 0;
+                        $('#Commodity').append(new Option("全部", "-99"));
+                        //if (TypeFlag != "*") {
+                        //    $.each(result.data, function (index, item) {
+                        //        if (item.typeFlag == data) {
+                        //            $('#Commodity').append(new Option(item.exceptionClassName, item.exceptionClassNo));//修改參數
+                        //            count = count + 1;
+                        //        }
+                        //    });
+                        //}
+                        //else {
+                        //    $.each(result.data, function (index, item) {
+                        //        $('#Commodity').append(new Option(item.commodityName, item.commodityID));//修改參數
+                        //    });
+                        //}
+                        $.each(result.data, function (index, item) {
+                            $('#Commodity').append(new Option(item.commodityName, item.commodityID));
+                            count = count + 1;
+                        });
+                        if (count == 0) {
+                            $("#Commodity").empty();
+                            $('#Commodity').append(new Option("無選項", ""));
+
+                        }
+                    }
+                    else {
+                        $("#Commodity").empty();
+                        $('#Commodity').append(new Option("無選項", ""));
+                    }
+                    layui.form.render("select");
+                }
+            });
+        };
+
+        ////搜索
+        $('#querysubmit').click(function () {
+            //console.log('#btnSearch');
+            //var itemNo = $("#itemNo").val();
+            //var itemNo = $("#itemNo").val();
+            //if (itemNo) {
+            hg.msghide("刷新数据!");
+            tt();
+            //}
+            //else {
+            //    alert("請選擇料號!!!!");
+            //}
+            //return false;
+
+        });
+
+        var table;
+        $(function () {
+            tt();
+        });
+        //基本数据表格
+        function tt() {
+            table = hg.table.datatable('test', '設備規格維護', '/JIG/GetOutfitVarityInfoesByQuery?TypeFlag=' + $("#TypeFlag").val() + '&CommodityID=' + $("#Commodity").val() + '&Status=' + $("#Status").val(), {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']);
+        }
+        
+    </script>
+}
\ No newline at end of file
diff --git a/AMESCoreStudio.Web/Views/JIG/JIG002C.cshtml b/AMESCoreStudio.Web/Views/JIG/JIG002C.cshtml
new file mode 100644
index 00000000..7ca2889e
--- /dev/null
+++ b/AMESCoreStudio.Web/Views/JIG/JIG002C.cshtml
@@ -0,0 +1,84 @@
+@model AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo
+
+
+@{ ViewData["Title"] = "SPC002C";
+    Layout = "~/Views/Shared/_FormLayout.cshtml"; }
+
+
+<style>
+    .control-label {
+        justify-content: flex-end !important;
+    }
+</style>
+
+<div class="row">
+    <div class="col-sm-12">
+        <form enctype="multipart/form-data" method="post" asp-action="JIG002CSave">
+            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
+            <input type="hidden" asp-for="VarityID" value="0" />
+            <input type="hidden" asp-for="CreateUserID" value="@ViewBag.UserID" />
+            <input type="hidden" asp-for="UpdateUserID" value="@ViewBag.UserID" />
+            <input type="hidden" asp-for="CreateDate" value="@System.DateTime.Now" />
+            <input type="hidden" asp-for="UpdateDate" value="@System.DateTime.Now" />
+            <input type="hidden" asp-for="Status" value="A" />
+
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CommodityID" class="control-label col-sm-3"></label>
+                <select asp-for="CommodityID"  asp-items="@ViewBag.TypesList"  class="custom-select col-sm-9">
+                    <option value="">請選擇</option>
+                </select>
+                <span asp-validation-for="CommodityID" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="VarityNo" class="control-label col-sm-3"></label>
+                <input asp-for="VarityNo" class="form-control col-sm-9" />
+                <span asp-validation-for="VarityNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="VarityName" class="control-label col-sm-3"></label>
+                <input asp-for="VarityName" class="form-control col-sm-9" />
+                <span asp-validation-for="VarityName" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="SafeStock" class="control-label col-sm-3"></label>
+                <input asp-for="SafeStock" class="form-control col-sm-9" />
+                <span asp-validation-for="SafeStock" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="UseLimitTimes" class="control-label col-sm-3"></label>
+                <input asp-for="UseLimitTimes" class="form-control col-sm-9" />
+                <span asp-validation-for="UseLimitTimes" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            @*<div class="form-group form-inline my-sm-1">
+            <label asp-for="Status" class="control-label col-sm-3"></label>
+            <select asp-for="Status" class="custom-select col-sm-9">
+                <option value="A">可用</option>
+                <option value="S">停用</option>
+            </select>
+            <span asp-validation-for="Status" class="text-danger offset-sm-3 my-sm-1"></span>
+        </div>*@
+            <span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>
+            <div class="form-group">
+                <input type="submit" value="保存" class="btn btn-primary offset-sm-3" />
+            </div>
+
+        </form>
+    </div>
+</div>
+
+@section Scripts {
+    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial");
+        await Html.RenderPartialAsync("_FileinputScriptsPartial"); }
+
+<script type="text/javascript">
+    $(document).ready(function () {
+        var error = '@Html.ValidationMessage("error")';
+        if ($(error).text() != '') {
+            parent.hg.msg(error);
+        }
+    });
+</script>
+
+
+}
+
diff --git a/AMESCoreStudio.Web/Views/JIG/JIG002U.cshtml b/AMESCoreStudio.Web/Views/JIG/JIG002U.cshtml
new file mode 100644
index 00000000..4f770999
--- /dev/null
+++ b/AMESCoreStudio.Web/Views/JIG/JIG002U.cshtml
@@ -0,0 +1,84 @@
+@model AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo
+
+
+@{ ViewData["Title"] = "SPC002U";
+    Layout = "~/Views/Shared/_FormLayout.cshtml"; }
+
+
+<style>
+    .control-label {
+        justify-content: flex-end !important;
+    }
+</style>
+
+<div class="row">
+    <div class="col-sm-12">
+        <form enctype="multipart/form-data" method="post" asp-action="JIG002USave">
+            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
+            <input type="hidden" asp-for="VarityID" />
+            <input type="hidden" asp-for="CreateUserID"  />
+            <input type="hidden" asp-for="UpdateUserID" value="@ViewBag.UserID" />
+            <input type="hidden" asp-for="CreateDate"  />
+            <input type="hidden" asp-for="UpdateDate" value="@System.DateTime.Now" />
+            <input type="hidden" asp-for="Status" value="A" />
+
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CommodityID" class="control-label col-sm-3"></label>
+                <select asp-for="CommodityID"  asp-items="@ViewBag.TypesList"  class="custom-select col-sm-9">
+                    <option value="">請選擇</option>
+                </select>
+                <span asp-validation-for="CommodityID" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="VarityNo" class="control-label col-sm-3"></label>
+                <input asp-for="VarityNo" class="form-control col-sm-9" />
+                <span asp-validation-for="VarityNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="VarityName" class="control-label col-sm-3"></label>
+                <input asp-for="VarityName" class="form-control col-sm-9" />
+                <span asp-validation-for="VarityName" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="SafeStock" class="control-label col-sm-3"></label>
+                <input asp-for="SafeStock" class="form-control col-sm-9" />
+                <span asp-validation-for="SafeStock" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="UseLimitTimes" class="control-label col-sm-3"></label>
+                <input asp-for="UseLimitTimes" class="form-control col-sm-9" />
+                <span asp-validation-for="UseLimitTimes" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                    <label asp-for="Status" class="control-label col-sm-3"></label>
+                    <select asp-for="Status" class="custom-select col-sm-9">
+                        <option value="A">可用</option>
+                        <option value="S">停用</option>
+                    </select>
+                    <span asp-validation-for="Status" class="text-danger offset-sm-3 my-sm-1"></span>
+                </div>
+            <span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>
+            <div class="form-group">
+                <input type="submit" value="保存" class="btn btn-primary offset-sm-3" />
+            </div>
+
+        </form>
+    </div>
+</div>
+
+@section Scripts {
+    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial");
+        await Html.RenderPartialAsync("_FileinputScriptsPartial"); }
+
+    <script type="text/javascript">
+    $(document).ready(function () {
+        var error = '@Html.ValidationMessage("error")';
+        if ($(error).text() != '') {
+            parent.hg.msg(error);
+        }
+    });
+    </script>
+
+
+}
+
diff --git a/AMESCoreStudio.Web/Views/JIG/JIG003.cshtml b/AMESCoreStudio.Web/Views/JIG/JIG003.cshtml
new file mode 100644
index 00000000..cc54664c
--- /dev/null
+++ b/AMESCoreStudio.Web/Views/JIG/JIG003.cshtml
@@ -0,0 +1,102 @@
+@{
+    ViewData["Title"] = "設備廠商資料維護";
+    Layout = "~/Views/Shared/_AMESLayout.cshtml";
+}
+
+<div class="layui-card">
+    <div class="layui-card-header">
+        <div class="layui-form">
+            <div class="layui-form-item ">
+                <div class="layui-inline"><i class="fa fa-file-text-o fa-fw"></i> @ViewBag.Title</div>
+            </div>
+        </div>
+    </div>
+    <div class="layui-card-body">
+        <table class="layui-hide" id="test" lay-filter="test"></table>
+    </div>
+</div>
+
+@section Scripts{
+    <script type="text/javascript">
+        //监听表单提交事件
+        hg.form.onsubmit('querysubmit', function (data) {
+            table && table.reload(data);
+        });
+        var tableCols = [[
+            {
+                field: 'vendorID',
+                width: 80,
+                title: '#'
+            },
+            {
+                field: 'vendorName',
+                title: '廠商名稱'
+            },
+            {
+                field: 'telNo',
+                title: '連絡電話'
+            },
+            {
+                field: 'address',
+                title: '地址'
+            },
+            {
+                field: 'memo',
+                title: '備註'
+            },
+            {
+                field: 'right',
+                width: 200,
+                title: '操作',
+                fixed: 'right',
+                templet: function (d) {
+                    return '<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">修改</a> <a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" lay-event="del">删除</a>'
+                }
+            }]
+        ];
+
+        //通过行tool编辑,lay-event="edit"
+        function edit(obj) {
+            if (obj.data.vendorID) {
+                hg.open('修改設備廠商', '/JIG/JIG003U/' + obj.data.vendorID, 640,320);
+            }
+        }
+
+        //通过行tool删除,lay-event="del"
+        function del(obj) {
+            if (obj.data.vendorID) {
+                hg.confirm("設備廠商:" + obj.data.vendorName + ",确定要删除吗?", function () {
+                    $.ajax({
+                        url: '/JIG/JIG003D',
+                        data: { id: obj.data.vendorID },
+                        type: 'POST',
+                        success: function (data) {
+                            if (data.success) {
+                                obj.del(); //只删本地数据
+                                hg.msghide("删除成功!");
+                            }
+                            else {
+                                hg.msg(data.msg);
+                            }
+                        },
+                        error: function () {
+                            hg.msg("网络请求失败!");
+                        }
+                    });
+                });
+            }
+        }
+        var toolbar = [{
+            text: '新增',
+            layuiicon: '&#xe608;',
+            class: 'layui-btn-normal',
+            handler: function () {
+                hg.open('新增設備廠商', '/JIG/JIG003C', 640, 320);
+
+            }
+        }
+        ];
+        //基本数据表格
+        var table = hg.table.datatable('test', '設備廠商維護', '/JIG/GetOutfitVendorInfoes', {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']);
+    </script>
+}
\ No newline at end of file
diff --git a/AMESCoreStudio.Web/Views/JIG/JIG003C.cshtml b/AMESCoreStudio.Web/Views/JIG/JIG003C.cshtml
new file mode 100644
index 00000000..27b46578
--- /dev/null
+++ b/AMESCoreStudio.Web/Views/JIG/JIG003C.cshtml
@@ -0,0 +1,68 @@
+@model AMESCoreStudio.WebApi.Models.AMES.OutfitVendorInfo
+
+
+@{ ViewData["Title"] = "SPC003C";
+    Layout = "~/Views/Shared/_FormLayout.cshtml"; }
+
+
+<style>
+    .control-label {
+        justify-content: flex-end !important;
+    }
+</style>
+
+<div class="row">
+    <div class="col-sm-12">
+        <form enctype="multipart/form-data" method="post" asp-action="JIG003CSave">
+            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
+            <input type="hidden" asp-for="VendorID" value="0" />
+            <input type="hidden" asp-for="CreateUserID" value="@ViewBag.UserID" />
+            <input type="hidden" asp-for="UpdateUserID" value="@ViewBag.UserID" />
+            <input type="hidden" asp-for="CreateDate" value="@System.DateTime.Now" />
+            <input type="hidden" asp-for="UpdateDate" value="@System.DateTime.Now" />
+
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="VendorName" class="control-label col-sm-3"></label>
+                <input asp-for="VendorName" class="form-control col-sm-9" />
+                <span asp-validation-for="VendorName" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="TelNo" class="control-label col-sm-3"></label>
+                <input asp-for="TelNo" class="form-control col-sm-9" />
+                <span asp-validation-for="TelNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="Address" class="control-label col-sm-3"></label>
+                <input asp-for="Address" class="form-control col-sm-9" />
+                <span asp-validation-for="Address" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="Memo" class="control-label col-sm-3"></label>
+                <input asp-for="Memo" class="form-control col-sm-9" />
+                <span asp-validation-for="Memo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>
+            <div class="form-group">
+                <input type="submit" value="保存" class="btn btn-primary offset-sm-3" />
+            </div>
+
+        </form>
+    </div>
+</div>
+
+@section Scripts {
+    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial");
+        await Html.RenderPartialAsync("_FileinputScriptsPartial"); }
+
+<script type="text/javascript">
+    $(document).ready(function () {
+        var error = '@Html.ValidationMessage("error")';
+        if ($(error).text() != '') {
+            parent.hg.msg(error);
+        }
+    });
+</script>
+
+
+}
+
diff --git a/AMESCoreStudio.Web/Views/JIG/JIG003U.cshtml b/AMESCoreStudio.Web/Views/JIG/JIG003U.cshtml
new file mode 100644
index 00000000..4f88156d
--- /dev/null
+++ b/AMESCoreStudio.Web/Views/JIG/JIG003U.cshtml
@@ -0,0 +1,68 @@
+@model AMESCoreStudio.WebApi.Models.AMES.OutfitVendorInfo
+
+
+@{ ViewData["Title"] = "SPC003U";
+    Layout = "~/Views/Shared/_FormLayout.cshtml"; }
+
+
+<style>
+    .control-label {
+        justify-content: flex-end !important;
+    }
+</style>
+
+<div class="row">
+    <div class="col-sm-12">
+        <form enctype="multipart/form-data" method="post" asp-action="JIG003USave">
+            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
+            <input type="hidden" asp-for="VendorID"  />
+            <input type="hidden" asp-for="CreateUserID" />
+            <input type="hidden" asp-for="UpdateUserID" value="@ViewBag.UserID" />
+            <input type="hidden" asp-for="CreateDate" />
+            <input type="hidden" asp-for="UpdateDate" value="@System.DateTime.Now" />
+
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="VendorName" class="control-label col-sm-3"></label>
+                <input asp-for="VendorName" class="form-control col-sm-9" />
+                <span asp-validation-for="VendorName" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="TelNo" class="control-label col-sm-3"></label>
+                <input asp-for="TelNo" class="form-control col-sm-9" />
+                <span asp-validation-for="TelNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="Address" class="control-label col-sm-3"></label>
+                <input asp-for="Address" class="form-control col-sm-9" />
+                <span asp-validation-for="Address" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="Memo" class="control-label col-sm-3"></label>
+                <input asp-for="Memo" class="form-control col-sm-9" />
+                <span asp-validation-for="Memo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>
+            <div class="form-group">
+                <input type="submit" value="保存" class="btn btn-primary offset-sm-3" />
+            </div>
+
+        </form>
+    </div>
+</div>
+
+@section Scripts {
+    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial");
+        await Html.RenderPartialAsync("_FileinputScriptsPartial"); }
+
+    <script type="text/javascript">
+    $(document).ready(function () {
+        var error = '@Html.ValidationMessage("error")';
+        if ($(error).text() != '') {
+            parent.hg.msg(error);
+        }
+    });
+    </script>
+
+
+}
+
diff --git a/AMESCoreStudio.Web/Views/JIG/JIG004.cshtml b/AMESCoreStudio.Web/Views/JIG/JIG004.cshtml
new file mode 100644
index 00000000..17942a31
--- /dev/null
+++ b/AMESCoreStudio.Web/Views/JIG/JIG004.cshtml
@@ -0,0 +1,293 @@
+@{
+    ViewData["Title"] = "設備基本數據維護";
+    Layout = "~/Views/Shared/_AMESLayout.cshtml";
+}
+
+<div class="layui-card">
+    <div class="layui-card-header">
+        <div class="layui-form">
+            <div class="layui-form-item ">
+                <div class="layui-inline"><i class="fa fa-file-text-o fa-fw"></i> @ViewBag.Title</div>
+            </div>
+        </div>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form" style="margin-bottom:5px;">
+            <div class="layui-form-item">
+                <div class="layui-inline" style="margin-right:5px;">
+                    <label class="layui-inline layui-form-label">種類歸屬</label>
+                    <div class="layui-input-inline" style="width:90px">
+                        <select lay-filter="TypeFlag" name="TypeFlag" id="TypeFlag" style="width:90px">
+                            <option value="-99">全部</option>
+                            <option value="0">設備</option>
+                            <option value="1">料件</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline" style="margin-right:5px;">
+                    <label class="layui-inline layui-form-label">設備種類</label>
+                    <div class="layui-input-inline" style="width:120px">
+                        <select  lay-filter="Commodity"  name="Commodity" id="Commodity" asp-items="@ViewBag.TypesList" style="width:120px">
+                            <option value="-99">全部</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline" style="margin-right:5px;">
+                    <label class="layui-inline layui-form-label">設備規格</label>
+                    <div class="layui-input-inline" >
+                        <select name="Varity" id="Varity" >
+                            <option value="-99">全部</option>
+                        </select>
+                    </div>
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <div class="layui-inline" style="margin-right:5px;">
+                    <label class="layui-inline layui-form-label">管理編號</label>
+                    <div class="layui-input-inline">
+                        <input type="text" name="QANo" id="QANo" placeholder="请输入管理編號" autocomplete="off" class="layui-input">
+                    </div>
+                </div>
+                <div class="layui-inline" style="margin-right:5px;">
+                    <label class="layui-inline layui-form-label">財產名稱</label>
+                    <div class="layui-input-inline" >
+                        <input type="text" name="PartNo" id="PartNo" placeholder="请输入財產名稱" autocomplete="off" class="layui-input">
+                    </div>
+                </div>
+                <div class="layui-inline" style="margin-right:5px;">
+                    <label class="layui-inline layui-form-label">是否有效</label>
+                    <div class="layui-input-inline" style="width:80px">
+                        <select name="Status" id="Status" style="width:80px">
+                            <option value="*">全部</option>
+                            <option value="A">有效</option>
+                            <option value="S">無效</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline" style="margin-left:0px;">
+                    <div class="layui-btn-group">
+                        <button class="layui-btn layui-btn-sm layui-btn-normal" id="querysubmit" lay-filter="querysubmit">
+                            <i class="layui-icon layui-icon-sm">&#xe615;</i>
+                        </button>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <table class="layui-hide" id="test" lay-filter="test"></table>
+    </div>
+</div>
+
+@section Scripts{
+    <script type="text/javascript">
+        var tableCols = [[
+            {
+                field: 'outfitID',
+                width: 80,
+                title: '#'
+            },
+            {
+                field: 'outfitNo',
+                title: '設備編碼'
+            },
+            {
+                field: 'qaNo',
+                title: '管理編號'
+            },
+            {
+                field: 'partNo',
+                title: '財產名稱'
+            },
+            {
+                field: 'statusNo',
+                title: '狀態',
+                templet: function (d) {
+                    var btn ;
+                    if (d.statusNo == "A")
+                        btn = '有效';
+                    else
+                        btn = '無效';
+                    return btn
+                    //return '<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">修改</a> <a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" lay-event="del">删除</a>'
+                }
+            },
+            {
+                field: 'locationNo',
+                title: '儲位'
+            },
+            {
+                field: 'custodianName',
+                title: '保管人'
+            },
+            {
+                field: 'right',
+                width: 200,
+                title: '操作',
+                fixed: 'right',
+                templet: function (d) {
+                    var btn = '<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">修改</a>';
+                    if (d.statusNo == "A")
+                        btn += ' <a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" lay-event="del">停用</a>';
+                    else
+                        btn += ' <a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="del">啟用</a>';
+                    return btn
+                    //return '<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">修改</a> <a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" lay-event="del">删除</a>'
+                }
+            }]
+        ];
+
+        //通过行tool编辑,lay-event="edit"
+        function edit(obj) {
+            if (obj.data.outfitID) {
+                hg.open('修改設備基本資料', '/JIG/JIG004U/' + obj.data.outfitID, 640,320);
+            }
+        }
+
+        //通过行tool删除,lay-event="del"
+        function del(obj) {
+            var status;
+            if (obj.data.status == "A")
+                status = "停用";
+            else
+                status = "啟用";
+
+            if (obj.data.outfitID) {
+                hg.confirm("設備:" + obj.data.outfitNo + ",确定要" + status +"吗?", function () {
+                    $.ajax({
+                        url: '/JIG/JIG004D',
+                        data: { id: obj.data.outfitID },
+                        type: 'POST',
+                        success: function (data) {
+                            if (data.success) {
+                                obj.del(); //只删本地数据
+                                hg.msghide(status+"成功!");
+                            }
+                            else {
+                                hg.msg(data.msg);
+                            }
+                        },
+                        error: function () {
+                            hg.msg("网络请求失败!");
+                        }
+                    });
+                });
+            }
+        }
+        var toolbar = [{
+            text: '新增',
+            layuiicon: '&#xe608;',
+            class: 'layui-btn-normal',
+            handler: function () {
+                hg.open('新增設備基本資料', '/JIG/JIG004C', 640, 320);
+
+            }
+        }
+        ];
+
+        ////搜索
+        $('#querysubmit').click(function () {
+
+            hg.msghide("刷新数据!");
+            tt();
+
+        });
+
+        //$("#TypeFlag").change(function () {
+        //    alert("123");
+        //    var data = $("#TypeFlag").val();
+        //    getCommodityByType(data);
+        //});
+        layui.use(['form', 'layer', 'laydate'], function () {
+            form = layui.form;
+            form.on('select(TypeFlag)', function (data) {
+                var data = $("#TypeFlag").val();
+                console.info(data);
+                getCommodityByType(data);
+            });
+            form.on('select(Commodity)', function (data) {
+                var data = $("#Commodity").val();
+                console.info(data);
+                getVarityByCommodityID(data);
+            });
+
+        });
+
+        function getCommodityByType(data) {
+            var TypeFlag = $("#TypeFlag").val();
+            $.ajax({
+                url: "/JIG/GetOutfitCommodityInfoesByQuery?TypeFlag=" + data +"&Status=A",
+                dataType: 'json',
+                //data: { id: data },
+                contentType: "application/json",
+                type: 'get',
+                success: function (result) {
+                    if (result.data) {
+                        $("#Commodity").empty();
+                        var count = 0;
+                        $('#Commodity').append(new Option("全部", "-99"));
+                        $.each(result.data, function (index, item) {
+                            $('#Commodity').append(new Option(item.commodityName, item.commodityID));
+                            count = count + 1;
+                        });
+                        if (count == 0) {
+                            $("#Commodity").empty();
+                            $('#Commodity').append(new Option("無選項", ""));
+
+                        }
+                    }
+                    else {
+                        $("#Commodity").empty();
+                        $('#Commodity').append(new Option("無選項", ""));
+                    }
+                    layui.form.render("select");
+                }
+            });
+        };
+        function getVarityByCommodityID(data) {
+            $.ajax({
+                url: "/JIG/GetOutfitVarityInfoesByQuery?TypeFlag=*&CommodityID=" + data + "&Status=A",
+                dataType: 'json',
+                //data: { id: data },
+                contentType: "application/json",
+                type: 'get',
+                success: function (result) {
+                    if (result.data) {
+                        $("#Varity").empty();
+                        var count = 0;
+                        $('#Varity').append(new Option("全部", "-99"));
+                        $.each(result.data, function (index, item) {
+                            $('#Varity').append(new Option(item.varityName, item.varityID));
+                            count = count + 1;
+                        });
+                        if (count == 0) {
+                            $("#Varity").empty();
+                            $('#Varity').append(new Option("無選項", ""));
+
+                        }
+                    }
+                    else {
+                        $("#Varity").empty();
+                        $('#Varity').append(new Option("無選項", ""));
+                    }
+                    layui.form.render("select");
+                }
+            });
+        };
+        ////搜索
+        $('#querysubmit').click(function () {
+            hg.msghide("刷新数据!");
+            tt();
+        });
+
+        var table;
+        $(function () {
+            tt();
+        });
+        //基本数据表格
+        function tt() {
+            table = hg.table.datatable('test', '設備規格維護',
+                '/JIG/GetOutfitInfoesByQuery?TypeFlag=' + $("#TypeFlag").val() + '&CommodityID=' + $("#Commodity").val() + '&VarityID=' + $("#Varity").val() + '&Status=' + $("#Status").val() + '&QANo=' + $("#QANo").val() + '&PartNo=' + $("#PartNo").val()
+                , {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']);
+        }
+        
+    </script>
+}
\ No newline at end of file
diff --git a/AMESCoreStudio.Web/Views/JIG/JIG004C.cshtml b/AMESCoreStudio.Web/Views/JIG/JIG004C.cshtml
new file mode 100644
index 00000000..b9aceb3a
--- /dev/null
+++ b/AMESCoreStudio.Web/Views/JIG/JIG004C.cshtml
@@ -0,0 +1,204 @@
+@model AMESCoreStudio.WebApi.Models.AMES.OutfitInfo
+
+
+@{ ViewData["Title"] = "SPC004C";
+    Layout = "~/Views/Shared/_FormLayout.cshtml"; }
+
+
+<style>
+    .control-label {
+        justify-content: flex-end !important;
+    }
+</style>
+
+<div class="row">
+    <div class="col-sm-12">
+        <form enctype="multipart/form-data" method="post" asp-action="JIG004CSave">
+            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
+            <input type="hidden" asp-for="OutfitID" value="0" />
+            <input type="hidden" asp-for="CreateUserID" value="@ViewBag.UserID" />
+            <input type="hidden" asp-for="UpdateUserID" value="@ViewBag.UserID" />
+            <input type="hidden" asp-for="CreateDate" value="@System.DateTime.Now" />
+            <input type="hidden" asp-for="UpdateDate" value="@System.DateTime.Now" />
+            <input type="hidden" asp-for="StatusNo" value="A" />
+
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="FactoryCode" class="control-label col-sm-3"></label>
+                <select asp-for="FactoryCode" asp-items="@ViewBag.Factory" class="custom-select col-sm-9">
+                    <option value="">請選擇</option>
+                </select>
+                <span asp-validation-for="FactoryCode" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CommodityID" class="control-label col-sm-3"></label>
+                <select id="CommodityID" asp-for="CommodityID" asp-items="@ViewBag.TypesList" class="custom-select col-sm-9">
+                    <option value="">請選擇</option>
+                </select>
+                <span asp-validation-for="CommodityID" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="VarietyID" class="control-label col-sm-3"></label>
+                <select id="Variety" asp-for="VarietyID" asp-items="@ViewBag.VarietyList" class="custom-select col-sm-9">
+                    <option value="">請選擇</option>
+                </select>
+                <span asp-validation-for="CommodityID" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="StockQty" class="control-label col-sm-3"></label>
+                <input asp-for="StockQty" class="form-control col-sm-9" />
+                <span asp-validation-for="StockQty" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="QANo" class="control-label col-sm-3"></label>
+                <input asp-for="QANo" class="form-control col-sm-9" />
+                <span asp-validation-for="QANo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="PartNo" class="control-label col-sm-3"></label>
+                <input asp-for="PartNo" class="form-control col-sm-9" />
+                <span asp-validation-for="PartNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="OutfitNo" class="control-label col-sm-3"></label>
+                <input asp-for="OutfitNo" class="form-control col-sm-9" />
+                <span asp-validation-for="OutfitNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="VendorID" class="control-label col-sm-3"></label>
+                <select asp-for="VendorID" asp-items="@ViewBag.VendorList" class="custom-select col-sm-9">
+                    <option value="">請選擇</option>
+                </select>
+                <span asp-validation-for="CommodityID" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="ModelNo" class="control-label col-sm-3"></label>
+                <input asp-for="ModelNo" class="form-control col-sm-9" />
+                <span asp-validation-for="ModelNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="BarcodeNo" class="control-label col-sm-3"></label>
+                <input asp-for="BarcodeNo" class="form-control col-sm-9" />
+                <span asp-validation-for="BarcodeNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="PuchaseDate" class="control-label col-sm-3"></label>
+                <input asp-for="PuchaseDate" type="date" class="form-control col-sm-9" />
+                <span asp-validation-for="PuchaseDate" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="UnitPrice" class="control-label col-sm-3"></label>
+                <input asp-for="UnitPrice" class="form-control col-sm-9" />
+                <span asp-validation-for="UnitPrice" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CustodianDept" class="control-label col-sm-3"></label>
+                <input asp-for="CustodianDept" class="form-control col-sm-9" />
+                <span asp-validation-for="CustodianDept" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CustodianName" class="control-label col-sm-3"></label>
+                <input asp-for="CustodianName" class="form-control col-sm-9" />
+                <span asp-validation-for="CustodianName" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="AreaNo" class="control-label col-sm-3"></label>
+                <input asp-for="AreaNo" class="form-control col-sm-9" />
+                <span asp-validation-for="AreaNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="LocationNo" class="control-label col-sm-3"></label>
+                <input asp-for="LocationNo" class="form-control col-sm-9" />
+                <span asp-validation-for="LocationNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CheckDate" class="control-label col-sm-3"></label>
+                <input asp-for="CheckDate" type="date" class="form-control col-sm-9" />
+                <span asp-validation-for="CheckDate" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="NextDate" class="control-label col-sm-3"></label>
+                <input asp-for="NextDate" type="date" class="form-control col-sm-9" />
+                <span asp-validation-for="NextDate" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="Remark" class="control-label col-sm-3"></label>
+                <input asp-for="Remark" class="form-control col-sm-9" />
+                <span asp-validation-for="Remark" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="Master" class="control-label col-sm-3"></label>
+                <select asp-for="Master" class="custom-select col-sm-9">
+                    <option value="Y">是</option>
+                    <option value="N">否</option>
+                </select>
+                <span asp-validation-for="Master" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            @*<div class="form-group form-inline my-sm-1">
+            <label asp-for="Status" class="control-label col-sm-3"></label>
+            <select asp-for="Status" class="custom-select col-sm-9">
+                <option value="A">可用</option>
+                <option value="S">停用</option>
+            </select>
+            <span asp-validation-for="Status" class="text-danger offset-sm-3 my-sm-1"></span>
+        </div>*@
+            <span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>
+            <div class="form-group">
+                <input type="submit" value="保存" class="btn btn-primary offset-sm-3" />
+            </div>
+
+        </form>
+    </div>
+</div>
+
+@section Scripts {
+    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial");
+        await Html.RenderPartialAsync("_FileinputScriptsPartial"); }
+
+<script type="text/javascript">
+    $(document).ready(function () {
+        var error = '@Html.ValidationMessage("error")';
+        if ($(error).text() != '') {
+            parent.hg.msg(error);
+        }
+    });
+
+
+    $("#CommodityID").change(function () {
+        var data = $("#CommodityID").val();
+        getVarityByCommodityID(data);
+    });
+    function getVarityByCommodityID(data) {
+        $.ajax({
+            url: "/JIG/GetOutfitVarityInfoesByQuery?TypeFlag=*&CommodityID=" + data + "&Status=A",
+            dataType: 'json',
+            //data: { id: data },
+            contentType: "application/json",
+            type: 'get',
+            success: function (result) {
+                if (result.data) {
+                    $("#Variety").empty();
+                    var count = 0;
+                    $('#Variety').append(new Option("全部", "-99"));
+                    $.each(result.data, function (index, item) {
+                        $('#Variety').append(new Option(item.varityName, item.varityID));
+                        count = count + 1;
+                    });
+                    if (count == 0) {
+                        $("#Variety").empty();
+                        $('#Variety').append(new Option("無選項", ""));
+
+                    }
+                }
+                else {
+                    $("#Variety").empty();
+                    $('#Variety').append(new Option("無選項", ""));
+                }
+                layui.form.render("select");
+            }
+        });
+    };
+</script>
+
+
+}
+
diff --git a/AMESCoreStudio.Web/Views/JIG/JIG004U.cshtml b/AMESCoreStudio.Web/Views/JIG/JIG004U.cshtml
new file mode 100644
index 00000000..18c0075d
--- /dev/null
+++ b/AMESCoreStudio.Web/Views/JIG/JIG004U.cshtml
@@ -0,0 +1,205 @@
+@model AMESCoreStudio.WebApi.Models.AMES.OutfitInfo
+
+
+@{ ViewData["Title"] = "SPC004U";
+    Layout = "~/Views/Shared/_FormLayout.cshtml"; }
+
+
+<style>
+    .control-label {
+        justify-content: flex-end !important;
+    }
+</style>
+
+<div class="row">
+    <div class="col-sm-12">
+        <form enctype="multipart/form-data" method="post" asp-action="JIG004USave">
+            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
+            <input type="hidden" asp-for="OutfitID" />
+            <input type="hidden" asp-for="CreateUserID" />
+            <input type="hidden" asp-for="UpdateUserID" value="@ViewBag.UserID" />
+            <input type="hidden" asp-for="CreateDate" />
+            <input type="hidden" asp-for="UpdateDate" value="@System.DateTime.Now" />
+            <input type="hidden" asp-for="TypeFlag"  />
+
+
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="FactoryCode" class="control-label col-sm-3"></label>
+                <select asp-for="FactoryCode" asp-items="@ViewBag.Factory" class="custom-select col-sm-9">
+                    <option value="">請選擇</option>
+                </select>
+                <span asp-validation-for="FactoryCode" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CommodityID" class="control-label col-sm-3"></label>
+                <select id="CommodityID" asp-for="CommodityID" asp-items="@ViewBag.TypesList" class="custom-select col-sm-9">
+                    <option value="">請選擇</option>
+                </select>
+                <span asp-validation-for="CommodityID" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="VarietyID" class="control-label col-sm-3"></label>
+                <select id="Variety" asp-for="VarietyID" asp-items="@ViewBag.VarityList" class="custom-select col-sm-9">
+                    <option value="">請選擇</option>
+                </select>
+                <span asp-validation-for="CommodityID" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="StockQty" class="control-label col-sm-3"></label>
+                <input asp-for="StockQty" class="form-control col-sm-9" />
+                <span asp-validation-for="StockQty" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="QANo" class="control-label col-sm-3"></label>
+                <input asp-for="QANo" class="form-control col-sm-9" />
+                <span asp-validation-for="QANo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="PartNo" class="control-label col-sm-3"></label>
+                <input asp-for="PartNo" class="form-control col-sm-9" />
+                <span asp-validation-for="PartNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="OutfitNo" class="control-label col-sm-3"></label>
+                <input asp-for="OutfitNo" class="form-control col-sm-9" />
+                <span asp-validation-for="OutfitNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="VendorID" class="control-label col-sm-3"></label>
+                <select asp-for="VendorID" asp-items="@ViewBag.VendorList" class="custom-select col-sm-9">
+                    <option value="">請選擇</option>
+                </select>
+                <span asp-validation-for="CommodityID" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="ModelNo" class="control-label col-sm-3"></label>
+                <input asp-for="ModelNo" class="form-control col-sm-9" />
+                <span asp-validation-for="ModelNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="BarcodeNo" class="control-label col-sm-3"></label>
+                <input asp-for="BarcodeNo" class="form-control col-sm-9" />
+                <span asp-validation-for="BarcodeNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="PuchaseDate" class="control-label col-sm-3"></label>
+                <input asp-for="PuchaseDate" type="date" class="form-control col-sm-9" />
+                <span asp-validation-for="PuchaseDate" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="UnitPrice" class="control-label col-sm-3"></label>
+                <input asp-for="UnitPrice" class="form-control col-sm-9" />
+                <span asp-validation-for="UnitPrice" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CustodianDept" class="control-label col-sm-3"></label>
+                <input asp-for="CustodianDept" class="form-control col-sm-9" />
+                <span asp-validation-for="CustodianDept" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CustodianName" class="control-label col-sm-3"></label>
+                <input asp-for="CustodianName" class="form-control col-sm-9" />
+                <span asp-validation-for="CustodianName" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="AreaNo" class="control-label col-sm-3"></label>
+                <input asp-for="AreaNo" class="form-control col-sm-9" />
+                <span asp-validation-for="AreaNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="LocationNo" class="control-label col-sm-3"></label>
+                <input asp-for="LocationNo" class="form-control col-sm-9" />
+                <span asp-validation-for="LocationNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="CheckDate" class="control-label col-sm-3"></label>
+                <input asp-for="CheckDate" type="date" class="form-control col-sm-9" />
+                <span asp-validation-for="CheckDate" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="NextDate" class="control-label col-sm-3"></label>
+                <input asp-for="NextDate" type="date" class="form-control col-sm-9" />
+                <span asp-validation-for="NextDate" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="Remark" class="control-label col-sm-3"></label>
+                <input asp-for="Remark" class="form-control col-sm-9" />
+                <span asp-validation-for="Remark" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="Master" class="control-label col-sm-3"></label>
+                <select asp-for="Master" class="custom-select col-sm-9">
+                    <option value="Y">是</option>
+                    <option value="N">否</option>
+                </select>
+                <span asp-validation-for="Master" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <div class="form-group form-inline my-sm-1">
+                <label asp-for="StatusNo" class="control-label col-sm-3"></label>
+                <select asp-for="StatusNo" class="custom-select col-sm-9">
+                    <option value="A">可用</option>
+                    <option value="S">停用</option>
+                </select>
+                <span asp-validation-for="StatusNo" class="text-danger offset-sm-3 my-sm-1"></span>
+            </div>
+            <span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>
+            <div class="form-group">
+                <input type="submit" value="保存" class="btn btn-primary offset-sm-3" />
+            </div>
+
+        </form>
+    </div>
+</div>
+
+@section Scripts {
+    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial");
+        await Html.RenderPartialAsync("_FileinputScriptsPartial"); }
+
+    <script type="text/javascript">
+    $(document).ready(function () {
+        var error = '@Html.ValidationMessage("error")';
+        if ($(error).text() != '') {
+            parent.hg.msg(error);
+        }
+    });
+
+
+        $("#CommodityID").change(function () {
+            var data = $("#CommodityID").val();
+        getVarityByCommodityID(data);
+    });
+    function getVarityByCommodityID(data) {
+        $.ajax({
+            url: "/JIG/GetOutfitVarityInfoesByQuery?TypeFlag=*&CommodityID=" + data + "&Status=A",
+            dataType: 'json',
+            //data: { id: data },
+            contentType: "application/json",
+            type: 'get',
+            success: function (result) {
+                if (result.data) {
+                    $("#Variety").empty();
+                    var count = 0;
+                    $('#Variety').append(new Option("全部", "-99"));
+                    $.each(result.data, function (index, item) {
+                        $('#Variety').append(new Option(item.varityName, item.varityID));
+                        count = count + 1;
+                    });
+                    if (count == 0) {
+                        $("#Variety").empty();
+                        $('#Variety').append(new Option("無選項", ""));
+
+                    }
+                }
+                else {
+                    $("#Variety").empty();
+                    $('#Variety').append(new Option("無選項", ""));
+                }
+                layui.form.render("select");
+            }
+        });
+    };
+    </script>
+
+
+}
+
diff --git a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.Views.dll b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.Views.dll
index 0763dc5d..0df535e3 100644
Binary files a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.Views.dll and b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.Views.dll differ
diff --git a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.Views.pdb b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.Views.pdb
index d92c4088..33cb2e67 100644
Binary files a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.Views.pdb and b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.Views.pdb differ
diff --git a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.dll b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.dll
index ccbeb63c..c818f923 100644
Binary files a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.dll and b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.dll differ
diff --git a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.pdb b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.pdb
index 11c7c45c..46955df7 100644
Binary files a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.pdb and b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.Web.pdb differ
diff --git a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.dll b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.dll
index 73dc25f2..f56a9a67 100644
Binary files a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.dll and b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.dll differ
diff --git a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.pdb b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.pdb
index 162e7459..81f79226 100644
Binary files a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.pdb and b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.pdb differ
diff --git a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.dll b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.dll
index a027d025..cef2726f 100644
Binary files a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.dll and b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.dll differ
diff --git a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.pdb b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.pdb
index ab5ca1c1..29fc7899 100644
Binary files a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.pdb and b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.pdb differ
diff --git a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.xml b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.xml
index 9725bef2..56e1a327 100644
--- a/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.xml
+++ b/AMESCoreStudio.Web/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.xml
@@ -2361,19 +2361,27 @@
             <param name="id"></param>
             <returns></returns>
         </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitCommodityInfoesController.GetOutfitCommodityInfoByQuery(System.Int32,System.String)">
+            <summary>
+            
+            </summary>
+            <param name="TypeFlag"></param>
+            <param name="Status"></param>
+            <returns></returns>
+        </member>
         <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitCommodityInfoesController.PutOutfitCommodityInfo(System.Int32,AMESCoreStudio.WebApi.Models.AMES.OutfitCommodityInfo)">
             <summary>
             
             </summary>
             <param name="id"></param>
-            <param name="workGroup"></param>
+            <param name="OutfitCommodityInfo"></param>
             <returns></returns>
         </member>
         <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitCommodityInfoesController.PostOutfitCommodityInfo(AMESCoreStudio.WebApi.Models.AMES.OutfitCommodityInfo)">
             <summary>
             新增资料
             </summary>
-            <param name="workGroup"></param>
+            <param name="OutfitCommodityInfo"></param>
             <returns></returns>
         </member>
         <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitCommodityInfoesController.DeleteOutfitCommodityInfo(System.Int32)">
@@ -2383,6 +2391,165 @@
             <param name="id"></param>
             <returns></returns>
         </member>
+        <member name="T:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController">
+            <summary>
+            工作群組維護
+            </summary>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.#ctor(AMESCoreStudio.WebApi.AMESContext)">
+            <summary>
+            
+            </summary>
+            <param name="context"></param>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.GetOutfitInfo">
+            <summary>
+            
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.GetOutfitInfo(System.Int32)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.GetOutfitInfoByQuery(System.Int32,System.Int32,System.Int32,System.String,System.String,System.String)">
+            <summary>
+            
+            </summary>
+            <param name="TypeFlag"></param>
+            <param name="CommodityID"></param>
+            <param name="VarityID"></param>
+            <param name="Status"></param>
+            <param name="QANo"></param>
+            <param name="PartNo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.PutOutfitInfo(System.Int32,AMESCoreStudio.WebApi.Models.AMES.OutfitInfo)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <param name="OutfitInfo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.PostOutfitInfo(AMESCoreStudio.WebApi.Models.AMES.OutfitInfo)">
+            <summary>
+            新增资料
+            </summary>
+            <param name="OutfitInfo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.DeleteOutfitInfo(System.Int32)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="T:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController">
+            <summary>
+            工作群組維護
+            </summary>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.#ctor(AMESCoreStudio.WebApi.AMESContext)">
+            <summary>
+            
+            </summary>
+            <param name="context"></param>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.GetOutfitVarityInfo">
+            <summary>
+            
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.GetOutfitVarityInfoByQuery(System.Int32,System.Int32,System.String)">
+            <summary>
+            
+            </summary>
+            <param name="TypeFlag"></param>
+            <param name="CommodityID"></param>
+            <param name="Status"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.GetOutfitVarityInfo(System.Int32)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.PutOutfitVarityInfo(System.Int32,AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <param name="OutfitVarityInfo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.PostOutfitVarityInfo(AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo)">
+            <summary>
+            新增资料
+            </summary>
+            <param name="OutfitVarityInfo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.DeleteOutfitVarityInfo(System.Int32)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="T:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController">
+            <summary>
+            工作群組維護
+            </summary>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController.#ctor(AMESCoreStudio.WebApi.AMESContext)">
+            <summary>
+            
+            </summary>
+            <param name="context"></param>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController.GetOutfitVendorInfo">
+            <summary>
+            
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController.GetOutfitVendorInfo(System.Int32)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController.PutOutfitVendorInfo(System.Int32,AMESCoreStudio.WebApi.Models.AMES.OutfitVendorInfo)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <param name="OutfitVendorInfo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController.PostOutfitVendorInfo(AMESCoreStudio.WebApi.Models.AMES.OutfitVendorInfo)">
+            <summary>
+            新增资料
+            </summary>
+            <param name="OutfitVendorInfo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController.DeleteOutfitVendorInfo(System.Int32)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
         <member name="T:AMESCoreStudio.WebApi.Controllers.AMES.PartMapsController">
             <summary>
             
@@ -7240,6 +7407,11 @@
             廠商資料檔
             </summary>
         </member>
+        <member name="P:AMESCoreStudio.WebApi.AMESContext.OutfitInfoes">
+            <summary>
+            治具資料檔
+            </summary>
+        </member>
         <member name="T:AMESCoreStudio.WebApi.Models.AMES.BarcodeChange">
             <summary>
             條碼變更資料表
@@ -10393,6 +10565,11 @@
             0:設備/料件; 2:耗材
             </summary>
         </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitCommodityInfo.StorageFlag">
+            <summary>
+            是否為存儲類設備)
+            </summary>
+        </member>
         <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitCommodityInfo.Status">
             <summary>
             狀態(A-可用;S-停用)
@@ -10424,6 +10601,216 @@
             更新日期
             </summary>
         </member>
+        <member name="T:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo">
+            <summary>
+            設備資料檔
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.OutfitID">
+            <summary>
+            治具ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CommodityID">
+            <summary>
+            品名ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.VarietyID">
+            <summary>
+            種類ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.OutfitNo">
+            <summary>
+            設備編碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.StatusNo">
+            <summary>
+            狀態
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.Remark">
+            <summary>
+            備註
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.BuyDay">
+            <summary>
+            購置日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.ScheReturnDay">
+            <summary>
+            預計歸還日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.Custondian">
+            <summary>
+            當前保管人
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.AreaNo">
+            <summary>
+            區代碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.LevelNo">
+            <summary>
+            層別代碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.SiteNo">
+            <summary>
+            位置代碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.LocationNo">
+            <summary>
+            儲位編碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.PartNo">
+            <summary>
+            料件料號;財產名稱
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.TypeFlag">
+            <summary>
+            標識(0-設備;1-料件)
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.FactoryCode">
+            <summary>
+            廠別代碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.PuchaseDate">
+            <summary>
+            購置日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.UnitPrice">
+            <summary>
+            單價
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.QualityDate">
+            <summary>
+            質保日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.VendorID">
+            <summary>
+            廠商ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.QANo">
+            <summary>
+            OA單號/管理編號
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.StockQty">
+            <summary>
+            庫存數量
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.Unit">
+            <summary>
+            單位
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.LotNo">
+            <summary>
+            特殊種類(X:錫膏; H-紅膠儀器編號)
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.Boards">
+            <summary>
+            鋼網連板數量
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.UseTimes">
+            <summary>
+            治具使用次數
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.TotalTimes">
+            <summary>
+            治具累計使用次數
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.ModelNo">
+            <summary>
+            型號
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.BarcodeNo">
+            <summary>
+            內部條碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.TypeID">
+            <summary>
+            校驗方式
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CycleID">
+            <summary>
+            檢驗週期ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.ForeignExpenses">
+            <summary>
+            外校費用
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CheckDate">
+            <summary>
+            校驗日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.NextDate">
+            <summary>
+            下次校驗日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.Master">
+            <summary>
+            是否為母儀(Y/N)
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CustodianName">
+            <summary>
+            當前保管人
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CustodianDept">
+            <summary>
+            當前保管人部門
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CreateUserID">
+            <summary>
+            創建者ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CreateDate">
+            <summary>
+            創建日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.UpdateUserID">
+            <summary>
+            更新者ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.UpdateDate">
+            <summary>
+            更新日期
+            </summary>
+        </member>
         <member name="T:AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo">
             <summary>
             設備規格資料檔
@@ -10459,7 +10846,7 @@
             狀態(A-可用;S-停用)
             </summary>
         </member>
-        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo.UseLimitDays">
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo.UseLimitTimes">
             <summary>
             預定試用次數
             </summary>
@@ -10484,6 +10871,11 @@
             更新日期
             </summary>
         </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo.Commodity">
+            <summary>
+            製程單位主檔
+            </summary>
+        </member>
         <member name="T:AMESCoreStudio.WebApi.Models.AMES.OutfitVendorInfo">
             <summary>
             廠商資料檔
diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/OutfitAreaInfoesController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitAreaInfoesController.cs
new file mode 100644
index 00000000..42c3e6da
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitAreaInfoesController.cs
@@ -0,0 +1,186 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using AMESCoreStudio.WebApi;
+using AMESCoreStudio.WebApi.Models.AMES;
+using AMESCoreStudio.CommonTools.Result;
+
+namespace AMESCoreStudio.WebApi.Controllers.AMES
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    [Route("api/[controller]")]
+    [ApiController]
+    public class OutfitAreaInfoesController : ControllerBase
+    {
+        private readonly AMESContext _context;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="context"></param>
+        public OutfitAreaInfoesController(AMESContext context)
+        {
+            _context = context;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        // GET: api/OutfitAreaInfoes
+        [HttpGet]
+        public async Task<ActionResult<IEnumerable<OutfitAreaInfo>>> GetOutfitAreaInfoes()
+        {
+            IQueryable<OutfitAreaInfo> q = _context.OutfitAreaInfoes;
+            q = q.OrderBy(p => p.AreaNo);
+            
+
+            var items = await q.ToListAsync();
+
+            return items;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // GET: api/OutfitAreaInfoes/5
+        [HttpGet("{id}")]
+        public async Task<ActionResult<IEnumerable<OutfitAreaInfo>>> GetOutfitAreaInfoes(string id)
+        {
+            IQueryable<OutfitAreaInfo> q = _context.OutfitAreaInfoes;
+            q = q.Where(p => p.AreaNo.Equals(id));
+
+            var items = await q.ToListAsync();
+
+            if (items == null)
+            {
+                return NotFound();
+            }
+
+            return items;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="items"></param>
+        /// <returns></returns>
+        // PUT: api/OutfitAreaInfoes/5
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPut("{id}")]
+        public async Task<ResultModel<OutfitAreaInfo>> PutOutfitAreaInfoes(string id,[FromBody] OutfitAreaInfo items)
+        {
+            ResultModel<OutfitAreaInfo> result = new ResultModel<OutfitAreaInfo>();
+
+            if (id != items.AreaNo)
+            {
+                result.Success = false;
+                result.Msg = "區域代碼錯誤";
+                return result;
+            }
+
+            _context.Entry(items).State = EntityState.Modified;
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (DbUpdateConcurrencyException)
+            {
+                if (!OutfitAreaInfoesExists(id))
+                {
+                    result.Success = false;
+                    result.Msg = "區域代碼不存在";
+                    return result;
+                }
+                else
+                {
+                    throw;
+                }
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="items"></param>
+        /// <returns></returns>
+        // POST: api/OutfitAreaInfoes
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPost]
+        public async Task<ResultModel<OutfitAreaInfo>> PostOutfitAreaInfoes([FromBody] OutfitAreaInfo items)
+        {
+            ResultModel<OutfitAreaInfo> result = new ResultModel<OutfitAreaInfo>();
+
+            _context.OutfitAreaInfoes.Add(items);
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (DbUpdateException)
+            {
+                if (OutfitAreaInfoesExists(items.AreaNo))
+                {
+                    result.Success = false;
+                    result.Msg = "區域代碼重複";
+                    return result;
+                }
+                else
+                {
+                    throw;
+                }
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // DELETE: api/OutfitAreaInfoes/5
+        [HttpDelete("{id}")]
+        public async Task<ResultModel<OutfitAreaInfo>> DeleteOutfitAreaInfoes(string id)
+        {
+            ResultModel<OutfitAreaInfo> result = new ResultModel<OutfitAreaInfo>();
+
+            var items = await _context.OutfitAreaInfoes.FindAsync(id);
+            if (items == null)
+            {
+                result.Success = false;
+                result.Msg = "區域代碼不存在";
+                return result;
+            }
+
+            _context.OutfitAreaInfoes.Remove(items);
+            await _context.SaveChangesAsync();
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        private bool OutfitAreaInfoesExists(string id)
+        {
+            return _context.OutfitAreaInfoes.Any(e => e.AreaNo == id);
+        }
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/OutfitCommodityInfoesController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitCommodityInfoesController.cs
new file mode 100644
index 00000000..3217008f
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitCommodityInfoesController.cs
@@ -0,0 +1,229 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using AMESCoreStudio.WebApi;
+using AMESCoreStudio.WebApi.Models.AMES;
+using AMESCoreStudio.CommonTools.Result;
+
+namespace AMESCoreStudio.WebApi.Controllers.AMES
+{
+    /// <summary>
+    /// 工作群組維護
+    /// </summary>
+    [Route("api/[controller]")]
+    [ApiController]
+    public class OutfitCommodityInfoesController : ControllerBase
+    {
+        private readonly AMESContext _context;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="context"></param>
+        public OutfitCommodityInfoesController(AMESContext context)
+        {
+            _context = context;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        // GET: api/OutfitCommodityInfoes
+        [HttpGet]
+        public async Task<ActionResult<IEnumerable<OutfitCommodityInfo>>> GetOutfitCommodityInfo()
+        {
+            IQueryable<OutfitCommodityInfo> q = _context.OutfitCommodityInfoes;
+
+            q = q.OrderBy(p => p.CommodityID);
+
+            var OutfitCommodityInfo = await q.ToListAsync();
+
+            return OutfitCommodityInfo;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // GET: api/OutfitCommodityInfoes/5
+        [HttpGet("{id}")]
+        public async Task<ActionResult<IEnumerable<OutfitCommodityInfo>>> GetOutfitCommodityInfo(int id)
+        {
+            IQueryable<OutfitCommodityInfo> q = _context.OutfitCommodityInfoes;
+            q = q.Where(p => p.CommodityID.Equals(id));
+
+            var OutfitCommodityInfo = await q.ToListAsync();
+
+            if (OutfitCommodityInfo == null)
+            {
+                return NotFound();
+            }
+
+            return OutfitCommodityInfo;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="TypeFlag"></param>
+        /// <param name="Status"></param>
+        /// <returns></returns>
+        // GET: api/OutfitCommodityInfoes/5
+        [HttpGet("Query/{TypeFlag}/{Status}")]
+        public async Task<ActionResult<IEnumerable<OutfitCommodityInfo>>> GetOutfitCommodityInfoByQuery(int TypeFlag, string Status)
+        {
+            IQueryable<OutfitCommodityInfo> q = _context.OutfitCommodityInfoes;
+
+            if(TypeFlag !=-99)
+                q = q.Where(p => p.TypeFlag.Equals(TypeFlag));
+            if (Status != "*")
+                q = q.Where(p => p.Status.Equals(Status));
+
+            var OutfitCommodityInfo = await q.ToListAsync();
+
+            if (OutfitCommodityInfo == null)
+            {
+                return NotFound();
+            }
+
+            return OutfitCommodityInfo;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="OutfitCommodityInfo"></param>
+        /// <returns></returns>
+        // PUT: api/OutfitCommodityInfoes/5
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPut("{id}")]
+        public async Task<ResultModel<OutfitCommodityInfo>> PutOutfitCommodityInfo(int id, [FromBody] OutfitCommodityInfo OutfitCommodityInfo)
+        {
+            ResultModel<OutfitCommodityInfo> result = new ResultModel<OutfitCommodityInfo>();
+            if (id != OutfitCommodityInfo.CommodityID)
+            {
+                result.Success = false;
+                result.Msg = "序號錯誤";
+                return result;
+            }
+
+            _context.Entry(OutfitCommodityInfo).State = EntityState.Modified;
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        /// <summary>
+        /// 新增资料
+        /// </summary>
+        /// <param name="OutfitCommodityInfo"></param>
+        /// <returns></returns>
+        // POST: api/OutfitCommodityInfoes
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPost]
+        public async Task<ResultModel<OutfitCommodityInfo>> PostOutfitCommodityInfo(OutfitCommodityInfo OutfitCommodityInfo)
+        {
+            ResultModel<OutfitCommodityInfo> result = new ResultModel<OutfitCommodityInfo>();
+            Helper helper = new Helper(_context);
+            OutfitCommodityInfo.CommodityID = helper.GetIDKey("OUTFITCOMMODITY_ID").Result;
+            if (string.IsNullOrEmpty(OutfitCommodityInfo.SmtFlag))
+                OutfitCommodityInfo.SmtFlag = "";
+
+            _context.OutfitCommodityInfoes.Add(OutfitCommodityInfo);
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // DELETE: api/OutfitCommodityInfoes/5
+        [HttpDelete("{id}")]
+        public async Task<ResultModel<OutfitCommodityInfo>> DeleteOutfitCommodityInfo(int id)
+        {
+            ResultModel<OutfitCommodityInfo> result = new ResultModel<OutfitCommodityInfo>();
+            var OutfitCommodityInfo = await _context.OutfitCommodityInfoes.Where(p => p.CommodityID == id).FirstOrDefaultAsync();
+            if (OutfitCommodityInfo == null)
+            {
+                result.Success = false;
+                result.Msg = "序號錯誤";
+                return result;
+            }
+
+            //_context.OutfitCommodityInfoes.Remove(OutfitCommodityInfo);
+
+            OutfitCommodityInfo newOutfitCommodityInfo = new OutfitCommodityInfo();
+            newOutfitCommodityInfo = OutfitCommodityInfo;
+
+            if (OutfitCommodityInfo.Status == "A")
+                newOutfitCommodityInfo.Status = "S";
+            else
+                newOutfitCommodityInfo.Status = "A";
+
+            _context.Entry(newOutfitCommodityInfo).State = EntityState.Modified;
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+
+        }
+
+        private bool OutfitCommodityInfoExists(int id)
+        {
+            return _context.OutfitCommodityInfoes.Any(e => e.CommodityID == id);
+        }
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/OutfitInfoesController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitInfoesController.cs
new file mode 100644
index 00000000..baa24682
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitInfoesController.cs
@@ -0,0 +1,249 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using AMESCoreStudio.WebApi;
+using AMESCoreStudio.WebApi.Models.AMES;
+using AMESCoreStudio.CommonTools.Result;
+
+namespace AMESCoreStudio.WebApi.Controllers.AMES
+{
+    /// <summary>
+    /// 工作群組維護
+    /// </summary>
+    [Route("api/[controller]")]
+    [ApiController]
+    public class OutfitInfoesController : ControllerBase
+    {
+        private readonly AMESContext _context;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="context"></param>
+        public OutfitInfoesController(AMESContext context)
+        {
+            _context = context;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        // GET: api/OutfitInfoes
+        [HttpGet]
+        public async Task<ActionResult<IEnumerable<OutfitInfo>>> GetOutfitInfo()
+        {
+            IQueryable<OutfitInfo> q = _context.OutfitInfoes;
+
+            q = q.OrderBy(p => p.OutfitID);
+
+            var OutfitInfo = await q.ToListAsync();
+
+            return OutfitInfo;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // GET: api/OutfitInfoes/5
+        [HttpGet("{id}")]
+        public async Task<ActionResult<IEnumerable<OutfitInfo>>> GetOutfitInfo(int id)
+        {
+            IQueryable<OutfitInfo> q = _context.OutfitInfoes;
+            q = q.Where(p => p.OutfitID.Equals(id));
+
+            var OutfitInfo = await q.ToListAsync();
+
+            if (OutfitInfo == null)
+            {
+                return NotFound();
+            }
+
+            return OutfitInfo;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="TypeFlag"></param>
+        /// <param name="CommodityID"></param>
+        /// <param name="VarityID"></param>
+        /// <param name="Status"></param>
+        /// <param name="QANo"></param>
+        /// <param name="PartNo"></param>
+        /// <returns></returns>
+        // GET: api/OutfitInfoes/5
+        [HttpGet("Query/{TypeFlag}/{CommodityID}/{VarityID}/{Status}/{QANo}/{PartNo}")]
+        public async Task<ActionResult<IEnumerable<OutfitInfo>>> GetOutfitInfoByQuery(int TypeFlag, int CommodityID, int VarityID, string Status, string QANo, string PartNo)
+        {
+            IQueryable<OutfitInfo> q = _context.OutfitInfoes;
+
+            if (VarityID != -99)
+                q = q.Where(p => p.VarietyID.Equals(VarityID));
+            else
+            {
+                if (CommodityID != -99)
+                    q = q.Where(p => p.CommodityID.Equals(CommodityID));
+                else
+                {
+                    if (TypeFlag != -99)
+                        q = q.Where(p => p.TypeFlag.Equals(TypeFlag));
+                }
+            }
+
+            if (Status != "*")
+                q = q.Where(p => p.StatusNo.Equals(Status));
+
+            if (QANo != "*")
+                q = q.Where(p => p.QANo.Equals(QANo));
+
+            if (PartNo != "*")
+                q = q.Where(p => p.PartNo.Equals(PartNo));
+
+
+            var OutfitInfo = await q.ToListAsync();
+
+            if (OutfitInfo == null)
+            {
+                return NotFound();
+            }
+
+            return OutfitInfo;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="OutfitInfo"></param>
+        /// <returns></returns>
+        // PUT: api/OutfitInfoes/5
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPut("{id}")]
+        public async Task<ResultModel<OutfitInfo>> PutOutfitInfo(int id, [FromBody] OutfitInfo OutfitInfo)
+        {
+            ResultModel<OutfitInfo> result = new ResultModel<OutfitInfo>();
+            if (id != OutfitInfo.OutfitID)
+            {
+                result.Success = false;
+                result.Msg = "序號錯誤";
+                return result;
+            }
+
+            _context.Entry(OutfitInfo).State = EntityState.Modified;
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        /// <summary>
+        /// 新增资料
+        /// </summary>
+        /// <param name="OutfitInfo"></param>
+        /// <returns></returns>
+        // POST: api/OutfitInfoes
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPost]
+        public async Task<ResultModel<OutfitInfo>> PostOutfitInfo(OutfitInfo OutfitInfo)
+        {
+            ResultModel<OutfitInfo> result = new ResultModel<OutfitInfo>();
+            Helper helper = new Helper(_context);
+            OutfitInfo.OutfitID = helper.GetIDKey("OUTFIT_ID").Result;
+
+            _context.OutfitInfoes.Add(OutfitInfo);
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // DELETE: api/OutfitInfoes/5
+        [HttpDelete("{id}")]
+        public async Task<ResultModel<OutfitInfo>> DeleteOutfitInfo(int id)
+        {
+            ResultModel<OutfitInfo> result = new ResultModel<OutfitInfo>();
+            var OutfitInfo = await _context.OutfitInfoes.Where(p => p.OutfitID == id).FirstOrDefaultAsync();
+            if (OutfitInfo == null)
+            {
+                result.Success = false;
+                result.Msg = "序號錯誤";
+                return result;
+            }
+
+            //_context.OutfitInfoes.Remove(OutfitInfo);
+
+            OutfitInfo newOutfitInfo = new OutfitInfo();
+            newOutfitInfo = OutfitInfo;
+
+            if (OutfitInfo.StatusNo == "A")
+                newOutfitInfo.StatusNo = "S";
+            else
+                newOutfitInfo.StatusNo = "A";
+
+            _context.Entry(newOutfitInfo).State = EntityState.Modified;
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+
+        }
+
+        private bool OutfitInfoExists(int id)
+        {
+            return _context.OutfitInfoes.Any(e => e.OutfitID == id);
+        }
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/OutfitLevelInfoesController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitLevelInfoesController.cs
new file mode 100644
index 00000000..873a192e
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitLevelInfoesController.cs
@@ -0,0 +1,186 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using AMESCoreStudio.WebApi;
+using AMESCoreStudio.WebApi.Models.AMES;
+using AMESCoreStudio.CommonTools.Result;
+
+namespace AMESCoreStudio.WebApi.Controllers.AMES
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    [Route("api/[controller]")]
+    [ApiController]
+    public class OutfitLevelInfoesController : ControllerBase
+    {
+        private readonly AMESContext _context;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="context"></param>
+        public OutfitLevelInfoesController(AMESContext context)
+        {
+            _context = context;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        // GET: api/OutfitLevelInfoes
+        [HttpGet]
+        public async Task<ActionResult<IEnumerable<OutfitLevelInfo>>> GetOutfitLevelInfoes()
+        {
+            IQueryable<OutfitLevelInfo> q = _context.OutfitLevelInfoes;
+            q = q.OrderBy(p => p.LevelNo);
+            
+
+            var items = await q.ToListAsync();
+
+            return items;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // GET: api/OutfitLevelInfoes/5
+        [HttpGet("{id}")]
+        public async Task<ActionResult<IEnumerable<OutfitLevelInfo>>> GetOutfitLevelInfoes(string id)
+        {
+            IQueryable<OutfitLevelInfo> q = _context.OutfitLevelInfoes;
+            q = q.Where(p => p.LevelNo.Equals(id));
+
+            var items = await q.ToListAsync();
+
+            if (items == null)
+            {
+                return NotFound();
+            }
+
+            return items;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="items"></param>
+        /// <returns></returns>
+        // PUT: api/OutfitLevelInfoes/5
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPut("{id}")]
+        public async Task<ResultModel<OutfitLevelInfo>> PutOutfitLevelInfoes(string id,[FromBody] OutfitLevelInfo items)
+        {
+            ResultModel<OutfitLevelInfo> result = new ResultModel<OutfitLevelInfo>();
+
+            if (id != items.LevelNo)
+            {
+                result.Success = false;
+                result.Msg = "區域代碼錯誤";
+                return result;
+            }
+
+            _context.Entry(items).State = EntityState.Modified;
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (DbUpdateConcurrencyException)
+            {
+                if (!OutfitLevelInfoesExists(id))
+                {
+                    result.Success = false;
+                    result.Msg = "區域代碼不存在";
+                    return result;
+                }
+                else
+                {
+                    throw;
+                }
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="items"></param>
+        /// <returns></returns>
+        // POST: api/OutfitLevelInfoes
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPost]
+        public async Task<ResultModel<OutfitLevelInfo>> PostOutfitLevelInfoes([FromBody] OutfitLevelInfo items)
+        {
+            ResultModel<OutfitLevelInfo> result = new ResultModel<OutfitLevelInfo>();
+
+            _context.OutfitLevelInfoes.Add(items);
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (DbUpdateException)
+            {
+                if (OutfitLevelInfoesExists(items.LevelNo))
+                {
+                    result.Success = false;
+                    result.Msg = "區域代碼重複";
+                    return result;
+                }
+                else
+                {
+                    throw;
+                }
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // DELETE: api/OutfitLevelInfoes/5
+        [HttpDelete("{id}")]
+        public async Task<ResultModel<OutfitLevelInfo>> DeleteOutfitLevelInfoes(string id)
+        {
+            ResultModel<OutfitLevelInfo> result = new ResultModel<OutfitLevelInfo>();
+
+            var items = await _context.OutfitLevelInfoes.FindAsync(id);
+            if (items == null)
+            {
+                result.Success = false;
+                result.Msg = "區域代碼不存在";
+                return result;
+            }
+
+            _context.OutfitLevelInfoes.Remove(items);
+            await _context.SaveChangesAsync();
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        private bool OutfitLevelInfoesExists(string id)
+        {
+            return _context.OutfitLevelInfoes.Any(e => e.LevelNo == id);
+        }
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/OutfitSiteInfoesController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitSiteInfoesController.cs
new file mode 100644
index 00000000..e6d012f3
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitSiteInfoesController.cs
@@ -0,0 +1,186 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using AMESCoreStudio.WebApi;
+using AMESCoreStudio.WebApi.Models.AMES;
+using AMESCoreStudio.CommonTools.Result;
+
+namespace AMESCoreStudio.WebApi.Controllers.AMES
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    [Route("api/[controller]")]
+    [ApiController]
+    public class OutfitSiteInfoesController : ControllerBase
+    {
+        private readonly AMESContext _context;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="context"></param>
+        public OutfitSiteInfoesController(AMESContext context)
+        {
+            _context = context;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        // GET: api/OutfitSiteInfoes
+        [HttpGet]
+        public async Task<ActionResult<IEnumerable<OutfitSiteInfo>>> GetOutfitSiteInfoes()
+        {
+            IQueryable<OutfitSiteInfo> q = _context.OutfitSiteInfoes;
+            q = q.OrderBy(p => p.SiteNo);
+            
+
+            var items = await q.ToListAsync();
+
+            return items;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // GET: api/OutfitSiteInfoes/5
+        [HttpGet("{id}")]
+        public async Task<ActionResult<IEnumerable<OutfitSiteInfo>>> GetOutfitSiteInfoes(string id)
+        {
+            IQueryable<OutfitSiteInfo> q = _context.OutfitSiteInfoes;
+            q = q.Where(p => p.SiteNo.Equals(id));
+
+            var items = await q.ToListAsync();
+
+            if (items == null)
+            {
+                return NotFound();
+            }
+
+            return items;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="items"></param>
+        /// <returns></returns>
+        // PUT: api/OutfitSiteInfoes/5
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPut("{id}")]
+        public async Task<ResultModel<OutfitSiteInfo>> PutOutfitSiteInfoes(string id,[FromBody] OutfitSiteInfo items)
+        {
+            ResultModel<OutfitSiteInfo> result = new ResultModel<OutfitSiteInfo>();
+
+            if (id != items.SiteNo)
+            {
+                result.Success = false;
+                result.Msg = "區域代碼錯誤";
+                return result;
+            }
+
+            _context.Entry(items).State = EntityState.Modified;
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (DbUpdateConcurrencyException)
+            {
+                if (!OutfitSiteInfoesExists(id))
+                {
+                    result.Success = false;
+                    result.Msg = "區域代碼不存在";
+                    return result;
+                }
+                else
+                {
+                    throw;
+                }
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="items"></param>
+        /// <returns></returns>
+        // POST: api/OutfitSiteInfoes
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPost]
+        public async Task<ResultModel<OutfitSiteInfo>> PostOutfitSiteInfoes([FromBody] OutfitSiteInfo items)
+        {
+            ResultModel<OutfitSiteInfo> result = new ResultModel<OutfitSiteInfo>();
+
+            _context.OutfitSiteInfoes.Add(items);
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (DbUpdateException)
+            {
+                if (OutfitSiteInfoesExists(items.SiteNo))
+                {
+                    result.Success = false;
+                    result.Msg = "區域代碼重複";
+                    return result;
+                }
+                else
+                {
+                    throw;
+                }
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // DELETE: api/OutfitSiteInfoes/5
+        [HttpDelete("{id}")]
+        public async Task<ResultModel<OutfitSiteInfo>> DeleteOutfitSiteInfoes(string id)
+        {
+            ResultModel<OutfitSiteInfo> result = new ResultModel<OutfitSiteInfo>();
+
+            var items = await _context.OutfitSiteInfoes.FindAsync(id);
+            if (items == null)
+            {
+                result.Success = false;
+                result.Msg = "區域代碼不存在";
+                return result;
+            }
+
+            _context.OutfitSiteInfoes.Remove(items);
+            await _context.SaveChangesAsync();
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        private bool OutfitSiteInfoesExists(string id)
+        {
+            return _context.OutfitSiteInfoes.Any(e => e.SiteNo == id);
+        }
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/OutfitVarityInfoesController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitVarityInfoesController.cs
new file mode 100644
index 00000000..424c670f
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitVarityInfoesController.cs
@@ -0,0 +1,235 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using AMESCoreStudio.WebApi;
+using AMESCoreStudio.WebApi.Models.AMES;
+using AMESCoreStudio.CommonTools.Result;
+
+namespace AMESCoreStudio.WebApi.Controllers.AMES
+{
+    /// <summary>
+    /// 工作群組維護
+    /// </summary>
+    [Route("api/[controller]")]
+    [ApiController]
+    public class OutfitVarityInfoesController : ControllerBase
+    {
+        private readonly AMESContext _context;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="context"></param>
+        public OutfitVarityInfoesController(AMESContext context)
+        {
+            _context = context;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        // GET: api/OutfitVarityInfoes
+        [HttpGet]
+        public async Task<ActionResult<IEnumerable<OutfitVarityInfo>>> GetOutfitVarityInfo()
+        {
+            IQueryable<OutfitVarityInfo> q = _context.OutfitVarityInfoes;
+
+            q = q.OrderBy(p => p.VarityID);
+
+            var OutfitVarityInfo = await q.ToListAsync();
+
+            return OutfitVarityInfo;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="TypeFlag"></param>
+        /// <param name="CommodityID"></param>
+        /// <param name="Status"></param>
+        /// <returns></returns>
+        // GET: api/OutfitVarityInfoes/5
+        [HttpGet("Query/{TypeFlag}/{CommodityID}/{Status}")]
+        public async Task<ActionResult<IEnumerable<OutfitVarityInfo>>> GetOutfitVarityInfoByQuery(int TypeFlag, int CommodityID, string Status)
+        {
+            IQueryable<OutfitVarityInfo> q = _context.OutfitVarityInfoes;
+
+            if (CommodityID != -99)
+                q = q.Where(p => p.CommodityID.Equals(CommodityID));
+            else
+            {
+                if (TypeFlag != -99)
+                    q = q.Where(p => p.Commodity.TypeFlag.Equals(TypeFlag));
+            }
+
+            if (Status != "*")
+                q = q.Where(p => p.Status.Equals(Status));
+
+            var OutfitVarityInfo = await q.ToListAsync();
+
+            if (OutfitVarityInfo == null)
+            {
+                return NotFound();
+            }
+
+            return OutfitVarityInfo;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // GET: api/OutfitVarityInfoes/5
+        [HttpGet("{id}")]
+        public async Task<ActionResult<IEnumerable<OutfitVarityInfo>>> GetOutfitVarityInfo(int id)
+        {
+            IQueryable<OutfitVarityInfo> q = _context.OutfitVarityInfoes;
+            q = q.Where(p => p.VarityID.Equals(id));
+
+            var OutfitVarityInfo = await q.ToListAsync();
+
+            if (OutfitVarityInfo == null)
+            {
+                return NotFound();
+            }
+
+            return OutfitVarityInfo;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="OutfitVarityInfo"></param>
+        /// <returns></returns>
+        // PUT: api/OutfitVarityInfoes/5
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPut("{id}")]
+        public async Task<ResultModel<OutfitVarityInfo>> PutOutfitVarityInfo(int id, [FromBody] OutfitVarityInfo OutfitVarityInfo)
+        {
+            ResultModel<OutfitVarityInfo> result = new ResultModel<OutfitVarityInfo>();
+            if (id != OutfitVarityInfo.VarityID)
+            {
+                result.Success = false;
+                result.Msg = "序號錯誤";
+                return result;
+            }
+
+            _context.Entry(OutfitVarityInfo).State = EntityState.Modified;
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        /// <summary>
+        /// 新增资料
+        /// </summary>
+        /// <param name="OutfitVarityInfo"></param>
+        /// <returns></returns>
+        // POST: api/OutfitVarityInfoes
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPost]
+        public async Task<ResultModel<OutfitVarityInfo>> PostOutfitVarityInfo(OutfitVarityInfo OutfitVarityInfo)
+        {
+            ResultModel<OutfitVarityInfo> result = new ResultModel<OutfitVarityInfo>();
+            Helper helper = new Helper(_context);
+            OutfitVarityInfo.VarityID = helper.GetIDKey("OUTFITVARIETY_ID").Result;
+
+            _context.OutfitVarityInfoes.Add(OutfitVarityInfo);
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // DELETE: api/OutfitVarityInfoes/5
+        [HttpDelete("{id}")]
+        public async Task<ResultModel<OutfitVarityInfo>> DeleteOutfitVarityInfo(int id)
+        {
+            ResultModel<OutfitVarityInfo> result = new ResultModel<OutfitVarityInfo>();
+            var OutfitVarityInfo = await _context.OutfitVarityInfoes.Where(p => p.VarityID == id).FirstOrDefaultAsync();
+            if (OutfitVarityInfo == null)
+            {
+                result.Success = false;
+                result.Msg = "序號錯誤";
+                return result;
+            }
+
+
+            //_context.OutfitVarityInfoes.Remove(OutfitVarityInfo);
+
+            OutfitVarityInfo newOutfitVarityInfo = new OutfitVarityInfo();
+            newOutfitVarityInfo = OutfitVarityInfo;
+
+            if (OutfitVarityInfo.Status == "A")
+                newOutfitVarityInfo.Status = "S";
+            else
+                newOutfitVarityInfo.Status = "A";
+
+            _context.Entry(newOutfitVarityInfo).State = EntityState.Modified;
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        private bool OutfitVarityInfoExists(int id)
+        {
+            return _context.OutfitVarityInfoes.Any(e => e.VarityID == id);
+        }
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/OutfitVendorInfoesController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitVendorInfoesController.cs
new file mode 100644
index 00000000..45619ed1
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitVendorInfoesController.cs
@@ -0,0 +1,190 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using AMESCoreStudio.WebApi;
+using AMESCoreStudio.WebApi.Models.AMES;
+using AMESCoreStudio.CommonTools.Result;
+
+namespace AMESCoreStudio.WebApi.Controllers.AMES
+{
+    /// <summary>
+    /// 工作群組維護
+    /// </summary>
+    [Route("api/[controller]")]
+    [ApiController]
+    public class OutfitVendorInfoesController : ControllerBase
+    {
+        private readonly AMESContext _context;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="context"></param>
+        public OutfitVendorInfoesController(AMESContext context)
+        {
+            _context = context;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        // GET: api/OutfitVendorInfoes
+        [HttpGet]
+        public async Task<ActionResult<IEnumerable<OutfitVendorInfo>>> GetOutfitVendorInfo()
+        {
+            IQueryable<OutfitVendorInfo> q = _context.OutfitVendorInfoes;
+
+            q = q.OrderBy(p => p.VendorID);
+
+            var OutfitVendorInfo = await q.ToListAsync();
+
+            return OutfitVendorInfo;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // GET: api/OutfitVendorInfoes/5
+        [HttpGet("{id}")]
+        public async Task<ActionResult<IEnumerable<OutfitVendorInfo>>> GetOutfitVendorInfo(int id)
+        {
+            IQueryable<OutfitVendorInfo> q = _context.OutfitVendorInfoes;
+            q = q.Where(p => p.VendorID.Equals(id));
+
+            var OutfitVendorInfo = await q.ToListAsync();
+
+            if (OutfitVendorInfo == null)
+            {
+                return NotFound();
+            }
+
+            return OutfitVendorInfo;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="OutfitVendorInfo"></param>
+        /// <returns></returns>
+        // PUT: api/OutfitVendorInfoes/5
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPut("{id}")]
+        public async Task<ResultModel<OutfitVendorInfo>> PutOutfitVendorInfo(int id, [FromBody] OutfitVendorInfo OutfitVendorInfo)
+        {
+            ResultModel<OutfitVendorInfo> result = new ResultModel<OutfitVendorInfo>();
+            if (id != OutfitVendorInfo.VendorID)
+            {
+                result.Success = false;
+                result.Msg = "序號錯誤";
+                return result;
+            }
+
+            _context.Entry(OutfitVendorInfo).State = EntityState.Modified;
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        /// <summary>
+        /// 新增资料
+        /// </summary>
+        /// <param name="OutfitVendorInfo"></param>
+        /// <returns></returns>
+        // POST: api/OutfitVendorInfoes
+        // To protect from overposting attacks, enable the specific properties you want to bind to, for
+        // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
+        [HttpPost]
+        public async Task<ResultModel<OutfitVendorInfo>> PostOutfitVendorInfo(OutfitVendorInfo OutfitVendorInfo)
+        {
+            ResultModel<OutfitVendorInfo> result = new ResultModel<OutfitVendorInfo>();
+            Helper helper = new Helper(_context);
+            OutfitVendorInfo.VendorID = helper.GetIDKey("OUTFITVENDOR_ID").Result;
+
+            _context.OutfitVendorInfoes.Add(OutfitVendorInfo);
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        // DELETE: api/OutfitVendorInfoes/5
+        [HttpDelete("{id}")]
+        public async Task<ResultModel<OutfitVendorInfo>> DeleteOutfitVendorInfo(int id)
+        {
+            ResultModel<OutfitVendorInfo> result = new ResultModel<OutfitVendorInfo>();
+            var OutfitVendorInfo = await _context.OutfitVendorInfoes.Where(p => p.VendorID == id).FirstOrDefaultAsync();
+            if (OutfitVendorInfo == null)
+            {
+                result.Success = false;
+                result.Msg = "序號錯誤";
+                return result;
+            }
+
+            _context.OutfitVendorInfoes.Remove(OutfitVendorInfo);
+
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+
+        }
+
+        private bool OutfitCommodityInfoExists(int id)
+        {
+            return _context.OutfitVendorInfoes.Any(e => e.VendorID == id);
+        }
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/WorkClassesController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/WorkClassesController.cs
index 5ad4400b..c84e75d6 100644
--- a/AMESCoreStudio.WebApi/Controllers/AMES/WorkClassesController.cs
+++ b/AMESCoreStudio.WebApi/Controllers/AMES/WorkClassesController.cs
@@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc;
 using Microsoft.EntityFrameworkCore;
 using AMESCoreStudio.WebApi;
 using AMESCoreStudio.WebApi.Models.AMES;
+using AMESCoreStudio.CommonTools.Result;
 
 namespace AMESCoreStudio.WebApi.Controllers.AMES
 {
@@ -89,11 +90,14 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
         // To protect from overposting attacks, enable the specific properties you want to bind to, for
         // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
         [HttpPut("{id}")]
-        public async Task<ActionResult<WorkClass>> PutWorkClass(int id, [FromBody] WorkClass workClass)
+        public async Task<ResultModel<WorkClass>> PutWorkClass(int id, [FromBody] WorkClass workClass)
         {
+            ResultModel<WorkClass> result = new ResultModel<WorkClass>();
             if (id != workClass.ClassID)
             {
-                return BadRequest();
+                result.Success = false;
+                result.Msg = "序號錯誤";
+                return result;
             }
 
             _context.Entry(workClass).State = EntityState.Modified;
@@ -102,19 +106,19 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
             {
                 await _context.SaveChangesAsync();
             }
-            catch (DbUpdateConcurrencyException)
+            catch (Exception ex)
             {
-                if (!WorkClassExists(id))
-                {
-                    return NotFound();
-                }
-                else
-                {
-                    throw;
-                }
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
             }
 
-            return workClass;
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+
         }
 
         /// <summary>
@@ -126,15 +130,31 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
         // To protect from overposting attacks, enable the specific properties you want to bind to, for
         // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
         [HttpPost]
-        public async Task<ActionResult<WorkClass>> PostWorkClass(WorkClass workClass)
+        public async Task<ResultModel<WorkClass>> PostWorkClass(WorkClass workClass)
         {
+            ResultModel<WorkClass> result = new ResultModel<WorkClass>();
             Helper helper = new Helper(_context);
             workClass.ClassID = helper.GetIDKey("WORKCLASS_ID").Result;
 
             _context.WorkClasses.Add(workClass);
-            await _context.SaveChangesAsync();
 
-            return CreatedAtAction("GetWorkClasses", new { id = workClass.ClassID }, workClass);
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+
 
         }
 
@@ -145,18 +165,36 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
         /// <returns></returns>
         // DELETE: api/WorkClasses/5
         [HttpDelete("{id}")]
-        public async Task<ActionResult<WorkClass>> DeleteWorkClass(int id)
+        public async Task<ResultModel<WorkClass>> DeleteWorkClass(int id)
         {
+            ResultModel<WorkClass> result = new ResultModel<WorkClass>();
             var workClass = await _context.WorkClasses.Where(p => p.ClassID == id).FirstOrDefaultAsync();
             if (workClass == null)
             {
-                return NotFound();
+                result.Success = false;
+                result.Msg = "序號錯誤";
+                return result;
             }
 
             _context.WorkClasses.Remove(workClass);
-            await _context.SaveChangesAsync();
 
-            return workClass;
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+
         }
 
         private bool WorkClassExists(int id)
diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/WorkGroupsController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/WorkGroupsController.cs
index 6c48433f..19418fe7 100644
--- a/AMESCoreStudio.WebApi/Controllers/AMES/WorkGroupsController.cs
+++ b/AMESCoreStudio.WebApi/Controllers/AMES/WorkGroupsController.cs
@@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc;
 using Microsoft.EntityFrameworkCore;
 using AMESCoreStudio.WebApi;
 using AMESCoreStudio.WebApi.Models.AMES;
+using AMESCoreStudio.CommonTools.Result;
 
 namespace AMESCoreStudio.WebApi.Controllers.AMES
 {
@@ -77,11 +78,14 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
         // To protect from overposting attacks, enable the specific properties you want to bind to, for
         // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
         [HttpPut("{id}")]
-        public async Task<ActionResult<WorkGroup>> PutWorkGroup(int id, [FromBody] WorkGroup workGroup)
+        public async Task<ResultModel<WorkGroup>> PutWorkGroup(int id, [FromBody] WorkGroup workGroup)
         {
+            ResultModel<WorkGroup> result = new ResultModel<WorkGroup>();
             if (id != workGroup.GroupID)
             {
-                return BadRequest();
+                result.Success = false;
+                result.Msg = "序號錯誤";
+                return result;
             }
 
             _context.Entry(workGroup).State = EntityState.Modified;
@@ -90,19 +94,19 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
             {
                 await _context.SaveChangesAsync();
             }
-            catch (DbUpdateConcurrencyException)
+            catch (Exception ex)
             {
-                if (!WorkGroupExists(id))
-                {
-                    return NotFound();
-                }
-                else
-                {
-                    throw;
-                }
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
             }
 
-            return workGroup;
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+
         }
 
         /// <summary>
@@ -114,15 +118,31 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
         // To protect from overposting attacks, enable the specific properties you want to bind to, for
         // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
         [HttpPost]
-        public async Task<ActionResult<WorkGroup>> PostWorkGroup(WorkGroup workGroup)
+        public async Task<ResultModel<WorkGroup>> PostWorkGroup(WorkGroup workGroup)
         {
+            ResultModel<WorkGroup> result = new ResultModel<WorkGroup>();
             Helper helper = new Helper(_context);
             workGroup.GroupID = helper.GetIDKey("WORKGROUP_ID").Result;
 
             _context.WorkGroups.Add(workGroup);
-            await _context.SaveChangesAsync();
 
-            return CreatedAtAction("GetWorkGroup", new { id = workGroup.GroupID }, workGroup);
+            try
+            {
+                await _context.SaveChangesAsync();
+            }
+            catch (Exception ex)
+            {
+
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
+
 
         }
 
@@ -133,18 +153,34 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
         /// <returns></returns>
         // DELETE: api/WorkGroups/5
         [HttpDelete("{id}")]
-        public async Task<ActionResult<WorkGroup>> DeleteWorkGroup(int id)
+        public async Task<ResultModel<WorkGroup>> DeleteWorkGroup(int id)
         {
+            ResultModel<WorkGroup> result = new ResultModel<WorkGroup>();
             var workGroup = await _context.WorkGroups.Where(p => p.GroupID == id).FirstOrDefaultAsync();
             if (workGroup == null)
             {
-                return NotFound();
+                result.Success = false;
+                result.Msg = "序號錯誤";
+                return result;
+            }
+
+            try
+            {
+                await _context.SaveChangesAsync();
             }
+            catch (Exception ex)
+            {
 
-            _context.WorkGroups.Remove(workGroup);
-            await _context.SaveChangesAsync();
+                result.Success = false;
+                result.Msg = ex.Message;
+                return result;
+
+            }
+
+            result.Success = true;
+            result.Msg = "OK";
+            return result;
 
-            return workGroup;
         }
 
         private bool WorkGroupExists(int id)
diff --git a/AMESCoreStudio.WebApi/Controllers/BAS/FactoryInfoesController.cs b/AMESCoreStudio.WebApi/Controllers/BAS/FactoryInfoesController.cs
index a59cacb2..4d33aede 100644
--- a/AMESCoreStudio.WebApi/Controllers/BAS/FactoryInfoesController.cs
+++ b/AMESCoreStudio.WebApi/Controllers/BAS/FactoryInfoesController.cs
@@ -167,7 +167,7 @@ namespace AMESCoreStudio.WebApi.Controllers.BAS
             factoryInfoNew = factoryInfo;
 
             _context.Entry(factoryInfoNew).State = EntityState.Modified;
-            ;
+
             if (factoryInfo.StatusNo == "A")
                 factoryInfoNew.StatusNo = "S";
             else
diff --git a/AMESCoreStudio.WebApi/Models/AMES/OutfitAreaInfo.cs b/AMESCoreStudio.WebApi/Models/AMES/OutfitAreaInfo.cs
new file mode 100644
index 00000000..b05ecb12
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Models/AMES/OutfitAreaInfo.cs
@@ -0,0 +1,77 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
+using Microsoft.EntityFrameworkCore;
+
+#nullable disable
+
+namespace AMESCoreStudio.WebApi.Models.AMES
+{
+    /// <summary>
+    /// 區域資料檔
+    /// </summary>
+    [Keyless]
+    [Table("OUTFIT_AREA_INFO", Schema = "JHAMES")]
+    public partial class OutfitAreaInfo
+    {
+        /// <summary>
+        /// 設備規格ID
+        /// </summary>
+        //[Key]
+        //[Column("VARIETY_ID", TypeName = "NUMBER")]
+        //[DataMember]
+        //[Required]
+        //public int VarityID { get; set; }
+
+        /// <summary>
+        /// 區域代碼
+        /// </summary>
+        [Column("AREA_NO")]
+        [StringLength(2)]
+        [DataMember]
+        [Required]
+        [Display(Name = "區域代碼")]
+        public string AreaNo { get; set; }
+
+
+        /// <summary>
+        /// 區域名稱
+        /// </summary>
+        [Column("AREA_DESC")]
+        [StringLength(50)]
+        [DataMember]
+        [Required]
+        [Display(Name = "區域描述")]
+        public string AreaDesc { get; set; }
+
+
+        /// <summary>
+        /// 創建者ID
+        /// </summary>
+        [Column("CREATE_USERID")]
+        [DataMember]
+        public int CreateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 創建日期
+        /// </summary>
+        [Column("CREATE_DATE")]
+        [DataMember]
+        public DateTime CreateDate { get; set; } = System.DateTime.Now;
+
+        /// <summary>
+        /// 更新者ID
+        /// </summary>
+        [Column("UPDATE_USERID")]
+        [DataMember]
+        public int UpdateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 更新日期
+        /// </summary>
+        [Column("UPDATE_DATE", TypeName = "DATE")]
+        [DataMember]
+        public DateTime UpdateDate { get; set; } = System.DateTime.Now;
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Models/AMES/OutfitCommodityInfo.cs b/AMESCoreStudio.WebApi/Models/AMES/OutfitCommodityInfo.cs
new file mode 100644
index 00000000..a984bf0d
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Models/AMES/OutfitCommodityInfo.cs
@@ -0,0 +1,142 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
+
+#nullable disable
+
+namespace AMESCoreStudio.WebApi.Models.AMES
+{
+    /// <summary>
+    /// 設備種類資料檔
+    /// </summary>
+    [Table("OUTFIT_COMMODITY_INFO", Schema = "JHAMES")]
+    public partial class OutfitCommodityInfo
+    {
+        /// <summary>
+        /// 設備種類ID
+        /// </summary>
+        [Key]
+        [Column("COMMODITY_ID")]
+        [DataMember]
+        [Required]
+        public int CommodityID { get; set; }
+
+        /// <summary>
+        /// 種類代碼
+        /// </summary>
+        [Column("COMMODITY_NO")]
+        [StringLength(2)]
+        [DataMember]
+        [Required]
+        [Display(Name = "種類代碼")]
+        public string CommodityNo { get; set; }
+
+
+        /// <summary>
+        /// 種類名稱
+        /// </summary>
+        [Column("COMMODITY_NAME")]
+        [StringLength(20)]
+        [DataMember]
+        [Required]
+        [Display(Name = "種類名稱")]
+        public string CommodityName { get; set; }
+
+        /// <summary>
+        /// 種類英文名稱
+        /// </summary>
+        [Column("COMMODITY_EN")]
+        [StringLength(100)]
+        [DataMember]
+        [Required]
+        [Display(Name = "種類英文名稱")]
+        public string CommodityEn { get; set; }
+
+        /// <summary>
+        /// 保養預警提前天數
+        /// </summary>
+        [Column("ALERT_FORE_DAYS")]//保養預警提前天數
+        [DataMember]
+        [Required]
+        [Display(Name = "保養預警提前天數")]
+        public int AlertForeDays { get; set; } = 0;
+
+        /// <summary>
+        /// 累計天數
+        /// </summary>
+        [Column("USE_LIMIT_DAYS")]//保養預警提前天數
+        [DataMember]
+        [Required]
+        [Display(Name = "累計天數")]
+        public int UseLimitDays { get; set; } = 0;
+
+        /// <summary>
+        /// 設備種類
+        /// 0:設備/料件; 2:耗材
+        /// </summary>
+        [Column("TYPE_FLAG")]
+        [DataMember]
+        [Required]
+        [Display(Name = "種類歸屬")]
+        public int TypeFlag { get; set; } = 0;
+
+        /// <summary>
+        /// 是否為存儲類設備)
+        /// </summary>
+        [Column("STORAGE_FLAG")]
+        [StringLength(1)]
+        [DataMember]
+        [Required]
+        [Display(Name = "是否為存儲類設備")]
+        public string StorageFlag { get; set; } = "N";
+
+        /// <summary>
+        /// 狀態(A-可用;S-停用)
+        /// </summary>
+        [Column("STATUS")]
+        [StringLength(1)]
+        [DataMember]
+        [Required]
+        [Display(Name = "狀態")]
+        public string Status { get; set; } = "A";
+
+        /// <summary>
+        /// 特殊種類
+        /// (X-錫膏; H-紅膠;G-鋼網)
+        /// </summary>
+        [Column("SMT_FLAG")]
+        [StringLength(1)]
+        [DataMember]
+        [Display(Name = "特殊種類")]
+        public string SmtFlag { get; set; }
+
+        /// <summary>
+        /// 創建者ID
+        /// </summary>
+        [Column("CREATE_USERID")]
+        [DataMember]
+        public int CreateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 創建日期
+        /// </summary>
+        [Column("CREATE_DATE")]
+        [DataMember]
+        public DateTime CreateDate { get; set; } = System.DateTime.Now;
+
+        /// <summary>
+        /// 更新者ID
+        /// </summary>
+        [Column("UPDATE_USERID")]
+        [DataMember]
+        public int UpdateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 更新日期
+        /// </summary>
+        [Column("UPDATE_DATE", TypeName = "DATE")]
+        [DataMember]
+        public DateTime UpdateDate { get; set; } = System.DateTime.Now;
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Models/AMES/OutfitInfo.cs b/AMESCoreStudio.WebApi/Models/AMES/OutfitInfo.cs
new file mode 100644
index 00000000..e7904c41
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Models/AMES/OutfitInfo.cs
@@ -0,0 +1,380 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
+
+#nullable disable
+
+namespace AMESCoreStudio.WebApi.Models.AMES
+{
+    /// <summary>
+    /// 設備資料檔
+    /// </summary>
+
+    [Table("OUTFIT_INFO", Schema = "JHAMES")]
+    public partial class OutfitInfo
+    {
+        /// <summary>
+        /// 治具ID
+        /// </summary>
+        [Key]
+        [Column("OUTFIT_ID")]
+        [DataMember]
+        [Required]
+        [Display(Name = "治具")]
+        public int OutfitID { get; set; }
+
+        /// <summary>
+        /// 品名ID
+        /// </summary>
+        [Column("COMMODITY_ID")]
+        [DataMember]
+        [Required]
+        [Display(Name = "設備種類")]
+        public int CommodityID { get; set; }
+
+        /// <summary>
+        /// 種類ID
+        /// </summary>
+        [Column("VARIETY_ID")]
+        [DataMember]
+        [Required]
+        [Display(Name = "種類規格")]
+        public int VarietyID { get; set; }
+
+        /// <summary>
+        /// 設備編碼
+        /// </summary>
+        [Column("OUTFIT_NO")]
+        [StringLength(15)]
+        [DataMember]
+        [Required]
+        [Display(Name = "設備編碼")]
+        public string OutfitNo { get; set; }
+
+        /// <summary>
+        /// 狀態
+        /// </summary>
+        [Column("STATUS_NO")]
+        [StringLength(2)]
+        [DataMember]
+        [Required]
+        [Display(Name = "設備狀態")]
+        public string StatusNo { get; set; }
+
+        /// <summary>
+        /// 備註
+        /// </summary>
+        [Column("REMARK")]
+        [StringLength(200)]
+        [DataMember]
+        [Display(Name = "備註")]
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 購置日期
+        /// </summary>
+        [Column("BUY_DAY")]
+        [DataMember]
+        [Display(Name = "購置日期")]
+        public DateTime BuyDay { get; set; }
+
+        /// <summary>
+        /// 預計歸還日期
+        /// </summary>
+        [Column("SCHE_RETURN_DAY")]
+        [DataMember]
+        [Display(Name = "預計歸還日期")]
+        public DateTime ScheReturnDay { get; set; }
+
+        /// <summary>
+        /// 當前保管人
+        /// </summary>
+        [Column("CUSTODIAN")]
+        [DataMember]
+        [Required]
+        [Display(Name = "當前保管人")]
+        public int Custondian { get; set; } 
+
+
+        /// <summary>
+        /// 區代碼
+        /// </summary>
+        [Column("AREA_NO")]
+        [StringLength(50)]
+        [DataMember]
+        [Display(Name = "區代碼")]
+        public string AreaNo { get; set; }
+
+
+
+        /// <summary>
+        /// 層別代碼
+        /// </summary>
+        [Column("LEVEL_NO")]
+        [StringLength(12)]
+        [DataMember]
+        [Display(Name = "層別代碼")]
+        public string LevelNo { get; set; }
+
+
+        /// <summary>
+        /// 位置代碼
+        /// </summary>
+        [Column("SITE_NO")]
+        [StringLength(12)]
+        [DataMember]
+        [Display(Name = "位置代碼")]
+        public string SiteNo { get; set; }
+
+
+        /// <summary>
+        /// 儲位編碼
+        /// </summary>
+        [Column("LOCATION_NO")]
+        [StringLength(12)]
+        [DataMember]
+        [Display(Name = "儲位")]
+        public string LocationNo { get; set; }
+
+
+        /// <summary>
+        /// 料件料號;財產名稱
+        /// </summary>
+        [Column("PART_NO")]
+        [StringLength(12)]
+        [DataMember]
+        [Display(Name = "財產名稱")]
+        public string PartNo { get; set; }
+
+        /// <summary>
+        /// 標識(0-設備;1-料件)
+        /// </summary>
+        [Column("TYPE_FLAG")]
+        [DataMember]
+        [Required]
+        [Display(Name = "標識")]
+        public int TypeFlag { get; set; } = 0;
+
+        /// <summary>
+        /// 廠別代碼
+        /// </summary>
+        [Column("FACTORY_CODE")]
+        [StringLength(5)]
+        [DataMember]
+        [Display(Name = "廠別")]
+        public string FactoryCode { get; set; } = "NA";
+
+        /// <summary>
+        /// 購置日期
+        /// </summary>
+        [Column("PURCHASE_DATE")]
+        [DataMember]
+        [Display(Name = "購置日期")]
+        public DateTime PuchaseDate { get; set; } = System.DateTime.Now;
+
+        /// <summary>
+        /// 單價
+        /// </summary>
+        [Column("UNIT_PRICE")]
+        [DataMember]
+        [Display(Name = "單價")]
+        public int UnitPrice { get; set; } = 0;
+
+        /// <summary>
+        /// 質保日期
+        /// </summary>
+        [Column("QUALITY_DATE")]
+        [DataMember]
+        [Display(Name = "質保日期")]
+        public DateTime QualityDate { get; set; }
+
+        /// <summary>
+        /// 廠商ID
+        /// </summary>
+        [Column("VENDOR_ID")]
+        [DataMember]
+        [Display(Name = "廠商")]
+        public int VendorID { get; set; }
+
+        /// <summary>
+        /// OA單號/管理編號
+        /// </summary>
+        [Column("OA_NO")]
+        [StringLength(30)]
+        [DataMember]
+        [Required]
+        [Display(Name = "管理編號")]
+        public string QANo { get; set; }
+
+        /// <summary>
+        /// 庫存數量
+        /// </summary>
+        [Column("STOCK_QTY")]
+        [DataMember]
+        [Required]
+        [Display(Name = "庫存數量")]
+        public int StockQty { get; set; } = 1;
+
+        /// <summary>
+        /// 單位
+        /// </summary>
+        [Column("UNIT")]
+        [StringLength(5)]
+        [DataMember]
+        [Display(Name = "單位")]
+        public string Unit { get; set; }
+
+        /// <summary>
+        /// 特殊種類(X:錫膏; H-紅膠儀器編號)
+        /// </summary>
+        [Column("LOT_NO")]
+        [StringLength(20)]
+        [DataMember]
+        [Display(Name = "特殊種類")]
+        public string LotNo { get; set; }
+
+        /// <summary>
+        /// 鋼網連板數量
+        /// </summary>
+        [Column("BOARDS")]
+        [DataMember]
+        [Display(Name = "鋼網連板數量")]
+        public int Boards { get; set; }
+
+        /// <summary>
+        /// 治具使用次數
+        /// </summary>
+        [Column("USE_TIMES")]
+        [DataMember]
+        [Required]
+        [Display(Name = "治具使用次數")]
+        public int UseTimes { get; set; } = 0;
+
+        /// <summary>
+        /// 治具累計使用次數
+        /// </summary>
+        [Column("TOTAL_TIMES")]
+        [DataMember]
+        [Required]
+        [Display(Name = "治具累計使用次數")]
+        public int TotalTimes { get; set; } = 0;
+
+        /// <summary>
+        /// 型號
+        /// </summary>
+        [Column("MODEL_NO")]
+        [StringLength(50)]
+        [DataMember]
+        [Display(Name = "型號")]
+        public string ModelNo { get; set; }
+
+        /// <summary>
+        /// 內部條碼
+        /// </summary>
+        [Column("BARCODE_NO")]
+        [StringLength(50)]
+        [DataMember]
+        [Display(Name = "內部條碼")]
+        public string BarcodeNo { get; set; }
+
+
+        /// <summary>
+        /// 校驗方式
+        /// </summary>
+        [Column("TYPE_ID")]
+        [DataMember]
+        [Display(Name = "校驗方式")]
+        public int TypeID { get; set; }
+
+        /// <summary>
+        /// 檢驗週期ID
+        /// </summary>
+        [Column("CYCLE_ID")]
+        [DataMember]
+        [Display(Name = "檢驗週期")]
+        public int CycleID { get; set; }
+
+        /// <summary>
+        /// 外校費用
+        /// </summary>
+        [Column("FOREIGN_EXPENSES")]
+        [StringLength(10)]
+        [DataMember]
+        [Display(Name = "外校費用")]
+        public string ForeignExpenses { get; set; }
+
+
+        /// <summary>
+        /// 校驗日期
+        /// </summary>
+        [Column("CHECK_DATE")]
+        [DataMember]
+        [Display(Name = "校驗日期")]
+        public DateTime CheckDate { get; set; }
+
+
+        /// <summary>
+        /// 下次校驗日期
+        /// </summary>
+        [Column("NEXT_DATE")]
+        [DataMember]
+        [Display(Name = "下次校驗日期")]
+        public DateTime NextDate { get; set; }
+
+
+        /// <summary>
+        /// 是否為母儀(Y/N)
+        /// </summary>
+        [Column("MASTER")]
+        [StringLength(2)]
+        [DataMember]
+        [Display(Name = "是否為母儀")]
+        public string Master { get; set; }
+
+        /// <summary>
+        /// 當前保管人
+        /// </summary>
+        [Column("CUSTODIAN_NAME")]
+        [StringLength(50)]
+        [DataMember]
+        [Display(Name = "保管人")]
+        public string CustodianName { get; set; }
+        /// <summary>
+        /// 當前保管人部門
+        /// </summary>
+        [Column("CUSTODIAN_DEPT")]
+        [StringLength(50)]
+        [DataMember]
+        [Display(Name = "保管部門")]
+        public string CustodianDept { get; set; }
+
+        /// <summary>
+        /// 創建者ID
+        /// </summary>
+        [Column("CREATE_USERID")]
+        [DataMember]
+        public int CreateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 創建日期
+        /// </summary>
+        [Column("CREATE_DATE")]
+        [DataMember]
+        public DateTime CreateDate { get; set; } = System.DateTime.Now;
+
+        /// <summary>
+        /// 更新者ID
+        /// </summary>
+        [Column("UPDATE_USERID")]
+        [DataMember]
+        public int UpdateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 更新日期
+        /// </summary>
+        [Column("UPDATE_DATE", TypeName = "DATE")]
+        [DataMember]
+        public DateTime UpdateDate { get; set; } = System.DateTime.Now;
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Models/AMES/OutfitLevelInfo.cs b/AMESCoreStudio.WebApi/Models/AMES/OutfitLevelInfo.cs
new file mode 100644
index 00000000..3764a2b8
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Models/AMES/OutfitLevelInfo.cs
@@ -0,0 +1,77 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
+using Microsoft.EntityFrameworkCore;
+
+#nullable disable
+
+namespace AMESCoreStudio.WebApi.Models.AMES
+{
+    /// <summary>
+    /// 層別資料檔
+    /// </summary>
+    [Keyless]
+    [Table("OUTFIT_LEVEL_INFO", Schema = "JHAMES")]
+    public partial class OutfitLevelInfo
+    {
+        /// <summary>
+        /// 設備規格ID
+        /// </summary>
+        //[Key]
+        //[Column("VARIETY_ID", TypeName = "NUMBER")]
+        //[DataMember]
+        //[Required]
+        //public int VarityID { get; set; }
+
+        /// <summary>
+        /// 區域代碼
+        /// </summary>
+        [Column("LEVEL_NO")]
+        [StringLength(1)]
+        [DataMember]
+        [Required]
+        [Display(Name = "層別代碼")]
+        public string LevelNo { get; set; }
+
+
+        /// <summary>
+        /// 層別描述
+        /// </summary>
+        [Column("LEVEL_DESC")]
+        [StringLength(50)]
+        [DataMember]
+        [Required]
+        [Display(Name = "層別描述")]
+        public string LevelDesc { get; set; }
+
+
+        /// <summary>
+        /// 創建者ID
+        /// </summary>
+        [Column("CREATE_USERID")]
+        [DataMember]
+        public int CreateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 創建日期
+        /// </summary>
+        [Column("CREATE_DATE")]
+        [DataMember]
+        public DateTime CreateDate { get; set; } = System.DateTime.Now;
+
+        /// <summary>
+        /// 更新者ID
+        /// </summary>
+        [Column("UPDATE_USERID")]
+        [DataMember]
+        public int UpdateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 更新日期
+        /// </summary>
+        [Column("UPDATE_DATE", TypeName = "DATE")]
+        [DataMember]
+        public DateTime UpdateDate { get; set; } = System.DateTime.Now;
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Models/AMES/OutfitSiteInfo.cs b/AMESCoreStudio.WebApi/Models/AMES/OutfitSiteInfo.cs
new file mode 100644
index 00000000..3e411899
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Models/AMES/OutfitSiteInfo.cs
@@ -0,0 +1,68 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
+using Microsoft.EntityFrameworkCore;
+
+#nullable disable
+
+namespace AMESCoreStudio.WebApi.Models.AMES
+{
+    /// <summary>
+    /// 位置資料檔
+    /// </summary>
+    [Keyless]
+    [Table("OUTFIT_SITE_INFO", Schema = "JHAMES")]
+    public partial class OutfitSiteInfo
+    {
+        /// <summary>
+        /// 位置代碼
+        /// </summary>
+        [Column("SITE_NO")]
+        [StringLength(2)]
+        [DataMember]
+        [Required]
+        [Display(Name = "位置代碼")]
+        public string SiteNo { get; set; }
+
+
+        /// <summary>
+        /// 位置描述
+        /// </summary>
+        [Column("SITE_DESC")]
+        [StringLength(50)]
+        [DataMember]
+        [Required]
+        [Display(Name = "位置描述")]
+        public string SiteDesc { get; set; }
+
+
+        /// <summary>
+        /// 創建者ID
+        /// </summary>
+        [Column("CREATE_USERID")]
+        [DataMember]
+        public int CreateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 創建日期
+        /// </summary>
+        [Column("CREATE_DATE")]
+        [DataMember]
+        public DateTime CreateDate { get; set; } = System.DateTime.Now;
+
+        /// <summary>
+        /// 更新者ID
+        /// </summary>
+        [Column("UPDATE_USERID")]
+        [DataMember]
+        public int UpdateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 更新日期
+        /// </summary>
+        [Column("UPDATE_DATE", TypeName = "DATE")]
+        [DataMember]
+        public DateTime UpdateDate { get; set; } = System.DateTime.Now;
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Models/AMES/OutfitVarityInfo.cs b/AMESCoreStudio.WebApi/Models/AMES/OutfitVarityInfo.cs
new file mode 100644
index 00000000..2afd0730
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Models/AMES/OutfitVarityInfo.cs
@@ -0,0 +1,119 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
+
+#nullable disable
+
+namespace AMESCoreStudio.WebApi.Models.AMES
+{
+    /// <summary>
+    /// 設備規格資料檔
+    /// </summary>
+    [Table("OUTFIT_VARIETY_INFO", Schema = "JHAMES")]
+    public partial class OutfitVarityInfo
+    {
+        /// <summary>
+        /// 設備規格ID
+        /// </summary>
+        [Key]
+        [Column("VARIETY_ID")]
+        [DataMember]
+        [Required]
+        public int VarityID { get; set; }
+
+        /// <summary>
+        /// 設備種類ID
+        /// </summary>
+        [Column("COMMODITY_ID")]
+        [DataMember]
+        [Required]
+        [Display(Name = "設備種類")]
+        public int CommodityID { get; set; }
+
+        /// <summary>
+        /// 規格代碼
+        /// </summary>
+        [Column("VARIETY_NO")]
+        [StringLength(2)]
+        [DataMember]
+        [Required]
+        [Display(Name = "規格代碼")]
+        public string VarityNo { get; set; }
+
+
+        /// <summary>
+        /// 規格名稱
+        /// </summary>
+        [Column("VARIETY_NAME")]
+        [StringLength(20)]
+        [DataMember]
+        [Required]
+        [Display(Name = "規格名稱")]
+        public string VarityName { get; set; }
+
+        /// <summary>
+        /// 安全庫存數量
+        /// </summary>
+        [Column("SAFE_STOCK")]
+        [DataMember]
+        [Required]
+        [Display(Name = "安全庫存數量")]
+        public int SafeStock { get; set; } = 0;
+
+        /// <summary>
+        /// 狀態(A-可用;S-停用)
+        /// </summary>
+        [Column("STATUS")]
+        [StringLength(1)]
+        [DataMember]
+        [Required]
+        [Display(Name = "狀態")]
+        public string Status { get; set; } = "A";
+
+        /// <summary>
+        /// 預定試用次數
+        /// </summary>
+        [Column("USE_LIMIT_TIMES")]
+        [DataMember]
+        [Required]
+        [Display(Name = "預定試用次數")]
+        public int UseLimitTimes { get; set; } = 0;
+
+        /// <summary>
+        /// 創建者ID
+        /// </summary>
+        [Column("CREATE_USERID")]
+        [DataMember]
+        public int CreateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 創建日期
+        /// </summary>
+        [Column("CREATE_DATE")]
+        [DataMember]
+        public DateTime CreateDate { get; set; } = System.DateTime.Now;
+
+        /// <summary>
+        /// 更新者ID
+        /// </summary>
+        [Column("UPDATE_USERID")]
+        [DataMember]
+        public int UpdateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 更新日期
+        /// </summary>
+        [Column("UPDATE_DATE", TypeName = "DATE")]
+        [DataMember]
+        public DateTime UpdateDate { get; set; } = System.DateTime.Now;
+
+
+        /// <summary>
+        /// 製程單位主檔
+        /// </summary>
+        [ForeignKey("CommodityID")]
+        public virtual OutfitCommodityInfo Commodity { get; set; }
+
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Models/AMES/OutfitVendorInfo.cs b/AMESCoreStudio.WebApi/Models/AMES/OutfitVendorInfo.cs
new file mode 100644
index 00000000..c92e6f6b
--- /dev/null
+++ b/AMESCoreStudio.WebApi/Models/AMES/OutfitVendorInfo.cs
@@ -0,0 +1,94 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
+
+#nullable disable
+
+namespace AMESCoreStudio.WebApi.Models.AMES
+{
+    /// <summary>
+    /// 廠商資料檔
+    /// </summary>
+
+    [Table("OUTFIT_VENDOR_INFO", Schema = "JHAMES")]
+    public partial class OutfitVendorInfo
+    {
+        /// <summary>
+        /// 廠商ID
+        /// </summary>
+        [Key]
+        [Column("VENDOR_ID")]
+        [DataMember]
+        [Required]
+        public int VendorID { get; set; }
+
+        /// <summary>
+        /// 廠商名稱
+        /// </summary>
+        [Column("VENDOR_NAME")]
+        [StringLength(100)]
+        [DataMember]
+        [Required]
+        [Display(Name = "廠商名稱")]
+        public string VendorName { get; set; }
+
+
+        /// <summary>
+        /// 連絡電話
+        /// </summary>
+        [Column("TEL_NO")]
+        [StringLength(50)]
+        [DataMember]
+        [Display(Name = "連絡電話")]
+        public string TelNo { get; set; }
+
+        /// <summary>
+        /// 地址
+        /// </summary>
+        [Column("ADDRESS")]
+        [StringLength(100)]
+        [DataMember]
+        [Display(Name = "地址")]
+        public string Address { get; set; }
+
+
+        /// <summary>
+        /// 備註
+        /// </summary>
+        [Column("MEMO")]
+        [StringLength(300)]
+        [DataMember]
+        [Display(Name = "備註")]
+        public string Memo { get; set; }
+
+
+        /// <summary>
+        /// 創建者ID
+        /// </summary>
+        [Column("CREATE_USERID")]
+        [DataMember]
+        public int CreateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 創建日期
+        /// </summary>
+        [Column("CREATE_DATE")]
+        [DataMember]
+        public DateTime CreateDate { get; set; } = System.DateTime.Now;
+
+        /// <summary>
+        /// 更新者ID
+        /// </summary>
+        [Column("UPDATE_USERID")]
+        [DataMember]
+        public int UpdateUserID { get; set; } = 0;
+
+        /// <summary>
+        /// 更新日期
+        /// </summary>
+        [Column("UPDATE_DATE", TypeName = "DATE")]
+        [DataMember]
+        public DateTime UpdateDate { get; set; } = System.DateTime.Now;
+    }
+}
diff --git a/AMESCoreStudio.WebApi/Models/AMESContext.cs b/AMESCoreStudio.WebApi/Models/AMESContext.cs
index 46052736..696c9995 100644
--- a/AMESCoreStudio.WebApi/Models/AMESContext.cs
+++ b/AMESCoreStudio.WebApi/Models/AMESContext.cs
@@ -741,6 +741,11 @@ namespace AMESCoreStudio.WebApi
         /// </summary>
         public virtual DbSet<OutfitVendorInfo> OutfitVendorInfoes { get; set; }
 
+        /// <summary>
+        /// 治具資料檔
+        /// </summary>
+        public virtual DbSet<OutfitInfo> OutfitInfoes { get; set; }
+
 
 
     }
diff --git a/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.dll b/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.dll
index 73dc25f2..f56a9a67 100644
Binary files a/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.dll and b/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.dll differ
diff --git a/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.pdb b/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.pdb
index 162e7459..81f79226 100644
Binary files a/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.pdb and b/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.Views.pdb differ
diff --git a/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.dll b/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.dll
index a027d025..cef2726f 100644
Binary files a/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.dll and b/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.dll differ
diff --git a/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.pdb b/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.pdb
index ab5ca1c1..29fc7899 100644
Binary files a/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.pdb and b/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.pdb differ
diff --git a/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.xml b/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.xml
index 9725bef2..56e1a327 100644
--- a/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.xml
+++ b/AMESCoreStudio.WebApi/bin/Debug/netcoreapp3.1/AMESCoreStudio.WebApi.xml
@@ -2361,19 +2361,27 @@
             <param name="id"></param>
             <returns></returns>
         </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitCommodityInfoesController.GetOutfitCommodityInfoByQuery(System.Int32,System.String)">
+            <summary>
+            
+            </summary>
+            <param name="TypeFlag"></param>
+            <param name="Status"></param>
+            <returns></returns>
+        </member>
         <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitCommodityInfoesController.PutOutfitCommodityInfo(System.Int32,AMESCoreStudio.WebApi.Models.AMES.OutfitCommodityInfo)">
             <summary>
             
             </summary>
             <param name="id"></param>
-            <param name="workGroup"></param>
+            <param name="OutfitCommodityInfo"></param>
             <returns></returns>
         </member>
         <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitCommodityInfoesController.PostOutfitCommodityInfo(AMESCoreStudio.WebApi.Models.AMES.OutfitCommodityInfo)">
             <summary>
             新增资料
             </summary>
-            <param name="workGroup"></param>
+            <param name="OutfitCommodityInfo"></param>
             <returns></returns>
         </member>
         <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitCommodityInfoesController.DeleteOutfitCommodityInfo(System.Int32)">
@@ -2383,6 +2391,165 @@
             <param name="id"></param>
             <returns></returns>
         </member>
+        <member name="T:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController">
+            <summary>
+            工作群組維護
+            </summary>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.#ctor(AMESCoreStudio.WebApi.AMESContext)">
+            <summary>
+            
+            </summary>
+            <param name="context"></param>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.GetOutfitInfo">
+            <summary>
+            
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.GetOutfitInfo(System.Int32)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.GetOutfitInfoByQuery(System.Int32,System.Int32,System.Int32,System.String,System.String,System.String)">
+            <summary>
+            
+            </summary>
+            <param name="TypeFlag"></param>
+            <param name="CommodityID"></param>
+            <param name="VarityID"></param>
+            <param name="Status"></param>
+            <param name="QANo"></param>
+            <param name="PartNo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.PutOutfitInfo(System.Int32,AMESCoreStudio.WebApi.Models.AMES.OutfitInfo)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <param name="OutfitInfo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.PostOutfitInfo(AMESCoreStudio.WebApi.Models.AMES.OutfitInfo)">
+            <summary>
+            新增资料
+            </summary>
+            <param name="OutfitInfo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitInfoesController.DeleteOutfitInfo(System.Int32)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="T:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController">
+            <summary>
+            工作群組維護
+            </summary>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.#ctor(AMESCoreStudio.WebApi.AMESContext)">
+            <summary>
+            
+            </summary>
+            <param name="context"></param>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.GetOutfitVarityInfo">
+            <summary>
+            
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.GetOutfitVarityInfoByQuery(System.Int32,System.Int32,System.String)">
+            <summary>
+            
+            </summary>
+            <param name="TypeFlag"></param>
+            <param name="CommodityID"></param>
+            <param name="Status"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.GetOutfitVarityInfo(System.Int32)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.PutOutfitVarityInfo(System.Int32,AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <param name="OutfitVarityInfo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.PostOutfitVarityInfo(AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo)">
+            <summary>
+            新增资料
+            </summary>
+            <param name="OutfitVarityInfo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVarityInfoesController.DeleteOutfitVarityInfo(System.Int32)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="T:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController">
+            <summary>
+            工作群組維護
+            </summary>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController.#ctor(AMESCoreStudio.WebApi.AMESContext)">
+            <summary>
+            
+            </summary>
+            <param name="context"></param>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController.GetOutfitVendorInfo">
+            <summary>
+            
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController.GetOutfitVendorInfo(System.Int32)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController.PutOutfitVendorInfo(System.Int32,AMESCoreStudio.WebApi.Models.AMES.OutfitVendorInfo)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <param name="OutfitVendorInfo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController.PostOutfitVendorInfo(AMESCoreStudio.WebApi.Models.AMES.OutfitVendorInfo)">
+            <summary>
+            新增资料
+            </summary>
+            <param name="OutfitVendorInfo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:AMESCoreStudio.WebApi.Controllers.AMES.OutfitVendorInfoesController.DeleteOutfitVendorInfo(System.Int32)">
+            <summary>
+            
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
         <member name="T:AMESCoreStudio.WebApi.Controllers.AMES.PartMapsController">
             <summary>
             
@@ -7240,6 +7407,11 @@
             廠商資料檔
             </summary>
         </member>
+        <member name="P:AMESCoreStudio.WebApi.AMESContext.OutfitInfoes">
+            <summary>
+            治具資料檔
+            </summary>
+        </member>
         <member name="T:AMESCoreStudio.WebApi.Models.AMES.BarcodeChange">
             <summary>
             條碼變更資料表
@@ -10393,6 +10565,11 @@
             0:設備/料件; 2:耗材
             </summary>
         </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitCommodityInfo.StorageFlag">
+            <summary>
+            是否為存儲類設備)
+            </summary>
+        </member>
         <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitCommodityInfo.Status">
             <summary>
             狀態(A-可用;S-停用)
@@ -10424,6 +10601,216 @@
             更新日期
             </summary>
         </member>
+        <member name="T:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo">
+            <summary>
+            設備資料檔
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.OutfitID">
+            <summary>
+            治具ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CommodityID">
+            <summary>
+            品名ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.VarietyID">
+            <summary>
+            種類ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.OutfitNo">
+            <summary>
+            設備編碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.StatusNo">
+            <summary>
+            狀態
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.Remark">
+            <summary>
+            備註
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.BuyDay">
+            <summary>
+            購置日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.ScheReturnDay">
+            <summary>
+            預計歸還日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.Custondian">
+            <summary>
+            當前保管人
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.AreaNo">
+            <summary>
+            區代碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.LevelNo">
+            <summary>
+            層別代碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.SiteNo">
+            <summary>
+            位置代碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.LocationNo">
+            <summary>
+            儲位編碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.PartNo">
+            <summary>
+            料件料號;財產名稱
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.TypeFlag">
+            <summary>
+            標識(0-設備;1-料件)
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.FactoryCode">
+            <summary>
+            廠別代碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.PuchaseDate">
+            <summary>
+            購置日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.UnitPrice">
+            <summary>
+            單價
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.QualityDate">
+            <summary>
+            質保日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.VendorID">
+            <summary>
+            廠商ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.QANo">
+            <summary>
+            OA單號/管理編號
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.StockQty">
+            <summary>
+            庫存數量
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.Unit">
+            <summary>
+            單位
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.LotNo">
+            <summary>
+            特殊種類(X:錫膏; H-紅膠儀器編號)
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.Boards">
+            <summary>
+            鋼網連板數量
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.UseTimes">
+            <summary>
+            治具使用次數
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.TotalTimes">
+            <summary>
+            治具累計使用次數
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.ModelNo">
+            <summary>
+            型號
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.BarcodeNo">
+            <summary>
+            內部條碼
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.TypeID">
+            <summary>
+            校驗方式
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CycleID">
+            <summary>
+            檢驗週期ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.ForeignExpenses">
+            <summary>
+            外校費用
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CheckDate">
+            <summary>
+            校驗日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.NextDate">
+            <summary>
+            下次校驗日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.Master">
+            <summary>
+            是否為母儀(Y/N)
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CustodianName">
+            <summary>
+            當前保管人
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CustodianDept">
+            <summary>
+            當前保管人部門
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CreateUserID">
+            <summary>
+            創建者ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.CreateDate">
+            <summary>
+            創建日期
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.UpdateUserID">
+            <summary>
+            更新者ID
+            </summary>
+        </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitInfo.UpdateDate">
+            <summary>
+            更新日期
+            </summary>
+        </member>
         <member name="T:AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo">
             <summary>
             設備規格資料檔
@@ -10459,7 +10846,7 @@
             狀態(A-可用;S-停用)
             </summary>
         </member>
-        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo.UseLimitDays">
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo.UseLimitTimes">
             <summary>
             預定試用次數
             </summary>
@@ -10484,6 +10871,11 @@
             更新日期
             </summary>
         </member>
+        <member name="P:AMESCoreStudio.WebApi.Models.AMES.OutfitVarityInfo.Commodity">
+            <summary>
+            製程單位主檔
+            </summary>
+        </member>
         <member name="T:AMESCoreStudio.WebApi.Models.AMES.OutfitVendorInfo">
             <summary>
             廠商資料檔