新增Local App和Local Marketplace

This commit is contained in:
jingrow 2025-10-22 18:11:14 +08:00
parent 057d8164f5
commit d962ea476a
12 changed files with 744 additions and 0 deletions

View File

@ -0,0 +1,8 @@
// Copyright (c) 2025, Jingrow and contributors
// For license information, please see license.txt
// jingrow.ui.form.on("Local App", {
// refresh(frm) {
// },
// });

View File

@ -0,0 +1,151 @@
{
"actions": [],
"allow_rename": 1,
"creation": "2025-10-22 15:50:31.087391",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"title",
"enabled",
"column_break_5",
"category",
"public",
"section_break_9",
"url",
"branch",
"repo_owner",
"repo",
"column_break_wbyw",
"team",
"installation",
"enable_auto_deploy",
"skip_review"
],
"fields": [
{
"fieldname": "branch",
"fieldtype": "Data",
"label": "Branch",
"set_only_once": 1
},
{
"fieldname": "url",
"fieldtype": "Data",
"label": "Repository URL",
"set_only_once": 1
},
{
"fieldname": "repo_owner",
"fieldtype": "Data",
"hidden": 1,
"label": "Repository Owner"
},
{
"fieldname": "team",
"fieldtype": "Link",
"label": "Team",
"options": "Team"
},
{
"fieldname": "installation",
"fieldtype": "Data",
"hidden": 1,
"label": "Installation"
},
{
"default": "0",
"fieldname": "public",
"fieldtype": "Check",
"label": "Public"
},
{
"fieldname": "repo",
"fieldtype": "Data",
"hidden": 1,
"label": "Repository"
},
{
"fieldname": "column_break_5",
"fieldtype": "Column Break"
},
{
"fieldname": "section_break_9",
"fieldtype": "Section Break"
},
{
"default": "0",
"fieldname": "enable_auto_deploy",
"fieldtype": "Check",
"hidden": 1,
"label": "Enable Auto Deploy"
},
{
"default": "0",
"fieldname": "skip_review",
"fieldtype": "Check",
"hidden": 1,
"label": "Skip Review"
},
{
"default": "1",
"fieldname": "enabled",
"fieldtype": "Check",
"label": "Enabled"
},
{
"fieldname": "title",
"fieldtype": "Data",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Title",
"reqd": 1
},
{
"fieldname": "category",
"fieldtype": "Link",
"label": "Category",
"options": "Marketplace App Category"
},
{
"fieldname": "column_break_wbyw",
"fieldtype": "Column Break"
}
],
"links": [],
"modified": "2025-10-22 18:10:13.615747",
"modified_by": "Administrator",
"module": "Jcloud",
"name": "Local App",
"owner": "Administrator",
"pagetype": "PageType",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"share": 1,
"write": 1
},
{
"create": 1,
"read": 1,
"role": "Jcloud Admin"
},
{
"create": 1,
"read": 1,
"role": "Jcloud Member"
}
],
"row_format": "Dynamic",
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"title_field": "title",
"track_changes": 1
}

View File

@ -0,0 +1,30 @@
# Copyright (c) 2025, Jingrow and contributors
# For license information, please see license.txt
# import jingrow
from jingrow.model.page import Page
class LocalApp(Page):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from jingrow.types import DF
branch: DF.Data | None
category: DF.Link | None
enable_auto_deploy: DF.Check
enabled: DF.Check
installation: DF.Data | None
public: DF.Check
repo: DF.Data | None
repo_owner: DF.Data | None
skip_review: DF.Check
team: DF.Link | None
title: DF.Data
url: DF.Data | None
# end: auto-generated types
pass

View File

@ -0,0 +1,9 @@
# Copyright (c) 2025, Jingrow and Contributors
# See license.txt
# import jingrow
from jingrow.tests.utils import JingrowTestCase
class TestLocalApp(JingrowTestCase):
pass

View File

@ -0,0 +1,8 @@
// Copyright (c) 2025, Jingrow and contributors
// For license information, please see license.txt
// jingrow.ui.form.on("Local Marketplace", {
// refresh(frm) {
// },
// });

View File

@ -0,0 +1,458 @@
{
"actions": [],
"allow_guest_to_view": 1,
"allow_rename": 1,
"creation": "2024-12-19 10:00:00",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"image",
"app",
"title",
"column_break_3",
"team",
"route",
"section_break_7",
"jingrow_approved",
"subscription_type",
"subscription_level",
"column_break_10",
"categories",
"published",
"section_break_5",
"sources",
"descriptions_tab",
"description",
"app_screenshots_section",
"screenshots",
"section_break_15",
"long_description",
"links_section",
"website",
"support",
"documentation",
"column_break_16",
"privacy_policy",
"terms_of_service",
"saas_tab",
"outgoing_email",
"outgoing_sender_name",
"signup_email_template_section",
"message",
"column_break_32",
"signature",
"column_break_30",
"subject",
"poll_method",
"column_break_33",
"custom_verify_template",
"subscription_update_hook",
"site_config_section",
"site_config",
"scripts_tab",
"run_after_install_script",
"after_install_script",
"run_after_uninstall_script",
"after_uninstall_script",
"review_tab",
"stop_auto_review",
"review_stage",
"status",
"dashboard_tab",
"onboarding_related_section",
"show_for_site_creation",
"localisation_apps",
"section_break_tlpw",
"average_rating"
],
"fields": [
{
"fieldname": "image",
"fieldtype": "Attach Image",
"hidden": 1,
"label": "Image"
},
{
"fetch_from": "app.title",
"fetch_if_empty": 1,
"fieldname": "title",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Title",
"reqd": 1
},
{
"fieldname": "column_break_3",
"fieldtype": "Column Break"
},
{
"default": "Draft",
"fieldname": "status",
"fieldtype": "Select",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Status",
"options": "Draft\nPublished\nIn Review\nAttention Required\nRejected\nDisabled"
},
{
"fieldname": "section_break_5",
"fieldtype": "Section Break"
},
{
"default": "Please add a short description about your app here...",
"fieldname": "description",
"fieldtype": "Small Text",
"in_list_view": 1,
"label": "Description",
"reqd": 1
},
{
"fieldname": "long_description",
"fieldtype": "Text Editor",
"label": "Long Description"
},
{
"fieldname": "links_section",
"fieldtype": "Tab Break",
"label": "Support Links"
},
{
"fieldname": "website",
"fieldtype": "Data",
"label": "Website",
"options": "URL"
},
{
"fieldname": "support",
"fieldtype": "Data",
"label": "Support",
"options": "URL"
},
{
"fieldname": "privacy_policy",
"fieldtype": "Data",
"label": "Privacy Policy",
"options": "URL"
},
{
"fieldname": "documentation",
"fieldtype": "Data",
"label": "Documentation",
"options": "URL"
},
{
"fieldname": "terms_of_service",
"fieldtype": "Data",
"label": "Terms of Service",
"options": "URL"
},
{
"fieldname": "route",
"fieldtype": "Data",
"label": "Route"
},
{
"default": "0",
"fieldname": "published",
"fieldtype": "Check",
"hidden": 1,
"label": "Published",
"read_only": 1
},
{
"fieldname": "app",
"fieldtype": "Link",
"label": "App",
"options": "App",
"reqd": 1,
"unique": 1
},
{
"fieldname": "column_break_16",
"fieldtype": "Column Break"
},
{
"fieldname": "team",
"fieldtype": "Link",
"in_standard_filter": 1,
"label": "Team",
"options": "Team"
},
{
"fieldname": "sources",
"fieldtype": "Table",
"label": "Sources",
"options": "Marketplace App Version"
},
{
"fieldname": "app_screenshots_section",
"fieldtype": "Section Break",
"label": "App Screenshots"
},
{
"fieldname": "screenshots",
"fieldtype": "Table",
"label": "Screenshots",
"options": "Marketplace App Screenshot"
},
{
"fieldname": "section_break_15",
"fieldtype": "Section Break"
},
{
"fieldname": "categories",
"fieldtype": "Table",
"label": "Categories",
"options": "Marketplace App Categories"
},
{
"default": "Free",
"fieldname": "subscription_type",
"fieldtype": "Select",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Subscription Type",
"options": "Free\nPaid\nFreemium"
},
{
"fieldname": "signup_email_template_section",
"fieldtype": "Section Break",
"label": "Signup Email Template"
},
{
"default": "0",
"fieldname": "custom_verify_template",
"fieldtype": "Check",
"label": "Use custom verify template"
},
{
"fieldname": "subject",
"fieldtype": "Data",
"label": "Subject"
},
{
"fieldname": "message",
"fieldtype": "Text Editor",
"label": "Message"
},
{
"fieldname": "signature",
"fieldtype": "Text Editor",
"label": "Signature"
},
{
"fieldname": "poll_method",
"fieldtype": "Data",
"label": "Poll Method"
},
{
"fieldname": "subscription_update_hook",
"fieldtype": "Data",
"label": "Subscription Update Hook"
},
{
"fieldname": "saas_tab",
"fieldtype": "Tab Break",
"label": "SaaS"
},
{
"fieldname": "column_break_32",
"fieldtype": "Column Break"
},
{
"fieldname": "column_break_30",
"fieldtype": "Section Break"
},
{
"fieldname": "column_break_33",
"fieldtype": "Column Break"
},
{
"fieldname": "descriptions_tab",
"fieldtype": "Tab Break",
"label": "Descriptions"
},
{
"fieldname": "section_break_7",
"fieldtype": "Section Break"
},
{
"fieldname": "column_break_10",
"fieldtype": "Column Break"
},
{
"fieldname": "outgoing_email",
"fieldtype": "Data",
"label": "Outgoing Email"
},
{
"fieldname": "outgoing_sender_name",
"fieldtype": "Data",
"label": "Outgoing Sender Name"
},
{
"fieldname": "scripts_tab",
"fieldtype": "Tab Break",
"label": "Scripts"
},
{
"fieldname": "after_install_script",
"fieldtype": "Code",
"label": "After Install Script",
"options": "Python"
},
{
"fieldname": "after_uninstall_script",
"fieldtype": "Code",
"label": "After Uninstall Script",
"options": "Python"
},
{
"default": "0",
"fieldname": "run_after_install_script",
"fieldtype": "Check",
"label": "Rut After Install Script"
},
{
"default": "0",
"fieldname": "run_after_uninstall_script",
"fieldtype": "Check",
"label": "Run After Uninstall Script"
},
{
"fieldname": "review_tab",
"fieldtype": "Tab Break",
"label": "Review"
},
{
"default": "Not Started",
"fieldname": "review_stage",
"fieldtype": "Select",
"in_list_view": 1,
"label": "Review Stage",
"options": "Not Started\nDescription Missing\nLogo Missing\nApp Release Not Reviewed\nReady for Review\nReady to Publish\nRejected"
},
{
"default": "0",
"fieldname": "jingrow_approved",
"fieldtype": "Check",
"label": "Jingrow Approved"
},
{
"default": "0",
"fieldname": "stop_auto_review",
"fieldtype": "Check",
"label": "Stop Auto Review"
},
{
"description": "This keys are added to site config on saas signup",
"fieldname": "site_config",
"fieldtype": "JSON",
"label": "Site Config"
},
{
"fieldname": "site_config_section",
"fieldtype": "Section Break",
"label": "Site Config"
},
{
"fieldname": "onboarding_related_section",
"fieldtype": "Section Break",
"label": "Onboarding/Site Creation Related"
},
{
"default": "0",
"fieldname": "show_for_site_creation",
"fieldtype": "Check",
"label": "Show for site creation"
},
{
"fieldname": "dashboard_tab",
"fieldtype": "Tab Break",
"label": "Dashboard"
},
{
"fieldname": "section_break_tlpw",
"fieldtype": "Section Break"
},
{
"default": "0",
"fieldname": "average_rating",
"fieldtype": "Float",
"hidden": 1,
"label": "Average Rating",
"precision": "2"
},
{
"fieldname": "localisation_apps",
"fieldtype": "Table",
"label": "Localisation Apps",
"options": "Marketplace Localisation App"
},
{
"default": "1",
"fieldname": "subscription_level",
"fieldtype": "Select",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Subscription Level",
"options": "1\n2\n3\n4\n5"
}
],
"has_web_view": 1,
"image_field": "image",
"index_web_pages_for_search": 1,
"is_published_field": "published",
"links": [
{
"group": "General",
"link_fieldname": "marketplace_app",
"link_pagetype": "App Release Approval Request"
},
{
"group": "App Subscription",
"link_fieldname": "app",
"link_pagetype": "Marketplace App Plan"
},
{
"group": "App Subscription",
"link_fieldname": "app",
"link_pagetype": "Marketplace App Subscription"
}
],
"modified": "2025-10-22 15:50:31.087391",
"modified_by": "Administrator",
"module": "Jcloud",
"name": "Local Marketplace",
"owner": "Administrator",
"pagetype": "PageType",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"share": 1,
"write": 1
}
],
"row_format": "Dynamic",
"sort_field": "modified",
"sort_order": "DESC",
"states": [
{
"color": "Gray",
"title": "Draft"
},
{
"color": "Green",
"title": "Published"
}
],
"title_field": "title",
"track_changes": 1
}

View File

@ -0,0 +1,60 @@
# Copyright (c) 2025, Jingrow and contributors
# For license information, please see license.txt
# import jingrow
from jingrow.model.page import Page
class LocalMarketplace(Page):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from jcloud.jcloud.pagetype.marketplace_app_categories.marketplace_app_categories import MarketplaceAppCategories
from jcloud.jcloud.pagetype.marketplace_app_screenshot.marketplace_app_screenshot import MarketplaceAppScreenshot
from jcloud.jcloud.pagetype.marketplace_app_version.marketplace_app_version import MarketplaceAppVersion
from jcloud.jcloud.pagetype.marketplace_localisation_app.marketplace_localisation_app import MarketplaceLocalisationApp
from jingrow.types import DF
after_install_script: DF.Code | None
after_uninstall_script: DF.Code | None
app: DF.Link
average_rating: DF.Float
categories: DF.Table[MarketplaceAppCategories]
custom_verify_template: DF.Check
description: DF.SmallText
documentation: DF.Data | None
image: DF.AttachImage | None
jingrow_approved: DF.Check
localisation_apps: DF.Table[MarketplaceLocalisationApp]
long_description: DF.TextEditor | None
message: DF.TextEditor | None
outgoing_email: DF.Data | None
outgoing_sender_name: DF.Data | None
poll_method: DF.Data | None
privacy_policy: DF.Data | None
published: DF.Check
review_stage: DF.Literal["Not Started", "Description Missing", "Logo Missing", "App Release Not Reviewed", "Ready for Review", "Ready to Publish", "Rejected"]
route: DF.Data | None
run_after_install_script: DF.Check
run_after_uninstall_script: DF.Check
screenshots: DF.Table[MarketplaceAppScreenshot]
show_for_site_creation: DF.Check
signature: DF.TextEditor | None
site_config: DF.JSON | None
sources: DF.Table[MarketplaceAppVersion]
status: DF.Literal["Draft", "Published", "In Review", "Attention Required", "Rejected", "Disabled"]
stop_auto_review: DF.Check
subject: DF.Data | None
subscription_level: DF.Literal["1", "2", "3", "4", "5"]
subscription_type: DF.Literal["Free", "Paid", "Freemium"]
subscription_update_hook: DF.Data | None
support: DF.Data | None
team: DF.Link | None
terms_of_service: DF.Data | None
title: DF.Data
website: DF.Data | None
# end: auto-generated types
pass

View File

@ -0,0 +1,7 @@
{% extends "templates/web.html" %}
{% block page_content %}
<h1>{{ title }}</h1>
{% endblock %}
<!-- this is a sample default web page template -->

View File

@ -0,0 +1,4 @@
<div>
<a href="{{ pg.route }}">{{ pg.title or pg.name }}</a>
</div>
<!-- this is a sample default list template -->

View File

@ -0,0 +1,9 @@
# Copyright (c) 2025, Jingrow and Contributors
# See license.txt
# import jingrow
from jingrow.tests.utils import JingrowTestCase
class TestLocalMarketplace(JingrowTestCase):
pass