From e1dce2f5372e9ee756f00bf9a254f1f9dbd670bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=98=89=E7=A5=A5=20=E8=A9=B9?= Date: Tue, 27 Feb 2024 16:22:50 +0800 Subject: [PATCH] finish news add edit del --- Bremen_ESG.csproj | 1 + Controllers/ApiController.cs | 31 ++ Controllers/BackEndApiController.cs | 332 +++++++++++++++ Models/newsDetial.cs | 33 ++ Views/BackEnd/NewsList.cshtml | 65 ++- Views/Shared/_BackEnd.cshtml | 2 +- .../assets/javascript/custom/newslist.js | 398 +++++++++++++++++- .../vendor/summernote/font/summernote.eot | Bin 0 -> 12072 bytes .../vendor/summernote/font/summernote.ttf | Bin 0 -> 11896 bytes .../vendor/summernote/font/summernote.woff | Bin 0 -> 7428 bytes .../vendor/summernote/font/summernote.woff2 | Bin 0 -> 6156 bytes .../summernote/lang/summernote-ar-AR.min.js | 2 + .../lang/summernote-ar-AR.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-az-AZ.min.js | 2 + .../lang/summernote-az-AZ.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-bg-BG.min.js | 2 + .../lang/summernote-bg-BG.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-ca-ES.min.js | 2 + .../lang/summernote-ca-ES.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-cs-CZ.min.js | 2 + .../lang/summernote-cs-CZ.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-da-DK.min.js | 2 + .../lang/summernote-da-DK.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-de-DE.min.js | 2 + .../lang/summernote-de-DE.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-el-GR.min.js | 2 + .../lang/summernote-el-GR.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-es-ES.min.js | 2 + .../lang/summernote-es-ES.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-es-EU.min.js | 2 + .../lang/summernote-es-EU.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-fa-IR.min.js | 2 + .../lang/summernote-fa-IR.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-fi-FI.min.js | 2 + .../lang/summernote-fi-FI.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-fr-FR.min.js | 2 + .../lang/summernote-fr-FR.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-gl-ES.min.js | 2 + .../lang/summernote-gl-ES.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-he-IL.min.js | 2 + .../lang/summernote-he-IL.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-hr-HR.min.js | 2 + .../lang/summernote-hr-HR.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-hu-HU.min.js | 2 + .../lang/summernote-hu-HU.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-id-ID.min.js | 2 + .../lang/summernote-id-ID.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-it-IT.min.js | 2 + .../lang/summernote-it-IT.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-ja-JP.min.js | 2 + .../lang/summernote-ja-JP.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-ko-KR.min.js | 2 + .../lang/summernote-ko-KR.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-lt-LT.min.js | 2 + .../lang/summernote-lt-LT.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-lt-LV.min.js | 2 + .../lang/summernote-lt-LV.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-mn-MN.min.js | 2 + .../lang/summernote-mn-MN.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-nb-NO.min.js | 2 + .../lang/summernote-nb-NO.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-nl-NL.min.js | 2 + .../lang/summernote-nl-NL.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-pl-PL.min.js | 2 + .../lang/summernote-pl-PL.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-pt-BR.min.js | 2 + .../lang/summernote-pt-BR.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-pt-PT.min.js | 2 + .../lang/summernote-pt-PT.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-ro-RO.min.js | 2 + .../lang/summernote-ro-RO.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-ru-RU.min.js | 2 + .../lang/summernote-ru-RU.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-sk-SK.min.js | 2 + .../lang/summernote-sk-SK.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-sl-SI.min.js | 2 + .../lang/summernote-sl-SI.min.js.LICENSE.txt | 1 + .../lang/summernote-sr-RS-Latin.min.js | 2 + .../summernote-sr-RS-Latin.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-sr-RS.min.js | 2 + .../lang/summernote-sr-RS.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-sv-SE.min.js | 2 + .../lang/summernote-sv-SE.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-ta-IN.min.js | 2 + .../lang/summernote-ta-IN.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-th-TH.min.js | 2 + .../lang/summernote-th-TH.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-tr-TR.min.js | 2 + .../lang/summernote-tr-TR.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-uk-UA.min.js | 2 + .../lang/summernote-uk-UA.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-uz-UZ.min.js | 2 + .../lang/summernote-uz-UZ.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-vi-VN.min.js | 2 + .../lang/summernote-vi-VN.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-zh-CN.min.js | 2 + .../lang/summernote-zh-CN.min.js.LICENSE.txt | 1 + .../summernote/lang/summernote-zh-TW.min.js | 2 + .../lang/summernote-zh-TW.min.js.LICENSE.txt | 1 + .../databasic/summernote-ext-databasic.css | 16 + .../databasic/summernote-ext-databasic.js | 291 +++++++++++++ .../plugin/hello/summernote-ext-hello.js | 82 ++++ .../summernote-ext-specialchars.js | 311 ++++++++++++++ .../summernote/summernote-0.8.16-dist.zip | Bin 0 -> 1364084 bytes .../vendor/summernote/summernote-bs4.min.css | 1 + .../vendor/summernote/summernote-bs4.min.js | 3 + .../summernote-bs4.min.js.LICENSE.txt | 1 + .../summernote/summernote-bs4.min.js.map | 1 + .../vendor/summernote/summernote-lite.min.css | 1 + .../vendor/summernote/summernote-lite.min.js | 3 + .../summernote-lite.min.js.LICENSE.txt | 1 + .../summernote/summernote-lite.min.js.map | 1 + .../vendor/summernote/summernote.min.css | 1 + .../vendor/summernote/summernote.min.js | 3 + .../summernote/summernote.min.js.LICENSE.txt | 1 + .../vendor/summernote/summernote.min.js.map | 1 + wwwroot/upload/main/mainPhoto_0R8AS5QV.png | Bin 0 -> 1128592 bytes wwwroot/upload/main/mainPhoto_6D1HSKE6.jpeg | Bin 0 -> 64001 bytes wwwroot/upload/main/mainPhoto_SRLZB2CL.jpg | Bin 0 -> 80531 bytes wwwroot/upload/sub/subPhoto_134R88NV.jpg | Bin 0 -> 42448 bytes wwwroot/upload/sub/subPhoto_180NGYIA.png | Bin 0 -> 10652 bytes wwwroot/upload/sub/subPhoto_1BT2E11T.jpg | Bin 0 -> 2817328 bytes wwwroot/upload/sub/subPhoto_3VUQEXK8.jpeg | Bin 0 -> 740765 bytes wwwroot/upload/sub/subPhoto_4SWKB1RY.jpg | Bin 0 -> 2817328 bytes wwwroot/upload/sub/subPhoto_BXYTRQG5.jpeg | Bin 0 -> 740765 bytes wwwroot/upload/sub/subPhoto_CSZZHER0.jpg | Bin 0 -> 222260 bytes wwwroot/upload/sub/subPhoto_DUHYDK7W.jpg | Bin 0 -> 42448 bytes wwwroot/upload/sub/subPhoto_H8UGGWO8.jpg | Bin 0 -> 80531 bytes wwwroot/upload/sub/subPhoto_LE7GL475.jpeg | Bin 0 -> 740765 bytes wwwroot/upload/sub/subPhoto_O8L1VJDS.jpeg | Bin 0 -> 740765 bytes wwwroot/upload/sub/subPhoto_Q9XPJZ3A.jpeg | Bin 0 -> 64001 bytes wwwroot/upload/sub/subPhoto_QHJRV44Y.png | Bin 0 -> 1128592 bytes wwwroot/upload/sub/subPhoto_RRSQZPWH.jpeg | Bin 0 -> 740765 bytes wwwroot/upload/sub/subPhoto_UISJZYSO.jpg | Bin 0 -> 2817328 bytes wwwroot/upload/sub/subPhoto_W8JASUE0.jpg | Bin 0 -> 2817328 bytes wwwroot/upload/sub/subPhoto_YYWILJCQ.jpg | Bin 0 -> 2817328 bytes 136 files changed, 1701 insertions(+), 11 deletions(-) create mode 100644 Models/newsDetial.cs create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/font/summernote.eot create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/font/summernote.ttf create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/font/summernote.woff create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/font/summernote.woff2 create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ar-AR.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ar-AR.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-az-AZ.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-az-AZ.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-bg-BG.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-bg-BG.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ca-ES.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ca-ES.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-cs-CZ.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-cs-CZ.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-da-DK.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-da-DK.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-de-DE.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-de-DE.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-el-GR.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-el-GR.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-es-ES.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-es-ES.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-es-EU.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-es-EU.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-fa-IR.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-fa-IR.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-fi-FI.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-fi-FI.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-fr-FR.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-fr-FR.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-gl-ES.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-gl-ES.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-he-IL.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-he-IL.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-hr-HR.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-hr-HR.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-hu-HU.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-hu-HU.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-id-ID.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-id-ID.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-it-IT.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-it-IT.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ja-JP.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ja-JP.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ko-KR.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ko-KR.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-lt-LT.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-lt-LT.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-lt-LV.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-lt-LV.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-mn-MN.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-mn-MN.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-nb-NO.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-nb-NO.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-nl-NL.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-nl-NL.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-pl-PL.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-pl-PL.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-pt-BR.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-pt-BR.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-pt-PT.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-pt-PT.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ro-RO.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ro-RO.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ru-RU.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ru-RU.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-sk-SK.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-sk-SK.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-sl-SI.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-sl-SI.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-sr-RS-Latin.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-sr-RS-Latin.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-sr-RS.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-sr-RS.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-sv-SE.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-sv-SE.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ta-IN.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-ta-IN.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-th-TH.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-th-TH.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-tr-TR.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-tr-TR.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-uk-UA.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-uk-UA.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-uz-UZ.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-uz-UZ.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-vi-VN.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-vi-VN.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-zh-CN.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-zh-CN.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-zh-TW.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/lang/summernote-zh-TW.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/plugin/databasic/summernote-ext-databasic.css create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/plugin/databasic/summernote-ext-databasic.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/plugin/hello/summernote-ext-hello.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/plugin/specialchars/summernote-ext-specialchars.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/summernote-0.8.16-dist.zip create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/summernote-bs4.min.css create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/summernote-bs4.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/summernote-bs4.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/summernote-bs4.min.js.map create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/summernote-lite.min.css create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/summernote-lite.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/summernote-lite.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/summernote-lite.min.js.map create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/summernote.min.css create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/summernote.min.js create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/summernote.min.js.LICENSE.txt create mode 100644 wwwroot/BackEnd/assets/vendor/summernote/summernote.min.js.map create mode 100644 wwwroot/upload/main/mainPhoto_0R8AS5QV.png create mode 100644 wwwroot/upload/main/mainPhoto_6D1HSKE6.jpeg create mode 100644 wwwroot/upload/main/mainPhoto_SRLZB2CL.jpg create mode 100644 wwwroot/upload/sub/subPhoto_134R88NV.jpg create mode 100644 wwwroot/upload/sub/subPhoto_180NGYIA.png create mode 100644 wwwroot/upload/sub/subPhoto_1BT2E11T.jpg create mode 100644 wwwroot/upload/sub/subPhoto_3VUQEXK8.jpeg create mode 100644 wwwroot/upload/sub/subPhoto_4SWKB1RY.jpg create mode 100644 wwwroot/upload/sub/subPhoto_BXYTRQG5.jpeg create mode 100644 wwwroot/upload/sub/subPhoto_CSZZHER0.jpg create mode 100644 wwwroot/upload/sub/subPhoto_DUHYDK7W.jpg create mode 100644 wwwroot/upload/sub/subPhoto_H8UGGWO8.jpg create mode 100644 wwwroot/upload/sub/subPhoto_LE7GL475.jpeg create mode 100644 wwwroot/upload/sub/subPhoto_O8L1VJDS.jpeg create mode 100644 wwwroot/upload/sub/subPhoto_Q9XPJZ3A.jpeg create mode 100644 wwwroot/upload/sub/subPhoto_QHJRV44Y.png create mode 100644 wwwroot/upload/sub/subPhoto_RRSQZPWH.jpeg create mode 100644 wwwroot/upload/sub/subPhoto_UISJZYSO.jpg create mode 100644 wwwroot/upload/sub/subPhoto_W8JASUE0.jpg create mode 100644 wwwroot/upload/sub/subPhoto_YYWILJCQ.jpg diff --git a/Bremen_ESG.csproj b/Bremen_ESG.csproj index 32ab90d..f37e981 100644 --- a/Bremen_ESG.csproj +++ b/Bremen_ESG.csproj @@ -19,6 +19,7 @@ + diff --git a/Controllers/ApiController.cs b/Controllers/ApiController.cs index ad1175a..522539b 100644 --- a/Controllers/ApiController.cs +++ b/Controllers/ApiController.cs @@ -49,12 +49,34 @@ namespace Bremen_ESG.Controllers private readonly IHttpContextAccessor _httpContextAccessor; private readonly IWebHostEnvironment _hostingEnvironment; + DbConn dbConn = new DbConn(); + SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString")); + public ApiController(IHttpContextAccessor httpContextAccessor, IWebHostEnvironment webHostEnvironment) { this._httpContextAccessor = httpContextAccessor; this._hostingEnvironment = webHostEnvironment; } + + [Route("news_list")] + public async Task News_List(IFormCollection obj) { + newResult ret = new newResult(); + + List newsList = conn.Query("select * from news order by news_sn desc").ToList(); + + ret.news_num = newsList.Count; + + foreach (news objNew in newsList) + { + newsDetial objDetial = new newsDetial(objNew); + ret.news_list.Add(objDetial); + } + + ret.ret = "yes"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + [HttpPost] [Route("esg_message")] public async Task Esg_Message(IFormCollection obj) { @@ -116,6 +138,15 @@ namespace Bremen_ESG.Controllers return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); } + public class newResult + { + public string ret = "no"; + public string err_code = "0000"; + public string message = ""; + public int news_num = 0; + public List news_list = new List(); + } + public class result { public string ret = "no"; diff --git a/Controllers/BackEndApiController.cs b/Controllers/BackEndApiController.cs index ba227a4..2447120 100644 --- a/Controllers/BackEndApiController.cs +++ b/Controllers/BackEndApiController.cs @@ -21,6 +21,252 @@ namespace Bremen_ESG.Controllers this._httpContextAccessor = httpContextAccessor; } + [Route("newsAddEditDelGet")] + public ActionResult NewsAddEditDelGet(IFormCollection obj) { + newDetialResult ret = new newDetialResult(); + + authToken token = new authToken(this._httpContextAccessor); + + if (token.user_isLogin == false) + { + HttpContext.Response.Cookies.Delete("token_key"); + ret.ret = "no"; + ret.err_code = "9999"; + ret.message = "非登入狀態!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + DbConn dbConn = new DbConn(); + SqlConnection conn = dbConn.sqlConnection(); + + string news_uid = obj["news_uid"].ToString(); + string news_title = obj["news_title"].ToString(); + string news_subtitle = obj["news_subtitle"].ToString(); + string news_date = obj["news_date"].ToString(); + string news_mainPhoto = obj["news_mainPhoto"].ToString(); + string news_content = obj["news_content"].ToString(); + string TagsStr = obj["news_tags"].ToString().TrimEnd(','); + string photoArrayJson = obj["photoArrayJson"].ToString().TrimEnd(','); + + string method = obj["method"].ToString(); + + + + if (method == "get") + { + news newObj = conn.QueryFirstOrDefault("select * from news where news_uid = @news_uid", new { news_uid = news_uid }); + + if (newObj == null) { + ret.ret = "no"; + ret.err_code = "1009"; + ret.message = "無此news_uid資料!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + ret.data = new newsDetial(newObj); + ret.ret = "yes"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + if (method == "") + { + ret.ret = "no"; + ret.err_code = "0001"; + ret.message = "無method參數!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + if (method == "del") { + conn.Execute("delete photo where news_uid = @news_uid", new { news_uid = news_uid }); + conn.Execute("delete tag where news_uid = @news_uid", new { news_uid = news_uid }); + conn.Execute("delete news where news_uid = @news_uid", new { news_uid = news_uid }); + + ret.ret = "yes"; + + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + string err_msg = ""; + + if (news_title == "") + { + err_msg += "無標題!\n"; + } + + if (news_subtitle == "") + { + err_msg += "無副標題\n"; + } + + if (news_content == "") + { + err_msg += "無內文\n"; + } + + if (news_date == "") + { + err_msg += "無發布日期\n"; + } + + if (err_msg != "") + { + ret.ret = "no"; + ret.err_code = "0001"; + ret.message = err_msg; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + if (method == "edit") { + if (news_uid == "") { + ret.ret = "no"; + ret.err_code = "0002"; + ret.message = "無 news_uid"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + news objNew = conn.QueryFirstOrDefault("select * from news where news_uid = @news_uid", new { news_uid = news_uid }); + + if (objNew == null) { + ret.ret = "no"; + ret.err_code = "0003"; + ret.message = "無此 news_uid資料"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + dynamic photoJsonObj; + + try + { + photoJsonObj = JsonConvert.DeserializeObject(photoArrayJson); + } + catch (Exception ex) + { + ret.ret = "no"; + ret.err_code = "0003"; + ret.message = "photo json error" + ex.Message; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + conn.Execute("delete tag where news_uid = @news_uid", new { news_uid = news_uid }); + conn.Execute("delete photo where news_uid = @news_uid", new { news_uid = news_uid }); + + string[] newsTagArr = TagsStr.Split(","); + List newsTags = new List(); + foreach (string tag in newsTagArr) + { + tags tagData = conn.QueryFirstOrDefault("select * from tags where tag_uid = @tag_uid", new { tag_uid = tag }); + + if (tagData != null) + { + tag newTag = new tag(); + newTag.tag_uid = tagData.tag_uid; + newTag.news_uid = news_uid; + newTag.tag_text = tagData.tag_text; + newsTags.Add(newTag); + } + } + + List photos = new List(); + + foreach (dynamic item in photoJsonObj) + { + photo photoObj = new photo(); + + photoObj.photo_uid = GlobalClass.CreateRandomCode(12); + photoObj.news_uid = news_uid; + photoObj.photo_title = item.photo_title; + photoObj.photo_path = item.photo_path; + + + photos.Add(photoObj); + } + + objNew.news_title = news_title; + objNew.news_date = news_date; + objNew.news_subtitle = news_subtitle; + objNew.news_content = news_content; + objNew.news_mainPhoto = news_mainPhoto; + objNew.news_modifydate = DateTime.Now; + + conn.Update(objNew); + conn.Insert(photos); + conn.Insert(newsTags); + + ret.ret = "yes"; + ret.data = new newsDetial(objNew); + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + if (method == "add") + { + news_uid = "news_" + GlobalClass.CreateRandomCode(8); + + string[] newsTagArr = TagsStr.Split(","); + List newsTags = new List(); + foreach (string tag in newsTagArr) + { + tags tagData = conn.QueryFirstOrDefault("select * from tags where tag_uid = @tag_uid", new { tag_uid = tag }); + + if (tagData != null) + { + tag newTag = new tag(); + newTag.tag_uid = tagData.tag_uid; + newTag.news_uid = news_uid; + newTag.tag_text = tagData.tag_text; + newsTags.Add(newTag); + } + } + + dynamic photoJsonObj; + + try + { + photoJsonObj = JsonConvert.DeserializeObject(photoArrayJson); + } + catch (Exception ex) + { + ret.ret = "no"; + ret.err_code = "0003"; + ret.message = "photo json error" + ex.Message; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + List photos = new List(); + + foreach (dynamic item in photoJsonObj) + { + photo photoObj = new photo(); + + photoObj.photo_uid = GlobalClass.CreateRandomCode(12); + photoObj.news_uid= news_uid; + photoObj.photo_title = item.photo_title; + photoObj.photo_path = item.photo_path; + + + photos.Add(photoObj); + } + + news objNew = new news(); + + objNew.news_uid = news_uid; + objNew.news_title = news_title; + objNew.news_date = news_date; + objNew.news_subtitle = news_subtitle; + objNew.news_content = news_content; + objNew.news_mainPhoto = news_mainPhoto; + + conn.Insert(objNew); + conn.Insert(photos); + conn.Insert(newsTags); + + ret.ret = "yes"; + ret.data = new newsDetial(objNew); + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + [Route("updateTags")] public ActionResult UpdateTags(IFormCollection obj) { @@ -96,6 +342,84 @@ namespace Bremen_ESG.Controllers return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); } + [Route("subPhotoUpload")] + [RequestFormLimits(MultipartBodyLengthLimit = int.MaxValue)] + [RequestSizeLimit(int.MaxValue)] + public ActionResult SubPhotoUpload([FromForm(Name = "subPhoto")] IFormFile file) + { + authToken token = new authToken(this._httpContextAccessor); + if (token.user_isLogin == false) + { + List files = new List(); + + errFile newFile = new errFile(); + newFile.name = ""; + newFile.size = 0; + newFile.error = "尚未登入"; + + files.Add(newFile); + + fileResult obj = new fileResult(); + + obj.files = files; + + return Content(JsonConvert.SerializeObject(files), "application/json;charset=utf-8"); + } + + + string originFileName = file.FileName; + string newFileName = "subPhoto_" + GlobalClass.CreateRandomCode(8) + Path.GetExtension(originFileName); + string fullPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/upload/sub/" + newFileName); + try + { + using (var stream = new FileStream(fullPath, FileMode.Create)) + { + file.CopyTo(stream); + } + + List files = new List(); + + uploadFile newFile = new uploadFile(); + + newFile.name = originFileName; + newFile.url = "/upload/sub/" + newFileName; + newFile.size = file.Length; + newFile.thumbnailUrl = "/upload/sub/" + newFileName; + newFile.deleteUrl = "/upload/sub/" + newFileName; + + + + files.Add(newFile); + + fileResult obj = new fileResult(); + + obj.files = files; + + + + + + return Content(JsonConvert.SerializeObject(obj), "application/json;charset=utf-8"); + } + catch (Exception ex) + { + List files = new List(); + + errFile newFile = new errFile(); + newFile.name = originFileName; + newFile.size = file.Length; + newFile.error = ex.Message; + + files.Add(newFile); + + fileResult obj = new fileResult(); + + obj.files = files; + + return Content(JsonConvert.SerializeObject(files), "application/json;charset=utf-8"); + } + } + [Route("mainPhotoUpload")] [RequestFormLimits(MultipartBodyLengthLimit = int.MaxValue)] [RequestSizeLimit(int.MaxValue)] @@ -250,6 +574,14 @@ namespace Bremen_ESG.Controllers } + public class newDetialResult + { + public string ret = "no"; + public string err_code = "0000"; + public string message = ""; + public newsDetial data = new newsDetial(); + } + public class fileResult { public object files = new object(); diff --git a/Models/newsDetial.cs b/Models/newsDetial.cs new file mode 100644 index 0000000..7f17503 --- /dev/null +++ b/Models/newsDetial.cs @@ -0,0 +1,33 @@ +using Dapper; +using Dapper.Contrib.Extensions; +using NPOI.SS.Formula.Functions; +using System.Data.SqlClient; +using static DbTableClass; + +public class newsDetial: news +{ + DbConn dbConn = new DbConn(); + SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString")); + + public List tags = new List(); + public List photos = new List(); + public newsDetial() { + + } + + public newsDetial(news obj) { + Type newsType = obj.GetType(); + + foreach (var prop in newsType.GetProperties()) + { + string propName = prop.Name; + var valueProperty = newsType.GetProperty(propName); + object propValue = valueProperty.GetValue(obj, null); + + this.GetType().GetProperty(propName).SetValue(this, propValue); + } + + tags = conn.Query("select * from tag where news_uid = @news_uid", new { news_uid = this.news_uid }).ToList(); + photos = conn.Query("select * from photo where news_uid = @news_uid", new { news_uid = this.news_uid }).ToList(); + } +} diff --git a/Views/BackEnd/NewsList.cshtml b/Views/BackEnd/NewsList.cshtml index 7c71574..c8b3750 100644 --- a/Views/BackEnd/NewsList.cshtml +++ b/Views/BackEnd/NewsList.cshtml @@ -8,6 +8,7 @@ + @@ -94,7 +95,7 @@
-
Change photo
+
Change photo

主圖片

@@ -115,8 +116,12 @@
- - + + +
+ +
+
@@ -160,7 +165,59 @@
+ + + + + + +
+