forked from dk96/QuotationMaker
Compare commits
No commits in common. "master" and "main" have entirely different histories.
|
|
@ -1,63 +0,0 @@
|
|||
###############################################################################
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
###############################################################################
|
||||
* text=auto
|
||||
|
||||
###############################################################################
|
||||
# Set default behavior for command prompt diff.
|
||||
#
|
||||
# This is need for earlier builds of msysgit that does not have it on by
|
||||
# default for csharp files.
|
||||
# Note: This is only used by command line
|
||||
###############################################################################
|
||||
#*.cs diff=csharp
|
||||
|
||||
###############################################################################
|
||||
# Set the merge driver for project and solution files
|
||||
#
|
||||
# Merging from the command prompt will add diff markers to the files if there
|
||||
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||
# the diff markers are never inserted). Diff markers may cause the following
|
||||
# file extensions to fail to load in VS. An alternative would be to treat
|
||||
# these files as binary and thus will always conflict and require user
|
||||
# intervention with every merge. To do so, just uncomment the entries below
|
||||
###############################################################################
|
||||
#*.sln merge=binary
|
||||
#*.csproj merge=binary
|
||||
#*.vbproj merge=binary
|
||||
#*.vcxproj merge=binary
|
||||
#*.vcproj merge=binary
|
||||
#*.dbproj merge=binary
|
||||
#*.fsproj merge=binary
|
||||
#*.lsproj merge=binary
|
||||
#*.wixproj merge=binary
|
||||
#*.modelproj merge=binary
|
||||
#*.sqlproj merge=binary
|
||||
#*.wwaproj merge=binary
|
||||
|
||||
###############################################################################
|
||||
# behavior for image files
|
||||
#
|
||||
# image files are treated as binary by default.
|
||||
###############################################################################
|
||||
#*.jpg binary
|
||||
#*.png binary
|
||||
#*.gif binary
|
||||
|
||||
###############################################################################
|
||||
# diff behavior for common document formats
|
||||
#
|
||||
# Convert binary document formats to text before diffing them. This feature
|
||||
# is only available from the command line. Turn it on by uncommenting the
|
||||
# entries below.
|
||||
###############################################################################
|
||||
#*.doc diff=astextplain
|
||||
#*.DOC diff=astextplain
|
||||
#*.docx diff=astextplain
|
||||
#*.DOCX diff=astextplain
|
||||
#*.dot diff=astextplain
|
||||
#*.DOT diff=astextplain
|
||||
#*.pdf diff=astextplain
|
||||
#*.PDF diff=astextplain
|
||||
#*.rtf diff=astextplain
|
||||
#*.RTF diff=astextplain
|
||||
|
|
@ -1,363 +0,0 @@
|
|||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Oo]ut/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1,137 +0,0 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace QuotationMaker.Controllers
|
||||
{
|
||||
public class HomeController : Controller
|
||||
{
|
||||
private readonly ILogger<HomeController> _logger;
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
private authToken _objToken;
|
||||
|
||||
public HomeController(ILogger<HomeController> logger, IHttpContextAccessor httpContextAccessor)
|
||||
{
|
||||
_logger = logger;
|
||||
|
||||
this._httpContextAccessor = httpContextAccessor;
|
||||
|
||||
this._objToken = new authToken(this._httpContextAccessor);
|
||||
}
|
||||
|
||||
public IActionResult ModalList()
|
||||
{
|
||||
if (checkToken() == false)
|
||||
{
|
||||
HttpContext.Response.Cookies.Delete("token_key");
|
||||
return Redirect("~/Home/Login");
|
||||
}
|
||||
|
||||
if (this._objToken.user_perm != "system")
|
||||
{
|
||||
return Redirect("~/");
|
||||
}
|
||||
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult Login()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult CompanyList()
|
||||
{
|
||||
if (checkToken() == false)
|
||||
{
|
||||
HttpContext.Response.Cookies.Delete("token_key");
|
||||
return Redirect("~/Home/Login");
|
||||
}
|
||||
|
||||
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult RateList()
|
||||
{
|
||||
if (checkToken() == false)
|
||||
{
|
||||
HttpContext.Response.Cookies.Delete("token_key");
|
||||
return Redirect("~/Home/Login");
|
||||
}
|
||||
|
||||
if (this._objToken.user_perm != "system")
|
||||
{
|
||||
return Redirect("~/");
|
||||
}
|
||||
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult GroupList()
|
||||
{
|
||||
if (checkToken() == false)
|
||||
{
|
||||
HttpContext.Response.Cookies.Delete("token_key");
|
||||
return Redirect("~/Home/Login");
|
||||
}
|
||||
|
||||
if (this._objToken.user_perm != "system")
|
||||
{
|
||||
return Redirect("~/");
|
||||
}
|
||||
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult UserList()
|
||||
{
|
||||
if (checkToken() == false)
|
||||
{
|
||||
HttpContext.Response.Cookies.Delete("token_key");
|
||||
return Redirect("~/Home/Login");
|
||||
}
|
||||
|
||||
if (this._objToken.user_perm != "system")
|
||||
{
|
||||
return Redirect("~/");
|
||||
}
|
||||
|
||||
return View();
|
||||
}
|
||||
public IActionResult ProjectList()
|
||||
{
|
||||
if (checkToken() == false)
|
||||
{
|
||||
HttpContext.Response.Cookies.Delete("token_key");
|
||||
return Redirect("~/Home/Login");
|
||||
}
|
||||
|
||||
|
||||
return View();
|
||||
}
|
||||
|
||||
public Boolean checkToken()
|
||||
{
|
||||
this._objToken = new authToken(this._httpContextAccessor);
|
||||
|
||||
if (this._objToken.user_isLogin == false)
|
||||
{
|
||||
HttpContext.Response.Cookies.Delete("token_key");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ViewData["user_name"] = this._objToken.user_name;
|
||||
ViewData["user_permtype"] = "一般使用者";
|
||||
if (this._objToken.user_perm == "system")
|
||||
{
|
||||
ViewData["authMenu"] = "display:block;";
|
||||
ViewData["user_permtype"] = "管理者";
|
||||
}
|
||||
else
|
||||
{
|
||||
ViewData["authMenu"] = "display:none;";
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
|
||||
public class DbConn
|
||||
{
|
||||
protected string _connectionString { get; set; }
|
||||
protected SqlConnection _sqlConnection { get; set; }
|
||||
|
||||
public DbConn()
|
||||
{
|
||||
this._connectionString = GlobalClass.appsettings("ConnectionStrings:SQLConnectionString");
|
||||
}
|
||||
|
||||
public SqlConnection sqlConnection()
|
||||
{
|
||||
this._sqlConnection = new SqlConnection(this._connectionString);
|
||||
if (this._sqlConnection.State != ConnectionState.Open)
|
||||
{
|
||||
this._sqlConnection.Open();
|
||||
}
|
||||
return this._sqlConnection;
|
||||
}
|
||||
|
||||
public void closeConn()
|
||||
{
|
||||
if (this._sqlConnection.State != ConnectionState.Closed)
|
||||
{
|
||||
this._sqlConnection.Close();
|
||||
this._sqlConnection.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,505 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Dapper.Contrib.Extensions;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Org.BouncyCastle.Bcpg.OpenPgp;
|
||||
|
||||
public class DbTableClass
|
||||
{
|
||||
|
||||
[Table("quotationView")]
|
||||
public class quotationView
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int quotation_sn { get; set; }
|
||||
public string quotation_uid { get; set; } = "";
|
||||
public string quotation_name { get; set; } = "";
|
||||
public string quotation_date { get; set; } = "";
|
||||
public string dept_uid { get; set; } = "";
|
||||
public string quotation_expStart { get; set; } = "";
|
||||
public string quotation_expEnd { get; set; } = "";
|
||||
public string quotation_prodMethod { get; set; } = "";
|
||||
public string project_uid { get; set; } = "";
|
||||
public string modelProj_uid { get; set; } = "";
|
||||
public string modelQuotation_uid { get; set; } = "";
|
||||
public string company_uid { get; set; } = "";
|
||||
public string contactPerson_uid { get; set; } = "";
|
||||
public double quotation_noTaxTotal { get; set; } = 0.0;
|
||||
public double quotation_specTotal { get; set; } = 0.0;
|
||||
public double quotation_tax { get; set; } = 0.0;
|
||||
public double quotation_grandTotal { get; set; } = 0.0;
|
||||
public string quotation_sa { get; set; } = "";
|
||||
public string quotation_isdel { get; set; } = "";
|
||||
public string quotation_revoke { get; set; } = "";
|
||||
public int quotation_version { get; set; } = 0;
|
||||
public DateTime quotation_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime quotation_modifydate { get; set; } = DateTime.Now;
|
||||
public string quotation_create_uid { get; set; } = "";
|
||||
public string quotation_modify_uid { get; set; } = "";
|
||||
public string contactPerson_name { get; set; } = "";
|
||||
public string contactPerson_email { get; set; } = "";
|
||||
public string contactPerson_tel { get; set; } = "";
|
||||
public string contactPerson_fax { get; set; } = "";
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Table("invoice")]
|
||||
public class invoice
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int invoice_sn { get; set; }
|
||||
public string invoice_uid { get; set; } = "";
|
||||
public string quotation_uid { get; set; } = "";
|
||||
public string invoice_name { get; set; } = "";
|
||||
|
||||
public string invoice_type { get; set; } = "";
|
||||
public string invoice_text { get; set; } = "";
|
||||
public int invoice_year { get; set; } = 2024;
|
||||
public int invoice_month { get; set; } = 1;
|
||||
public int invoice_noTaxMoney { get; set; } = 0;
|
||||
public string invoice_revoke { get; set; } = "N";
|
||||
public int invoice_version { get; set; } = 1;
|
||||
public DateTime invoice_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime invoice_modifydate { get; set; } = DateTime.Now;
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Table("payment")]
|
||||
public class payment
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int payment_sn { get; set; }
|
||||
public string payment_uid { get; set; } = "";
|
||||
public string quotation_uid { get; set; } = "";
|
||||
public string payment_method { get; set; } = "";
|
||||
public string payment_methodname { get; set; } = "";
|
||||
public string payment_descript { get; set; } = "";
|
||||
public string payment_revoke { get; set; } = "N";
|
||||
public int payment_version { get; set; } = 1;
|
||||
public DateTime payment_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime payment_modifydate { get; set; } = DateTime.Now;
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Table("quotationSubItem")]
|
||||
public class quotationSubItem
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int quotationSubItem_sn { get; set; }
|
||||
public string quotationSubItem_uid { get; set; } = "";
|
||||
public string quotation_uid { get; set; } = "";
|
||||
public string subItem_uid { get; set; } = "";
|
||||
public string quotationMainItem_uid { get; set; } = "";
|
||||
public string quotationSubItem_name { get; set; } = "";
|
||||
public string quotationSubItem_descript { get; set; } = "";
|
||||
public double quotationSubItem_price { get; set; } = 0.0;
|
||||
public string quotationSubItem_unitType { get; set; } = "";
|
||||
public double quotationSubItem_number { get; set; } = 0.0;
|
||||
public double quotationSubItem_subTotal { get; set; } = 0.0;
|
||||
public string quotationSubItem_hasAC { get; set; } = "Y";
|
||||
public string quotationSubItem_revoke { get; set; } = "N";
|
||||
public int quotationSubItem_version { get; set; } = 1;
|
||||
public DateTime quotationSubItem_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime quotationSubItem_modifydate { get; set; } = DateTime.Now;
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Table("quotationMainItem")]
|
||||
public class quotationMainItem
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int quotationMainItem_sn { get; set; }
|
||||
public string quotation_uid { get; set; } = "";
|
||||
public string mainItem_uid { get; set; } = "";
|
||||
public string quotationMainItem_uid { get; set; } = "";
|
||||
public string quotationMainItem_name { get; set; } = "";
|
||||
public double quotationMainItem_ac { get; set; } = 0.0;
|
||||
public double quotationMainItem_subTotal { get; set; } = 0.0;
|
||||
public string quotationMainItem_revoke { get; set; } = "N";
|
||||
public int quotationMainItem_version { get; set; } = 1;
|
||||
public DateTime quotationMainItem_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime quotationMainItem_modifydate { get; set; } = DateTime.Now;
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Table("quotation")]
|
||||
public class quotation
|
||||
{
|
||||
|
||||
[Key]
|
||||
public int quotation_sn { get; set; }
|
||||
public string quotation_uid { get; set; } = "";
|
||||
public string quotation_name { get; set; } = "";
|
||||
public string quotation_date { get; set; } = "";
|
||||
public string dept_uid { get; set; } = "";
|
||||
public string quotation_expStart { get; set; } = "";
|
||||
public string quotation_expEnd { get; set; } = "";
|
||||
public string quotation_prodMethod { get; set; } = "";
|
||||
public string project_uid { get; set; } = "";
|
||||
public string modelProj_uid { get; set; } = "";
|
||||
public string modelQuotation_uid { get; set; } = "";
|
||||
public string company_uid { get; set; } = "";
|
||||
public string contactPerson_uid { get; set; } = "";
|
||||
public double quotation_noTaxTotal { get; set; } = 0.0;
|
||||
public double quotation_specTotal { get; set; } = 0.0;
|
||||
public double quotation_tax { get; set; } = 0.0;
|
||||
public double quotation_grandTotal { get; set; } = 0.0;
|
||||
public string quotation_sa { get; set; } = "";
|
||||
public string quotation_isdel { get; set; } = "";
|
||||
public string quotation_revoke { get; set; } = "";
|
||||
public int quotation_version { get; set; } = 1;
|
||||
public string quotation_log { get; set; } = "";
|
||||
public DateTime quotation_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime quotation_modifydate { get; set; } = DateTime.Now;
|
||||
public string quotation_create_uid { get; set; } = "";
|
||||
public string quotation_modify_uid { get; set; } = "";
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Table("projectView")]
|
||||
public class projectView
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int project_sn { get; set; }
|
||||
public string dept_uid { get; set; } = "";
|
||||
public string project_ps { get; set; } = "";
|
||||
public string project_uid { get; set; } = "";
|
||||
public string project_name { get; set; } = "";
|
||||
public string project_datetime { get; set; } = "";
|
||||
public string company_uid { get; set; } = "";
|
||||
public string project_creative_uid { get; set; } = "";
|
||||
public string project_lastmodify_uid { get; set; } = "";
|
||||
public DateTime project_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime project_modifydate { get; set; } = DateTime.Now;
|
||||
|
||||
public string project_isdel { get; set; } = "N";
|
||||
public string company_name { get; set; } = "";
|
||||
public string company_serialNo { get; set; } = "";
|
||||
public string company_address { get; set; } = "";
|
||||
public string company_tel { get; set; } = "";
|
||||
public string company_fax { get; set; } = "";
|
||||
public string user_id { get; set; } = "";
|
||||
public string user_name { get; set; } = "";
|
||||
public string user_email { get; set; } = "";
|
||||
}
|
||||
|
||||
[Table("project")]
|
||||
public class project
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int project_sn { get; set; }
|
||||
public string dept_uid { get; set; } = "";
|
||||
public string project_uid { get; set; } = "";
|
||||
public string project_name { get; set; } = "";
|
||||
public string project_datetime { get; set; } = "";
|
||||
public string company_uid { get; set; } = "";
|
||||
public string project_ps { get; set; } = "";
|
||||
|
||||
public string project_isdel { get; set; } = "N";
|
||||
|
||||
public string project_creative_uid { get; set; } = "";
|
||||
public string project_lastmodify_uid { get; set; } = "";
|
||||
public DateTime project_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime project_modifydate { get; set; } = DateTime.Now;
|
||||
}
|
||||
|
||||
[Table("modelSubItem")]
|
||||
public class modelSubItem
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int modelSubItem_sn { get; set; }
|
||||
public string modelSubItem_uid { get; set; } = "";
|
||||
public string modelMainItem_uid { get; set; } = "";
|
||||
public string subItem_uid { get; set; } = "";
|
||||
public string modelSubItem_name { get; set; } = "";
|
||||
public string modelSubItem_descript { get; set; } = "";
|
||||
public double modelSubItem_price { get; set; } = 0.0;
|
||||
public string modelSubItem_unitType { get; set; } = "";
|
||||
public double modelSubItem_number { get; set; } = 0.0;
|
||||
public double modelSubItem_subTotal { get; set; } = 0.0;
|
||||
public string modelSubItem_hasAC { get; set; } = "N";
|
||||
public DateTime modelSubItem_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime modelSubItem_modifydate { get; set; } = DateTime.Now;
|
||||
public string modelSubItem_lastModify_uid { get; set; } = "";
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Table("modelMainItem")]
|
||||
public class modelMainItem
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int modelMainItem_sn { get; set; }
|
||||
public string modelMainItem_uid { get; set; } = "";
|
||||
public string modelQuotation_uid { get; set; } = "";
|
||||
public string mainItem_uid { get; set; } = "";
|
||||
public string modelMainItem_name { get; set; } = "";
|
||||
public double modelMainItem_ac { get; set; } = 0.0;
|
||||
public double modelMainItem_subTotal { get; set; } = 0.0;
|
||||
public DateTime modelMainItem_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime modelMainItem_modifydate { get; set; } = DateTime.Now;
|
||||
public string modelMainItem_lastModify_uid { get; set; } = "";
|
||||
}
|
||||
|
||||
[Table("modelQuotation")]
|
||||
public class modelQuotation
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int modelQuotation_sn { get; set; }
|
||||
public string modelQuotation_uid { get; set; } = "";
|
||||
public string dept_uid { get; set; } = "";
|
||||
public string modelProj_uid { get; set; } = "";
|
||||
public string modelQuotation_name { get; set; } = "";
|
||||
public string company_uid { get; set; } = "";
|
||||
public string contactPerson_uid { get; set; } = "";
|
||||
public DateTime modelQuotation_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime modelQuotation_modifydate { get; set; } = DateTime.Now;
|
||||
public string modelQuotation_lastmodify_uid { get; set; } = "";
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Table("modelProj")]
|
||||
public class modelProj
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int modelProj_sn { get; set; }
|
||||
public string dept_uid { get; set; } = "";
|
||||
public string modelProj_uid { get; set; } = "";
|
||||
public string modelProj_name { get; set; } = "";
|
||||
public DateTime modelProj_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime modelProj_modifydate { get; set; } = DateTime.Now;
|
||||
public string modelProj_lastmodify_uid { get; set; } = "";
|
||||
public string modelProj_isdel { get; set; } = "";
|
||||
}
|
||||
|
||||
[Table("contactPerson")]
|
||||
public class contactPerson
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int contactPerson_sn { get; set; }
|
||||
public string company_uid { get; set; } = "";
|
||||
public string contactPerson_uid { get; set; } = "";
|
||||
public string contactPerson_name { get; set; } = "";
|
||||
public string contactPerson_email { get; set; } = "";
|
||||
public string contactPerson_tel { get; set; } = "";
|
||||
|
||||
public string contactPerson_fax { get; set; } = "";
|
||||
public string contactPerson_isdel { get; set; } = "N";
|
||||
public DateTime contactPerson_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime contactPerson_modifydate { get; set; } = DateTime.Now;
|
||||
public string contactPerson_lastmodify_uid { get; set; } = "";
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Table("company")]
|
||||
public class company
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int company_sn { get; set; }
|
||||
public string company_uid { get; set; } = "";
|
||||
public string company_name { get; set; } = "";
|
||||
public string company_serialNo { get; set; } = "";
|
||||
public string company_address { get; set; } = "";
|
||||
public string company_tel { get; set; } = "";
|
||||
public string company_fax { get; set; } = "";
|
||||
public string company_isdel { get; set; } = "N";
|
||||
public DateTime company_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime company_modifydate { get; set; } = DateTime.Now;
|
||||
public string company_lastmodify_uid { get; set; } = "";
|
||||
}
|
||||
|
||||
|
||||
[Table("subItem")]
|
||||
public class subItem
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int subItem_sn { get; set; }
|
||||
public string subItem_uid { get; set; } = "";
|
||||
public string mainItem_uid { get; set; } = "";
|
||||
public string subItem_name { get; set; } = "";
|
||||
public string subItem_descript { get; set; } = "";
|
||||
public double subItem_price { get; set; } = 0.0;
|
||||
public string subItem_unitType { get; set; } = "";
|
||||
public DateTime subItem_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime subItem_modifydate { get; set; } = DateTime.Now;
|
||||
public string subItem_lastmodify_uid { get; set; } = "";
|
||||
}
|
||||
|
||||
[Table("mainItem")]
|
||||
public class mainItem
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int mainItem_sn { get; set; }
|
||||
public string mainItem_uid { get; set; } = "";
|
||||
public string dept_uid { get; set; } = "";
|
||||
public string mainItem_name { get; set; } = "";
|
||||
public int mainItem_order { get; set; } = 99;
|
||||
public DateTime mainItem_createdate { get; set; } = DateTime.Now;
|
||||
public DateTime mainItem_modifydate { get; set; } = DateTime.Now;
|
||||
public string mainItem_lastmodify_uid { get; set; } = "";
|
||||
}
|
||||
|
||||
[Table("userDept")]
|
||||
public class userDept
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int userDept_sn { get; set; }
|
||||
public string user_uid { get; set; } = "";
|
||||
public string dept_uid { get; set; } = "";
|
||||
public DateTime userDept_createdate { get; set; } = DateTime.Now;
|
||||
}
|
||||
|
||||
[Table("depts")]
|
||||
public class depts
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int dept_sn { get; set; }
|
||||
public string dept_name { get; set; } = "";
|
||||
public string dept_uid { get; set; } = "";
|
||||
public string dept_code { get; set; } = "";
|
||||
public int dept_order { get; set; } = 0;
|
||||
public DateTime dept_createdate { get; set; } = DateTime.Now;
|
||||
}
|
||||
|
||||
[Table("groupUser")]
|
||||
public class groupUser
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int groupUser_sn { get; set; }
|
||||
public string groupUser_uid { get; set; } = "";
|
||||
public string group_uid { get; set; } = "";
|
||||
public string user_uid { get; set; } = "";
|
||||
public string dept_uid { get; set; } = "";
|
||||
public DateTime groupUser_createdate { get; set; } = DateTime.Now;
|
||||
}
|
||||
|
||||
[Table("[group]")]
|
||||
public class group
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int group_sn { get; set; }
|
||||
|
||||
public string dept_uid { get; set; } = "";
|
||||
public string group_uid { get; set; } = "";
|
||||
public string group_name { get; set; } = "";
|
||||
|
||||
public DateTime group_createdate { get; set; } = DateTime.Now;
|
||||
}
|
||||
|
||||
|
||||
[Table("token")]
|
||||
public class token
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int token_sn { get; set; }
|
||||
|
||||
public string token_key { get; set; } = "";
|
||||
|
||||
public string user_uid { get; set; } = "";
|
||||
|
||||
public string user_id { get; set; } = "";
|
||||
|
||||
public string token_isremember { get; set; } = "N";
|
||||
|
||||
public DateTime token_createdate { get; set; } = DateTime.Now;
|
||||
|
||||
public DateTime token_expireddate { get; set; } = DateTime.Now.AddMinutes(20);
|
||||
|
||||
}
|
||||
|
||||
[Table("users")]
|
||||
public class user
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int user_sn { get; set; }
|
||||
|
||||
public string user_uid { get; set; } = "";
|
||||
|
||||
public string user_id { get; set; } = "";
|
||||
|
||||
public string user_name { get; set; } = "";
|
||||
|
||||
public string user_engName { get; set; } = "";
|
||||
|
||||
public string user_email { get; set; } = "";
|
||||
|
||||
public string user_onjob { get; set; } = "N";
|
||||
|
||||
public string user_type { get; set; } = "N";
|
||||
|
||||
public string user_pwd { get; set; } = "";
|
||||
|
||||
public string user_perm { get; set; } = "user";
|
||||
|
||||
public string user_pic { get; set; } = "";
|
||||
|
||||
public string user_ishidden { get; set; } = "N";
|
||||
|
||||
public DateTime user_createdate { get; set; } = DateTime.Now;
|
||||
|
||||
public string user_lastlogintime { get; set; } = "";
|
||||
|
||||
}
|
||||
|
||||
[Table("new_userdata")]
|
||||
public class new_userdata
|
||||
{
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
public int usersn { get; set; }
|
||||
|
||||
public string userid { get; set; } = "";
|
||||
|
||||
public string userpw { get; set; } = "";
|
||||
|
||||
public string username { get; set; } = "";
|
||||
|
||||
public int maincategoryid { get; set; } = 1;
|
||||
|
||||
public int subcategoryid { get; set; } = 1;
|
||||
|
||||
public int grade { get; set; } = 0;
|
||||
|
||||
public string mail { get; set; } = "";
|
||||
|
||||
public string mailto { get; set; } = "";
|
||||
|
||||
public int onjob { get; set; } = 0;
|
||||
|
||||
public int permission { get; set; } = 0;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,467 +0,0 @@
|
|||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing.Drawing2D;
|
||||
|
||||
public static class GlobalClass
|
||||
{
|
||||
public static IServiceProvider ServiceProvider;
|
||||
public static bool isURL(string url)
|
||||
{
|
||||
return Uri.IsWellFormedUriString(url, UriKind.Absolute);
|
||||
}
|
||||
|
||||
public static string indexToEng(int Number)
|
||||
{
|
||||
string allChar = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
|
||||
string[] allCharArray = allChar.Split(',');
|
||||
|
||||
if (Number > 25)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
else
|
||||
{
|
||||
return allCharArray[Number];
|
||||
}
|
||||
}
|
||||
public static string GetIP(this HttpContext context)
|
||||
{
|
||||
|
||||
var ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
|
||||
if (string.IsNullOrEmpty(ip))
|
||||
{
|
||||
ip = context.Connection.RemoteIpAddress.ToString();
|
||||
}
|
||||
return ip;
|
||||
}
|
||||
|
||||
public static string CreateRandomCode(int Number)
|
||||
{
|
||||
string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
|
||||
string[] allCharArray = allChar.Split(',');
|
||||
string randomCode = "";
|
||||
|
||||
Random rand = new Random(Guid.NewGuid().GetHashCode());
|
||||
for (int i = 0; i <= Number - 1; i++)
|
||||
{
|
||||
int t = rand.Next(allCharArray.Length);
|
||||
randomCode += allCharArray[t];
|
||||
}
|
||||
return randomCode;
|
||||
}
|
||||
|
||||
public static string CreateUniRandomCode(int Number)
|
||||
{
|
||||
string allChar = "2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,M,N,P,Q,R,S,U,V,W,X,Y,Z";
|
||||
string[] allCharArray = allChar.Split(',');
|
||||
string randomCode = "";
|
||||
|
||||
Random rand = new Random(Guid.NewGuid().GetHashCode());
|
||||
for (int i = 0; i <= Number - 1; i++)
|
||||
{
|
||||
int t = rand.Next(allCharArray.Length);
|
||||
randomCode += allCharArray[t];
|
||||
}
|
||||
return randomCode;
|
||||
}
|
||||
|
||||
public static string ToMD5(this string str)
|
||||
{
|
||||
using (var cryptoMD5 = System.Security.Cryptography.MD5.Create())
|
||||
{
|
||||
//將字串編碼成 UTF8 位元組陣列
|
||||
var bytes = Encoding.UTF8.GetBytes(str);
|
||||
|
||||
//取得雜湊值位元組陣列
|
||||
var hash = cryptoMD5.ComputeHash(bytes);
|
||||
|
||||
//取得 MD5
|
||||
var md5 = BitConverter.ToString(hash)
|
||||
.Replace("-", String.Empty)
|
||||
.ToLower();
|
||||
|
||||
return md5;
|
||||
}
|
||||
}
|
||||
|
||||
public static string Sha256(this string input)
|
||||
{
|
||||
System.Security.Cryptography.SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider();
|
||||
Byte[] ByteString = Encoding.ASCII.GetBytes(input);
|
||||
ByteString = sha256.ComputeHash(ByteString);
|
||||
string returnString = "";
|
||||
foreach (Byte bt in ByteString)
|
||||
{
|
||||
returnString += bt.ToString("x2");
|
||||
}
|
||||
return returnString.ToLower();
|
||||
}
|
||||
/// <summary>
|
||||
/// Creates a SHA256 hash of the specified input.
|
||||
/// </summary>
|
||||
/// <param name="input">The input.</param>
|
||||
/// <returns>A hash.</returns>
|
||||
public static byte[] Sha256(this byte[] input)
|
||||
{
|
||||
if (input == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using (var sha = SHA256.Create())
|
||||
{
|
||||
return sha.ComputeHash(input);
|
||||
}
|
||||
}
|
||||
|
||||
public static bool isEmail(string email)
|
||||
{
|
||||
//Email檢查格式
|
||||
System.Text.RegularExpressions.Regex EmailExpression = new Regex(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", RegexOptions.Compiled | RegexOptions.Singleline);
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(email))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return EmailExpression.IsMatch(email);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//log.Error(ex.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static string appsettings(string key)
|
||||
{
|
||||
var builder = new ConfigurationBuilder()
|
||||
.SetBasePath(Directory.GetCurrentDirectory())
|
||||
.AddJsonFile("appsettings.json");
|
||||
var config = builder.Build();
|
||||
return config[key];
|
||||
}
|
||||
|
||||
public static Image embedImage(Image watermark, Image targetImg, int x, int y)
|
||||
{
|
||||
Image outImg;
|
||||
|
||||
using (Graphics g = Graphics.FromImage(targetImg))
|
||||
{
|
||||
g.DrawImage(watermark, new Rectangle(x, y, watermark.Width, watermark.Height));
|
||||
outImg = (Image)targetImg.Clone();
|
||||
}
|
||||
|
||||
return outImg;
|
||||
}
|
||||
|
||||
public static Image resizeImage(Image image, int width, int height)
|
||||
{
|
||||
var destinationRect = new Rectangle(0, 0, width, height);
|
||||
var destinationImage = new Bitmap(width, height);
|
||||
|
||||
destinationImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
|
||||
|
||||
using (var graphics = Graphics.FromImage(destinationImage))
|
||||
{
|
||||
graphics.CompositingMode = CompositingMode.SourceCopy;
|
||||
graphics.CompositingQuality = CompositingQuality.HighQuality;
|
||||
|
||||
using (var wrapMode = new ImageAttributes())
|
||||
{
|
||||
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
|
||||
graphics.DrawImage(image, destinationRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
|
||||
}
|
||||
}
|
||||
|
||||
return (Image)destinationImage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// base 64字串格式的圖片轉成Image物件
|
||||
/// </summary>
|
||||
/// <param name="base64String"></param>
|
||||
/// <returns></returns>
|
||||
public static Image Base64StringToImage(string base64String)
|
||||
{
|
||||
// Convert base 64 string to byte[]
|
||||
byte[] Buffer = Convert.FromBase64String(base64String);
|
||||
|
||||
byte[] data = null;
|
||||
Image oImage = null;
|
||||
MemoryStream oMemoryStream = null;
|
||||
Bitmap oBitmap = null;
|
||||
//建立副本
|
||||
data = (byte[])Buffer.Clone();
|
||||
try
|
||||
{
|
||||
oMemoryStream = new MemoryStream(data);
|
||||
//設定資料流位置
|
||||
oMemoryStream.Position = 0;
|
||||
oImage = System.Drawing.Image.FromStream(oMemoryStream);
|
||||
//建立副本
|
||||
oBitmap = new Bitmap(oImage);
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
oMemoryStream.Close();
|
||||
oMemoryStream.Dispose();
|
||||
oMemoryStream = null;
|
||||
}
|
||||
//return oImage;
|
||||
return oBitmap;
|
||||
}
|
||||
|
||||
public static string ImageToBase64(Image image, System.Drawing.Imaging.ImageFormat format)
|
||||
{
|
||||
using (MemoryStream ms = new MemoryStream())
|
||||
{
|
||||
// Convert Image to byte[]
|
||||
image.Save(ms, format);
|
||||
byte[] imageBytes = ms.ToArray();
|
||||
|
||||
// Convert byte[] to base 64 string
|
||||
string base64String = Convert.ToBase64String(imageBytes);
|
||||
return base64String;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 日期转换为中文大写
|
||||
/// </summary>
|
||||
public class UpperConvert
|
||||
{
|
||||
public UpperConvert()
|
||||
{
|
||||
//
|
||||
// TODO: 在此处添加构造函数逻辑
|
||||
//
|
||||
}
|
||||
//把数字转换为大写
|
||||
public string numtoUpper(int num)
|
||||
{
|
||||
|
||||
|
||||
|
||||
String str = num.ToString();
|
||||
string rstr = "";
|
||||
int n;
|
||||
for (int i = 0; i < str.Length; i++)
|
||||
{
|
||||
n = Convert.ToInt16(str[i].ToString());//char转数字,转换为字符串,再转数字
|
||||
switch (n)
|
||||
{
|
||||
case 0: rstr = rstr + "〇"; break;
|
||||
case 1: rstr = rstr + "一"; break;
|
||||
case 2: rstr = rstr + "二"; break;
|
||||
case 3: rstr = rstr + "三"; break;
|
||||
case 4: rstr = rstr + "四"; break;
|
||||
case 5: rstr = rstr + "五"; break;
|
||||
case 6: rstr = rstr + "六"; break;
|
||||
case 7: rstr = rstr + "七"; break;
|
||||
case 8: rstr = rstr + "八"; break;
|
||||
default: rstr = rstr + "九"; break;
|
||||
}
|
||||
|
||||
}
|
||||
return rstr;
|
||||
}
|
||||
|
||||
public string yeartoUpper(int number)
|
||||
{
|
||||
string[] chineseNumber = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
|
||||
string[] unit = { "", "十", "百", "千", "萬", "十萬", "百萬", "千萬", "億", "十億", "百億", "千億", "兆", "十兆", "百兆", "千兆" };
|
||||
StringBuilder ret = new StringBuilder();
|
||||
string inputNumber = number.ToString();
|
||||
int idx = inputNumber.Length;
|
||||
bool needAppendZero = false;
|
||||
foreach (char c in inputNumber)
|
||||
{
|
||||
idx--;
|
||||
if (c > '0')
|
||||
{
|
||||
if (needAppendZero)
|
||||
{
|
||||
ret.Append(chineseNumber[0]);
|
||||
needAppendZero = false;
|
||||
}
|
||||
ret.Append(chineseNumber[(int)(c - '0')] + unit[idx]);
|
||||
}
|
||||
else
|
||||
needAppendZero = true;
|
||||
}
|
||||
return ret.Length == 0 ? chineseNumber[0] : ret.ToString();
|
||||
}
|
||||
|
||||
//月转化为大写
|
||||
public string monthtoUpper(int month)
|
||||
{
|
||||
if (month < 10)
|
||||
{
|
||||
return numtoUpper(month);
|
||||
}
|
||||
else
|
||||
if (month == 10) { return "十"; }
|
||||
|
||||
else
|
||||
{
|
||||
return "十" + numtoUpper(month - 10);
|
||||
}
|
||||
}
|
||||
//日转化为大写
|
||||
public string daytoUpper(int day)
|
||||
{
|
||||
if (day < 20)
|
||||
{
|
||||
return monthtoUpper(day);
|
||||
}
|
||||
else
|
||||
{
|
||||
String str = day.ToString();
|
||||
if (str[1] == '0')
|
||||
{
|
||||
return numtoUpper(Convert.ToInt16(str[0].ToString())) + "十";
|
||||
}
|
||||
else
|
||||
{
|
||||
return numtoUpper(Convert.ToInt16(str[0].ToString())) + "十"
|
||||
+ numtoUpper(Convert.ToInt16(str[1].ToString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
//日期转换为大写
|
||||
public string dateToUpper(System.DateTime date)
|
||||
{
|
||||
int year = date.Year - 1911;
|
||||
int month = date.Month;
|
||||
int day = date.Day;
|
||||
return yeartoUpper(year) + "年" + monthtoUpper(month) + "月" + daytoUpper(day) + "日";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class ChtNumConverter
|
||||
{
|
||||
public static string ChtNums = "零壹貳參肆伍陸柒捌玖";
|
||||
public static Dictionary<string, long> ChtUnits = new Dictionary<string, long>{
|
||||
{"拾", 10},
|
||||
{"佰", 100},
|
||||
{"千", 1000},
|
||||
{"萬", 10000},
|
||||
{"億", 100000000},
|
||||
{"兆", 1000000000000}
|
||||
};
|
||||
// 解析中文數字
|
||||
public static long ParseChtNum(string chtNumString)
|
||||
{
|
||||
var isNegative = false;
|
||||
if (chtNumString.StartsWith("負"))
|
||||
{
|
||||
chtNumString = chtNumString.Substring(1);
|
||||
isNegative = true;
|
||||
}
|
||||
long num = 0;
|
||||
// 處理千百十範圍的四位數
|
||||
Func<string, long> Parse4Digits = (s) =>
|
||||
{
|
||||
long lastDigit = 0;
|
||||
long subNum = 0;
|
||||
foreach (var rawChar in s)
|
||||
{
|
||||
var c = rawChar.ToString().Replace("〇", "零");
|
||||
if (ChtNums.Contains(c))
|
||||
{
|
||||
lastDigit = (long)ChtNums.IndexOf(c);
|
||||
}
|
||||
else if (ChtUnits.ContainsKey(c))
|
||||
{
|
||||
if (c == "十" && lastDigit == 0) lastDigit = 1;
|
||||
long unit = ChtUnits[c];
|
||||
subNum += lastDigit * unit;
|
||||
lastDigit = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException($"包含無法解析的中文數字:{c}");
|
||||
}
|
||||
}
|
||||
subNum += lastDigit;
|
||||
return subNum;
|
||||
};
|
||||
// 以兆億萬分割四位值個別解析
|
||||
foreach (var splitUnit in "兆億萬".ToArray())
|
||||
{
|
||||
var pos = chtNumString.IndexOf(splitUnit);
|
||||
if (pos == -1) continue;
|
||||
var subNumString = chtNumString.Substring(0, pos);
|
||||
chtNumString = chtNumString.Substring(pos + 1);
|
||||
num += Parse4Digits(subNumString) * ChtUnits[splitUnit.ToString()];
|
||||
}
|
||||
num += Parse4Digits(chtNumString);
|
||||
return isNegative ? -num : num;
|
||||
}
|
||||
// 轉換為中文數字
|
||||
public static string ToChtNum(long n)
|
||||
{
|
||||
var negtive = n < 0;
|
||||
if (negtive) n = -n;
|
||||
if (n >= 10000 * ChtUnits["兆"])
|
||||
throw new ArgumentException("數字超出可轉換範圍");
|
||||
var unitChars = "千佰拾".ToArray();
|
||||
// 處理 0000 ~ 9999 範圍數字
|
||||
Func<long, string> Conv4Digits = (subNum) =>
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
foreach (var c in unitChars)
|
||||
{
|
||||
if (subNum >= ChtUnits[c.ToString()])
|
||||
{
|
||||
var digit = subNum / ChtUnits[c.ToString()];
|
||||
subNum = subNum % ChtUnits[c.ToString()];
|
||||
sb.Append($"{ChtNums[(int)digit]}{c}");
|
||||
}
|
||||
else sb.Append("零");
|
||||
}
|
||||
sb.Append(ChtNums[(int)subNum]);
|
||||
return sb.ToString();
|
||||
};
|
||||
var numString = new StringBuilder();
|
||||
var forceRun = false;
|
||||
foreach (var splitUnit in "兆億萬".ToArray())
|
||||
{
|
||||
var unit = ChtUnits[splitUnit.ToString()];
|
||||
if (n < unit)
|
||||
{
|
||||
if (forceRun) numString.Append("零");
|
||||
continue;
|
||||
}
|
||||
forceRun = true;
|
||||
var subNum = n / unit;
|
||||
n = n % unit;
|
||||
if (subNum > 0)
|
||||
numString.Append(Conv4Digits(subNum).TrimEnd('零') + splitUnit);
|
||||
else numString.Append("零");
|
||||
}
|
||||
numString.Append(Conv4Digits(n));
|
||||
var t = Regex.Replace(numString.ToString(), "[零]+", "零");
|
||||
if (t.Length > 1) t = t.Trim('零');
|
||||
t = Regex.Replace(t, "^壹拾", "拾");
|
||||
return (negtive ? "負" : string.Empty) + t;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1,165 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Dapper;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using static DbTableClass;
|
||||
using static resultClass;
|
||||
using Dapper.Contrib.Extensions;
|
||||
using System.Reflection.Metadata.Ecma335;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
public class authToken
|
||||
{
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
public string user_uid { get; set; }
|
||||
public string user_id { get; set; }
|
||||
public string user_name { get; set; }
|
||||
public string user_perm { get; set; }
|
||||
public Boolean user_isLogin { get; set; }
|
||||
public string error_msg { get; set; }
|
||||
public HttpRequest myRequest { get; set; }
|
||||
|
||||
public authToken(IHttpContextAccessor httpContextAccessor)
|
||||
{
|
||||
this._httpContextAccessor = httpContextAccessor;
|
||||
|
||||
SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString"));
|
||||
DbConn dbConn = new DbConn();
|
||||
dbConn.sqlConnection().Execute("delete token where token_expireddate < @now", new { now = DateTime.Now });
|
||||
dbConn.closeConn();
|
||||
|
||||
try
|
||||
{
|
||||
if (_httpContextAccessor.HttpContext.Request.Cookies["token_key"] == null)
|
||||
{
|
||||
user_isLogin = false;
|
||||
error_msg = "no this cookie";
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
string token_key = _httpContextAccessor.HttpContext.Request.Cookies["token_key"];
|
||||
|
||||
var tokenData = dbConn.sqlConnection().Query("select * from token where token_key = @token_key", new { token_key = token_key });
|
||||
|
||||
//CookieOptions cookieOptions = new CookieOptions();
|
||||
|
||||
//cookieOptions.Secure = true;
|
||||
//cookieOptions.Expires = DateTime.Now.AddMinutes(intexpireMin);
|
||||
|
||||
if (tokenData.Count() == 0)
|
||||
{
|
||||
|
||||
_httpContextAccessor.HttpContext.Response.Cookies.Delete("token_key");
|
||||
|
||||
user_isLogin = false;
|
||||
error_msg = "not this account";
|
||||
dbConn.closeConn();
|
||||
return;
|
||||
}
|
||||
|
||||
var tokenItem = tokenData.ElementAt(0);
|
||||
|
||||
|
||||
if (tokenItem.user_uid == GlobalClass.appsettings("Admin:uid") && tokenItem.user_id == GlobalClass.appsettings("Admin:id"))
|
||||
{
|
||||
user_uid = tokenItem.user_uid;
|
||||
user_id = tokenItem.user_id;
|
||||
user_name = "系統管理員";
|
||||
user_perm = GlobalClass.appsettings("Admin:perm");
|
||||
user_isLogin = true;
|
||||
|
||||
int intMin = 240;
|
||||
|
||||
if (tokenItem.token_isremember == "Y")
|
||||
{
|
||||
intMin = 60 * 24 * 14;
|
||||
}
|
||||
|
||||
dbConn.sqlConnection().Execute("update token set token_expireddate = @token_expireddate " +
|
||||
"where token_key = @token_key", new { token_expireddate = DateTime.Now.AddMinutes(intMin), token_key = token_key });
|
||||
|
||||
dbConn.closeConn();
|
||||
|
||||
CookieOptions options = new CookieOptions()
|
||||
{
|
||||
Secure = true,
|
||||
Expires = DateTime.Now.AddMinutes(intMin)
|
||||
};
|
||||
|
||||
//_httpContextAccessor.HttpContext.Response.Cookies.Delete("web_token_key");
|
||||
_httpContextAccessor.HttpContext.Response.Cookies.Append("token_key", token_key, options);
|
||||
|
||||
return;
|
||||
}
|
||||
else {
|
||||
|
||||
user loginUser = conn.QueryFirstOrDefault<user>("select * from users where user_uid = @user_uid and user_id = @user_id", new { user_uid = tokenItem.user_uid , user_id = tokenItem.user_id });
|
||||
|
||||
if (loginUser == null)
|
||||
{
|
||||
dbConn.sqlConnection().Execute("delete token where token_key = @token_key", new { token_key = token_key });
|
||||
|
||||
user_isLogin = false;
|
||||
error_msg = "找不到此token用戶資料";
|
||||
dbConn.closeConn();
|
||||
return;
|
||||
}
|
||||
|
||||
if (loginUser.user_onjob == "N") {
|
||||
dbConn.sqlConnection().Execute("delete token where token_key = @token_key", new { token_key = token_key });
|
||||
|
||||
user_isLogin = false;
|
||||
error_msg = "此token用戶已經離職";
|
||||
dbConn.closeConn();
|
||||
return;
|
||||
}
|
||||
|
||||
user_uid = tokenItem.user_uid;
|
||||
user_id = tokenItem.user_id;
|
||||
user_name = loginUser.user_name;
|
||||
user_perm = loginUser.user_perm;
|
||||
user_isLogin = true;
|
||||
|
||||
int intMin = 20;
|
||||
|
||||
if (tokenItem.token_isremember == "Y")
|
||||
{
|
||||
intMin = 60 * 24 * 7;
|
||||
}
|
||||
|
||||
dbConn.sqlConnection().Execute("update token set token_expireddate = @token_expireddate " +
|
||||
"where token_key = @token_key", new { token_expireddate = DateTime.Now.AddMinutes(intMin), token_key = token_key });
|
||||
|
||||
|
||||
CookieOptions options = new CookieOptions()
|
||||
{
|
||||
Secure = true,
|
||||
Expires = DateTime.Now.AddMinutes(intMin)
|
||||
};
|
||||
|
||||
//_httpContextAccessor.HttpContext.Response.Cookies.Delete("web_token_key");
|
||||
_httpContextAccessor.HttpContext.Response.Cookies.Append("token_key", token_key, options);
|
||||
|
||||
dbConn.closeConn();
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
conn.Close();
|
||||
dbConn.closeConn();
|
||||
user_isLogin = false;
|
||||
error_msg = ex.Message;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,306 +0,0 @@
|
|||
using System.Data.SqlClient;
|
||||
using Dapper.Contrib.Extensions;
|
||||
using Dapper;
|
||||
using static DbTableClass;
|
||||
public class resultClass
|
||||
{
|
||||
public class normalResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
}
|
||||
public class saveasResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
public quotationView quotationView = new quotationView();
|
||||
public projectView projectView = new projectView();
|
||||
}
|
||||
|
||||
public class quotationDetailResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
public quotationDetail quotationDetail = new quotationDetail();
|
||||
public quotationView quotationView = new quotationView();
|
||||
}
|
||||
|
||||
public class quotationViewListResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
public List<quotationView> quotationViews = new List<quotationView>();
|
||||
}
|
||||
|
||||
public class projectViewResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
public List<projectView> projectViews = new List<projectView>();
|
||||
}
|
||||
|
||||
public class modelQuotationResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
|
||||
public List<modelQuotationDetail> modelQuotationDetails = new List<modelQuotationDetail>();
|
||||
}
|
||||
|
||||
public class modelQuotationListResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
public List<modelQuotation> modelQuotations = new List<modelQuotation>();
|
||||
}
|
||||
public class modelProjListResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
public List<modelProj> modelProjs = new List<modelProj>();
|
||||
}
|
||||
public class contactPersonListResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
public List<contactPerson> contactPersons = new List<contactPerson>();
|
||||
}
|
||||
|
||||
public class companyListResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
public List<company> companys = new List<company>();
|
||||
}
|
||||
public class authMainItemResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
public List<mainItem> mainItems = new List<mainItem>();
|
||||
}
|
||||
|
||||
public class authSubItemResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
public List<subItem> subItems = new List<subItem>();
|
||||
}
|
||||
|
||||
public class deptListResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
public List<depts> depts = new List<depts>();
|
||||
}
|
||||
|
||||
public class groupUserListResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
public List<user> users = new List<user>();
|
||||
}
|
||||
|
||||
public class groupListResult
|
||||
{
|
||||
public string ret = "no";
|
||||
public string err_code = "0000";
|
||||
public string message = "";
|
||||
public List<groupDetail> groups = new List<groupDetail>();
|
||||
}
|
||||
|
||||
public class groupDetail : group
|
||||
{
|
||||
|
||||
SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString"));
|
||||
|
||||
|
||||
public List<user> users = new List<user>();
|
||||
|
||||
public groupDetail() { }
|
||||
|
||||
public groupDetail(group objData) {
|
||||
Type projectType = objData.GetType();
|
||||
|
||||
foreach (var prop in projectType.GetProperties())
|
||||
{
|
||||
string propName = prop.Name;
|
||||
var valueProperty = projectType.GetProperty(propName);
|
||||
object propValue = valueProperty.GetValue(objData, null);
|
||||
|
||||
this.GetType().GetProperty(propName).SetValue(this, propValue);
|
||||
}
|
||||
|
||||
users = conn.Query<user>("select B.* from groupUser A, users B where A.user_uid = B.user_uid and A.group_uid = @group_uid", new {group_uid = objData.group_uid}).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public class userWithDept : user
|
||||
{
|
||||
SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString"));
|
||||
|
||||
public List<depts> Depts = new List<depts>();
|
||||
|
||||
public userWithDept() { }
|
||||
|
||||
public userWithDept(user objData) {
|
||||
Type projectType = objData.GetType();
|
||||
|
||||
foreach (var prop in projectType.GetProperties())
|
||||
{
|
||||
string propName = prop.Name;
|
||||
var valueProperty = projectType.GetProperty(propName);
|
||||
object propValue = valueProperty.GetValue(objData, null);
|
||||
|
||||
this.GetType().GetProperty(propName).SetValue(this, propValue);
|
||||
}
|
||||
|
||||
Depts = conn.Query<depts>("select * from userDept where user_uid = @user_uid", new { user_uid = this.user_uid }).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public class quotationDetail : quotation {
|
||||
SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString"));
|
||||
|
||||
public List<quotationMainItemDetail> quotationMainItemDetails = new List<quotationMainItemDetail>();
|
||||
public List<payment> payments = new List<payment>();
|
||||
public List<invoice> invoices = new List<invoice>();
|
||||
public user user = new user();
|
||||
public company company = new company();
|
||||
public contactPerson contactPerson = new contactPerson();
|
||||
|
||||
public quotationDetail() { }
|
||||
|
||||
public quotationDetail(quotation objData) {
|
||||
Type projectType = objData.GetType();
|
||||
|
||||
foreach (var prop in projectType.GetProperties())
|
||||
{
|
||||
string propName = prop.Name;
|
||||
var valueProperty = projectType.GetProperty(propName);
|
||||
object propValue = valueProperty.GetValue(objData, null);
|
||||
|
||||
this.GetType().GetProperty(propName).SetValue(this, propValue);
|
||||
}
|
||||
|
||||
List<quotationMainItem> quotationMainItems = conn.Query<quotationMainItem>("select * from quotationMainItem where quotationMainItem_version = @quotation_version and quotation_uid = @quotation_uid ", new { quotation_version = this.quotation_version, quotation_uid = this.quotation_uid }).ToList();
|
||||
|
||||
foreach (quotationMainItem qItem in quotationMainItems) {
|
||||
quotationMainItemDetails.Add(new quotationMainItemDetail(qItem));
|
||||
}
|
||||
contactPerson = conn.QueryFirstOrDefault<contactPerson>("select * from contactPerson where contactPerson_uid = @contactPerson_uid ", new { contactPerson_uid = this.contactPerson_uid });
|
||||
|
||||
if (contactPerson == null) {
|
||||
contactPerson = new contactPerson();
|
||||
}
|
||||
|
||||
company = conn.QueryFirstOrDefault<company>("select * from company where company_uid = @company_uid", new { company_uid = this.company_uid} );
|
||||
|
||||
if (company == null) {
|
||||
company = new company();
|
||||
}
|
||||
|
||||
user = conn.QueryFirstOrDefault<user>("select * from users where user_uid = @user_uid", new { user_uid = this.quotation_create_uid});
|
||||
|
||||
if (user == null) {
|
||||
user = new user();
|
||||
}
|
||||
|
||||
payments = conn.Query<payment>("select * from payment where payment_version = @payment_version and quotation_uid = @quotation_uid ", new { payment_version = this.quotation_version, quotation_uid = this.quotation_uid }).ToList();
|
||||
|
||||
|
||||
|
||||
invoices = conn.Query<invoice>("select * from invoice where invoice_version = @invoice_version and quotation_uid = @quotation_uid ", new { invoice_version = this.quotation_version, quotation_uid = this.quotation_uid }).ToList();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class quotationMainItemDetail : quotationMainItem {
|
||||
SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString"));
|
||||
public List<quotationSubItem> quotationSubItems = new List<quotationSubItem>();
|
||||
|
||||
public quotationMainItemDetail() { }
|
||||
|
||||
public quotationMainItemDetail(quotationMainItem objData) {
|
||||
Type projectType = objData.GetType();
|
||||
|
||||
foreach (var prop in projectType.GetProperties())
|
||||
{
|
||||
string propName = prop.Name;
|
||||
var valueProperty = projectType.GetProperty(propName);
|
||||
object propValue = valueProperty.GetValue(objData, null);
|
||||
|
||||
this.GetType().GetProperty(propName).SetValue(this, propValue);
|
||||
}
|
||||
|
||||
quotationSubItems = conn.Query<quotationSubItem>("select * from quotationSubItem where quotationSubItem_version = @quotationSubItem_version and quotationMainItem_uid = @quotationMainItem_uid ", new { quotationSubItem_version = this.quotationMainItem_version, quotationMainItem_uid = this.quotationMainItem_uid }).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public class modelQuotationDetail : modelQuotation {
|
||||
SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString"));
|
||||
|
||||
public List<modelMainItemDetail> modelMainItemDetails = new List<modelMainItemDetail>();
|
||||
|
||||
public modelQuotationDetail() { }
|
||||
|
||||
public modelQuotationDetail(modelQuotation objData) {
|
||||
Type projectType = objData.GetType();
|
||||
|
||||
foreach (var prop in projectType.GetProperties())
|
||||
{
|
||||
string propName = prop.Name;
|
||||
var valueProperty = projectType.GetProperty(propName);
|
||||
object propValue = valueProperty.GetValue(objData, null);
|
||||
|
||||
this.GetType().GetProperty(propName).SetValue(this, propValue);
|
||||
}
|
||||
|
||||
List<modelMainItem> modelMainItems = conn.Query<modelMainItem>("select * from modelMainItem where modelQuotation_uid = @modelQuotation_uid", new { modelQuotation_uid = objData.modelQuotation_uid }).ToList();
|
||||
|
||||
foreach (modelMainItem item in modelMainItems) {
|
||||
this.modelMainItemDetails.Add(new modelMainItemDetail(item));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class modelMainItemDetail: modelMainItem {
|
||||
SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString"));
|
||||
|
||||
public List<modelSubItem> modelSubItems = new List<modelSubItem>();
|
||||
|
||||
public modelMainItemDetail() { }
|
||||
|
||||
public modelMainItemDetail(modelMainItem objData) {
|
||||
Type projectType = objData.GetType();
|
||||
|
||||
foreach (var prop in projectType.GetProperties())
|
||||
{
|
||||
string propName = prop.Name;
|
||||
var valueProperty = projectType.GetProperty(propName);
|
||||
object propValue = valueProperty.GetValue(objData, null);
|
||||
|
||||
this.GetType().GetProperty(propName).SetValue(this, propValue);
|
||||
}
|
||||
|
||||
modelSubItems = conn.Query<modelSubItem>("select * from modelSubItem where modelMainItem_uid = @modelMainItem_uid", new { modelMainItem_uid = objData.modelMainItem_uid}).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
31
Program.cs
31
Program.cs
|
|
@ -1,31 +0,0 @@
|
|||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// Add services to the container.
|
||||
builder.Services.AddControllersWithViews();
|
||||
builder.Services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// Configure the HTTP request pipeline.
|
||||
if (!app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseExceptionHandler("/Error");
|
||||
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
|
||||
app.UseHsts();
|
||||
}
|
||||
|
||||
app.UseHttpsRedirection();
|
||||
app.UseStaticFiles();
|
||||
|
||||
app.UseRouting();
|
||||
|
||||
app.UseAuthorization();
|
||||
|
||||
app.MapControllerRoute(
|
||||
name: "default",
|
||||
pattern: "{controller=Home}/{action=Login}/{id?}");
|
||||
|
||||
app.Run();
|
||||
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
{
|
||||
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||
"iisSettings": {
|
||||
"windowsAuthentication": false,
|
||||
"anonymousAuthentication": true,
|
||||
"iisExpress": {
|
||||
"applicationUrl": "http://localhost:5280",
|
||||
"sslPort": 44347
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"http": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "http://localhost:5294",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"https": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "https://localhost:7287;http://localhost:5294",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"IIS Express": {
|
||||
"commandName": "IISExpress",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="wwwroot\assets\vendor\ace-builds\demo\" />
|
||||
<Folder Include="wwwroot\assets\vendor\ace-builds\src\" />
|
||||
<Folder Include="wwwroot\assets\vendor\cookieconsent\examples\" />
|
||||
<Folder Include="wwwroot\assets\vendor\cookieconsent\src\" />
|
||||
<Folder Include="wwwroot\assets\vendor\flatpickr\types\" />
|
||||
<Folder Include="wwwroot\assets\vendor\flatpickr\utils\" />
|
||||
<Folder Include="wwwroot\assets\vendor\flot\examples\" />
|
||||
<Folder Include="wwwroot\assets\vendor\fortawesome\fontawesome-free\less\" />
|
||||
<Folder Include="wwwroot\assets\vendor\fortawesome\fontawesome-free\metadata\" />
|
||||
<Folder Include="wwwroot\assets\vendor\fortawesome\fontawesome-free\scss\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\build\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\core\__mocks__\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\core\__tests__\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\css\layout\__mocks__\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\css\property-descriptors\__tests__\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\css\syntax\__tests__\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\css\types\functions\__tests__\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\css\types\__tests__\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\dom\elements\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\dom\replaced-elements\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\dom\__mocks__\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\render\canvas\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\src\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\tests\" />
|
||||
<Folder Include="wwwroot\assets\vendor\html2canvas\types\__tests__\" />
|
||||
<Folder Include="wwwroot\assets\vendor\jquery-sparkline\src\" />
|
||||
<Folder Include="wwwroot\assets\vendor\moment\src\" />
|
||||
<Folder Include="wwwroot\assets\vendor\nouislider\distribute\" />
|
||||
<Folder Include="wwwroot\assets\vendor\pace-progress\docs\" />
|
||||
<Folder Include="wwwroot\assets\vendor\pace-progress\tests\" />
|
||||
<Folder Include="wwwroot\assets\vendor\particles.js\demo\" />
|
||||
<Folder Include="wwwroot\assets\vendor\stacked-menu\scss\" />
|
||||
<Folder Include="wwwroot\assets\vendor\toastr\tests\" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AutoMapper" Version="13.0.1" />
|
||||
<PackageReference Include="Dapper" Version="2.1.35" />
|
||||
<PackageReference Include="Dapper.Contrib" Version="2.0.78" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="NPOI" Version="2.7.1" />
|
||||
<PackageReference Include="System.Data.SqlClient" Version="4.8.6" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.9.34728.123
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuotationMaker", "QuotationMaker.csproj", "{CF74960F-AA62-425E-B674-8D2CADFD3D0A}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{CF74960F-AA62-425E-B674-8D2CADFD3D0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CF74960F-AA62-425E-B674-8D2CADFD3D0A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CF74960F-AA62-425E-B674-8D2CADFD3D0A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CF74960F-AA62-425E-B674-8D2CADFD3D0A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {728C0AFE-E2E9-4765-9662-4EB65EF7938F}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
@ -1,226 +0,0 @@
|
|||
@*
|
||||
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
|
||||
*@
|
||||
@{
|
||||
Layout = "_LooperLayout";
|
||||
}
|
||||
|
||||
@section Style {
|
||||
<link rel="stylesheet" href="~/assets/vendor/datatables.net-responsive-bs4/css/responsive.bootstrap4.min.css">
|
||||
}
|
||||
@section Script {
|
||||
<script src="~/assets/vendor/datatables.net/js/jquery.dataTables.min.js"></script>
|
||||
<script src="~/assets/vendor/datatables.net-responsive/js/dataTables.responsive.min.js"></script>
|
||||
<script src="~/assets/vendor/datatables.net-responsive-bs4/js/responsive.bootstrap4.min.js"></script>
|
||||
<script src="~/assets/javascript/pages/dataTables.bootstrap.js"></script>
|
||||
<script src="~/assets/javascript/custom/companylist.js" asp-append-version="true"></script>
|
||||
}
|
||||
|
||||
<div class="page-inner">
|
||||
<!-- .page-title-bar -->
|
||||
<header class="page-title-bar">
|
||||
<!-- .breadcrumb -->
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item active">
|
||||
<a href="#"><i class="breadcrumb-icon fa fa-angle-left mr-2"></i>客戶清單</a>
|
||||
</li>
|
||||
</ol>
|
||||
</nav><!-- /.breadcrumb -->
|
||||
<!-- title -->
|
||||
<h1 class="page-title"> 客戶清單 </h1>
|
||||
<p class="text-muted"> </p><!-- /title -->
|
||||
</header><!-- /.page-title-bar -->
|
||||
<!-- .page-section -->
|
||||
<div class="page-section">
|
||||
<button type="button" id="maintItemNewModal" class="btn btn-primary btn-floated position-absolute" title="Add new client"><i class="fa fa-plus"></i></button>
|
||||
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .card-body -->
|
||||
<div class="card-body">
|
||||
<!-- .table -->
|
||||
<table id="dt-responsive" class="table dt-responsive nowrap w-100">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> 公司名稱 </th>
|
||||
<th> 統編 </th>
|
||||
<th> 電話 </th>
|
||||
<th> 地址 </th>
|
||||
<th> 功能 </th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
</table><!-- /.table -->
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
</div><!-- /.page-section -->
|
||||
</div>
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientItemEditForm" name="clientItemEditForm">
|
||||
<div class="modal fade" id="mainItemModal" tabindex="-1" role="dialog" aria-labelledby="mainItemModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="mainItemModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">客戶公司資料</span> <input id="group_content" type="text" class="form-control form-control-lg" value="" placeholder="客戶公司資料" readonly="readonly " required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="company_method" />
|
||||
<input type="hidden" id="company_uid" />
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modal_company_name" class="form-control" value="" placeholder="公司名稱" maxlength="30" required=""> <label for="modal_company_name">公司名稱</label>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modal_company_serialNo" class="form-control" value="" placeholder="統編" maxlength="30" required=""> <label for="modal_company_serialNo">統編</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- /.form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modal_company_address" class="form-control" value="" placeholder="地址" maxlength="35" required=""> <label for="modal_company_address">地址</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- /.form-group -->
|
||||
<div class="form-group" style="display: none;">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modal_company_tel" class="form-control" value="" placeholder="電話" maxlength="20" required=""> <label for="modal_company_tel">電話</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- /.form-group -->
|
||||
<div class="form-group" style="display: none;">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modal_company_fax" class="form-control" value="" placeholder="傳真" maxlength="20" required=""> <label for="modal_company_fax">傳真</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="mainItemDialogSaveBtn" class="btn btn-primary">Save</button> <button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
<!-- .modal -->
|
||||
<form id="clientSubItemListForm" name="clientSubItemListForm">
|
||||
<div class="modal fade" id="clientSubItemListModal" tabindex="-1" role="dialog" aria-labelledby="clientSubItemListModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="clientNewModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">窗口列表</span> <input id="mainItemTitle" type="text" class="form-control form-control-lg" placeholder="窗口列表" required="">
|
||||
</h6>
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
</button>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="subItemList_method" />
|
||||
<input type="hidden" id="subItemList_contactPerson_uid" />
|
||||
<input type="hidden" id="subItemList_company_uid" />
|
||||
<!-- .page-section -->
|
||||
<div class="page-section">
|
||||
<button type="button" id="subItemListNewBtn" class="btn btn-primary btn-floated position-absolute" title="Add new client"><i class="fa fa-plus"></i></button>
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .card-body -->
|
||||
<div class="card-body">
|
||||
<!-- .table -->
|
||||
<table id="dt-responsive-subItem" class="table dt-responsive nowrap w-100">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> 姓名 </th>
|
||||
<th> Email </th>
|
||||
<th> 電話 </th>
|
||||
<th> 傳真 </th>
|
||||
<th style="width: 25px;"> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
</table><!-- /.table -->
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
</div><!-- /.page-section -->
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="kolSaveBtn" style="visibility:hidden;" class="btn btn-primary">儲存</button> <button id="closeBtn" type="button" class="btn btn-light" data-dismiss="modal">關閉</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientSubItemModalForm" name="clientSubItemModalForm">
|
||||
<div class="modal fade" id="clientSubItemModal" tabindex="-1" role="dialog" aria-labelledby="clientSubItemModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="clientSubItemModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">Client name</span> <input id="clientSubItemModalTitle" type="text" class="form-control form-control-lg" placeholder="子項目資料新增與維護" required="">
|
||||
</h6>
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
</button>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="clientSubItem_method" />
|
||||
<input type="hidden" id="clientSubItem_contactPerson_uid" />
|
||||
<input type="hidden" id="clientSubItem_company_uid" />
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modal_contactPerson_name" class="form-control" value="" placeholder="姓名" maxlength="25" required=""> <label for="modal_contactPerson_name">姓名</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modal_contactPerson_email" class="form-control" value="" placeholder="Email" maxlength="30" required=""> <label for="modal_contactPerson_name">Email</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modal_contactPerson_tel" class="form-control" value="" placeholder="電話" maxlength="20" required=""> <label for="modal_contactPerson_tel">電話</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modal_contactPerson_fax" class="form-control" value="" placeholder="傳真" maxlength="20" required=""> <label for="modal_contactPerson_fax">傳真</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="clientSubItemSaveBtn" class="btn btn-primary">儲存</button> <button id="closeBtn" type="button" class="btn btn-light" data-dismiss="modal">關閉</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
@page
|
||||
@model ErrorModel
|
||||
@{
|
||||
ViewData["Title"] = "Error";
|
||||
}
|
||||
|
||||
<h1 class="text-danger">Error.</h1>
|
||||
<h2 class="text-danger">An error occurred while processing your request.</h2>
|
||||
|
||||
@if (Model.ShowRequestId)
|
||||
{
|
||||
<p>
|
||||
<strong>Request ID:</strong> <code>@Model.RequestId</code>
|
||||
</p>
|
||||
}
|
||||
|
||||
<h3>Development Mode</h3>
|
||||
<p>
|
||||
Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.
|
||||
</p>
|
||||
<p>
|
||||
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
|
||||
It can result in displaying sensitive information from exceptions to end users.
|
||||
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
|
||||
and restarting the app.
|
||||
</p>
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace QuotationMaker.Pages
|
||||
{
|
||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||
[IgnoreAntiforgeryToken]
|
||||
public class ErrorModel : PageModel
|
||||
{
|
||||
public string? RequestId { get; set; }
|
||||
|
||||
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
||||
|
||||
private readonly ILogger<ErrorModel> _logger;
|
||||
|
||||
public ErrorModel(ILogger<ErrorModel> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public void OnGet()
|
||||
{
|
||||
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,242 +0,0 @@
|
|||
@*
|
||||
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
|
||||
*@
|
||||
@{
|
||||
Layout = "_LooperLayout";
|
||||
}
|
||||
|
||||
@section Style {
|
||||
<link rel="stylesheet" href="~/assets/vendor/datatables.net-responsive-bs4/css/responsive.bootstrap4.min.css">
|
||||
}
|
||||
|
||||
@section Script {
|
||||
<script src="~/assets/vendor/sortablejs/Sortable.min.js"></script>
|
||||
<script src="~/assets/vendor/nestable2/jquery.nestable.min.js"></script>
|
||||
<script src="~/assets/javascript/custom/grouplist.js" asp-append-version="true"></script>
|
||||
}
|
||||
<!-- .page-inner -->
|
||||
<div class="page-inner">
|
||||
<!-- .page-title-bar -->
|
||||
<header class="page-title-bar">
|
||||
<!-- .breadcrumb -->
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item active">
|
||||
<a href="#"><i class="breadcrumb-icon fa fa-angle-left mr-2"></i>群組清單</a>
|
||||
</li>
|
||||
</ol>
|
||||
</nav><!-- /.breadcrumb -->
|
||||
<!-- title -->
|
||||
<h1 class="page-title"> 群組清單 </h1>
|
||||
<p class="text-muted"> </p><!-- /title -->
|
||||
</header><!-- /.page-title-bar -->
|
||||
<!-- .page-section -->
|
||||
<div class="page-section">
|
||||
<button type="button" id="groupNewModal" class="btn btn-primary btn-floated position-absolute" title="Add new client"><i class="fa fa-plus"></i></button>
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .card-body -->
|
||||
<div class="card-body">
|
||||
<div class="form-row">
|
||||
<div class="col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="dept_select">單位</label>
|
||||
<select class="custom-select custom-select-sm" id="dept_select" name="dept_select" required="">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<div class="form-group">
|
||||
<label for="search_btn" style="display: block;"> </label>
|
||||
<button type="button" class="btn btn-info btn-sm" id="search_btn">切換單位</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
<!-- grid row -->
|
||||
<div id="group_div" class="row">
|
||||
<!-- grid column -->
|
||||
|
||||
</div><!-- / grid row -->
|
||||
</div><!-- /.page-section -->
|
||||
</div><!-- /.page-inner -->
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientGroupEditForm" name="clientGroupEditForm">
|
||||
<div class="modal fade" id="groupModal" tabindex="-1" role="dialog" aria-labelledby="optionItemModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="optionItemModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">群組內容</span> <input id="group_content" type="text" class="form-control form-control-lg" value="" placeholder="群組內容" readonly="readonly " required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="group_method" />
|
||||
<input type="hidden" id="group_uid" />
|
||||
<input type="hidden" id="dept_uid" />
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="group_name" class="form-control" value="" placeholder="群組名稱" maxlength="12" required=""> <label for="group_name">群組名稱</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- grid row -->
|
||||
<div class="row">
|
||||
<!-- grid column -->
|
||||
<div class="col-lg-12">
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<div class="card-header border-bottom-0"> 成員 </div><!-- .nestable -->
|
||||
<div id="nestableMember" class="dd" data-toggle="sortable" data-group-uid="ccc" data-type="" data-max-depth="1">
|
||||
<!-- .dd-list -->
|
||||
<ol class="dd-list">
|
||||
|
||||
</ol><!-- /.dd-list -->
|
||||
</div><!-- /.nestable -->
|
||||
<!-- .card-footer -->
|
||||
<div class="card-footer">
|
||||
<a href="javascript: void(0);" id="newMember_btn" onclick="newMemberClick();" class="card-footer-item justify-content-start"><span><i class="fa fa-plus-circle mr-1"></i> 新增成員</span></a>
|
||||
</div><!-- /.card-footer -->
|
||||
</div><!-- /.card -->
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="groupDialogSaveBtn" class="btn btn-primary">Save</button> <button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientGroupNameForm" name="clientGroupNameForm">
|
||||
<div class="modal fade" id="memberModal" tabindex="-1" role="dialog" aria-labelledby="optionItemModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="optionItemModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">成員列表</span> <input id="member_content" type="text" class="form-control form-control-lg" value="" placeholder="成員列表" readonly="readonly " required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="client_method" />
|
||||
<input type="hidden" id="client_group_uid" />
|
||||
<input type="hidden" id="client_dept_uid" />
|
||||
|
||||
<!-- grid row -->
|
||||
<div class="row">
|
||||
<!-- grid column -->
|
||||
<div class="col-lg-12">
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .list-group -->
|
||||
<div class="list-group list-group-flush list-group-bordered" id="nogroup_memberlist">
|
||||
<div class="list-group-header"> 勾選要加入群組的成員 </div>
|
||||
<label class="list-group-item custom-control custom-checkbox mb-0"><input name="listcheckbox" type="checkbox" class="custom-control-input" checked> <span class="custom-control-label">List checkbox #1</span></label>
|
||||
<label class="list-group-item custom-control custom-checkbox mb-0"><input name="listcheckbox" type="checkbox" class="custom-control-input" checked> <span class="custom-control-label">List checkbox #2</span></label>
|
||||
</div><!-- /.list-group -->
|
||||
</div><!-- /.card -->
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="memberAddSaveBtn" class="btn btn-primary">加入</button> <button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientGroupNameEditForm" name="clientGroupNameEditForm">
|
||||
<div class="modal fade" id="clientGroupNameEditModal" tabindex="-1" role="dialog" aria-labelledby="clientGroupNameEditModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="clientGroupNameEditModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only"></span> <input type="text" class="form-control form-control-lg" value="" placeholder="修改群組名稱" required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="client_groupname_group_uid" />
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="clientGroupName" class="form-control" value="" placeholder="群組名稱"> <label for="clientGroupName">群組名稱</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="groupNameEditBtn" class="btn btn-primary">儲存</button> <button type="button" class="btn btn-light" data-dismiss="modal">取消</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
<!-- .modal -->
|
||||
<form id="clientGroupNewUserForm" name="clientGroupNewUserForm">
|
||||
<div class="modal fade" id="groupNewUserModal" tabindex="-1" role="dialog" aria-labelledby="groupNewUserModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="optionItemModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">成員列表</span> <input id="member_content" type="text" class="form-control form-control-lg" value="" placeholder="成員列表" readonly="readonly " required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="client_group_method" />
|
||||
<input type="hidden" id="client_group_group_uid" />
|
||||
<input type="hidden" id="client_group_dept_uid" />
|
||||
|
||||
<!-- grid row -->
|
||||
<div class="row">
|
||||
<!-- grid column -->
|
||||
<div class="col-lg-12">
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .list-group -->
|
||||
<div class="list-group list-group-flush list-group-bordered" id="lastgroup_memberlist">
|
||||
<div class="list-group-header"> 勾選要加入群組的成員 </div>
|
||||
<label class="list-group-item custom-control custom-checkbox mb-0"><input name="listcheckbox" type="checkbox" class="custom-control-input" checked> <span class="custom-control-label">List checkbox #1</span></label>
|
||||
<label class="list-group-item custom-control custom-checkbox mb-0"><input name="listcheckbox" type="checkbox" class="custom-control-input" checked> <span class="custom-control-label">List checkbox #2</span></label>
|
||||
</div><!-- /.list-group -->
|
||||
</div><!-- /.card -->
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="groupMemberAddSaveBtn" class="btn btn-primary">加入</button> <button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
|
@ -1,122 +0,0 @@
|
|||
@*
|
||||
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
|
||||
*@
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<!-- Required meta tags -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><!-- End Required meta tags -->
|
||||
<!-- Begin SEO tag -->
|
||||
<title> 報價單產生器 </title>
|
||||
<meta property="og:title" content="Sign In">
|
||||
<meta name="author" content="詹小盤">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta name="description" content="Responsive admin theme build on top of Bootstrap 4">
|
||||
<meta property="og:description" content="Responsive admin theme build on top of Bootstrap 4">
|
||||
<link rel="canonical" href="https://uselooper.com">
|
||||
<meta property="og:url" content="https://uselooper.com">
|
||||
<meta property="og:site_name" content="Looper - Bootstrap 4 Admin Theme">
|
||||
<!-- End SEO tag -->
|
||||
<!-- Favicons -->
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="~/assets/apple-touch-icon.png">
|
||||
<link rel="shortcut icon" href="assets/favicon.ico">
|
||||
<meta name="theme-color" content="#3063A0"><!-- Google font -->
|
||||
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:400,500,600" rel="stylesheet"><!-- End Google font -->
|
||||
<!-- BEGIN PLUGINS STYLES -->
|
||||
<link rel="stylesheet" href="~/assets/vendor/fortawesome/fontawesome-free/css/all.min.css"><!-- END PLUGINS STYLES -->
|
||||
<!-- BEGIN THEME STYLES -->
|
||||
<link rel="stylesheet" href="~/assets/stylesheets/theme.min.css" data-skin="default">
|
||||
<link rel="stylesheet" href="~/assets/stylesheets/theme-dark.min.css" data-skin="dark">
|
||||
<link rel="stylesheet" href="~/assets/stylesheets/custom.css">
|
||||
<script>
|
||||
var skin = localStorage.getItem('skin') || 'default';
|
||||
var isCompact = JSON.parse(localStorage.getItem('hasCompactMenu'));
|
||||
var disabledSkinStylesheet = document.querySelector('link[data-skin]:not([data-skin="' + skin + '"])');
|
||||
// Disable unused skin immediately
|
||||
disabledSkinStylesheet.setAttribute('rel', '');
|
||||
disabledSkinStylesheet.setAttribute('disabled', true);
|
||||
// add flag class to html immediately
|
||||
if (isCompact == true) document.querySelector('html').classList.add('preparing-compact-menu');
|
||||
</script><!-- END THEME STYLES -->
|
||||
</head>
|
||||
<body>
|
||||
<!--[if lt IE 10]>
|
||||
<div class="page-message" role="alert">You are using an <strong>outdated</strong> browser. Please <a class="alert-link" href="http://browsehappy.com/">upgrade your browser</a> to improve your experience and security.</div>
|
||||
<![endif]-->
|
||||
<!-- .auth -->
|
||||
<main class="auth">
|
||||
<header id="auth-header" class="auth-header" style="background-image: url(/assets/images/illustration/img-1.png);">
|
||||
<h1>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="64" viewbox="0 0 351 100">
|
||||
<defs>
|
||||
<path id="a" d="M156.538 45.644v1.04a6.347 6.347 0 0 1-1.847 3.98L127.708 77.67a6.338 6.338 0 0 1-3.862 1.839h-1.272a6.34 6.34 0 0 1-3.862-1.839L91.728 50.664a6.353 6.353 0 0 1 0-9l9.11-9.117-2.136-2.138a3.171 3.171 0 0 0-4.498 0L80.711 43.913a3.177 3.177 0 0 0-.043 4.453l-.002.003.048.047 24.733 24.754-4.497 4.5a6.339 6.339 0 0 1-3.863 1.84h-1.27a6.337 6.337 0 0 1-3.863-1.84L64.971 50.665a6.353 6.353 0 0 1 0-9l26.983-27.008a6.336 6.336 0 0 1 4.498-1.869c1.626 0 3.252.622 4.498 1.87l26.986 27.006a6.353 6.353 0 0 1 0 9l-9.11 9.117 2.136 2.138a3.171 3.171 0 0 0 4.498 0l13.49-13.504a3.177 3.177 0 0 0 .046-4.453l.002-.002-.047-.048-24.737-24.754 4.498-4.5a6.344 6.344 0 0 1 8.996 0l26.983 27.006a6.347 6.347 0 0 1 1.847 3.98zm-46.707-4.095l-2.362 2.364a3.178 3.178 0 0 0 0 4.501l2.362 2.364 2.361-2.364a3.178 3.178 0 0 0 0-4.501l-2.361-2.364z"></path>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="currentColor" fill-rule="nonzero" d="M39.252 80.385c-13.817 0-21.06-8.915-21.06-22.955V13.862H.81V.936h33.762V58.1c0 6.797 4.346 9.026 9.026 9.026 2.563 0 5.237-.446 8.58-1.783l3.677 12.034c-5.794 1.894-9.694 3.009-16.603 3.009zM164.213 99.55V23.78h13.372l1.225 5.571h.335c4.457-4.011 10.585-6.908 16.491-6.908 13.817 0 22.174 11.031 22.174 28.08 0 18.943-11.588 29.863-23.957 29.863-4.903 0-9.694-2.117-13.594-6.017h-.446l.78 9.025V99.55h-16.38zm25.852-32.537c6.128 0 10.92-4.903 10.92-16.268 0-9.917-3.232-14.932-10.14-14.932-3.566 0-6.797 1.56-10.252 5.126v22.397c3.12 2.674 6.686 3.677 9.472 3.677zm69.643 13.372c-17.272 0-30.643-10.586-30.643-28.972 0-18.163 13.928-28.971 28.748-28.971 17.049 0 26.075 11.477 26.075 26.52 0 3.008-.558 6.017-.78 7.354h-37.663c1.56 8.023 7.465 11.589 16.491 11.589 5.014 0 9.36-1.337 14.263-3.9l5.46 9.917c-6.351 4.011-14.597 6.463-21.951 6.463zm-1.338-45.463c-6.462 0-11.031 3.454-12.702 10.363h23.622c-.78-6.797-4.568-10.363-10.92-10.363zm44.238 44.126V23.779h13.371l1.337 12.034h.334c5.46-9.025 13.595-13.371 22.398-13.371 4.902 0 7.465.78 10.697 2.228l-3.343 13.706c-3.454-1.003-5.683-1.56-9.806-1.56-6.797 0-13.928 3.566-18.608 13.483v28.749h-16.38z"></path>
|
||||
<use class="fill-warning" xlink:href="#a"></use>
|
||||
</g>
|
||||
</svg> <span class="sr-only">Sign In</span>
|
||||
</h1>
|
||||
<p>
|
||||
</p>
|
||||
</header><!-- form -->
|
||||
<form class="auth-form">
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="inputUser" class="form-control" placeholder="帳號" autofocus=""> <label for="inputUser">帳號</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="password" id="inputPassword" class="form-control" placeholder="密碼"> <label for="inputPassword">密碼</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<button class="btn btn-lg btn-primary btn-block" type="button" id="loginBtn">登入</button>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- .form-group -->
|
||||
<div class="form-group text-center">
|
||||
<div class="custom-control custom-control-inline custom-checkbox">
|
||||
<input type="checkbox" class="custom-control-input" id="remember-me"> <label class="custom-control-label" for="remember-me">Keep me sign in</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- recovery links -->
|
||||
<div class="text-center pt-3" style="visibility:hidden;">
|
||||
<a href="auth-recovery-username.html" class="link">Forgot Username?</a> <span class="mx-2">·</span> <a href="auth-recovery-password.html" class="link">Forgot Password?</a>
|
||||
</div><!-- /recovery links -->
|
||||
</form><!-- /.auth-form -->
|
||||
<!-- copyright -->
|
||||
<footer class="auth-footer">
|
||||
© 2024 All Rights Reserved. <a href="#">Privacy</a> and <a href="#">Terms</a>
|
||||
</footer>
|
||||
</main><!-- /.auth -->
|
||||
<!-- BEGIN BASE JS -->
|
||||
<script src="~/assets/vendor/jquery/jquery.min.js"></script>
|
||||
<script src="~/assets/vendor/jquery.cookie/jquery.cookie.js"></script>
|
||||
<script src="~/assets/vendor/sha256/sha256.js"></script>
|
||||
<script src="~/assets/vendor/popper.js/umd/popper.min.js"></script>
|
||||
<script src="~/assets/vendor/bootstrap/js/bootstrap.min.js"></script>
|
||||
<script src="~/assets/javascript/custom/globaljs.js" asp-append-version="true"></script>
|
||||
<script src="~/assets/javascript/custom/login.js" asp-append-version="true"></script>
|
||||
<!-- END BASE JS -->
|
||||
<!-- BEGIN PLUGINS JS -->
|
||||
<script src="~/assets/vendor/particles.js/particles.js"></script>
|
||||
<script>
|
||||
/**
|
||||
* Keep in mind that your scripts may not always be executed after the theme is completely ready,
|
||||
* you might need to observe the `theme:load` event to make sure your scripts are executed after the theme is ready.
|
||||
*/
|
||||
$(document).on('theme:init', () => {
|
||||
|
||||
particlesJS.load('auth-header', '/assets/javascript/pages/particles.json');
|
||||
})
|
||||
</script> <!-- END PLUGINS JS -->
|
||||
<!-- BEGIN THEME JS -->
|
||||
<script src="~/assets/javascript/theme.js"></script> <!-- END THEME JS -->
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,313 +0,0 @@
|
|||
@*
|
||||
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
|
||||
*@
|
||||
@{
|
||||
Layout = "_LooperLayout";
|
||||
}
|
||||
|
||||
@section Style {
|
||||
<link rel="stylesheet" href="~/assets/vendor/datatables.net-responsive-bs4/css/responsive.bootstrap4.min.css">
|
||||
}
|
||||
@section Script {
|
||||
<script src="~/assets/vendor/datatables.net/js/jquery.dataTables.min.js"></script>
|
||||
<script src="~/assets/vendor/datatables.net-responsive/js/dataTables.responsive.min.js"></script>
|
||||
<script src="~/assets/vendor/datatables.net-responsive-bs4/js/responsive.bootstrap4.min.js"></script>
|
||||
<script src="~/assets/javascript/pages/dataTables.bootstrap.js"></script>
|
||||
<script src="~/assets/javascript/custom/modallist.js" asp-append-version="true"></script>
|
||||
}
|
||||
|
||||
<div class="page-inner">
|
||||
<!-- .page-title-bar -->
|
||||
<header class="page-title-bar">
|
||||
<!-- .breadcrumb -->
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item active">
|
||||
<a href="#"><i class="breadcrumb-icon fa fa-angle-left mr-2"></i>範本類型清單</a>
|
||||
</li>
|
||||
</ol>
|
||||
</nav><!-- /.breadcrumb -->
|
||||
<!-- title -->
|
||||
<h1 class="page-title"> 範本類型清單 </h1>
|
||||
<p class="text-muted"> </p><!-- /title -->
|
||||
</header><!-- /.page-title-bar -->
|
||||
<!-- .page-section -->
|
||||
<div class="page-section">
|
||||
<button type="button" id="modelProjNewBtn" class="btn btn-primary btn-floated position-absolute" title="Add new client"><i class="fa fa-plus"></i></button>
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .card-body -->
|
||||
<div class="card-body">
|
||||
<div class="form-row">
|
||||
<div class="col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="dept_select">單位</label>
|
||||
<select class="custom-select custom-select-sm" id="dept_select" name="dept_select" required="">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2" style="visibility: hidden;">
|
||||
<div class="form-group">
|
||||
<label for="search_btn" style="display: block;"> </label>
|
||||
<button type="button" class="btn btn-info btn-sm" id="search_btn">切換單位</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .card-body -->
|
||||
<div class="card-body">
|
||||
<!-- .table -->
|
||||
<table id="dt-responsive" class="table dt-responsive nowrap w-100">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> 專案類型 </th>
|
||||
<th> 建立時間 </th>
|
||||
<th> 功能 </th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
</table><!-- /.table -->
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
</div><!-- /.page-section -->
|
||||
</div>
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientModelProjForm" name="clientModelProjForm">
|
||||
<div class="modal fade" id="modelProjModal" tabindex="-1" role="dialog" aria-labelledby="modelProjModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="modelProjModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">專案類型</span> <input id="group_content" type="text" class="form-control form-control-lg" value="" placeholder="專案類型" readonly="readonly " required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="modelProj_method" />
|
||||
<input type="hidden" id="modelProj_uid" />
|
||||
<input type="hidden" id="dept_uid" />
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modelProj_name" class="form-control" value="" placeholder="專案類型名稱" maxlength="12" required=""> <label for="modelProj_name">專案類型名稱</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="modelProjDialogSaveBtn" class="btn btn-primary">Save</button> <button type="button" class="btn btn-light" data-dismiss="modal" data-target="#modelProjModal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientModelQuotationForm" name="clientModelQuotationForm">
|
||||
<div class="modal fade" id="clientModelQuotationListModal" tabindex="-1" role="dialog" aria-labelledby="clientModelQuotationListModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="clientNewModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">範本列表</span> <input id="modelQuotationTitle" type="text" class="form-control form-control-lg" placeholder="範本列表" required="">
|
||||
</h6>
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
</button>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="modelQuotation_method" />
|
||||
<input type="hidden" id="parent_modelProj_uid" />
|
||||
<!-- .page-section -->
|
||||
<div class="page-section">
|
||||
<button type="button" id="modelQuotationListNewBtn" class="btn btn-primary btn-floated position-absolute" title="Add new client"><i class="fa fa-plus"></i></button>
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .card-body -->
|
||||
<div class="card-body">
|
||||
<!-- .table -->
|
||||
<table id="dt-responsive-modelQuotation" class="table dt-responsive nowrap w-100">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> 範本名稱 </th>
|
||||
<th> 建立日期 </th>
|
||||
<th style="width: 25px;"> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
</table><!-- /.table -->
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
</div><!-- /.page-section -->
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="modelQuotationSaveBtn" style="visibility:hidden;" class="btn btn-primary">儲存</button> <button id="closeBtn" type="button" class="btn btn-light" data-dismiss="modal">關閉</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientModelQuotationPreivewForm" name="clientModelQuotationPreviewForm">
|
||||
<div class="modal fade" id="clientModelQuotationPreviewModal" tabindex="-1" role="dialog" aria-labelledby="clientModelQuotationPreviewModalLabel" data-backdrop="static" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog modal-xl" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="socialModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">報價單範本內容</span> <input id="previewQuotationContent_name" type="text" class="form-control form-control-lg" value="" placeholder="報價單內容" readonly="readonly" required="">
|
||||
</h6>
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
</button>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="modelMainItem_uid" />
|
||||
<input type="hidden" id="modelQuotation_method" />
|
||||
<input type="hidden" id="modelQuotation_uid" />
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modelQuotation_name" class="form-control" value="" placeholder="報價單範本名稱" maxlength="36" required=""> <label for="modelQuotation_name">報價單範本名稱</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- grid row -->
|
||||
<div id="quotatiion_div" class="row">
|
||||
<div class="card-body border-top">
|
||||
<button id="addModelMainItemBtn" type="button" class="btn btn-primary btn-lg btn-block">新增主項目</button>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="modelItem_div" class="col-lg-12">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="modelQuotationDialogSaveBtn" class="btn btn-primary">Save</button><button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientModelMainItemForm" name="clientModelMainItemForm">
|
||||
<div class="modal fade" id="modelMainItemModal" tabindex="-1" role="dialog" aria-labelledby="modelMainItemModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="modelMainItemModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">主項目</span> <input id="group_mainitem" type="text" class="form-control form-control-lg" value="" placeholder="主項目" readonly="readonly" required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="modelMainItem_method" />
|
||||
<input type="hidden" id="modelMainItem_uid" />
|
||||
<input type="hidden" id="parent_mainItem_uid" />
|
||||
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="modelMainItem_name">主項目名稱</label> <input id="modelMainItem_name" maxlength="32" type="text" class="form-control" />
|
||||
</div><!-- /.form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modelMainItem_ac" class="form-control" value="0" placeholder="AC" maxlength="5" required=""> <label for="modelSubItem_number">AC (輸入10代表 10% AC)</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="modelMainItemDialogSaveBtn" class="btn btn-primary">Save</button> <button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientModelSubItemForm" name="clientModelSubItemForm">
|
||||
<div class="modal fade" id="modelSubItemModal" tabindex="-1" role="dialog" aria-labelledby="modelSubItemModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="modelSubItemModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">次項目</span> <input id="group_Subitem" type="text" class="form-control form-control-lg" value="" placeholder="次項目" readonly="readonly" required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="modelSubItem_method" />
|
||||
<input type="hidden" id="modelSubItem_uid" />
|
||||
<input type="hidden" id="parent_Item_uid" />
|
||||
<input type="hidden" id="model_parent_data_uid" />
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="modelSubItem_name">次項目名稱</label> <input id="modelSubItem_name" maxlength="32" type="text" class="form-control" />
|
||||
</div><!-- /.form-group -->
|
||||
<div class="form-group">
|
||||
<label for="tf6">製作說明</label>
|
||||
<textarea class="form-control" id="modelSubItem_descript" rows="5"></textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="modal_subItem_price">單價</label> <!-- .input-group -->
|
||||
<div class="input-group">
|
||||
<label class="input-group-prepend" for="modelSubItem_price"><span class="badge">$</span></label> <input type="text" class="form-control" maxlength="8" id="modelSubItem_price">
|
||||
</div><!-- /.input-group -->
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modelSubItem_unitType" class="form-control" value="" placeholder="單位" maxlength="6" required=""> <label for="modelSubItem_unitType">單位</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modelSubItem_number" class="form-control" value="" placeholder="數量" maxlength="10" required=""> <label for="modelSubItem_number">數量</label>
|
||||
</div>
|
||||
</div>
|
||||
<!-- .list-group-item -->
|
||||
<div class="list-group-item d-flex justify-content-between align-items-center">
|
||||
<span>是否加上AC</span> <!-- .switcher-control -->
|
||||
<label class="switcher-control switcher-control-lg"><input type="checkbox" id="modelSubItem_hasAC" class="switcher-input"> <span class="switcher-indicator"></span> <span class="switcher-label-on">是</span> <span class="switcher-label-off">否</span></label> <!-- /.switcher-control -->
|
||||
</div><!-- /.list-group-item -->
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="modelSubItemDialogSaveBtn" class="btn btn-primary">Save</button> <button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
@page
|
||||
@model PrivacyModel
|
||||
@{
|
||||
ViewData["Title"] = "Privacy Policy";
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
|
||||
<p>Use this page to detail your site's privacy policy.</p>
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
||||
namespace QuotationMaker.Pages
|
||||
{
|
||||
public class PrivacyModel : PageModel
|
||||
{
|
||||
private readonly ILogger<PrivacyModel> _logger;
|
||||
|
||||
public PrivacyModel(ILogger<PrivacyModel> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public void OnGet()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,852 +0,0 @@
|
|||
@*
|
||||
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
|
||||
*@
|
||||
@{
|
||||
Layout = "_LooperLayout";
|
||||
}
|
||||
|
||||
@section Style {
|
||||
<style type="text/css">
|
||||
.cards tbody tr {
|
||||
float: left;
|
||||
width: 19rem;
|
||||
margin: 0.5rem;
|
||||
border: 0.0625rem solid rgba(0, 0, 0, .125);
|
||||
border-radius: .25rem;
|
||||
box-shadow: 0.25rem 0.25rem 0.5rem rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
|
||||
.cards tbody td {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.cards thead {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.cards td:before {
|
||||
content: attr(data-label);
|
||||
position: relative;
|
||||
float: left;
|
||||
color: #808080;
|
||||
min-width: 4rem;
|
||||
margin-left: 0;
|
||||
margin-right: 1rem;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
tr.selected td:before {
|
||||
color: #CCC;
|
||||
}
|
||||
|
||||
.table .avatar {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.cards .avatar {
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
margin: 15px;
|
||||
}
|
||||
</style>
|
||||
}
|
||||
@section Script {
|
||||
<script src="~/assets/vendor/datatables.net/js/jquery.dataTables.min.js"></script>
|
||||
<script src="~/assets/vendor/datatables.net-responsive/js/dataTables.responsive.min.js"></script>
|
||||
<script src="~/assets/vendor/datatables.net-responsive-bs4/js/responsive.bootstrap4.min.js"></script>
|
||||
<script src="~/assets/javascript/pages/dataTables.bootstrap.js"></script>
|
||||
<script src="~/assets/vendor/datepicker/js/bootstrap-datepicker.min.js"></script>
|
||||
<script src="~/assets/vendor/datepicker/locales/bootstrap-datepicker.zh-TW.min.js"></script>
|
||||
<script src="~/assets/vendor/sortablejs/Sortable.min.js"></script>
|
||||
<script src="~/assets/vendor/nestable2/jquery.nestable.min.js"></script>
|
||||
<script src="~/assets/javascript/custom/projectlist.js" asp-append-version="true"></script>
|
||||
}
|
||||
|
||||
<!-- .page-inner -->
|
||||
<div class="page-inner">
|
||||
<!-- .page-title-bar -->
|
||||
<header class="page-title-bar">
|
||||
<!-- .breadcrumb -->
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item active">
|
||||
<a href="#"><i class="breadcrumb-icon fa fa-angle-left mr-2"></i> 專案報價單清單</a>
|
||||
</li>
|
||||
</ol>
|
||||
</nav><!-- /.breadcrumb -->
|
||||
<!-- title -->
|
||||
<h1 class="page-title"> 專案報價單清單 </h1>
|
||||
<p class="text-muted"> </p><!-- /title -->
|
||||
</header><!-- /.page-title-bar -->
|
||||
|
||||
<div class="page-section">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<!-- #accordion2 -->
|
||||
<div id="accordion1" class="card-expansion">
|
||||
<!-- .card -->
|
||||
<div class="card card-expansion-item">
|
||||
<div class="card-header border-0" id="headingOne1">
|
||||
<button id="adv-search-btn" class="btn btn-reset d-flex justify-content-between w-100" data-toggle="collapse" data-target="#collapseOne1" aria-expanded="true" aria-controls="collapseOne1"><span>進階搜尋</span> <span class="collapse-indicator"><i class="fa fa-fw fa-chevron-down"></i></span></button>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div id="collapseOne1" class="collapse show" aria-labelledby="headingOne1" data-parent="#accordion1">
|
||||
<div class="card-body pt-0">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="dateStart">起</label>
|
||||
<input id="dateStart" type="text" class="form-control flatpickr-input active" data-toggle="flatpickr" data-date-format="m.y" data-monthselect="true" readonly="readonly">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="dateEnd">迄</label>
|
||||
<input id="dateEnd" type="text" class="form-control flatpickr-input active" data-toggle="flatpickr" data-date-format="m.y" data-monthselect="true" readonly="readonly">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="dept_select">單位</label>
|
||||
<select class="custom-select custom-select-sm" id="dept_select" name="dept_select" required="">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="search_btn" style="display: block;"> </label>
|
||||
<button type="button" class="btn btn-info btn-sm" id="search_btn">篩選</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- .page-section -->
|
||||
<div class="page-section">
|
||||
<button type="button" id="projectNewBtn" class="btn btn-primary btn-floated" title="Add new client"><i class="fa fa-plus"></i></button>
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .card-body -->
|
||||
<div class="card-body">
|
||||
<!-- .table -->
|
||||
<table id="dt-responsive" class="table dt-responsive nowrap w-100">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> 專案建立時間 </th>
|
||||
<th> 專案名稱 </th>
|
||||
<th> 客戶公司 </th>
|
||||
<th> 備註 </th>
|
||||
<th> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
</table><!-- /.table -->
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
</div><!-- /.page-section -->
|
||||
</div><!-- /.page-inner -->
|
||||
<!-- Keep in mind that modals should be placed outsite of page sidebar -->
|
||||
<!-- .modal -->
|
||||
<form id="clientProjectForm" name="clientProjectForm">
|
||||
<div class="modal fade" id="clientProjectModal" tabindex="-1" role="dialog" aria-labelledby="clientProjectModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="clientProjectModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">Client name</span> <input id="modelTitle" type="text" class="form-control form-control-lg" placeholder="專案資料維護" required="">
|
||||
</h6>
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
</button>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="project_method" />
|
||||
<input type="hidden" id="project_uid" />
|
||||
<!-- .form-row -->
|
||||
<div class="form-row">
|
||||
|
||||
<div class="col-md-12" id="project_name_div">
|
||||
<div class="form-group">
|
||||
<label for="project_name">專案名稱</label> <input type="text" id="project_name" maxlength="60" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12" id="prm_project_serial">
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="company_select">客戶公司</label> <select id="company_select" class="form-control">
|
||||
</select>
|
||||
</div><!-- /.form-group -->
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-12" id="project_year_month_div">
|
||||
<div class="form-group">
|
||||
<label for="project_ps">備註</label> <input type="text" id="project_ps" maxlength="32" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div><!-- /.form-row -->
|
||||
|
||||
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="projectSaveBtn" class="btn btn-primary">儲存</button> <button id="closeBtn" type="button" class="btn btn-light" data-dismiss="modal">關閉</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientQuotationListForm" name="clientQuotationListForm">
|
||||
<div class="modal fade" id="clientQuotationListModal" tabindex="-1" role="dialog" aria-labelledby="clientQuotationListModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="clientNewModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">報價單列表</span> <input id="QuotationTitle" type="text" class="form-control form-control-lg" placeholder="報價單目列表" required="">
|
||||
</h6>
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
</button>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="quotation_project_uid" />
|
||||
<input type="hidden" id="quotation_company_uid" />
|
||||
<!-- .page-section -->
|
||||
<div class="page-section">
|
||||
<button type="button" id="QuotationListNewBtn" class="btn btn-primary btn-floated position-absolute" title="Add new client"><i class="fa fa-plus"></i></button>
|
||||
|
||||
<div class="section-block">
|
||||
<div class="col-lg-12">
|
||||
<div id="project_info_div" class="alert alert-info" role="alert">
|
||||
專案名稱:
|
||||
客戶名稱:
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .card-body -->
|
||||
<div class="card-body">
|
||||
<!-- .table -->
|
||||
<table id="dt-responsive-quotation" class="table dt-responsive nowrap w-100">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> 報價單名稱 </th>
|
||||
<th> 異動時間 </th>
|
||||
<th> 窗口 </th>
|
||||
<th style="width: 30px;"> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
</table><!-- /.table -->
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
</div><!-- /.page-section -->
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="QuotationSaveBtn" style="visibility:hidden;" class="btn btn-primary">儲存</button> <button id="closeBtn" type="button" class="btn btn-light" data-dismiss="modal">關閉</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
<!--歷史版本-->
|
||||
<!-- .modal -->
|
||||
<form id="clientHistoryListForm" name="clientHistoryListForm">
|
||||
<div class="modal fade" id="clientHistoryListModal" tabindex="-1" role="dialog" aria-labelledby="clientHistoryListModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="clientNewModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">歷史異動列表</span> <input id="HistoryTitle" type="text" class="form-control form-control-lg" placeholder="歷史異動列表" required="">
|
||||
</h6>
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
</button>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="now_version" />
|
||||
<!-- .page-section -->
|
||||
<div class="page-section">
|
||||
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .card-body -->
|
||||
<div class="card-body">
|
||||
<!-- .table -->
|
||||
<table id="dt-responsive-history" class="table dt-responsive nowrap w-100">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 100px;"> </th>
|
||||
<th> 建立日期 </th>
|
||||
<th> 報價單名稱 </th>
|
||||
<th> 版本號 </th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
</table><!-- /.table -->
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
</div><!-- /.page-section -->
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button id="closeBtn" type="button" class="btn btn-light" data-dismiss="modal">關閉</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientModelQuotationForm" name="clientModelQuotationForm">
|
||||
<div class="modal fade" id="clientModelQuotationModal" tabindex="-1" role="dialog" aria-labelledby="clientModelQuotationModalLabel" data-backdrop="static" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog modal-xl" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="quotationModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">報價單內容</span> <input id="quotationTitle_name" type="text" class="form-control form-control-lg" value="" placeholder="報價單內容" readonly="readonly" required="">
|
||||
</h6>
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
</button>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="quotation_method" />
|
||||
<input type="hidden" id="quotation_uid" />
|
||||
<input type="hidden" id="quotation_version" />
|
||||
<!-- .form-group -->
|
||||
<div class="form-group" id="quotation_editType_div">
|
||||
<label>報價單編輯方式 (儲存後無法變更)</label>
|
||||
<div class="custom-control custom-radio mb-1">
|
||||
<input type="radio" class="custom-control-input" name="rdGroup3" id="quotation_custom" checked> <label class="custom-control-label" for="quotation_custom">自訂</label>
|
||||
</div>
|
||||
<div class="custom-control custom-radio mb-1">
|
||||
<input type="radio" class="custom-control-input" name="rdGroup3" id="quotation_temp"> <label class="custom-control-label" for="quotation_temp">範本</label>
|
||||
<div class="custom-control-hint">
|
||||
<div class="form-row">
|
||||
<div class="col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="modelProject_select">類型</label>
|
||||
<select class="custom-select custom-select-sm" id="modelProject_select" name="modelProject_select" required="">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="modelQuotation_select">範本</label>
|
||||
<select class="custom-select custom-select-sm" id="modelQuotation_select" name="modelQuotation_select" required="">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<div class="form-group">
|
||||
<label for="search_btn" style="display: block;"> </label>
|
||||
<button type="button" class="btn btn-info btn-sm" id="applyTemp_btn">套用範本</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input id="quotation_date" type="text" class="form-control flatpickr-input" data-toggle="flatpickr" data-date-format="Y/m/d" readonly="readonly" placeholder="報價日期"><label for="quotation_date">報價日期</label>
|
||||
<input type="hidden" id="quotation_date_old" />
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input id="quotation_range" type="text" class="form-control flatpickr-input active" data-toggle="flatpickr" data-mode="range" data-date-format="Y/m/d" data-default-dates="['today', 'today']" readonly="readonly" placeholder="報價單有效期限">
|
||||
<label for="quotation_range">報價單有效期限</label>
|
||||
<input type="hidden" id="quotation_expStart" />
|
||||
<input type="hidden" id="quotation_expEnd" />
|
||||
<input type="hidden" id="quotation_expStart_old" />
|
||||
<input type="hidden" id="quotation_expEnd_old" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="quotation_name" class="form-control" value="" placeholder="報價單名稱" maxlength="85" required=""> <label for="quotation_name">報價單名稱</label>
|
||||
<input type="hidden" id="quotation_name_old" />
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<div class="form-group">
|
||||
<label for="contactPerson_uid">窗口</label>
|
||||
<select class="custom-select custom-select-sm" id="contactPerson_uid" name="contactPerson_uid" required="">
|
||||
</select>
|
||||
<input type="hidden" id="contactPerson_uid_old" />
|
||||
</div>
|
||||
<!-- grid row -->
|
||||
<div id="quotatiion_div" class="row">
|
||||
<div id="modelItem_div" class="col-lg-12">
|
||||
</div>
|
||||
<div class="card-body border-top">
|
||||
<button id="addModelMainItemBtn" type="button" class="btn btn-primary btn-lg btn-block">新增工作主項目</button>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="quotation_noTaxTotal" class="form-control" value="" placeholder="專案總價" maxlength="16" required="" readonly="readonly" /> <label for="quotation_noTaxTotal">專案總價</label>
|
||||
<input type="hidden" id="quotation_noTaxTotal_old" />
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="quotation_specTotal" class="form-control" value="" placeholder="專案優惠總價" maxlength="14" required="" /> <label for="quotation_specTotal">專案優惠總價</label>
|
||||
<input type="hidden" id="quotation_specTotal_old" />
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="quotation_tax" class="form-control" value="" placeholder="加值營業稅 VAT (5%)" maxlength="12" required="" /> <label for="quotation_tax">加值營業稅 VAT (5%)</label>
|
||||
<input type="hidden" id="quotation_tax_old" />
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="quotation_grandTotal" class="form-control" value="" placeholder="總計 Grand Total" maxlength="15" required="" /> <label for="quotation_grandTotal">總計 Grand Total</label>
|
||||
<input type="hidden" id="quotation_grandTotal_old" />
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<div class="form-group">
|
||||
<label for="quotation_sa">製作及維護服務協議條款 (##客戶公司## 與 ##我們公司## 這兩串文字請勿異動) </label>
|
||||
<textarea class="form-control" id="quotation_sa" rows="6" placeholder="製作及維護服務協議條款"></textarea>
|
||||
<textarea class="form-control" id="quotation_sa_old" rows="6" style="display:none;" placeholder="製作及維護服務協議條款"></textarea>
|
||||
</div>
|
||||
<!-- grid row -->
|
||||
<div id="payment_div" class="row">
|
||||
<!-- grid column -->
|
||||
<div class="col-lg-12">
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<div class="card-header border-bottom-0"> 付款方式 </div><!-- .nestable -->
|
||||
<div id="payment_group" class="dd" data-toggle="sortable" data-max-depth="1" data-type="payment_group">
|
||||
<!-- .dd-list -->
|
||||
<ol class="dd-list">
|
||||
</ol><!-- /.dd-list -->
|
||||
</div><!-- /.nestable -->
|
||||
<!-- .card-footer -->
|
||||
<div class="card-footer">
|
||||
<a href="javascript: void(0);" id="addPaymentBtn" data-type="addPayment" class="card-footer-item justify-content-start"><span><i class="fa fa-plus-circle mr-1"></i> 新增付款方式</span></a>
|
||||
</div><!-- /.card-footer -->
|
||||
</div><!-- /.card -->
|
||||
</div><!-- /grid column -->
|
||||
</div>
|
||||
<!-- grid row -->
|
||||
<div id="invoice_div" class="row">
|
||||
<!-- grid column -->
|
||||
<div class="col-lg-12">
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<div class="card-header border-bottom-0"> 發票開立品項 </div><!-- .nestable -->
|
||||
<div id="invoice_group" class="dd" data-toggle="sortable" data-max-depth="1" data-type="payment_group">
|
||||
<!-- .dd-list -->
|
||||
<ol class="dd-list">
|
||||
</ol><!-- /.dd-list -->
|
||||
</div><!-- /.nestable -->
|
||||
<!-- .card-footer -->
|
||||
<div class="card-footer">
|
||||
<a href="javascript: void(0);" id="addInvoiceBtn" data-type="addInvoice" class="card-footer-item justify-content-start"><span><i class="fa fa-plus-circle mr-1"></i> 新增發票 </span></a>
|
||||
</div><!-- /.card-footer -->
|
||||
</div><!-- /.card -->
|
||||
</div><!-- /grid column -->
|
||||
</div>
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="modelQuotationDialogSaveBtn" class="btn btn-primary">Save</button><button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
|
||||
<!--主項目-->
|
||||
<!-- .modal -->
|
||||
<form id="clientModelMainItemForm" name="clientModelMainItemForm">
|
||||
<div class="modal fade" id="modelMainItemModal" tabindex="-1" role="dialog" aria-labelledby="modelMainItemModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="modelMainItemModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">主項目</span> <input id="group_mainitem" type="text" class="form-control form-control-lg" value="" placeholder="主項目" readonly="readonly" required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="modelMainItem_method" />
|
||||
<input type="hidden" id="modelMainItem_uid" />
|
||||
<input type="hidden" id="parent_mainItem_uid" />
|
||||
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="modelMainItem_name">主項目名稱</label> <input id="modelMainItem_name" maxlength="32" type="text" class="form-control" />
|
||||
</div><!-- /.form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modelMainItem_ac" class="form-control" value="0" placeholder="AC" maxlength="5" required=""> <label for="modelSubItem_number">AC (輸入10代表 10% AC)</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="modelMainItemDialogSaveBtn" class="btn btn-primary">Save</button> <button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!--子項目-->
|
||||
<!-- .modal -->
|
||||
<form id="clientModelSubItemForm" name="clientModelSubItemForm">
|
||||
<div class="modal fade" id="modelSubItemModal" tabindex="-1" role="dialog" aria-labelledby="modelSubItemModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="modelSubItemModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">次項目</span> <input id="group_Subitem" type="text" class="form-control form-control-lg" value="" placeholder="次項目" readonly="readonly" required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="modelSubItem_method" />
|
||||
<input type="hidden" id="modelSubItem_uid" />
|
||||
<input type="hidden" id="parent_Item_uid" />
|
||||
<input type="hidden" id="model_parent_data_uid" />
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="modelSubItem_name">次項目名稱</label> <input id="modelSubItem_name" maxlength="32" type="text" class="form-control" />
|
||||
</div><!-- /.form-group -->
|
||||
<div class="form-group">
|
||||
<label for="tf6">製作說明</label>
|
||||
<textarea class="form-control" id="modelSubItem_descript" rows="5"></textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="modal_subItem_price">單價</label> <!-- .input-group -->
|
||||
<div class="input-group">
|
||||
<label class="input-group-prepend" for="modelSubItem_price"><span class="badge">$</span></label> <input type="text" class="form-control" maxlength="8" id="modelSubItem_price">
|
||||
</div><!-- /.input-group -->
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modelSubItem_unitType" class="form-control" value="" placeholder="單位" maxlength="6" required=""> <label for="modelSubItem_unitType">單位</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modelSubItem_number" class="form-control" value="" placeholder="數量" maxlength="10" required=""> <label for="modelSubItem_number">數量</label>
|
||||
</div>
|
||||
</div>
|
||||
<!-- .list-group-item -->
|
||||
<div class="list-group-item d-flex justify-content-between align-items-center">
|
||||
<span>是否加上AC</span> <!-- .switcher-control -->
|
||||
<label class="switcher-control switcher-control-lg"><input type="checkbox" id="modelSubItem_hasAC" class="switcher-input"> <span class="switcher-indicator"></span> <span class="switcher-label-on">是</span> <span class="switcher-label-off">否</span></label> <!-- /.switcher-control -->
|
||||
</div><!-- /.list-group-item -->
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="modelSubItemDialogSaveBtn" class="btn btn-primary">Save</button> <button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!--付款方式-->
|
||||
<!-- .modal -->
|
||||
<form id="clientModelPaymentForm" name="clientModelPaymentForm">
|
||||
<div class="modal fade" id="paymentModal" tabindex="-1" role="dialog" aria-labelledby="modelPaymentModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="modelMainItemModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">付款方式</span> <input id="group_Payment" type="text" class="form-control form-control-lg" value="" placeholder="付款方式" readonly="readonly" required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="payment_method" />
|
||||
<input type="hidden" id="payment_uid" />
|
||||
|
||||
<div class="form-group">
|
||||
<label for="paymentMethod_select">單位</label>
|
||||
<select class="custom-select custom-select-sm" id="paymentMethod_select" name="paymentMethod_select" required="">
|
||||
<option value="">請選擇</option>
|
||||
<option value="cheque">支票</option>
|
||||
<option value="telegraphic">電匯</option>
|
||||
<option value="paycash">一次付清</option>
|
||||
<option value="downpayment">頭期款</option>
|
||||
<option value="lastpayment">尾款</option>
|
||||
<option value="custom">手動輸入</option>
|
||||
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="payment_descript" class="form-control" value="" placeholder="付款說明" maxlength="90" required=""> <label for="payment_descript">付款說明</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="paymentModalDialogSaveBtn" class="btn btn-primary">Save</button> <button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!--發票開立品項-->
|
||||
<!-- .modal -->
|
||||
<form id="clientModelInvoiceForm" name="clientModelInvoiceForm">
|
||||
<div class="modal fade" id="invoiceModal" tabindex="-1" role="dialog" aria-labelledby="modelInvoiceModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="modelInvoiceModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">發票開立品項</span> <input id="group_Invoice" type="text" class="form-control form-control-lg" value="" placeholder="發票開立品項" readonly="readonly" required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="invoice_method" />
|
||||
<input type="hidden" id="invoice_uid" />
|
||||
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="invoice_name">品項</label> <input id="invoice_name" maxlength="32" type="text" class="form-control" />
|
||||
</div><!-- /.form-group -->
|
||||
|
||||
<div class="form-group">
|
||||
<label for="invoice_type">發票月份樣式</label> <select id="invoice_type" class="custom-select d-block w-100">
|
||||
<option value="date"> 日期 </option>
|
||||
<option value="text"> 文字敘述 </option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group" id="invoice_type_date">
|
||||
<label class="control-label" for="invoice_date">發票開立月份</label>
|
||||
<input id="invoice_date" type="text" class="form-control flatpickr-input active" data-toggle="flatpickr" data-date-format="m.y" data-monthselect="true" readonly="readonly">
|
||||
</div>
|
||||
|
||||
<!-- .form-group -->
|
||||
<div class="form-group" id="invoice_type_text">
|
||||
<label class="control-label" for="invoice_text">發票開立時間說明</label> <input id="invoice_text" maxlength="20" type="text" class="form-control" />
|
||||
</div><!-- /.form-group -->
|
||||
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="invoice_noTaxMoney">開立金額(未稅)</label> <input id="invoice_noTaxMoney" maxlength="12" type="text" class="form-control" />
|
||||
</div><!-- /.form-group -->
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="invoiceModalDialogSaveBtn" class="btn btn-primary">Save</button> <button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!--另存到此專案-->
|
||||
<!-- .modal -->
|
||||
<form id="clientSavetosameForm" name="clientSavetosameForm">
|
||||
<div class="modal fade" id="clientSaveToSameModal" tabindex="-1" role="dialog" aria-labelledby="clientSaveToSameModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="clientProjectModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only"></span> <input id="modelSaveToSameTitle" type="text" class="form-control form-control-lg" placeholder="另存為新報價單至此專案" required="">
|
||||
</h6>
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
</button>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="save_to_same_quotation_uid" />
|
||||
<input type="hidden" id="save_to_same_quotation_version" />
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="save_to_same_quotation_name" class="form-control" value="" placeholder="新報價單名稱" maxlength="45" required=""> <label for="save_to_same_quotation_name">新報價單名稱</label>
|
||||
</div>
|
||||
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="save_to_same_SaveBtn" class="btn btn-primary">儲存</button> <button id="closeBtn" type="button" class="btn btn-light" data-dismiss="modal">關閉</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!--另存到別專案-->
|
||||
<!-- .modal -->
|
||||
<form id="clientSavetootherForm" name="clientSavetootherForm">
|
||||
<div class="modal fade" id="clientSaveToOtherModal" tabindex="-1" role="dialog" aria-labelledby="clientSaveToOtherModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="clientProjectModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only"></span> <input id="modelSaveToOtherTitle" type="text" class="form-control form-control-lg" placeholder="另存為新報價單至其他專案" required="">
|
||||
</h6>
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
</button>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="save_to_other_quotation_uid" />
|
||||
<input type="hidden" id="save_to_other_quotation_version" />
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="save_to_other_quotation_name" class="form-control" value="" placeholder="新報價單名稱" maxlength="45" required=""> <label for="save_to_other_quotation_name">新報價單名稱</label>
|
||||
</div>
|
||||
<br />
|
||||
<div class="form-group">
|
||||
<label for="project_select">專案名稱</label>
|
||||
<select class="custom-select custom-select-sm" id="project_select" name="project_select" required="">
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="contactPerson_select">窗口</label>
|
||||
<select class="custom-select custom-select-sm" id="contactPerson_select" name="contactPerson_select" required="">
|
||||
</select>
|
||||
</div>
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="save_to_other_SaveBtn" class="btn btn-primary">儲存</button> <button id="closeBtn" type="button" class="btn btn-light" data-dismiss="modal">關閉</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!--另存到新專案-->
|
||||
<!-- .modal -->
|
||||
<form id="clientSavetonewForm" name="clientSavetonewForm">
|
||||
<div class="modal fade" id="clientSaveToNewModal" tabindex="-1" role="dialog" aria-labelledby="clientSaveToNewModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="clientProjectModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only"></span> <input id="modelSaveToNewTitle" type="text" class="form-control form-control-lg" placeholder="另存為新報價單至新專案" required="">
|
||||
</h6>
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
</button>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="save_to_new_quotation_uid" />
|
||||
<input type="hidden" id="save_to_new_quotation_version" />
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="save_to_new_quotation_name" class="form-control" value="" placeholder="新報價單名稱" maxlength="45" required=""> <label for="save_to_other_quotation_name">新報價單名稱</label>
|
||||
</div>
|
||||
<br/>
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="save_to_new_project_name" class="form-control" value="" placeholder="新專案名稱" maxlength="45" required=""> <label for="save_to_other_quotation_name">新專案名稱</label>
|
||||
</div>
|
||||
<br />
|
||||
<div class="form-group">
|
||||
<label for="project_select">客戶公司</label>
|
||||
<select class="custom-select custom-select-sm" id="company_new_select" name="company_new_select" required="">
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="contactPerson_select">窗口</label>
|
||||
<select class="custom-select custom-select-sm" id="contactPerson_new_select" name="contactPerson_new_select" required="">
|
||||
</select>
|
||||
</div>
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="save_to_new_SaveBtn" class="btn btn-primary">儲存</button> <button id="closeBtn" type="button" class="btn btn-light" data-dismiss="modal">關閉</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
|
@ -1,225 +0,0 @@
|
|||
@*
|
||||
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
|
||||
*@
|
||||
@{
|
||||
Layout = "_LooperLayout";
|
||||
}
|
||||
|
||||
@section Style {
|
||||
<link rel="stylesheet" href="~/assets/vendor/datatables.net-responsive-bs4/css/responsive.bootstrap4.min.css">
|
||||
}
|
||||
@section Script {
|
||||
<script src="~/assets/vendor/datatables.net/js/jquery.dataTables.min.js"></script>
|
||||
<script src="~/assets/vendor/datatables.net-responsive/js/dataTables.responsive.min.js"></script>
|
||||
<script src="~/assets/vendor/datatables.net-responsive-bs4/js/responsive.bootstrap4.min.js"></script>
|
||||
<script src="~/assets/javascript/pages/dataTables.bootstrap.js"></script>
|
||||
<script src="~/assets/javascript/custom/ratelist.js" asp-append-version="true"></script>
|
||||
}
|
||||
|
||||
<div class="page-inner">
|
||||
<!-- .page-title-bar -->
|
||||
<header class="page-title-bar">
|
||||
<!-- .breadcrumb -->
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item active">
|
||||
<a href="#"><i class="breadcrumb-icon fa fa-angle-left mr-2"></i>主項目清單</a>
|
||||
</li>
|
||||
</ol>
|
||||
</nav><!-- /.breadcrumb -->
|
||||
<!-- title -->
|
||||
<h1 class="page-title"> 主項目清單 </h1>
|
||||
<p class="text-muted"> </p><!-- /title -->
|
||||
</header><!-- /.page-title-bar -->
|
||||
<!-- .page-section -->
|
||||
<div class="page-section">
|
||||
<button type="button" id="maintItemNewModal" class="btn btn-primary btn-floated position-absolute" title="Add new client"><i class="fa fa-plus"></i></button>
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .card-body -->
|
||||
<div class="card-body">
|
||||
<div class="form-row">
|
||||
<div class="col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="dept_select">單位</label>
|
||||
<select class="custom-select custom-select-sm" id="dept_select" name="dept_select" required="">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<div class="form-group">
|
||||
<label for="search_btn" style="display: block;"> </label>
|
||||
<button type="button" class="btn btn-info btn-sm" id="search_btn">切換單位</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .card-body -->
|
||||
<div class="card-body">
|
||||
<!-- .table -->
|
||||
<table id="dt-responsive" class="table dt-responsive nowrap w-100">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 65%;"> 主項目名稱 </th>
|
||||
<th style="width: 10%;"> 順序 </th>
|
||||
<th> 功能 </th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
</table><!-- /.table -->
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
</div><!-- /.page-section -->
|
||||
</div>
|
||||
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientItemEditForm" name="clientItemEditForm">
|
||||
<div class="modal fade" id="mainItemModal" tabindex="-1" role="dialog" aria-labelledby="mainItemModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="mainItemModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">主項目內容</span> <input id="group_content" type="text" class="form-control form-control-lg" value="" placeholder="主項目內容" readonly="readonly " required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="mainItem_method" />
|
||||
<input type="hidden" id="mainItem_uid" />
|
||||
<input type="hidden" id="dept_uid" />
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modal_mainItem_name" class="form-control" value="" placeholder="主項目名稱" maxlength="36" required=""> <label for="modal_mainItem_name">主項目名稱</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="number" id="modal_mainItem_order" class="form-control" value="" placeholder="順序" required=""> <label for="modal_mainItem_order">順序</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="mainItemDialogSaveBtn" class="btn btn-primary">Save</button> <button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientSubItemListForm" name="clientSubItemListForm">
|
||||
<div class="modal fade" id="clientSubItemListModal" tabindex="-1" role="dialog" aria-labelledby="clientSubItemListModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="clientNewModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">子項目列表</span> <input id="mainItemTitle" type="text" class="form-control form-control-lg" placeholder="子項目列表" required="">
|
||||
</h6>
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
</button>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="subItemList_method" />
|
||||
<input type="hidden" id="subItemList_mainItem_uid" />
|
||||
<!-- .page-section -->
|
||||
<div class="page-section">
|
||||
<button type="button" id="subItemListNewBtn" class="btn btn-primary btn-floated position-absolute" title="Add new client"><i class="fa fa-plus"></i></button>
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .card-body -->
|
||||
<div class="card-body">
|
||||
<!-- .table -->
|
||||
<table id="dt-responsive-subItem" class="table dt-responsive nowrap w-100">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> 子項目名稱 </th>
|
||||
<th> 單價 </th>
|
||||
<th> 單位 </th>
|
||||
<th style="width: 25px;"> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
</table><!-- /.table -->
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
</div><!-- /.page-section -->
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="kolSaveBtn" style="visibility:hidden;" class="btn btn-primary">儲存</button> <button id="closeBtn" type="button" class="btn btn-light" data-dismiss="modal" >關閉</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<!-- .modal -->
|
||||
<form id="clientSubItemModalForm" name="clientSubItemModalForm">
|
||||
<div class="modal fade" id="clientSubItemModal" tabindex="-1" role="dialog" aria-labelledby="clientSubItemModalLabel" data-backdrop="static"
|
||||
data-keyboard="false" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="clientSubItemModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">Client name</span> <input id="clientSubItemModalTitle" type="text" class="form-control form-control-lg" placeholder="子項目資料新增與維護" required="">
|
||||
</h6>
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
</button>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="clientSubItem_method" />
|
||||
<input type="hidden" id="clientSubItem_subItem_uid" />
|
||||
<!-- .form-group -->
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modal_subItem_name" class="form-control" value="" placeholder="次項目名稱" maxlength="36" required=""> <label for="modal_subItem_name">次項目名稱</label>
|
||||
</div>
|
||||
</div><!-- /.form-group -->
|
||||
<div class="form-group">
|
||||
<label for="modal_subItem_descript">製作說明 <span class="badge badge-secondary"><em>選填</em></span></label>
|
||||
<textarea class="form-control" id="modal_subItem_descript" rows="5" placeholder="製作說明"></textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="modal_subItem_price">單價</label> <!-- .input-group -->
|
||||
<div class="input-group">
|
||||
<label class="input-group-prepend" for="modal_subItem_price"><span class="badge">$</span></label> <input type="text" class="form-control" maxlength="8" id="modal_subItem_price">
|
||||
</div><!-- /.input-group -->
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-label-group">
|
||||
<input type="text" id="modal_subItem_unitType" class="form-control" value="" placeholder="單位" maxlength="6" required=""> <label for="modal_subItem_unitType">單位</label>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="clientSubItemSaveBtn" class="btn btn-primary">儲存</button> <button id="closeBtn" type="button" class="btn btn-light" data-dismiss="modal">關閉</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
|
@ -1,163 +0,0 @@
|
|||
@*
|
||||
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
|
||||
*@
|
||||
@{
|
||||
Layout = "_LooperLayout";
|
||||
}
|
||||
|
||||
@section Style {
|
||||
<link rel="stylesheet" href="~/assets/vendor/datatables.net-responsive-bs4/css/responsive.bootstrap4.min.css">
|
||||
}
|
||||
|
||||
@section Script {
|
||||
<script src="~/assets/vendor/datatables.net/js/jquery.dataTables.min.js"></script>
|
||||
<script src="~/assets/vendor/datatables.net-responsive/js/dataTables.responsive.min.js"></script>
|
||||
<script src="~/assets/vendor/datatables.net-responsive-bs4/js/responsive.bootstrap4.min.js"></script>
|
||||
<script src="~/assets/javascript/pages/dataTables.bootstrap.js"></script>
|
||||
<script src="~/assets/javascript/custom/userlist.js" asp-append-version="true"></script>
|
||||
}
|
||||
|
||||
<!-- .page-inner -->
|
||||
<div class="page-inner">
|
||||
<!-- .page-title-bar -->
|
||||
<header class="page-title-bar">
|
||||
<!-- .breadcrumb -->
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item active">
|
||||
<a href="#"><i class="breadcrumb-icon fa fa-angle-left mr-2"></i>使用者清單</a>
|
||||
</li>
|
||||
</ol>
|
||||
</nav><!-- /.breadcrumb -->
|
||||
<!-- title -->
|
||||
<h1 class="page-title"> 系統使用者清單 </h1>
|
||||
<p class="text-muted"> </p><!-- /title -->
|
||||
</header><!-- /.page-title-bar -->
|
||||
<!-- .page-section -->
|
||||
<div class="page-section">
|
||||
<button type="button" id="userNewModal" class="btn btn-primary btn-floated position-absolute" title="Add new client"><i class="fa fa-plus"></i></button>
|
||||
<!-- .card -->
|
||||
<div class="card card-fluid">
|
||||
<!-- .card-body -->
|
||||
<div class="card-body">
|
||||
<!-- .table -->
|
||||
<table id="dt-responsive" class="table dt-responsive nowrap w-100">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> 姓名 </th>
|
||||
<th> 帳號 </th>
|
||||
<th> 類型 </th>
|
||||
<th> 權限 </th>
|
||||
<th> 上次登入 </th>
|
||||
<th> 功能 </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th> 姓名 </th>
|
||||
<th> 帳號 </th>
|
||||
<th> 類型 </th>
|
||||
<th> 權限 </th>
|
||||
<th> 上次登入 </th>
|
||||
<th> 功能 </th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table><!-- /.table -->
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
</div><!-- /.page-section -->
|
||||
</div><!-- /.page-inner -->
|
||||
|
||||
<!-- Keep in mind that modals should be placed outsite of page sidebar -->
|
||||
<!-- .modal -->
|
||||
<form id="clientNewForm" name="clientNewForm">
|
||||
<div class="modal fade" id="clientNewModal" tabindex="-1" role="dialog" aria-labelledby="clientNewModalLabel" aria-hidden="true">
|
||||
<!-- .modal-dialog -->
|
||||
<div class="modal-dialog" role="document">
|
||||
<!-- .modal-content -->
|
||||
<div class="modal-content">
|
||||
<!-- .modal-header -->
|
||||
<div class="modal-header">
|
||||
<h6 id="clientNewModalLabel" class="modal-title inline-editable">
|
||||
<span class="sr-only">Client name</span> <input id="modelTitle" type="text" class="form-control form-control-lg" placeholder="使用者資料維護" required="">
|
||||
</h6>
|
||||
</div><!-- /.modal-header -->
|
||||
<!-- .modal-body -->
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="method"/>
|
||||
<input type="hidden" id="user_uid"/>
|
||||
<!-- .form-row -->
|
||||
<div class="form-row">
|
||||
<div class="col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="cnCountry">帳號類型</label> <select id="user_type" class="custom-select d-block w-100">
|
||||
<option value="N"> E白板帳號 </option>
|
||||
<option value="Y"> 自建帳號 </option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-12" id="user_elab_div">
|
||||
<div class="form-group">
|
||||
<label for="cnCountry">帳號名稱</label> <select id="user_elabName" class="custom-select d-block w-100">
|
||||
<option value=""> Choose... </option>
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-12" id="user_name_div">
|
||||
<div class="form-group">
|
||||
<label for="user_name">使用者名稱</label> <input type="text" id="user_name" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-12" id="user_engname_div">
|
||||
<div class="form-group">
|
||||
<label for="user_engName">使用者英文名稱</label> <input type="text" id="user_engName" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-12" id="user_id_div">
|
||||
<div class="form-group">
|
||||
<label for="user_id">使用者帳號</label> <input type="text" id="user_id" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6" id="user_pwd_div">
|
||||
<div class="form-group">
|
||||
<label for="user_pwd">使用者密碼</label> <input type="password" id="user_pwd" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6" id="user_chkpwd_div">
|
||||
<div class="form-group">
|
||||
<label for="user_chkpwd">密碼再確認</label> <input type="password" id="user_chkpwd" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12" id="user_email_div">
|
||||
<div class="form-group">
|
||||
<label for="user_email">使用者Email</label> <input type="email" id="user_email" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12" id="user_perm_div">
|
||||
<div class="form-group">
|
||||
<label for="user_perm">帳號權限</label> <select id="user_perm" class="custom-select d-block w-100">
|
||||
<option value=""> Choose... </option>
|
||||
<option value="user"> 一般用戶 </option>
|
||||
<option value="system"> 管理用戶 </option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12" id="user_dept_div">
|
||||
<div class="form-group">
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.form-row -->
|
||||
</div><!-- /.modal-body -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="saveBtn" class="btn btn-primary">儲存</button> <button id="closeBtn" type="button" class="btn btn-light" data-dismiss="modal">關閉</button>
|
||||
</div><!-- /.modal-footer -->
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</form><!-- /.modal -->
|
||||
|
|
@ -1,261 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<!-- Required meta tags -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><!-- End Required meta tags -->
|
||||
<!-- Begin SEO tag -->
|
||||
<title> 報價單產生器 </title>
|
||||
<meta property="og:title" content="報價單產生器">
|
||||
<meta name="author" content="詹小弟">
|
||||
<meta property="og:locale" content="zh_TW">
|
||||
<meta name="description" content="Responsive admin theme build on top of Bootstrap 4">
|
||||
<meta property="og:description" content="Responsive admin theme build on top of Bootstrap 4">
|
||||
<link rel="canonical" href="https://uselooper.com">
|
||||
<meta property="og:url" content="https://uselooper.com">
|
||||
<meta property="og:site_name" content="Looper - Bootstrap 4 Admin Theme">
|
||||
<!-- End SEO tag -->
|
||||
<!-- FAVICONS -->
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="~/assets/apple-touch-icon.png">
|
||||
<link rel="shortcut icon" href="~/assets/favicon.ico">
|
||||
<meta name="theme-color" content="#3063A0"><!-- End FAVICONS -->
|
||||
<!-- GOOGLE FONT -->
|
||||
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:400,500,600" rel="stylesheet"><!-- End GOOGLE FONT -->
|
||||
<!-- BEGIN PLUGINS STYLES -->
|
||||
|
||||
<link rel="stylesheet" href="~/assets/vendor/open-iconic/font/css/open-iconic-bootstrap.min.css">
|
||||
<link rel="stylesheet" href="~/assets/vendor/fortawesome/fontawesome-free/css/all.min.css">
|
||||
<link rel="stylesheet" href="~/assets/vendor/select2/css/select2.min.css">
|
||||
<link rel="stylesheet" href="~/assets/vendor/tributejs/tribute.css">
|
||||
<link rel="stylesheet" href="~/assets/vendor/at.js/css/jquery.atwho.min.css">
|
||||
<link rel="stylesheet" href="~/assets/vendor/bootstrap-select/css/bootstrap-select.min.css">
|
||||
@* <link rel="stylesheet" href="~/assets/vendor/flatpickr/flatpickr.min.css"> *@
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
|
||||
|
||||
<link rel="stylesheet" href="~/assets/vendor/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css">
|
||||
<link rel="stylesheet" href="~/assets/vendor/bootstrap-touchspin/jquery.bootstrap-touchspin.min.css">
|
||||
<link rel="stylesheet" href="~/assets/vendor/nouisliderribute/nouislider.min.css">
|
||||
|
||||
<!-- END PLUGINS STYLES -->
|
||||
<!-- BEGIN THEME STYLES -->
|
||||
<link rel="stylesheet" href="~/assets/stylesheets/theme.css" data-skin="default">
|
||||
<link rel="stylesheet" href="~/assets/stylesheets/theme-dark.css" data-skin="dark">
|
||||
@RenderSection("Style", required: false)
|
||||
<link rel="stylesheet" href="~/assets/stylesheets/custom.css">
|
||||
<script>
|
||||
var skin = localStorage.getItem('skin') || 'default';
|
||||
var isCompact = JSON.parse(localStorage.getItem('hasCompactMenu'));
|
||||
var disabledSkinStylesheet = document.querySelector('link[data-skin]:not([data-skin="' + skin + '"])');
|
||||
// Disable unused skin immediately
|
||||
disabledSkinStylesheet.setAttribute('rel', '');
|
||||
disabledSkinStylesheet.setAttribute('disabled', true);
|
||||
// add flag class to html immediately
|
||||
if (isCompact == true) document.querySelector('html').classList.add('preparing-compact-menu');
|
||||
</script><!-- END THEME STYLES -->
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<!-- .app -->
|
||||
<div class="app">
|
||||
<!--[if lt IE 10]>
|
||||
<div class="page-message" role="alert">You are using an <strong>outdated</strong> browser. Please <a class="alert-link" href="http://browsehappy.com/">upgrade your browser</a> to improve your experience and security.</div>
|
||||
<![endif]-->
|
||||
<!-- .app-header -->
|
||||
<header class="app-header app-header-dark">
|
||||
<!-- .top-bar -->
|
||||
<div class="top-bar">
|
||||
<!-- .top-bar-brand -->
|
||||
<div class="top-bar-brand">
|
||||
<!-- toggle aside menu -->
|
||||
<button class="hamburger hamburger-squeeze mr-2" type="button" data-toggle="aside-menu" aria-label="toggle aside menu"><span class="hamburger-box"><span class="hamburger-inner"></span></span></button> <!-- /toggle aside menu -->
|
||||
<a href="index.html">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="28" viewbox="0 0 351 100">
|
||||
<defs>
|
||||
<path id="a" d="M156.538 45.644v1.04a6.347 6.347 0 0 1-1.847 3.98L127.708 77.67a6.338 6.338 0 0 1-3.862 1.839h-1.272a6.34 6.34 0 0 1-3.862-1.839L91.728 50.664a6.353 6.353 0 0 1 0-9l9.11-9.117-2.136-2.138a3.171 3.171 0 0 0-4.498 0L80.711 43.913a3.177 3.177 0 0 0-.043 4.453l-.002.003.048.047 24.733 24.754-4.497 4.5a6.339 6.339 0 0 1-3.863 1.84h-1.27a6.337 6.337 0 0 1-3.863-1.84L64.971 50.665a6.353 6.353 0 0 1 0-9l26.983-27.008a6.336 6.336 0 0 1 4.498-1.869c1.626 0 3.252.622 4.498 1.87l26.986 27.006a6.353 6.353 0 0 1 0 9l-9.11 9.117 2.136 2.138a3.171 3.171 0 0 0 4.498 0l13.49-13.504a3.177 3.177 0 0 0 .046-4.453l.002-.002-.047-.048-24.737-24.754 4.498-4.5a6.344 6.344 0 0 1 8.996 0l26.983 27.006a6.347 6.347 0 0 1 1.847 3.98zm-46.707-4.095l-2.362 2.364a3.178 3.178 0 0 0 0 4.501l2.362 2.364 2.361-2.364a3.178 3.178 0 0 0 0-4.501l-2.361-2.364z"></path>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="currentColor" fill-rule="nonzero" d="M39.252 80.385c-13.817 0-21.06-8.915-21.06-22.955V13.862H.81V.936h33.762V58.1c0 6.797 4.346 9.026 9.026 9.026 2.563 0 5.237-.446 8.58-1.783l3.677 12.034c-5.794 1.894-9.694 3.009-16.603 3.009zM164.213 99.55V23.78h13.372l1.225 5.571h.335c4.457-4.011 10.585-6.908 16.491-6.908 13.817 0 22.174 11.031 22.174 28.08 0 18.943-11.588 29.863-23.957 29.863-4.903 0-9.694-2.117-13.594-6.017h-.446l.78 9.025V99.55h-16.38zm25.852-32.537c6.128 0 10.92-4.903 10.92-16.268 0-9.917-3.232-14.932-10.14-14.932-3.566 0-6.797 1.56-10.252 5.126v22.397c3.12 2.674 6.686 3.677 9.472 3.677zm69.643 13.372c-17.272 0-30.643-10.586-30.643-28.972 0-18.163 13.928-28.971 28.748-28.971 17.049 0 26.075 11.477 26.075 26.52 0 3.008-.558 6.017-.78 7.354h-37.663c1.56 8.023 7.465 11.589 16.491 11.589 5.014 0 9.36-1.337 14.263-3.9l5.46 9.917c-6.351 4.011-14.597 6.463-21.951 6.463zm-1.338-45.463c-6.462 0-11.031 3.454-12.702 10.363h23.622c-.78-6.797-4.568-10.363-10.92-10.363zm44.238 44.126V23.779h13.371l1.337 12.034h.334c5.46-9.025 13.595-13.371 22.398-13.371 4.902 0 7.465.78 10.697 2.228l-3.343 13.706c-3.454-1.003-5.683-1.56-9.806-1.56-6.797 0-13.928 3.566-18.608 13.483v28.749h-16.38z"></path>
|
||||
<use class="fill-warning" xlink:href="#a"></use>
|
||||
</g>
|
||||
</svg>
|
||||
</a>
|
||||
</div><!-- /.top-bar-brand -->
|
||||
<!-- .top-bar-list -->
|
||||
<div class="top-bar-list">
|
||||
<!-- .top-bar-item -->
|
||||
<div class="top-bar-item px-2 d-md-none d-lg-none d-xl-none">
|
||||
<!-- toggle menu -->
|
||||
<button class="hamburger hamburger-squeeze" type="button" data-toggle="aside" aria-label="toggle menu"><span class="hamburger-box"><span class="hamburger-inner"></span></span></button> <!-- /toggle menu -->
|
||||
</div><!-- /.top-bar-item -->
|
||||
<!-- .top-bar-item -->
|
||||
<div class="top-bar-item top-bar-item-right px-0">
|
||||
|
||||
<!-- .btn-account -->
|
||||
<div class="dropdown d-none d-sm-flex">
|
||||
<button class="btn-account" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="user-avatar user-avatar-md"><img src="~/assets/images/avatars/unknown-profile.jpg" alt=""></span> <span class="account-summary pr-lg-4 d-none d-lg-block"><span class="account-name">@ViewData["user_name"]</span> <span class="account-description">@ViewData["user_permtype"]</span></span></button> <!-- .dropdown-menu -->
|
||||
<div class="dropdown-menu">
|
||||
<div class="dropdown-arrow d-lg-none" x-arrow=""></div>
|
||||
<div class="dropdown-arrow ml-3 d-none d-lg-block"></div>
|
||||
<h6 class="dropdown-header d-none d-sm-block d-lg-none"> Beni Arisandi </h6>@* <a class="dropdown-item" href="user-profile.html"><span class="dropdown-icon oi oi-person"></span> Profile</a> *@ <a class="dropdown-item" href="javascript: void();" onclick="logout()"><span class="dropdown-icon oi oi-account-logout"></span> Logout</a>
|
||||
@* <div class="dropdown-divider"></div><a class="dropdown-item" href="#">Help Center</a> <a class="dropdown-item" href="#">Ask Forum</a> <a class="dropdown-item" href="#">Keyboard Shortcuts</a> *@
|
||||
</div><!-- /.dropdown-menu -->
|
||||
</div><!-- /.btn-account -->
|
||||
</div><!-- /.top-bar-item -->
|
||||
</div><!-- /.top-bar-list -->
|
||||
</div><!-- /.top-bar -->
|
||||
</header><!-- /.app-header -->
|
||||
<!-- .app-aside -->
|
||||
<aside class="app-aside app-aside-expand-md app-aside-light">
|
||||
<!-- .aside-content -->
|
||||
<div class="aside-content">
|
||||
<!-- .aside-header -->
|
||||
<header class="aside-header d-block d-md-none">
|
||||
<!-- .btn-account -->
|
||||
<button class="btn-account" type="button" data-toggle="collapse" data-target="#dropdown-aside"><span class="user-avatar user-avatar-lg"><img src="~/assets/images/avatars/unknown-profile.jpg" alt=""></span> <span class="account-icon"><span class="fa fa-caret-down fa-lg"></span></span> <span class="account-summary"><span class="account-name">@ViewData["user_name"]</span> <span class="account-description">@ViewData["user_permtype"]</span></span></button> <!-- /.btn-account -->
|
||||
<!-- .dropdown-aside -->
|
||||
<div id="dropdown-aside" class="dropdown-aside collapse">
|
||||
<!-- dropdown-items -->
|
||||
<div class="pb-3">
|
||||
<a class="dropdown-item" href="user-profile.html"><span class="dropdown-icon oi oi-person"></span> Profile</a> <a class="dropdown-item" href="auth-signin-v1.html"><span class="dropdown-icon oi oi-account-logout"></span> Logout</a>
|
||||
<div class="dropdown-divider"></div><a class="dropdown-item" href="#">Help Center</a> <a class="dropdown-item" href="#">Ask Forum</a> <a class="dropdown-item" href="#">Keyboard Shortcuts</a>
|
||||
</div><!-- /dropdown-items -->
|
||||
</div><!-- /.dropdown-aside -->
|
||||
</header><!-- /.aside-header -->
|
||||
<!-- .aside-menu -->
|
||||
<div class="aside-menu overflow-hidden">
|
||||
<!-- .stacked-menu -->
|
||||
<nav id="stacked-menu" class="stacked-menu">
|
||||
<!-- .menu -->
|
||||
<ul class="menu">
|
||||
|
||||
<!-- .menu-item -->
|
||||
<li class="menu-item">
|
||||
<a href="~/Home/ProjectList" class="menu-link"><span class="menu-icon oi oi-box"></span> <span class="menu-text">報價單清單</span></a>
|
||||
</li><!-- /.menu-item -->
|
||||
<!-- .menu-item -->
|
||||
<li class="menu-item">
|
||||
<a href="~/Home/CompanyList" class="menu-link"><span class="menu-icon oi oi-box"></span> <span class="menu-text">客戶清單</span></a>
|
||||
</li><!-- /.menu-item -->
|
||||
<!-- .menu-item -->
|
||||
<li class="menu-item has-child" id="authMenu" style='@ViewData["authMenu"]'>
|
||||
<a href="#" class="menu-link"><span class="menu-icon oi oi-wrench"></span> <span class="menu-text">Auth</span></a> <!-- child menu -->
|
||||
<ul class="menu">
|
||||
<li class="menu-item">
|
||||
<a href="~/Home/ModalList" class="menu-link">報價範本管理</a>
|
||||
</li>
|
||||
<li class="menu-item">
|
||||
<a href="~/Home/RateList" class="menu-link">報價項目管理</a>
|
||||
</li>
|
||||
<li class="menu-item">
|
||||
<a href="~/Home/GroupList" class="menu-link">群組管理</a>
|
||||
</li>
|
||||
<li class="menu-item">
|
||||
<a href="~/Home/UserList" class="menu-link">使用者管理</a>
|
||||
</li>
|
||||
|
||||
</ul><!-- /child menu -->
|
||||
</li><!-- /.menu-item -->
|
||||
|
||||
</ul><!-- /.menu -->
|
||||
</nav><!-- /.stacked-menu -->
|
||||
</div><!-- /.aside-menu -->
|
||||
<!-- Skin changer -->
|
||||
<footer class="aside-footer border-top p-2">
|
||||
<button class="btn btn-light btn-block text-primary" data-toggle="skin"><span class="d-compact-menu-none">Night mode</span> <i class="fas fa-moon ml-1"></i></button>
|
||||
</footer><!-- /Skin changer -->
|
||||
</div><!-- /.aside-content -->
|
||||
</aside><!-- /.app-aside -->
|
||||
<!-- .app-main -->
|
||||
<main class="app-main">
|
||||
<!-- .wrapper -->
|
||||
<div class="wrapper">
|
||||
<!-- .page -->
|
||||
<div class="page">
|
||||
@RenderBody()
|
||||
</div><!-- /.page -->
|
||||
</div><!-- /.wrapper -->
|
||||
<!-- .app-footer -->
|
||||
<footer class="app-footer" style="display:none;">
|
||||
<ul class="list-inline">
|
||||
<li class="list-inline-item">
|
||||
<a class="text-muted" href="#">Support</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a class="text-muted" href="#">Help Center</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a class="text-muted" href="#">Privacy</a>
|
||||
</li>
|
||||
<li class="list-inline-item">
|
||||
<a class="text-muted" href="#">Terms of Service</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="copyright"> Copyright © 2023. All right reserved. </div>
|
||||
</footer><!-- /.app-footer -->
|
||||
</main><!-- /.app-main -->
|
||||
</div><!-- /.app -->
|
||||
<!-- BEGIN BASE JS -->
|
||||
<link href="https://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" rel="Stylesheet">
|
||||
<script src="~/assets/vendor/jquery/jquery.min.js"></script>
|
||||
<script src="~/assets/vendor/jquery.cookie/jquery.cookie.js"></script>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
|
||||
|
||||
<script src="~/assets/vendor/popper.js/umd/popper.min.js"></script>
|
||||
<script src="~/assets/vendor/bootstrap/js/bootstrap.min.js"></script> <!-- END BASE JS -->
|
||||
<!-- BEGIN PLUGINS JS -->
|
||||
<script src="~/assets/vendor/pace-progress/pace.min.js"></script>
|
||||
<script src="~/assets/vendor/stacked-menu/js/stacked-menu.min.js"></script>
|
||||
<script src="~/assets/vendor/perfect-scrollbar/perfect-scrollbar.min.js"></script>
|
||||
<script src="~/assets/vendor/bootstrap-select/js/bootstrap-select.min.js"></script>
|
||||
<script src="~/assets/vendor/masonry-layout/masonry.pkgd.min.js"></script>
|
||||
@* <script src="~/assets/vendor/flatpickr/flatpickr.min.js"></script>
|
||||
<script src="~/assets/vendor/flatpickr/plugins/monthSelect/index.js"></script> *@
|
||||
<script src="https://cdn.jsdelivr.net/npm/flatpickr/dist/plugins/monthSelect/index.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
|
||||
<script src="https://npmcdn.com/flatpickr@4.6.3/dist/l10n/zh-tw.js"></script>
|
||||
<script src="~/assets/vendor/flatpickr/l10n/zh-tw.js"></script>
|
||||
<script src="~/assets/vendor/wnumb/wNumb.min.js"></script>
|
||||
<script src="~/assets/vendor/nouisliderribute/nouislider.min.js"></script>
|
||||
<script src="~/assets/vendor/blueimp-file-upload/js/vendor/jquery.ui.widget.js"></script>
|
||||
<script src="~/assets/vendor/blueimp-load-image/js/load-image.all.min.js"></script>
|
||||
<script src="~/assets/vendor/blueimp-canvas-to-blob/js/canvas-to-blob.min.js"></script>
|
||||
<script src="~/assets/vendor/blueimp-file-upload/js/jquery.iframe-transport.js"></script>
|
||||
<script src="~/assets/vendor/blueimp-file-upload/js/jquery.fileupload.js"></script>
|
||||
<script src="~/assets/vendor/blueimp-file-upload/js/jquery.fileupload-process.js"></script>
|
||||
<script src="~/assets/vendor/blueimp-file-upload/js/jquery.fileupload-image.js"></script>
|
||||
<script src="~/assets/vendor/blueimp-file-upload/js/jquery.fileupload-audio.js"></script>
|
||||
<script src="~/assets/vendor/blueimp-file-upload/js/jquery.fileupload-video.js"></script>
|
||||
<script src="~/assets/vendor/blueimp-file-upload/js/jquery.fileupload-validate.js"></script>
|
||||
<script src="~/assets/vendor/bootstrap-touchspin/jquery.bootstrap-touchspin.min.js"></script>
|
||||
<script src="~/assets/vendor/easy-pie-chart/jquery.easypiechart.min.js"></script>
|
||||
<script src="~/assets/vendor/chart.js/Chart.min.js"></script>
|
||||
<script src="~/assets/vendor/sha256/sha256.js"></script>
|
||||
<!-- END PLUGINS JS -->
|
||||
<!-- BEGIN SELECT2-->
|
||||
<script src="~/assets/vendor/handlebars/handlebars.min.js"></script>
|
||||
<script src="~/assets/vendor/typeahead.js/bloodhound.min.js"></script>
|
||||
<script src="~/assets/vendor/typeahead.js/typeahead.bundle.min.js"></script>
|
||||
<script src="~/assets/vendor/typeahead.js/typeahead.jquery.min.js"></script>
|
||||
<script src="~/assets/vendor/select2/js/select2.full.min.js"></script>
|
||||
<script src="~/assets/vendor/tributejs/tribute.min.js"></script>
|
||||
<script src="~/assets/vendor/jquery.caret/jquery.caret.min.js"></script>
|
||||
<script src="~/assets/vendor/at.js/js/jquery.atwho.min.js"></script>
|
||||
<script src="~/assets/vendor/zxcvbn/zxcvbn.js"></script>
|
||||
<script src="~/assets/vendor/vanilla-text-mask/vanillaTextMask.js"></script>
|
||||
<script src="~/assets/vendor/text-mask-addons/textMaskAddons.js"></script>
|
||||
<!-- END SELECT2-->
|
||||
<script src="~/assets/javascript/custom/globalJS.js" asp-append-version="true"></script>
|
||||
<!-- BEGIN THEME JS -->
|
||||
<script src="~/assets/javascript/theme.min.js"></script> <!-- END THEME JS -->
|
||||
<script>
|
||||
flatpickr.localize(flatpickr.l10ns.zh_tw);
|
||||
</script>
|
||||
<script src="https://cdn.jsdelivr.net/gh/mgalante/jquery.redirect@master/jquery.redirect.js"></script>
|
||||
<!-- BEGIN PAGE LEVEL JS -->
|
||||
@RenderSection("Script", required: false)
|
||||
<!-- END PAGE LEVEL JS -->
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
|
||||
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
@using QuotationMaker
|
||||
@namespace QuotationMaker.Pages
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
@{
|
||||
//Layout = "_Layout";
|
||||
}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"DetailedErrors": true,
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"ConnectionStrings": {
|
||||
"SQLConnectionString": "Data Source=sql.bremen.com.tw;Initial Catalog=quotationmaker_db;User ID=quotationmaker_db;Password=4Wa_453hl;Max Pool Size=100;",
|
||||
"ElabConnectionString": "Data Source=sql.bremen.com.tw;database=elab;uid=elab;pwd=2#2k9Vfg",
|
||||
"DBConnectionString": "Data Source=sql.bremen.com.tw;Initial Catalog=prm;User ID=prm;Password=y6U6x?t5;Max Pool Size=1250;"
|
||||
},
|
||||
"Admin": {
|
||||
"uid": "system",
|
||||
"id": "admin",
|
||||
"pwd": "?Bremen!",
|
||||
"perm": "system"
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 8.3 KiB |
|
|
@ -1,517 +0,0 @@
|
|||
{
|
||||
"data": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "Tiger Nixon",
|
||||
"position": "System Architect",
|
||||
"salary": "$320,800",
|
||||
"start_date": "2011/04/25",
|
||||
"office": "Edinburgh",
|
||||
"extn": "5421"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "Garrett Winters",
|
||||
"position": "Accountant",
|
||||
"salary": "$170,750",
|
||||
"start_date": "2011/07/25",
|
||||
"office": "Tokyo",
|
||||
"extn": "8422"
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"name": "Ashton Cox",
|
||||
"position": "Junior Technical Author",
|
||||
"salary": "$86,000",
|
||||
"start_date": "2009/01/12",
|
||||
"office": "San Francisco",
|
||||
"extn": "1562"
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"name": "Cedric Kelly",
|
||||
"position": "Senior Javascript Developer",
|
||||
"salary": "$433,060",
|
||||
"start_date": "2012/03/29",
|
||||
"office": "Edinburgh",
|
||||
"extn": "6224"
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"name": "Airi Satou",
|
||||
"position": "Accountant",
|
||||
"salary": "$162,700",
|
||||
"start_date": "2008/11/28",
|
||||
"office": "Tokyo",
|
||||
"extn": "5407"
|
||||
},
|
||||
{
|
||||
"id": "6",
|
||||
"name": "Brielle Williamson",
|
||||
"position": "Integration Specialist",
|
||||
"salary": "$372,000",
|
||||
"start_date": "2012/12/02",
|
||||
"office": "New York",
|
||||
"extn": "4804"
|
||||
},
|
||||
{
|
||||
"id": "7",
|
||||
"name": "Herrod Chandler",
|
||||
"position": "Sales Assistant",
|
||||
"salary": "$137,500",
|
||||
"start_date": "2012/08/06",
|
||||
"office": "San Francisco",
|
||||
"extn": "9608"
|
||||
},
|
||||
{
|
||||
"id": "8",
|
||||
"name": "Rhona Davidson",
|
||||
"position": "Integration Specialist",
|
||||
"salary": "$327,900",
|
||||
"start_date": "2010/10/14",
|
||||
"office": "Tokyo",
|
||||
"extn": "6200"
|
||||
},
|
||||
{
|
||||
"id": "9",
|
||||
"name": "Colleen Hurst",
|
||||
"position": "Javascript Developer",
|
||||
"salary": "$205,500",
|
||||
"start_date": "2009/09/15",
|
||||
"office": "San Francisco",
|
||||
"extn": "2360"
|
||||
},
|
||||
{
|
||||
"id": "10",
|
||||
"name": "Sonya Frost",
|
||||
"position": "Software Engineer",
|
||||
"salary": "$103,600",
|
||||
"start_date": "2008/12/13",
|
||||
"office": "Edinburgh",
|
||||
"extn": "1667"
|
||||
},
|
||||
{
|
||||
"id": "11",
|
||||
"name": "Jena Gaines",
|
||||
"position": "Office Manager",
|
||||
"salary": "$90,560",
|
||||
"start_date": "2008/12/19",
|
||||
"office": "London",
|
||||
"extn": "3814"
|
||||
},
|
||||
{
|
||||
"id": "12",
|
||||
"name": "Quinn Flynn",
|
||||
"position": "Support Lead",
|
||||
"salary": "$342,000",
|
||||
"start_date": "2013/03/03",
|
||||
"office": "Edinburgh",
|
||||
"extn": "9497"
|
||||
},
|
||||
{
|
||||
"id": "13",
|
||||
"name": "Charde Marshall",
|
||||
"position": "Regional Director",
|
||||
"salary": "$470,600",
|
||||
"start_date": "2008/10/16",
|
||||
"office": "San Francisco",
|
||||
"extn": "6741"
|
||||
},
|
||||
{
|
||||
"id": "14",
|
||||
"name": "Haley Kennedy",
|
||||
"position": "Senior Marketing Designer",
|
||||
"salary": "$313,500",
|
||||
"start_date": "2012/12/18",
|
||||
"office": "London",
|
||||
"extn": "3597"
|
||||
},
|
||||
{
|
||||
"id": "15",
|
||||
"name": "Tatyana Fitzpatrick",
|
||||
"position": "Regional Director",
|
||||
"salary": "$385,750",
|
||||
"start_date": "2010/03/17",
|
||||
"office": "London",
|
||||
"extn": "1965"
|
||||
},
|
||||
{
|
||||
"id": "16",
|
||||
"name": "Michael Silva",
|
||||
"position": "Marketing Designer",
|
||||
"salary": "$198,500",
|
||||
"start_date": "2012/11/27",
|
||||
"office": "London",
|
||||
"extn": "1581"
|
||||
},
|
||||
{
|
||||
"id": "17",
|
||||
"name": "Paul Byrd",
|
||||
"position": "Chief Financial Officer (CFO)",
|
||||
"salary": "$725,000",
|
||||
"start_date": "2010/06/09",
|
||||
"office": "New York",
|
||||
"extn": "3059"
|
||||
},
|
||||
{
|
||||
"id": "18",
|
||||
"name": "Gloria Little",
|
||||
"position": "Systems Administrator",
|
||||
"salary": "$237,500",
|
||||
"start_date": "2009/04/10",
|
||||
"office": "New York",
|
||||
"extn": "1721"
|
||||
},
|
||||
{
|
||||
"id": "19",
|
||||
"name": "Bradley Greer",
|
||||
"position": "Software Engineer",
|
||||
"salary": "$132,000",
|
||||
"start_date": "2012/10/13",
|
||||
"office": "London",
|
||||
"extn": "2558"
|
||||
},
|
||||
{
|
||||
"id": "20",
|
||||
"name": "Dai Rios",
|
||||
"position": "Personnel Lead",
|
||||
"salary": "$217,500",
|
||||
"start_date": "2012/09/26",
|
||||
"office": "Edinburgh",
|
||||
"extn": "2290"
|
||||
},
|
||||
{
|
||||
"id": "21",
|
||||
"name": "Jenette Caldwell",
|
||||
"position": "Development Lead",
|
||||
"salary": "$345,000",
|
||||
"start_date": "2011/09/03",
|
||||
"office": "New York",
|
||||
"extn": "1937"
|
||||
},
|
||||
{
|
||||
"id": "22",
|
||||
"name": "Yuri Berry",
|
||||
"position": "Chief Marketing Officer (CMO)",
|
||||
"salary": "$675,000",
|
||||
"start_date": "2009/06/25",
|
||||
"office": "New York",
|
||||
"extn": "6154"
|
||||
},
|
||||
{
|
||||
"id": "23",
|
||||
"name": "Caesar Vance",
|
||||
"position": "Pre-Sales Support",
|
||||
"salary": "$106,450",
|
||||
"start_date": "2011/12/12",
|
||||
"office": "New York",
|
||||
"extn": "8330"
|
||||
},
|
||||
{
|
||||
"id": "24",
|
||||
"name": "Doris Wilder",
|
||||
"position": "Sales Assistant",
|
||||
"salary": "$85,600",
|
||||
"start_date": "2010/09/20",
|
||||
"office": "Sidney",
|
||||
"extn": "3023"
|
||||
},
|
||||
{
|
||||
"id": "25",
|
||||
"name": "Angelica Ramos",
|
||||
"position": "Chief Executive Officer (CEO)",
|
||||
"salary": "$1,200,000",
|
||||
"start_date": "2009/10/09",
|
||||
"office": "London",
|
||||
"extn": "5797"
|
||||
},
|
||||
{
|
||||
"id": "26",
|
||||
"name": "Gavin Joyce",
|
||||
"position": "Developer",
|
||||
"salary": "$92,575",
|
||||
"start_date": "2010/12/22",
|
||||
"office": "Edinburgh",
|
||||
"extn": "8822"
|
||||
},
|
||||
{
|
||||
"id": "27",
|
||||
"name": "Jennifer Chang",
|
||||
"position": "Regional Director",
|
||||
"salary": "$357,650",
|
||||
"start_date": "2010/11/14",
|
||||
"office": "Singapore",
|
||||
"extn": "9239"
|
||||
},
|
||||
{
|
||||
"id": "28",
|
||||
"name": "Brenden Wagner",
|
||||
"position": "Software Engineer",
|
||||
"salary": "$206,850",
|
||||
"start_date": "2011/06/07",
|
||||
"office": "San Francisco",
|
||||
"extn": "1314"
|
||||
},
|
||||
{
|
||||
"id": "29",
|
||||
"name": "Fiona Green",
|
||||
"position": "Chief Operating Officer (COO)",
|
||||
"salary": "$850,000",
|
||||
"start_date": "2010/03/11",
|
||||
"office": "San Francisco",
|
||||
"extn": "2947"
|
||||
},
|
||||
{
|
||||
"id": "30",
|
||||
"name": "Shou Itou",
|
||||
"position": "Regional Marketing",
|
||||
"salary": "$163,000",
|
||||
"start_date": "2011/08/14",
|
||||
"office": "Tokyo",
|
||||
"extn": "8899"
|
||||
},
|
||||
{
|
||||
"id": "31",
|
||||
"name": "Michelle House",
|
||||
"position": "Integration Specialist",
|
||||
"salary": "$95,400",
|
||||
"start_date": "2011/06/02",
|
||||
"office": "Sidney",
|
||||
"extn": "2769"
|
||||
},
|
||||
{
|
||||
"id": "32",
|
||||
"name": "Suki Burks",
|
||||
"position": "Developer",
|
||||
"salary": "$114,500",
|
||||
"start_date": "2009/10/22",
|
||||
"office": "London",
|
||||
"extn": "6832"
|
||||
},
|
||||
{
|
||||
"id": "33",
|
||||
"name": "Prescott Bartlett",
|
||||
"position": "Technical Author",
|
||||
"salary": "$145,000",
|
||||
"start_date": "2011/05/07",
|
||||
"office": "London",
|
||||
"extn": "3606"
|
||||
},
|
||||
{
|
||||
"id": "34",
|
||||
"name": "Gavin Cortez",
|
||||
"position": "Team Leader",
|
||||
"salary": "$235,500",
|
||||
"start_date": "2008/10/26",
|
||||
"office": "San Francisco",
|
||||
"extn": "2860"
|
||||
},
|
||||
{
|
||||
"id": "35",
|
||||
"name": "Martena Mccray",
|
||||
"position": "Post-Sales support",
|
||||
"salary": "$324,050",
|
||||
"start_date": "2011/03/09",
|
||||
"office": "Edinburgh",
|
||||
"extn": "8240"
|
||||
},
|
||||
{
|
||||
"id": "36",
|
||||
"name": "Unity Butler",
|
||||
"position": "Marketing Designer",
|
||||
"salary": "$85,675",
|
||||
"start_date": "2009/12/09",
|
||||
"office": "San Francisco",
|
||||
"extn": "5384"
|
||||
},
|
||||
{
|
||||
"id": "37",
|
||||
"name": "Howard Hatfield",
|
||||
"position": "Office Manager",
|
||||
"salary": "$164,500",
|
||||
"start_date": "2008/12/16",
|
||||
"office": "San Francisco",
|
||||
"extn": "7031"
|
||||
},
|
||||
{
|
||||
"id": "38",
|
||||
"name": "Hope Fuentes",
|
||||
"position": "Secretary",
|
||||
"salary": "$109,850",
|
||||
"start_date": "2010/02/12",
|
||||
"office": "San Francisco",
|
||||
"extn": "6318"
|
||||
},
|
||||
{
|
||||
"id": "39",
|
||||
"name": "Vivian Harrell",
|
||||
"position": "Financial Controller",
|
||||
"salary": "$452,500",
|
||||
"start_date": "2009/02/14",
|
||||
"office": "San Francisco",
|
||||
"extn": "9422"
|
||||
},
|
||||
{
|
||||
"id": "40",
|
||||
"name": "Timothy Mooney",
|
||||
"position": "Office Manager",
|
||||
"salary": "$136,200",
|
||||
"start_date": "2008/12/11",
|
||||
"office": "London",
|
||||
"extn": "7580"
|
||||
},
|
||||
{
|
||||
"id": "41",
|
||||
"name": "Jackson Bradshaw",
|
||||
"position": "Director",
|
||||
"salary": "$645,750",
|
||||
"start_date": "2008/09/26",
|
||||
"office": "New York",
|
||||
"extn": "1042"
|
||||
},
|
||||
{
|
||||
"id": "42",
|
||||
"name": "Olivia Liang",
|
||||
"position": "Support Engineer",
|
||||
"salary": "$234,500",
|
||||
"start_date": "2011/02/03",
|
||||
"office": "Singapore",
|
||||
"extn": "2120"
|
||||
},
|
||||
{
|
||||
"id": "43",
|
||||
"name": "Bruno Nash",
|
||||
"position": "Software Engineer",
|
||||
"salary": "$163,500",
|
||||
"start_date": "2011/05/03",
|
||||
"office": "London",
|
||||
"extn": "6222"
|
||||
},
|
||||
{
|
||||
"id": "44",
|
||||
"name": "Sakura Yamamoto",
|
||||
"position": "Support Engineer",
|
||||
"salary": "$139,575",
|
||||
"start_date": "2009/08/19",
|
||||
"office": "Tokyo",
|
||||
"extn": "9383"
|
||||
},
|
||||
{
|
||||
"id": "45",
|
||||
"name": "Thor Walton",
|
||||
"position": "Developer",
|
||||
"salary": "$98,540",
|
||||
"start_date": "2013/08/11",
|
||||
"office": "New York",
|
||||
"extn": "8327"
|
||||
},
|
||||
{
|
||||
"id": "46",
|
||||
"name": "Finn Camacho",
|
||||
"position": "Support Engineer",
|
||||
"salary": "$87,500",
|
||||
"start_date": "2009/07/07",
|
||||
"office": "San Francisco",
|
||||
"extn": "2927"
|
||||
},
|
||||
{
|
||||
"id": "47",
|
||||
"name": "Serge Baldwin",
|
||||
"position": "Data Coordinator",
|
||||
"salary": "$138,575",
|
||||
"start_date": "2012/04/09",
|
||||
"office": "Singapore",
|
||||
"extn": "8352"
|
||||
},
|
||||
{
|
||||
"id": "48",
|
||||
"name": "Zenaida Frank",
|
||||
"position": "Software Engineer",
|
||||
"salary": "$125,250",
|
||||
"start_date": "2010/01/04",
|
||||
"office": "New York",
|
||||
"extn": "7439"
|
||||
},
|
||||
{
|
||||
"id": "49",
|
||||
"name": "Zorita Serrano",
|
||||
"position": "Software Engineer",
|
||||
"salary": "$115,000",
|
||||
"start_date": "2012/06/01",
|
||||
"office": "San Francisco",
|
||||
"extn": "4389"
|
||||
},
|
||||
{
|
||||
"id": "50",
|
||||
"name": "Jennifer Acosta",
|
||||
"position": "Junior Javascript Developer",
|
||||
"salary": "$75,650",
|
||||
"start_date": "2013/02/01",
|
||||
"office": "Edinburgh",
|
||||
"extn": "3431"
|
||||
},
|
||||
{
|
||||
"id": "51",
|
||||
"name": "Cara Stevens",
|
||||
"position": "Sales Assistant",
|
||||
"salary": "$145,600",
|
||||
"start_date": "2011/12/06",
|
||||
"office": "New York",
|
||||
"extn": "3990"
|
||||
},
|
||||
{
|
||||
"id": "52",
|
||||
"name": "Hermione Butler",
|
||||
"position": "Regional Director",
|
||||
"salary": "$356,250",
|
||||
"start_date": "2011/03/21",
|
||||
"office": "London",
|
||||
"extn": "1016"
|
||||
},
|
||||
{
|
||||
"id": "53",
|
||||
"name": "Lael Greer",
|
||||
"position": "Systems Administrator",
|
||||
"salary": "$103,500",
|
||||
"start_date": "2009/02/27",
|
||||
"office": "London",
|
||||
"extn": "6733"
|
||||
},
|
||||
{
|
||||
"id": "54",
|
||||
"name": "Jonas Alexander",
|
||||
"position": "Developer",
|
||||
"salary": "$86,500",
|
||||
"start_date": "2010/07/14",
|
||||
"office": "San Francisco",
|
||||
"extn": "8196"
|
||||
},
|
||||
{
|
||||
"id": "55",
|
||||
"name": "Shad Decker",
|
||||
"position": "Regional Director",
|
||||
"salary": "$183,000",
|
||||
"start_date": "2008/11/13",
|
||||
"office": "Edinburgh",
|
||||
"extn": "6373"
|
||||
},
|
||||
{
|
||||
"id": "56",
|
||||
"name": "Michael Bruce",
|
||||
"position": "Javascript Developer",
|
||||
"salary": "$183,000",
|
||||
"start_date": "2011/06/27",
|
||||
"office": "Singapore",
|
||||
"extn": "5384"
|
||||
},
|
||||
{
|
||||
"id": "57",
|
||||
"name": "Donna Snider",
|
||||
"position": "Customer Support",
|
||||
"salary": "$112,000",
|
||||
"start_date": "2011/01/25",
|
||||
"office": "New York",
|
||||
"extn": "4226"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
["Andorra","United Arab Emirates","Afghanistan","Antigua and Barbuda","Anguilla","Albania","Armenia","Angola","Antarctica","Argentina","American Samoa","Austria","Australia","Aruba","Åland","Azerbaijan","Bosnia and Herzegovina","Barbados","Bangladesh","Belgium","Burkina Faso","Bulgaria","Bahrain","Burundi","Benin","Saint Barthélemy","Bermuda","Brunei","Bolivia","Bonaire","Brazil","Bahamas","Bhutan","Bouvet Island","Botswana","Belarus","Belize","Canada","Cocos [Keeling] Islands","Congo","Central African Republic","Republic of the Congo","Switzerland","Ivory Coast","Cook Islands","Chile","Cameroon","China","Colombia","Costa Rica","Cuba","Cape Verde","Curacao","Christmas Island","Cyprus","Czechia","Germany","Djibouti","Denmark","Dominica","Dominican Republic","Algeria","Ecuador","Estonia","Egypt","Western Sahara","Eritrea","Spain","Ethiopia","Finland","Fiji","Falkland Islands","Micronesia","Faroe Islands","France","Gabon","United Kingdom","Grenada","Georgia","French Guiana","Guernsey","Ghana","Gibraltar","Greenland","Gambia","Guinea","Guadeloupe","Equatorial Guinea","Greece","South Georgia and the South Sandwich Islands","Guatemala","Guam","Guinea-Bissau","Guyana","Hong Kong","Heard Island and McDonald Islands","Honduras","Croatia","Haiti","Hungary","Indonesia","Ireland","Israel","Isle of Man","India","British Indian Ocean Territory","Iraq","Iran","Iceland","Italy","Jersey","Jamaica","Jordan","Japan","Kenya","Kyrgyzstan","Cambodia","Kiribati","Comoros","Saint Kitts and Nevis","North Korea","South Korea","Kuwait","Cayman Islands","Kazakhstan","Laos","Lebanon","Saint Lucia","Liechtenstein","Sri Lanka","Liberia","Lesotho","Lithuania","Luxembourg","Latvia","Libya","Morocco","Monaco","Moldova","Montenegro","Saint Martin","Madagascar","Marshall Islands","Macedonia","Mali","Myanmar [Burma]","Mongolia","Macao","Northern Mariana Islands","Martinique","Mauritania","Montserrat","Malta","Mauritius","Maldives","Malawi","Mexico","Malaysia","Mozambique","Namibia","New Caledonia","Niger","Norfolk Island","Nigeria","Nicaragua","Netherlands","Norway","Nepal","Nauru","Niue","New Zealand","Oman","Panama","Peru","French Polynesia","Papua New Guinea","Philippines","Pakistan","Poland","Saint Pierre and Miquelon","Pitcairn Islands","Puerto Rico","Palestine","Portugal","Palau","Paraguay","Qatar","Réunion","Romania","Serbia","Russia","Rwanda","Saudi Arabia","Solomon Islands","Seychelles","Sudan","Sweden","Singapore","Saint Helena","Slovenia","Svalbard and Jan Mayen","Slovakia","Sierra Leone","San Marino","Senegal","Somalia","Suriname","South Sudan","São Tomé and Príncipe","El Salvador","Sint Maarten","Syria","Swaziland","Turks and Caicos Islands","Chad","French Southern Territories","Togo","Thailand","Tajikistan","Tokelau","East Timor","Turkmenistan","Tunisia","Tonga","Turkey","Trinidad and Tobago","Tuvalu","Taiwan","Tanzania","Ukraine","Uganda","U.S. Minor Outlying Islands","United States","Uruguay","Uzbekistan","Vatican City","Saint Vincent and the Grenadines","Venezuela","British Virgin Islands","U.S. Virgin Islands","Vietnam","Vanuatu","Wallis and Futuna","Samoa","Kosovo","Yemen","Mayotte","South Africa","Zambia","Zimbabwe"]
|
||||
|
|
@ -1,78 +0,0 @@
|
|||
[
|
||||
{
|
||||
"title": "Redesign website",
|
||||
"start": "2020-04-01",
|
||||
"textColor": "rgb(52, 108, 176)",
|
||||
"backgroundColor": "rgba(52, 108, 176, .12)",
|
||||
"borderColor": "rgb(52, 108, 176)"
|
||||
},
|
||||
{
|
||||
"title": "Write new content",
|
||||
"start": "2020-04-07",
|
||||
"end": "2020-04-10",
|
||||
"textColor": "rgb(0, 162, 138)",
|
||||
"backgroundColor": "rgba(0, 162, 138, .12)",
|
||||
"borderColor": "rgb(0, 162, 138)"
|
||||
},
|
||||
{
|
||||
"id": 999,
|
||||
"title": "Apply new styles",
|
||||
"start": "2020-04-09T16:00:00",
|
||||
"textColor": "rgb(95, 75, 139)",
|
||||
"backgroundColor": "rgba(95, 75, 139, .12)",
|
||||
"borderColor": "rgb(95, 75, 139)"
|
||||
},
|
||||
{
|
||||
"id": 999,
|
||||
"title": "Review",
|
||||
"start": "2020-04-16T16:00:00",
|
||||
"textColor": "rgb(0, 162, 138)",
|
||||
"backgroundColor": "rgba(0, 162, 138, .12)",
|
||||
"borderColor": "rgb(0, 162, 138)"
|
||||
},
|
||||
{
|
||||
"title": "Conference",
|
||||
"start": "2020-04-11",
|
||||
"end": "2020-04-13",
|
||||
"textColor": "rgb(1, 121, 168)",
|
||||
"backgroundColor": "rgba(1, 121, 168, .12)",
|
||||
"borderColor": "rgb(1, 121, 168)"
|
||||
},
|
||||
{
|
||||
"title": "Meeting",
|
||||
"start": "2020-04-12T10:30:00",
|
||||
"end": "2020-04-12T12:30:00",
|
||||
"textColor": "rgb(249, 172, 47)",
|
||||
"backgroundColor": "rgba(249, 172, 47, .12)",
|
||||
"borderColor": "rgb(249, 172, 47)"
|
||||
},
|
||||
{
|
||||
"title": "Deploy",
|
||||
"start": "2020-04-12T12:00:00",
|
||||
"textColor": "rgb(0, 162, 138)",
|
||||
"backgroundColor": "rgba(0, 162, 138, .12)",
|
||||
"borderColor": "rgb(0, 162, 138)"
|
||||
},
|
||||
{
|
||||
"title": "Meeting",
|
||||
"start": "2020-04-25T14:30:00",
|
||||
"textColor": "rgb(249, 172, 47)",
|
||||
"backgroundColor": "rgba(249, 172, 47, .12)",
|
||||
"borderColor": "rgb(249, 172, 47)"
|
||||
},
|
||||
{
|
||||
"title": "Go live!",
|
||||
"start": "2020-04-30T07:00:00",
|
||||
"textColor": "rgb(183, 107, 163)",
|
||||
"backgroundColor": "rgba(183, 107, 163, .12)",
|
||||
"borderColor": "rgb(183, 107, 163)"
|
||||
},
|
||||
{
|
||||
"title": "Click for Project",
|
||||
"url": "page-project.html",
|
||||
"start": "2020-04-28",
|
||||
"textColor": "rgb(95, 75, 139)",
|
||||
"backgroundColor": "rgba(95, 75, 139, .12)",
|
||||
"borderColor": "rgb(95, 75, 139)"
|
||||
}
|
||||
]
|
||||
|
|
@ -1,452 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1961",
|
||||
"value": "West Side Story",
|
||||
"tokens": [
|
||||
"West",
|
||||
"Side",
|
||||
"Story"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1962",
|
||||
"value": "Lawrence of Arabia",
|
||||
"tokens": [
|
||||
"Lawrence",
|
||||
"of",
|
||||
"Arabia"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1963",
|
||||
"value": "Tom Jones",
|
||||
"tokens": [
|
||||
"Tom",
|
||||
"Jones"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1964",
|
||||
"value": "My Fair Lady",
|
||||
"tokens": [
|
||||
"My",
|
||||
"Fair",
|
||||
"Lady"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1965",
|
||||
"value": "The Sound of Music",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Sound",
|
||||
"of",
|
||||
"Music"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1966",
|
||||
"value": "A Man for All Seasons",
|
||||
"tokens": [
|
||||
"A",
|
||||
"Man",
|
||||
"for",
|
||||
"All",
|
||||
"Seasons"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1967",
|
||||
"value": "In the Heat of the Night",
|
||||
"tokens": [
|
||||
"In",
|
||||
"the",
|
||||
"Heat",
|
||||
"of",
|
||||
"the",
|
||||
"Night"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1968",
|
||||
"value": "Oliver!",
|
||||
"tokens": [
|
||||
"Oliver!"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1969",
|
||||
"value": "Midnight Cowboy",
|
||||
"tokens": [
|
||||
"Midnight",
|
||||
"Cowboy"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1970",
|
||||
"value": "Patton",
|
||||
"tokens": [
|
||||
"Patton"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1971",
|
||||
"value": "The French Connection",
|
||||
"tokens": [
|
||||
"The",
|
||||
"French",
|
||||
"Connection"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1972",
|
||||
"value": "The Godfather",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Godfather"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1973",
|
||||
"value": "The Sting",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Sting"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1974",
|
||||
"value": "The Godfather Part II",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Godfather",
|
||||
"Part",
|
||||
"II"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1975",
|
||||
"value": "One Flew over the Cuckoo's Nest",
|
||||
"tokens": [
|
||||
"One",
|
||||
"Flew",
|
||||
"over",
|
||||
"the",
|
||||
"Cuckoo's",
|
||||
"Nest"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1976",
|
||||
"value": "Rocky",
|
||||
"tokens": [
|
||||
"Rocky"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1977",
|
||||
"value": "Annie Hall",
|
||||
"tokens": [
|
||||
"Annie",
|
||||
"Hall"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1978",
|
||||
"value": "The Deer Hunter",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Deer",
|
||||
"Hunter"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1979",
|
||||
"value": "Kramer vs. Kramer",
|
||||
"tokens": [
|
||||
"Kramer",
|
||||
"vs.",
|
||||
"Kramer"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1980",
|
||||
"value": "Ordinary People",
|
||||
"tokens": [
|
||||
"Ordinary",
|
||||
"People"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1981",
|
||||
"value": "Chariots of Fire",
|
||||
"tokens": [
|
||||
"Chariots",
|
||||
"of",
|
||||
"Fire"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1982",
|
||||
"value": "Gandhi",
|
||||
"tokens": [
|
||||
"Gandhi"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1983",
|
||||
"value": "Terms of Endearment",
|
||||
"tokens": [
|
||||
"Terms",
|
||||
"of",
|
||||
"Endearment"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1984",
|
||||
"value": "Amadeus",
|
||||
"tokens": [
|
||||
"Amadeus"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1985",
|
||||
"value": "Out of Africa",
|
||||
"tokens": [
|
||||
"Out",
|
||||
"of",
|
||||
"Africa"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1986",
|
||||
"value": "Platoon",
|
||||
"tokens": [
|
||||
"Platoon"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1987",
|
||||
"value": "The Last Emperor",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Last",
|
||||
"Emperor"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1988",
|
||||
"value": "Rain Man",
|
||||
"tokens": [
|
||||
"Rain",
|
||||
"Man"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1989",
|
||||
"value": "Driving Miss Daisy",
|
||||
"tokens": [
|
||||
"Driving",
|
||||
"Miss",
|
||||
"Daisy"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1990",
|
||||
"value": "Dances With Wolves",
|
||||
"tokens": [
|
||||
"Dances",
|
||||
"With",
|
||||
"Wolves"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1991",
|
||||
"value": "The Silence of the Lambs",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Silence",
|
||||
"of",
|
||||
"the",
|
||||
"Lambs"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1992",
|
||||
"value": "Unforgiven",
|
||||
"tokens": [
|
||||
"Unforgiven"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1993",
|
||||
"value": "Schindler’s List",
|
||||
"tokens": [
|
||||
"Schindler’s",
|
||||
"List"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1994",
|
||||
"value": "Forrest Gump",
|
||||
"tokens": [
|
||||
"Forrest",
|
||||
"Gump"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1995",
|
||||
"value": "Braveheart",
|
||||
"tokens": [
|
||||
"Braveheart"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1996",
|
||||
"value": "The English Patient",
|
||||
"tokens": [
|
||||
"The",
|
||||
"English",
|
||||
"Patient"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1997",
|
||||
"value": "Titanic",
|
||||
"tokens": [
|
||||
"Titanic"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1998",
|
||||
"value": "Shakespeare in Love",
|
||||
"tokens": [
|
||||
"Shakespeare",
|
||||
"in",
|
||||
"Love"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1999",
|
||||
"value": "American Beauty",
|
||||
"tokens": [
|
||||
"American",
|
||||
"Beauty"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "2000",
|
||||
"value": "Gladiator",
|
||||
"tokens": [
|
||||
"Gladiator"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "2001",
|
||||
"value": "A Beautiful Mind",
|
||||
"tokens": [
|
||||
"A",
|
||||
"Beautiful",
|
||||
"Mind"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "2002",
|
||||
"value": "Chicago",
|
||||
"tokens": [
|
||||
"Chicago"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "2003",
|
||||
"value": "The Lord of the Rings: The Return of the King",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Lord",
|
||||
"of",
|
||||
"the",
|
||||
"Rings:",
|
||||
"The",
|
||||
"Return",
|
||||
"of",
|
||||
"the",
|
||||
"King"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "2004",
|
||||
"value": "Million Dollar Baby",
|
||||
"tokens": [
|
||||
"Million",
|
||||
"Dollar",
|
||||
"Baby"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "2005",
|
||||
"value": "Crash",
|
||||
"tokens": [
|
||||
"Crash"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "2006",
|
||||
"value": "The Departed",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Departed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "2007",
|
||||
"value": "No Country for Old Men",
|
||||
"tokens": [
|
||||
"No",
|
||||
"Country",
|
||||
"for",
|
||||
"Old",
|
||||
"Men"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "2008",
|
||||
"value": "Slumdog Millionaire",
|
||||
"tokens": [
|
||||
"Slumdog",
|
||||
"Millionaire"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "2009",
|
||||
"value": "The Hurt Locker",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Hurt",
|
||||
"Locker"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "2010",
|
||||
"value": "The King's Speech",
|
||||
"tokens": [
|
||||
"The",
|
||||
"King's",
|
||||
"Speech"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "2011",
|
||||
"value": "The Artist",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Artist"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "2012",
|
||||
"value": "Argo",
|
||||
"tokens": [
|
||||
"Argo"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1956",
|
||||
"value": "Around the World in 80 Days",
|
||||
"tokens": [
|
||||
"Around",
|
||||
"the",
|
||||
"World",
|
||||
"in",
|
||||
"80",
|
||||
"Days"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1956",
|
||||
"value": "Around the World in 80 Days",
|
||||
"tokens": [
|
||||
"Around",
|
||||
"the",
|
||||
"World",
|
||||
"in",
|
||||
"80",
|
||||
"Days"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1929/1930",
|
||||
"value": "All Quiet on the Western Front",
|
||||
"tokens": [
|
||||
"All",
|
||||
"Quiet",
|
||||
"on",
|
||||
"the",
|
||||
"Western",
|
||||
"Front"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1947",
|
||||
"value": "Gentleman's Agreement",
|
||||
"tokens": [
|
||||
"Gentleman's",
|
||||
"Agreement"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1949",
|
||||
"value": "All the Kings Men",
|
||||
"tokens": [
|
||||
"All",
|
||||
"the",
|
||||
"Kings",
|
||||
"Men"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1950",
|
||||
"value": "All About Eve",
|
||||
"tokens": [
|
||||
"All",
|
||||
"About",
|
||||
"Eve"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1951",
|
||||
"value": "An American in Paris",
|
||||
"tokens": [
|
||||
"An",
|
||||
"American",
|
||||
"in",
|
||||
"Paris"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1956",
|
||||
"value": "Around the World in 80 Days",
|
||||
"tokens": [
|
||||
"Around",
|
||||
"the",
|
||||
"World",
|
||||
"in",
|
||||
"80",
|
||||
"Days"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1960",
|
||||
"value": "The Apartment",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Apartment"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1950",
|
||||
"value": "All About Eve",
|
||||
"tokens": [
|
||||
"All",
|
||||
"About",
|
||||
"Eve"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1950",
|
||||
"value": "All About Eve",
|
||||
"tokens": [
|
||||
"All",
|
||||
"About",
|
||||
"Eve"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1950",
|
||||
"value": "All About Eve",
|
||||
"tokens": [
|
||||
"All",
|
||||
"About",
|
||||
"Eve"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1950",
|
||||
"value": "All About Eve",
|
||||
"tokens": [
|
||||
"All",
|
||||
"About",
|
||||
"Eve"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1947",
|
||||
"value": "Gentleman's Agreement",
|
||||
"tokens": [
|
||||
"Gentleman's",
|
||||
"Agreement"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1947",
|
||||
"value": "Gentleman's Agreement",
|
||||
"tokens": [
|
||||
"Gentleman's",
|
||||
"Agreement"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1947",
|
||||
"value": "Gentleman's Agreement",
|
||||
"tokens": [
|
||||
"Gentleman's",
|
||||
"Agreement"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1947",
|
||||
"value": "Gentleman's Agreement",
|
||||
"tokens": [
|
||||
"Gentleman's",
|
||||
"Agreement"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1947",
|
||||
"value": "Gentleman's Agreement",
|
||||
"tokens": [
|
||||
"Gentleman's",
|
||||
"Agreement"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1947",
|
||||
"value": "Gentleman's Agreement",
|
||||
"tokens": [
|
||||
"Gentleman's",
|
||||
"Agreement"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1947",
|
||||
"value": "Gentleman's Agreement",
|
||||
"tokens": [
|
||||
"Gentleman's",
|
||||
"Agreement"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1947",
|
||||
"value": "Gentleman's Agreement",
|
||||
"tokens": [
|
||||
"Gentleman's",
|
||||
"Agreement"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1929/1930",
|
||||
"value": "All Quiet on the Western Front",
|
||||
"tokens": [
|
||||
"All",
|
||||
"Quiet",
|
||||
"on",
|
||||
"the",
|
||||
"Western",
|
||||
"Front"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1949",
|
||||
"value": "All the Kings Men",
|
||||
"tokens": [
|
||||
"All",
|
||||
"the",
|
||||
"Kings",
|
||||
"Men"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1950",
|
||||
"value": "All About Eve",
|
||||
"tokens": [
|
||||
"All",
|
||||
"About",
|
||||
"Eve"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1929/1930",
|
||||
"value": "All Quiet on the Western Front",
|
||||
"tokens": [
|
||||
"All",
|
||||
"Quiet",
|
||||
"on",
|
||||
"the",
|
||||
"Western",
|
||||
"Front"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1949",
|
||||
"value": "All the Kings Men",
|
||||
"tokens": [
|
||||
"All",
|
||||
"the",
|
||||
"Kings",
|
||||
"Men"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1950",
|
||||
"value": "All About Eve",
|
||||
"tokens": [
|
||||
"All",
|
||||
"About",
|
||||
"Eve"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1951",
|
||||
"value": "An American in Paris",
|
||||
"tokens": [
|
||||
"An",
|
||||
"American",
|
||||
"in",
|
||||
"Paris"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1951",
|
||||
"value": "An American in Paris",
|
||||
"tokens": [
|
||||
"An",
|
||||
"American",
|
||||
"in",
|
||||
"Paris"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1951",
|
||||
"value": "An American in Paris",
|
||||
"tokens": [
|
||||
"An",
|
||||
"American",
|
||||
"in",
|
||||
"Paris"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1951",
|
||||
"value": "An American in Paris",
|
||||
"tokens": [
|
||||
"An",
|
||||
"American",
|
||||
"in",
|
||||
"Paris"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1951",
|
||||
"value": "An American in Paris",
|
||||
"tokens": [
|
||||
"An",
|
||||
"American",
|
||||
"in",
|
||||
"Paris"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1951",
|
||||
"value": "An American in Paris",
|
||||
"tokens": [
|
||||
"An",
|
||||
"American",
|
||||
"in",
|
||||
"Paris"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1951",
|
||||
"value": "An American in Paris",
|
||||
"tokens": [
|
||||
"An",
|
||||
"American",
|
||||
"in",
|
||||
"Paris"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1951",
|
||||
"value": "An American in Paris",
|
||||
"tokens": [
|
||||
"An",
|
||||
"American",
|
||||
"in",
|
||||
"Paris"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1960",
|
||||
"value": "The Apartment",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Apartment"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1960",
|
||||
"value": "The Apartment",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Apartment"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1960",
|
||||
"value": "The Apartment",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Apartment"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1960",
|
||||
"value": "The Apartment",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Apartment"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1960",
|
||||
"value": "The Apartment",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Apartment"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1960",
|
||||
"value": "The Apartment",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Apartment"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1960",
|
||||
"value": "The Apartment",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Apartment"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1960",
|
||||
"value": "The Apartment",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Apartment"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1956",
|
||||
"value": "Around the World in 80 Days",
|
||||
"tokens": [
|
||||
"Around",
|
||||
"the",
|
||||
"World",
|
||||
"in",
|
||||
"80",
|
||||
"Days"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1956",
|
||||
"value": "Around the World in 80 Days",
|
||||
"tokens": [
|
||||
"Around",
|
||||
"the",
|
||||
"World",
|
||||
"in",
|
||||
"80",
|
||||
"Days"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1956",
|
||||
"value": "Around the World in 80 Days",
|
||||
"tokens": [
|
||||
"Around",
|
||||
"the",
|
||||
"World",
|
||||
"in",
|
||||
"80",
|
||||
"Days"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1956",
|
||||
"value": "Around the World in 80 Days",
|
||||
"tokens": [
|
||||
"Around",
|
||||
"the",
|
||||
"World",
|
||||
"in",
|
||||
"80",
|
||||
"Days"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1956",
|
||||
"value": "Around the World in 80 Days",
|
||||
"tokens": [
|
||||
"Around",
|
||||
"the",
|
||||
"World",
|
||||
"in",
|
||||
"80",
|
||||
"Days"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1928/1929",
|
||||
"value": "The Broadway Melody",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Broadway",
|
||||
"Melody"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1935",
|
||||
"value": "Mutiny on the Bounty",
|
||||
"tokens": [
|
||||
"Mutiny",
|
||||
"on",
|
||||
"the",
|
||||
"Bounty"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1946",
|
||||
"value": "The Best Years of Our Lives",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Best",
|
||||
"Years",
|
||||
"of",
|
||||
"Our",
|
||||
"Lives"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1957",
|
||||
"value": "The Bridge on the River Kwai",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Bridge",
|
||||
"on",
|
||||
"the",
|
||||
"River",
|
||||
"Kwai"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1959",
|
||||
"value": "Ben-Hur",
|
||||
"tokens": [
|
||||
"Ben-Hur"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1946",
|
||||
"value": "The Best Years of Our Lives",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Best",
|
||||
"Years",
|
||||
"of",
|
||||
"Our",
|
||||
"Lives"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1959",
|
||||
"value": "Ben-Hur",
|
||||
"tokens": [
|
||||
"Ben-Hur"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1959",
|
||||
"value": "Ben-Hur",
|
||||
"tokens": [
|
||||
"Ben-Hur"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1959",
|
||||
"value": "Ben-Hur",
|
||||
"tokens": [
|
||||
"Ben-Hur"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1959",
|
||||
"value": "Ben-Hur",
|
||||
"tokens": [
|
||||
"Ben-Hur"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1959",
|
||||
"value": "Ben-Hur",
|
||||
"tokens": [
|
||||
"Ben-Hur"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1946",
|
||||
"value": "The Best Years of Our Lives",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Best",
|
||||
"Years",
|
||||
"of",
|
||||
"Our",
|
||||
"Lives"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1946",
|
||||
"value": "The Best Years of Our Lives",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Best",
|
||||
"Years",
|
||||
"of",
|
||||
"Our",
|
||||
"Lives"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1935",
|
||||
"value": "Mutiny on the Bounty",
|
||||
"tokens": [
|
||||
"Mutiny",
|
||||
"on",
|
||||
"the",
|
||||
"Bounty"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1935",
|
||||
"value": "Mutiny on the Bounty",
|
||||
"tokens": [
|
||||
"Mutiny",
|
||||
"on",
|
||||
"the",
|
||||
"Bounty"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1935",
|
||||
"value": "Mutiny on the Bounty",
|
||||
"tokens": [
|
||||
"Mutiny",
|
||||
"on",
|
||||
"the",
|
||||
"Bounty"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1935",
|
||||
"value": "Mutiny on the Bounty",
|
||||
"tokens": [
|
||||
"Mutiny",
|
||||
"on",
|
||||
"the",
|
||||
"Bounty"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1935",
|
||||
"value": "Mutiny on the Bounty",
|
||||
"tokens": [
|
||||
"Mutiny",
|
||||
"on",
|
||||
"the",
|
||||
"Bounty"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1928/1929",
|
||||
"value": "The Broadway Melody",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Broadway",
|
||||
"Melody"
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": "1957",
|
||||
"value": "The Bridge on the River Kwai",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Bridge",
|
||||
"on",
|
||||
"the",
|
||||
"River",
|
||||
"Kwai"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1957",
|
||||
"value": "The Bridge on the River Kwai",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Bridge",
|
||||
"on",
|
||||
"the",
|
||||
"River",
|
||||
"Kwai"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1957",
|
||||
"value": "The Bridge on the River Kwai",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Bridge",
|
||||
"on",
|
||||
"the",
|
||||
"River",
|
||||
"Kwai"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1957",
|
||||
"value": "The Bridge on the River Kwai",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Bridge",
|
||||
"on",
|
||||
"the",
|
||||
"River",
|
||||
"Kwai"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1957",
|
||||
"value": "The Bridge on the River Kwai",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Bridge",
|
||||
"on",
|
||||
"the",
|
||||
"River",
|
||||
"Kwai"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1928/1929",
|
||||
"value": "The Broadway Melody",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Broadway",
|
||||
"Melody"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1928/1929",
|
||||
"value": "The Broadway Melody",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Broadway",
|
||||
"Melody"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1928/1929",
|
||||
"value": "The Broadway Melody",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Broadway",
|
||||
"Melody"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1928/1929",
|
||||
"value": "The Broadway Melody",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Broadway",
|
||||
"Melody"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1928/1929",
|
||||
"value": "The Broadway Melody",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Broadway",
|
||||
"Melody"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
[
|
||||
{
|
||||
"year": "1928/1929",
|
||||
"value": "The Broadway Melody",
|
||||
"tokens": [
|
||||
"The",
|
||||
"Broadway",
|
||||
"Melody"
|
||||
]
|
||||
}
|
||||
]
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue