This commit is contained in:
2020-03-22 14:18:34 +01:00
commit 9fd12b6d55
29 changed files with 1138 additions and 0 deletions
+63
View File
@@ -0,0 +1,63 @@
###############################################################################
# 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
+269
View File
@@ -0,0 +1,269 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
project.fragment.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.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
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# 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
# TODO: 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
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets
package-lock.json
# 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
# 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
node_modules/
orleans.codegen.cs
# 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
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# 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/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush
.cr/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Media folder + app_data
App_Data/
**/Media/
Temp/
**/Assets/app.*
deps/*.dll
+1
View File
@@ -0,0 +1 @@

+18
View File
@@ -0,0 +1,18 @@
namespace unjo.Core
{
public static class Constants
{
public static class Sections
{
public const string Dashboard = "dashboard";
public const string Pages = "pages";
public const string Lists = "lists";
public const string Media = "media";
public const string Settings = "settings";
}
}
}
@@ -0,0 +1,18 @@
namespace unjo.Core.Entities.Sections
{
/// <summary>
/// A child section is a sub-navigation item of a section
/// </summary>
public interface IChildSection
{
/// <summary>
/// The section alias which acts as the url slug for navigation
/// </summary>
public string Alias { get; set; }
/// <summary>
/// The name of the section (either a string or a translation key with @ prefix)
/// </summary>
public string Name { get; set; }
}
}
+30
View File
@@ -0,0 +1,30 @@
using System.Collections.Generic;
namespace unjo.Core.Entities.Sections
{
/// <summary>
/// A section is a main part of the backoffice application
/// </summary>
public interface ISection
{
/// <summary>
/// The section alias which acts as the url slug for navigation
/// </summary>
string Alias { get; }
/// <summary>
/// The name of the section (either a string or a translation key with @ prefix)
/// </summary>
string Name { get; }
/// <summary>
/// Icon of the section
/// </summary>
string Icon { get; }
/// <summary>
/// Children are displayed as a sub-navigation in the main nav area
/// </summary>
IList<IChildSection> Children { get; }
}
}
+31
View File
@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
namespace unjo.Core.Extensions
{
public static class StringExtensions
{
public static string EnsureStartsWith(this string input, string toStartWith)
{
if (input.StartsWith(toStartWith)) return input;
return toStartWith + input.TrimStart(toStartWith);
}
public static string EnsureStartsWith(this string input, char value)
{
return input.StartsWith(value.ToString(CultureInfo.InvariantCulture)) ? input : value + input;
}
public static string EnsureEndsWith(this string input, char value)
{
return input.EndsWith(value.ToString(CultureInfo.InvariantCulture)) ? input : input + value;
}
public static string EnsureEndsWith(this string input, string toEndWith)
{
return input.EndsWith(toEndWith.ToString(CultureInfo.InvariantCulture)) ? input : input + toEndWith;
}
}
}
+8
View File
@@ -0,0 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>
+34
View File
@@ -0,0 +1,34 @@
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor
@{
string theme = HttpContextAccessor.HttpContext.Request.Cookies["theme"] ?? "dark";
Layout = null;
}
<!DOCTYPE html>
<html data-theme="@theme">
<head>
<meta charset="utf-8">
<meta name="robots" content="noindex,nofollow">
<meta name="author" content="brothers">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="expires" content="0">
<link rel="apple-touch-icon" sizes="180x180" href="~/Assets/Favicons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="~/Assets/Favicons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="~/Assets/Favicons/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="196x196" href="~/Assets/Favicons/android-chrome-192x192.png">
<link rel="manifest" href="~/Assets/site.webmanifest">
<link rel="mask-icon" href="~/Assets/Favicons/safari-pinned-tab.svg" color="#161e25">
<meta name="msapplication-TileColor" content="#161e25">
<meta name="theme-color" content="#161e25">
<base href="~/">
<environment exclude="Development">
<link href="~/Assets/app.css" rel="stylesheet" asp-append-version="true" />
</environment>
<title>fifty</title>
</head>
<body>
<div id="app"></div>
<script src="~/Assets/app.js" asp-append-version="true"></script>
</body>
</html>
+26
View File
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace unjo.Web
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
+27
View File
@@ -0,0 +1,27 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:51017",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"unjo": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
+24
View File
@@ -0,0 +1,24 @@
using System.Collections.Generic;
using unjo.Core;
using unjo.Core.Entities.Sections;
namespace unjo.Web.Sections
{
/// <summary>
/// The dashboard aggregates data from all sections
/// </summary>
public class DashboardSection : ISection
{
/// <inheritdoc />
public string Alias => Constants.Sections.Dashboard;
/// <inheritdoc />
public string Name => "@ui_sections_dashboard";
/// <inheritdoc />
public string Icon => "fth-pie-chart";
/// <inheritdoc />
public IList<IChildSection> Children => null;
}
}
+24
View File
@@ -0,0 +1,24 @@
using System.Collections.Generic;
using unjo.Core;
using unjo.Core.Entities.Sections;
namespace unjo.Web.Sections
{
/// <summary>
/// Global list entities
/// </summary>
public class ListsSection : ISection
{
/// <inheritdoc />
public string Alias => Constants.Sections.Lists;
/// <inheritdoc />
public string Name => "@ui_sections_lists";
/// <inheritdoc />
public string Icon => "fth-layers";
/// <inheritdoc />
public IList<IChildSection> Children => null;
}
}
+24
View File
@@ -0,0 +1,24 @@
using System.Collections.Generic;
using unjo.Core;
using unjo.Core.Entities.Sections;
namespace unjo.Web.Sections
{
/// <summary>
/// Media items (images, videos, documents) grouped in folders
/// </summary>
public class MediaSection : ISection
{
/// <inheritdoc />
public string Alias => Constants.Sections.Media;
/// <inheritdoc />
public string Name => "@ui_sections_media";
/// <inheritdoc />
public string Icon => "fth-image";
/// <inheritdoc />
public IList<IChildSection> Children => null;
}
}
+24
View File
@@ -0,0 +1,24 @@
using System.Collections.Generic;
using unjo.Core;
using unjo.Core.Entities.Sections;
namespace unjo.Web.Sections
{
/// <summary>
/// Manage the page tree in this section
/// </summary>
public class PagesSection : ISection
{
/// <inheritdoc />
public string Alias => Constants.Sections.Pages;
/// <inheritdoc />
public string Name => "@ui_sections_pages";
/// <inheritdoc />
public string Icon => "fth-folder";
/// <inheritdoc />
public IList<IChildSection> Children => null;
}
}
+24
View File
@@ -0,0 +1,24 @@
using System.Collections.Generic;
using unjo.Core;
using unjo.Core.Entities.Sections;
namespace unjo.Web.Sections
{
/// <summary>
/// Website and backoffice settings
/// </summary>
public class SettingsSection : ISection
{
/// <inheritdoc />
public string Alias => Constants.Sections.Settings;
/// <inheritdoc />
public string Name => "@ui_sections_settings";
/// <inheritdoc />
public string Icon => "fth-settings";
/// <inheritdoc />
public IList<IChildSection> Children => null;
}
}
+36
View File
@@ -0,0 +1,36 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace unjo.Web
{
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
});
}
}
}
+6
View File
@@ -0,0 +1,6 @@
import Vue from 'vue'
import App from 'cmp/app.vue'
import 'filter/generic.js'
import 'directive/filedrop.js'
new Vue(App).$mount('#app');
+26
View File
@@ -0,0 +1,26 @@
{
"Raven": {
"Url": "http://127.0.0.1:9800",
"Database": "fiftyone"
},
"Redis": {
"Url": "127.0.0.1:6379",
"Database": 3
},
"Ebanking": {
"Automation": {
"TwoFactorAppPath": "C:\\Users\\cee\\AppData\\Roaming\\Raiffeisen_pushTAN\\pushTAN\\Raiffeisen_pushTAN.exe"
}
},
"Logging": {
"LogLevel": {
"Default": "Warning",
"System": "Warning",
"Microsoft": "Warning",
"Fifty": "Debug"
}
}
}
+91
View File
@@ -0,0 +1,91 @@
{
"SystemUserId": "system",
"SessionDurationInMinutes": 60,
"SyncStartDate": "2018-01-01T00:00:00",
"AccountantPdfPassword": "r1528",
"Reports": {
"StartDate": "2019-04-01T00:00:00",
"ProgressNo": 116,
"DueTo": {
"Months": 1,
"Days": 15
},
"InitialShare": {
"tobi": {
"Income_2019": 16367.12,
"Expense_2019": -4456.84,
"Payout_2019": -3600,
"SVA_2019": -2100,
"TAX_E_2019": -658,
"TAX_U_2019": -1040.84,
"Summary": -14493.26
},
"chris": {
"Income_2019": 68447.12,
"Expense_2019": -22159.63,
"Payout_2019": -15000,
"SVA_2019": -6000,
"TAX_E_2019": -4424,
"TAX_U_2019": -6743.76,
"Summary": 30444.27
}
}
},
"Folders": {
"Invoices": "Media/Invoices",
"Reports": "Media/Reports",
"Avatars": "Media/Avatars",
"Clients": "Media/Clients",
"Temp": "Temp"
},
"Ebanking": {
"Automation": {
"BrowserPath": "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
"TwoFactorAppPath": "C:\\Users\\Administrator\\AppData\\Roaming\\Raiffeisen_pushTAN\\pushTAN\\Raiffeisen_pushTAN.exe"
},
"Raiffeisen": {
"Username": "3V371389",
"Pin": "20146",
"State": "3",
"IBAN": "AT543406000008237885",
"CreditcardId": "2339d46c6e72eea8472d6b498ac6d603",
"TwoFactorPin": "52777"
},
"Paypal": {
"Token": "AeQA-N0AviBKvnwM5gVhNyxAiE1Zh5uJftPeuGMHhdtlrzpL6yFB1quDeUsgzSZPtB1z2rUA4xFJjl38",
"Secret": "EIR61tk7l9UELRnq9xB1YrXba2H0gXFgPyUjSP8YamZFR8E-BZ-kpWzPsH1XRJ-OIPpIB6HvGWxm5OXu"
}
},
"Raven": {
"Url": "http://127.0.0.1:9800",
"Database": "fifty"
},
"Redis": {
"Url": "127.0.0.1:6388",
"Database": 0
},
"Frontend": {
"SearchResultsPerPage": 20,
"FlowPerPage": 30
},
"Logging": {
"Json": true,
"IncludeScopes": false,
"PathFormat": "Logs/log-{Date}.txt",
"LogLevel": {
"Default": "Warning",
"System": "Warning",
"Microsoft": "Warning"
}
}
}
+20
View File
@@ -0,0 +1,20 @@
export default {
isDebug: process.env.NODE_ENV !== 'production',
apiBase: '/api',
countries: [
{ value: 'austria', text: 'Austria' },
{ value: 'germany', text: 'Germany' },
{ value: 'usa', text: 'USA' }
],
categories: [
{ value: 'unknown', text: '' },
{ value: 'socialInsurance', text: 'SVA' },
{ value: 'tax', text: 'Tax' },
{ value: 'payout', text: 'Payout' },
{ value: 'payment', text: 'Payment' }
]
};
+55
View File
@@ -0,0 +1,55 @@
{
"name": "unjo.web",
"version": "1.0.0",
"description": "",
"bin": {
"unjo.web": "app.js"
},
"dependencies": {
"axios": "0.19.0",
"dayjs": "1.8.16",
"lodash": "4.17.15",
"tiptap": "1.26.3",
"tiptap-extensions": "1.28.3",
"vue": "2.6.10",
"vue-router": "3.1.3",
"vuex": "3.1.1"
},
"devDependencies": {
"@babel/core": "7.6.3",
"@babel/preset-env": "7.6.3",
"aspnet-webpack": "3.0.0",
"babel-loader": "8.0.6",
"css-loader": "3.2.0",
"html-webpack-plugin": "3.2.0",
"mini-css-extract-plugin": "0.8.0",
"node-sass": "^4.13.1",
"optimize-css-assets-webpack-plugin": "5.0.3",
"sass-loader": "8.0.0",
"style-loader": "1.0.0",
"uglifyjs-webpack-plugin": "2.2.0",
"vue-loader": "15.7.1",
"vue-template-compiler": "2.6.10",
"webpack": "4.41.0",
"webpack-cli": "3.3.9",
"webpack-dev-server": "3.8.2",
"webpack-hot-middleware": "2.25.0",
"webpack-merge": "4.2.2"
},
"peerDependencies": {
"vue-template-compiler": "2.6.10"
},
"scripts": {
"dev": "webpack-dev-server --progress --hot --open",
"debug": "webpack --progress",
"build": "webpack --progress --config webpack.prod.js",
"update:packages": "node wipe.js && rm -rf node_modules && npm update --save-dev && npm update --save"
},
"babel": {
"presets": [
"@babel/env"
]
},
"author": "",
"license": "ISC"
}
+80
View File
@@ -0,0 +1,80 @@
import Vue from 'vue';
import VueRouter from 'vue-router';
import Flow from 'view/flow';
import Transaction from 'view/transaction';
import Invoices from 'view/invoices';
import InvoiceEdit from 'view/invoiceedit';
import Clients from 'view/clients';
import Client from 'view/client';
import Changelog from 'view/changelog';
import Rules from 'view/rules';
import Reports from 'view/reports';
import Report from 'view/report';
import ReportCreate from 'view/reportcreate';
import EventHub from 'utils/eventhub.js';
Vue.use(VueRouter);
history.scrollRestoration = 'manual';
const routes = [
// flow
{ path: '/', component: Flow, name: 'flow', meta: { title: 'Flow' } },
{ path: '/provider/:provider', component: Flow, name: 'flowProvider', props: true, meta: { title: 'Flow' } },
{ path: '/provider/:provider/page/:page', component: Flow, name: 'flowProviderAndPage', props: true, meta: { title: 'Flow' } },
{ path: '/page/:page', component: Flow, name: 'flowPage', props: true, meta: { title: 'Flow' } },
{ path: '/transaction/edit/:id', component: Transaction, name: 'transaction', props: true, meta: { title: 'Transaction' } },
// invoices
{ path: '/invoices', component: Invoices, name: 'invoices', meta: { title: 'Invoices' } },
{ path: '/invoices/create', component: InvoiceEdit, name: 'invoiceCreate', meta: { title: 'Create invoice' } },
{ path: '/invoices/create/:id', component: InvoiceEdit, name: 'invoiceCreateFrom', props: true, meta: { title: 'Create invoice' } },
{ path: '/invoices/edit/:id', component: InvoiceEdit, name: 'invoiceEdit', props: true, meta: { title: 'Edit invoice' } },
{ path: '/invoices/:year', component: Invoices, name: 'invoicesYear', props: true, meta: { title: 'Invoices' } },
// clients
{ path: '/clients', component: Clients, name: 'clients', meta: { title: 'Clients' } },
{ path: '/clients/edit/:id', component: Client, name: 'client', props: true, meta: { title: 'Client' } },
// changelog
{ path: '/changelog', component: Changelog, name: 'changelog', meta: { title: 'Changelog' } },
// rules
{ path: '/rules', component: Rules, name: 'rules', props: true, meta: { title: 'Rules' } },
{ path: '/rules/items', component: Rules, name: 'rulesItems', meta: { title: 'Rules' } },
{ path: '/rules/history', component: Rules, name: 'rulesHistory', meta: { title: 'Rules' } },
{ path: '/rules/edit/:id?', component: Rules, name: 'rules', props: true, meta: { title: 'Rules' } },
// reports
{ path: '/reports', component: Reports, name: 'reports', meta: { title: 'Reports' } },
{ path: '/reports/edit/:id', component: Report, name: 'report', props: true, meta: { title: 'Report' } },
{ path: '/reports/create/:type?', component: ReportCreate, name: 'reportCreate', props: true, meta: { title: 'Report' } },
{ path: '/reports/:year', component: Reports, name: 'reportsYear', props: true, meta: { title: 'Reports' } }
];
const router = new VueRouter({
mode: 'history',
routes: routes,
scrollBehavior(to, from, savedPosition)
{
return savedPosition ? savedPosition : { x: 0, y: 0 };
//return new Promise((resolve, reject) =>
//{
// EventHub.$once('page-loaded', () =>
// {
// console.info('pos', savedPosition);
// resolve(savedPosition ? savedPosition : { x: 0, y: 0 });
// });
//});
}
});
router.beforeEach((to, from, next) =>
{
document.title = to.meta.title !== null ? to.meta.title + " | fifty" : "fifty";
EventHub.$emit('dialog-close');
next();
});
export default router;
+7
View File
@@ -0,0 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
</Project>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_HTTPS_PORT" value="44308" />
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
<rewrite>
<rules></rules>
</rewrite>
</system.webServer>
</location>
</configuration>
+23
View File
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<location path="." inheritInChildApplications="false">
<system.webServer>
<rewrite>
<rules>
<rule name="SSLRenewal" enabled="true" stopProcessing="true" xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)">
<match url="\.well-known(.*)" />
<action type="None" />
</rule>
<rule name="RedirectToSSL" enabled="true" stopProcessing="true" xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTP_HOST}" pattern="^fifty\.brothers\.studio$" negate="true" />
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://fifty\.brothers\.studio/{R:1}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</location>
</configuration>
+61
View File
@@ -0,0 +1,61 @@
const path = require('path');
const VueLoaderPlugin = require('vue-loader/lib/plugin');
module.exports = {
// entry point of the app
context: __dirname,
entry: { app: './app.js' },
// dev environment (gets overwritten by prod.js)
mode: 'development',
devtool: 'cheap-module-eval-source-map',
// output paths
output: {
path: path.resolve(__dirname, 'wwwroot/Assets'),
filename: 'app.js',
publicPath: '/Assets/'
},
// map files to vue
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': __dirname,
'api': path.join(__dirname, 'Api'),
'cmp': path.join(__dirname, 'Components'),
'store': path.join(__dirname, 'Utils'),
'utils': path.join(__dirname, 'Utils'),
'view': path.join(__dirname, 'Views'),
'filter': path.join(__dirname, 'Utils'),
'directive': path.join(__dirname, 'Utils')
}
},
// plugins to use
plugins: [
new VueLoaderPlugin()
],
// modules to load
module: {
rules: [
{
test: /\.vue$/,
exclude: /node_modules/,
loader: 'vue-loader'
},
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader'
},
{
test: /\.scss$/,
use: ["style-loader", "css-loader", "sass-loader"]
}
]
}
};
+38
View File
@@ -0,0 +1,38 @@
const merge = require('webpack-merge');
const config = require('./webpack.config.js');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
module.exports = merge(config, {
mode: 'production',
devtool: 'source-map',
plugins: [
new MiniCssExtractPlugin({
filename: "app.css",
chunkFilename: "[id].css"
})
],
module: {
rules: [
{
test: /\.scss$/,
use: [ MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader' ]
}
]
},
optimization: {
minimizer: [
new UglifyJsPlugin({
cache: true,
parallel: true,
sourceMap: true
}),
new OptimizeCSSAssetsPlugin({})
]
}
});
+31
View File
@@ -0,0 +1,31 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29709.97
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "unjo.Web", "unjo.Web\unjo.Web.csproj", "{8C14E4B1-8C00-4B4B-869B-4D2084ABE1F3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "unjo.Core", "unjo.Core\unjo.Core.csproj", "{7BFF3DDE-F910-4CE1-9B94-846059CE80DA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{8C14E4B1-8C00-4B4B-869B-4D2084ABE1F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8C14E4B1-8C00-4B4B-869B-4D2084ABE1F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8C14E4B1-8C00-4B4B-869B-4D2084ABE1F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8C14E4B1-8C00-4B4B-869B-4D2084ABE1F3}.Release|Any CPU.Build.0 = Release|Any CPU
{7BFF3DDE-F910-4CE1-9B94-846059CE80DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7BFF3DDE-F910-4CE1-9B94-846059CE80DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7BFF3DDE-F910-4CE1-9B94-846059CE80DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7BFF3DDE-F910-4CE1-9B94-846059CE80DA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {AD3F31B9-8BBB-4334-9571-F556B9E632C9}
EndGlobalSection
EndGlobal