@simitgroup/simpleapp-generator 1.0.29 → 1.0.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -16
- package/dist/framework.js +3 -3
- package/dist/framework.js.map +1 -1
- package/dist/generate.js +4 -2
- package/dist/generate.js.map +1 -1
- package/dist/processors/jsonschemabuilder.js +21 -4
- package/dist/processors/jsonschemabuilder.js.map +1 -1
- package/package.json +1 -1
- package/src/framework.ts +3 -3
- package/src/generate.ts +6 -4
- package/src/processors/jsonschemabuilder.ts +21 -3
- package/src/type.ts +2 -1
- package/templates/basic/model.eta +3 -1
- package/templates/basic/pageindex.vue.eta +60 -5
- package/templates/basic/service.eta +12 -2
- package/templates/basic/simpleappclient.eta +35 -1
- package/templates/nest/SimpleAppService.eta +72 -21
- package/templates/nest/nest.main.eta +2 -2
- package/templates/nuxt/components.crudsimple.vue.eta +2 -2
- package/templates/nuxt/components.debugdocdata.vue.eta +11 -5
- package/templates/nuxt/composables.getautocomplete.ts.eta +3 -5
- package/templates/nuxt/composables.getmenus.ts.eta +12 -2
- package/templates/nuxt/plugins.simpleapp.ts.eta +7 -0
- package/templates/nuxt/tailwind.css.eta +9 -1
package/README.md
CHANGED
|
@@ -58,6 +58,13 @@ Development using simpleapp-generator involve below steps:
|
|
|
58
58
|
5. repeat same typscript formula at frontend and backend
|
|
59
59
|
|
|
60
60
|
|
|
61
|
+
# JSON Schema supported String Format
|
|
62
|
+
1. all format recognize by ajv
|
|
63
|
+
2. x-document-no : string, apply minLength:1, will auto apply uniquekey in mongodb
|
|
64
|
+
3. x-document-name: string, apply minLength:1
|
|
65
|
+
4. tel: only digit, auto generate input tel
|
|
66
|
+
5. x-text: do nothing, will auto generate textarea
|
|
67
|
+
6. x-autocomplete-field: this field will add into autocomplete
|
|
61
68
|
# Todo
|
|
62
69
|
## Update documentation and reference
|
|
63
70
|
1. create github simpleapp-generator-template and documentation
|
|
@@ -66,33 +73,58 @@ Development using simpleapp-generator involve below steps:
|
|
|
66
73
|
|
|
67
74
|
|
|
68
75
|
## high priority Job
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
x - pages
|
|
74
|
-
x - composable (no need )
|
|
76
|
+
3. settle instancePath in form
|
|
77
|
+
x17. auto add source code for addarray item
|
|
78
|
+
|
|
79
|
+
no auto logout after session expired, or auto renew token
|
|
75
80
|
- menulist ** less priority, can customize manually
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
81
|
+
2. tidy up error at frontend/backend messages
|
|
82
|
+
10.auto bind apiclient methods to compatible with openapi methods
|
|
83
|
+
a. create backend service method
|
|
84
|
+
b. create controller handle
|
|
85
|
+
11.add simple and consistent external hook in service class.
|
|
86
|
+
16. support table details in generator
|
|
87
|
+
a. render autocomplete readonly field
|
|
88
|
+
b. add popup dialog for edit table
|
|
89
|
+
c. separate list table and form table
|
|
90
|
+
d.
|
|
80
91
|
5. tenant setting
|
|
81
92
|
6. user management
|
|
82
|
-
2. tidy up error at frontend/backend messages
|
|
83
|
-
3. settle instancePath in form
|
|
84
93
|
5. security of string input, block xss
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
94
|
+
12.add pusher listener in apiclient also
|
|
95
|
+
13.have way to create more api using different openapi schema but on same object
|
|
96
|
+
18. add transaction screen templates
|
|
97
|
+
|
|
88
98
|
|
|
89
99
|
## Lower Priority
|
|
90
100
|
3. multi-lingual
|
|
91
101
|
6. audit trails
|
|
92
102
|
7. permissions
|
|
103
|
+
7. update record need replace updated,updatedby, line item also need headache
|
|
104
|
+
|
|
105
|
+
11.frontend add parent/child ui for invoices
|
|
106
|
+
|
|
107
|
+
[done]
|
|
108
|
+
xauto index x-document-name
|
|
93
109
|
x8. jwt
|
|
110
|
+
ximprove tel control to allow empty string
|
|
111
|
+
x15. some autocomplete wish to allow additional column like 6% tax, now become additional fields
|
|
94
112
|
x9. frontend authentication
|
|
95
|
-
|
|
113
|
+
x1. auto pretty backend and frontend
|
|
114
|
+
x2. fix pages:id issue
|
|
115
|
+
x3. search at backend
|
|
116
|
+
1. remain codes after regenerate (backend)
|
|
117
|
+
x - service
|
|
118
|
+
x - schema
|
|
119
|
+
x - controller
|
|
120
|
+
x8. block uniquekey
|
|
121
|
+
1. remain codes after regenerate (frontend)
|
|
122
|
+
x - pages
|
|
123
|
+
x - composable (no need )
|
|
124
|
+
x6. fill in data for tenant/org/branch created,updated,createdby,updatedby
|
|
125
|
+
14. force x-document-no/name is required
|
|
126
|
+
|
|
127
|
+
|
|
96
128
|
|
|
97
129
|
## Bug fix
|
|
98
130
|
1. Openapi some schema like primarykey/more not generated, cause error in ide
|
package/dist/framework.js
CHANGED
|
@@ -89,7 +89,7 @@ const prepareNest = (callback) => {
|
|
|
89
89
|
const targetfolder = config.backendFolder;
|
|
90
90
|
log.info(`creating backend project ${targetfolder}`);
|
|
91
91
|
if (!fs_1.default.existsSync(`${targetfolder}/.env`)) {
|
|
92
|
-
(0, child_process_1.exec)(`cd ${targetfolder};pnpm install --save nest-keycloak-connect keycloak-connect @nestjs/serve-static jsonwebtoken axios @darkwolf/base64url json-schema @wearenova/mongoose-tenant @nestjs/swagger @nestjs/mongoose mongoose ajv ajv-formats @nestjs/config`, async (error, stdout, stderr) => {
|
|
92
|
+
(0, child_process_1.exec)(`cd ${targetfolder};pnpm install --save nest-keycloak-connect keycloak-connect @nestjs/serve-static jsonwebtoken axios @darkwolf/base64url json-schema @wearenova/mongoose-tenant @nestjs/swagger @nestjs/mongoose mongoose ajv ajv-formats ajv-errors @nestjs/config`, async (error, stdout, stderr) => {
|
|
93
93
|
// log.info(`dependency installed`)
|
|
94
94
|
if (!error) {
|
|
95
95
|
fs_1.default.mkdirSync(`${targetfolder}/public_html`, { recursive: true });
|
|
@@ -129,7 +129,7 @@ const prepareNuxt = (callback) => {
|
|
|
129
129
|
(0, child_process_1.exec)(`cd ${targetfolder};pnpm install;pnpm install -D @sidebase/nuxt-auth @nuxt/ui @types/node @vueuse/nuxt @sidebase/nuxt-auth @vueuse/core nuxt-security prettier `, (error, stdout, stderr) => {
|
|
130
130
|
//;pnpm install
|
|
131
131
|
console.log(error, stdout, stderr);
|
|
132
|
-
(0, child_process_1.exec)(`cd ${targetfolder};pnpm install --save next-auth@4.21.1 @darkwolf/base64url @nuxt/ui ajv dotenv @fullcalendar/core @fullcalendar/vue3 quill uuid
|
|
132
|
+
(0, child_process_1.exec)(`cd ${targetfolder};pnpm install --save next-auth@4.21.1 @darkwolf/base64url @nuxt/ui ajv ajv-formats ajv-errors dotenv @fullcalendar/core @fullcalendar/vue3 quill uuid primeflex primeicons prettier primevue axios json-schema mitt @simitgroup/simpleapp-vue-component@latest`, (error, stdout, stderr) => {
|
|
133
133
|
console.log(error, stdout, stderr);
|
|
134
134
|
fs_1.default.mkdirSync(`${targetfolder}/assets/css/`, { recursive: true });
|
|
135
135
|
fs_1.default.mkdirSync(`${targetfolder}/layouts`, { recursive: true });
|
|
@@ -184,7 +184,7 @@ const prettyNuxt = () => {
|
|
|
184
184
|
};
|
|
185
185
|
exports.prettyNuxt = prettyNuxt;
|
|
186
186
|
const prettyNest = () => {
|
|
187
|
-
(0, child_process_1.exec)(`cd ${config.backendFolder};npm run format`);
|
|
187
|
+
(0, child_process_1.exec)(`cd ${config.backendFolder};npm run format;npx prettier --write src/dicts/foreignkeys.json`);
|
|
188
188
|
};
|
|
189
189
|
exports.prettyNest = prettyNest;
|
|
190
190
|
const prepareOpenApiClient = () => {
|
package/dist/framework.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework.js","sourceRoot":"","sources":["../src/framework.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAmB;AACnB,iDAAwC;AACxC,iCAAwC;AACxC,sDAAuC;AACvC,6BAA0B;AAC1B,MAAM,GAAG,GAAoB,IAAI,cAAM,EAAE,CAAC;AAE1C,IAAI,MAAM,GAAG;IACT,mBAAmB,EAAC,eAAe;IACnC,eAAe,EAAC,aAAa;IAC7B,aAAa,EAAC,MAAM;IACpB,iBAAiB,EAAC,kEAAkE;IACpF,gBAAgB,EAAC,cAAc;IAC/B,cAAc,EAAC,MAAM;IACrB,cAAc,EAAC,iBAAiB;IAChC,iBAAiB,EAAC;QACd,gBAAgB,EAAC,8BAA8B;QAC/C,cAAc,EAAC,YAAY;QAC3B,kBAAkB,EAAC,+CAA+C;QAClE,iBAAiB,EAAC,WAAW;QAC7B,qBAAqB,EAAC,qBAAqB;QAC3C,iBAAiB,EAAC,WAAW;KAChC;CACJ,CAAA;AAEM,MAAM,gBAAgB,GAAC,CAAC,UAAU,EAAC,EAAE;IACxC,MAAM,GAAC,UAAU,CAAA;AACrB,CAAC,CAAA;AAFY,QAAA,gBAAgB,oBAE5B;AACD,2BAA2B;AACpB,MAAM,aAAa,GAAE,CAAC,QAAiB,EAAE,EAAE;IAC9C,MAAM,aAAa,GAAC,MAAM,CAAC,aAAa,CAAA;IACxC,IAAG,CAAC,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAC;QAC7B,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,KAAK,EAAC,CAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAE,aAAa,EAAE,qCAAqC,EAAE,MAAM,CAAC,EAC/F,EAAG,KAAK,EAAE,SAAS,GAAE,CAAC,CAAA;QACtC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAC,CAAC,QAAQ,EAAC,EAAE;YACzB,MAAM,MAAM,GAAG,IAAA,qBAAK,EAAC,MAAM,EAAC,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAC,EAAG,KAAK,EAAE,SAAS,EAAC,CAAC,CAAA;YACtF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAC,CAAC,QAAQ,EAAC,EAAE;gBAC1B,QAAQ,EAAE,CAAA;YACd,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;KACL;SAAI;QACD,QAAQ,EAAE,CAAA;KACb;AACL,CAAC,CAAA;AAdY,QAAA,aAAa,iBAczB;AACD,2BAA2B;AACpB,MAAM,aAAa,GAAG,CAAC,QAAiB,EAAE,EAAE;IAC/C,MAAM,cAAc,GAAC,MAAM,CAAC,cAAc,CAAA;IAC1C,IAAG,CAAC,YAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAC;QAC9B,MAAM,MAAM,GAAG,IAAA,qBAAK,EAAC,KAAK,EAAC,CAAC,aAAa,EAAC,MAAM,EAAC,cAAc,CAAC,EAAC,EAAG,KAAK,EAAE,SAAS,GAAE,CAAC,CAAA;QACvF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAC,CAAC,QAAQ,EAAC,EAAE;YAC1B,QAAQ,EAAE,CAAA;QACd,CAAC,CAAC,CAAA;KACL;SAAI;QACD,QAAQ,EAAE,CAAA;KACb;AACL,CAAC,CAAA;AAVY,QAAA,aAAa,iBAUzB;AAEM,MAAM,WAAW,GAAG,CAAC,QAAiB,EAAC,EAAE;IAC5C,MAAM,YAAY,GAAE,MAAM,CAAC,aAAa,CAAA;IACxC,GAAG,CAAC,IAAI,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAA;IACpD,IAAG,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,YAAY,OAAO,CAAC,EAAC;QAGtC,IAAA,oBAAI,EAAC,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"framework.js","sourceRoot":"","sources":["../src/framework.ts"],"names":[],"mappings":"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"}
|
package/dist/generate.js
CHANGED
|
@@ -46,19 +46,20 @@ const initialize = async (defFolder, backendfolder, frontendfolder, callback) =>
|
|
|
46
46
|
let activatemodules = [];
|
|
47
47
|
//
|
|
48
48
|
const files = (0, fs_1.readdirSync)(defFolder);
|
|
49
|
+
// log.warn("all schemas:",files)
|
|
49
50
|
// readdir(defFolder, (err, files) => {
|
|
50
51
|
// files.forEach((file) => {
|
|
51
52
|
for (let j = 0; j < files.length; j++) {
|
|
52
53
|
const file = files[j];
|
|
54
|
+
log.info(`Load ` + clc.green(file));
|
|
53
55
|
const filearr = file.split('.');
|
|
54
56
|
let rendertype = 'basic';
|
|
55
57
|
const docname = filearr[0].toLowerCase();
|
|
56
58
|
const doctype = filearr[1].toLowerCase();
|
|
57
59
|
const jsonstring = (0, fs_1.readFileSync)(defFolder + path.sep + file, 'utf-8');
|
|
58
|
-
const jsondata = JSON.parse(jsonstring);
|
|
59
60
|
let allmodels = {};
|
|
60
61
|
if (file.endsWith(extjsonschema)) {
|
|
61
|
-
|
|
62
|
+
const jsondata = JSON.parse(jsonstring);
|
|
62
63
|
rendertype = 'basic';
|
|
63
64
|
jsonschemas[docname] = jsondata;
|
|
64
65
|
// foreignkeys:
|
|
@@ -105,6 +106,7 @@ const generate = (docname, doctype, rendertype, allmodels, backendfolder, fronte
|
|
|
105
106
|
models: allmodels,
|
|
106
107
|
autocompletecode: allmodels[capitalizeFirstLetter(docname)].codeField,
|
|
107
108
|
autocompletename: allmodels[capitalizeFirstLetter(docname)].nameField,
|
|
109
|
+
moreAutoComplete: allmodels[capitalizeFirstLetter(docname)].moreAutoComplete,
|
|
108
110
|
schema: allmodels[capitalizeFirstLetter(docname)].model,
|
|
109
111
|
apiSchemaName: capitalizeFirstLetter(docname),
|
|
110
112
|
typename: capitalizeFirstLetter(docname),
|
package/dist/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kEAAkE;AAClE,0EAA0E;AAC1E,sDAAuC;AACvC,sEAAoE;AACpE,uCAAqC;AAIrC,iCAAwC;AACxC,MAAM,GAAG,GAAoB,IAAI,cAAM,EAAE,CAAC;AAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAGjC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,2BAAqG;AACrG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/B,MAAM,EAAE,qBAAqB,EAAE,GAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AACnD,MAAM,KAAK,GAAG,WAAW,CAAC;AAC1B,MAAM,MAAM,GAAG,YAAY,CAAC;AAC5B,MAAM,aAAa,GAAG,kBAAkB,CAAC;AACzC,IAAI,WAAW,GAAG,EAAE,CAAC;AACrB,MAAM,IAAI,GAAG,EAAE,CAAC;AAET,MAAM,UAAU,GAAI,KAAK,EAAE,SAAgB,EAAC,aAAoB,EAAC,cAAqB,EAAC,QAAiB,EAAE,EAAE;IACjH,mBAAmB,CAAC,aAAa,EAAC,cAAc,CAAC,CAAA;IACjD,IAAI,eAAe,GAAgB,EAAE,CAAA;IACrC,GAAG;IACH,MAAM,KAAK,GAAG,IAAA,gBAAW,EAAC,SAAS,CAAC,CAAA;IACpC,uCAAuC;IACrC,4BAA4B;IAC5B,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAE,KAAK,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,UAAU,GAAG,OAAO,CAAC;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,IAAA,iBAAY,EAAC,SAAS,GAAE,IAAI,CAAC,GAAG,GAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACpE,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,14 +13,18 @@ const type_1 = require("../type");
|
|
|
13
13
|
const log = new tslog_1.Logger();
|
|
14
14
|
const X_DOCUMENT_NO = 'x-document-no';
|
|
15
15
|
const X_DOCUMENT_NAME = 'x-document-name';
|
|
16
|
+
const X_AUTOCOMPLETE_FIELD = 'x-autocomplete-field';
|
|
16
17
|
const FOREIGNKEY_PROPERTY = 'x-foreignkey';
|
|
18
|
+
const X_TEL_NO = 'x-tel';
|
|
17
19
|
let allmodels = {};
|
|
18
20
|
let fullschema = {};
|
|
19
21
|
let fieldAutoCompleteCode = '';
|
|
20
22
|
let fieldAutoCompleteName = '';
|
|
23
|
+
let moreAutoComplete = [];
|
|
21
24
|
const readJsonSchemaBuilder = async (doctype, docname, orijsondata, allforeignkeys) => {
|
|
22
25
|
fieldAutoCompleteCode = '';
|
|
23
26
|
fieldAutoCompleteName = '';
|
|
27
|
+
moreAutoComplete = [];
|
|
24
28
|
allmodels = {};
|
|
25
29
|
const validateddata = Object.assign({}, orijsondata);
|
|
26
30
|
let schema;
|
|
@@ -67,7 +71,7 @@ const processObject = (doctype, docname, jsondata) => {
|
|
|
67
71
|
};
|
|
68
72
|
const genSchema = (docname, schematype, jsondata, //JSONSchema7,//|JsonSchemaProperties|JSONSchema7Definition,
|
|
69
73
|
requiredlist) => {
|
|
70
|
-
var _a, _b;
|
|
74
|
+
var _a, _b, _c, _d;
|
|
71
75
|
const newmodel = {};
|
|
72
76
|
const props = Object.getOwnPropertyNames(jsondata !== null && jsondata !== void 0 ? jsondata : {});
|
|
73
77
|
// console.log('==== jsondata', jsondata);
|
|
@@ -82,10 +86,20 @@ requiredlist) => {
|
|
|
82
86
|
const newName = docname + (0, libs_1.capitalizeFirstLetter)(key);
|
|
83
87
|
if (obj.format && obj.format == X_DOCUMENT_NO) {
|
|
84
88
|
fieldAutoCompleteCode = key;
|
|
89
|
+
obj.minLength = (_a = obj.minLength) !== null && _a !== void 0 ? _a : 1;
|
|
90
|
+
jsondata[key]['minLength'] = obj.minLength;
|
|
85
91
|
}
|
|
86
92
|
if (obj.format && obj.format == X_DOCUMENT_NAME) {
|
|
87
93
|
fieldAutoCompleteName = key;
|
|
94
|
+
obj.minLength = (_b = obj.minLength) !== null && _b !== void 0 ? _b : 1;
|
|
95
|
+
jsondata[key]['minLength'] = obj.minLength;
|
|
88
96
|
}
|
|
97
|
+
if (obj[X_AUTOCOMPLETE_FIELD]) {
|
|
98
|
+
moreAutoComplete.push(key);
|
|
99
|
+
}
|
|
100
|
+
// if(obj.format && obj.format==X_TEL_NO){
|
|
101
|
+
// obj.pattern=obj.pattern ?? '/^\d{7,15}$/gm'
|
|
102
|
+
// }
|
|
89
103
|
// if (obj.type == 'object' && obj.items ){
|
|
90
104
|
// console.log("Refer to another object",docname,': ',key,obj,obj.items)
|
|
91
105
|
// obj,obj.items
|
|
@@ -99,12 +113,15 @@ requiredlist) => {
|
|
|
99
113
|
// console.warn("FOREIGNKEY_PROPERTY exists",FOREIGNKEY_PROPERTY,obj[FOREIGNKEY_PROPERTY])
|
|
100
114
|
const masterdatacollection = obj[FOREIGNKEY_PROPERTY];
|
|
101
115
|
const clientdatacollection = docname.toLowerCase();
|
|
102
|
-
const foreignkeyidentity = key
|
|
116
|
+
const foreignkeyidentity = key;
|
|
103
117
|
if (!storage_1.foreignkeys[masterdatacollection]) {
|
|
104
118
|
let tmp = {};
|
|
105
119
|
tmp[clientdatacollection] = [foreignkeyidentity];
|
|
106
120
|
storage_1.foreignkeys[masterdatacollection] = tmp;
|
|
107
121
|
}
|
|
122
|
+
else if (!storage_1.foreignkeys[masterdatacollection][clientdatacollection]) {
|
|
123
|
+
storage_1.foreignkeys[masterdatacollection][clientdatacollection] = [foreignkeyidentity];
|
|
124
|
+
}
|
|
108
125
|
else {
|
|
109
126
|
storage_1.foreignkeys[masterdatacollection][clientdatacollection].push(foreignkeyidentity);
|
|
110
127
|
}
|
|
@@ -121,7 +138,7 @@ requiredlist) => {
|
|
|
121
138
|
else if (obj.type == 'array' && (objectitem === null || objectitem === void 0 ? void 0 : objectitem.type) != 'object') {
|
|
122
139
|
//array need submodel
|
|
123
140
|
// genSchema(newName, obj.type, obj.items.properties);
|
|
124
|
-
const objecttype = (
|
|
141
|
+
const objecttype = (_d = (_c = objectitem.type) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : 'string';
|
|
125
142
|
newmodel[key] = [objecttype];
|
|
126
143
|
}
|
|
127
144
|
else {
|
|
@@ -129,7 +146,7 @@ requiredlist) => {
|
|
|
129
146
|
// console.log(key,'--------newmodel',obj, newmodel[key]);
|
|
130
147
|
}
|
|
131
148
|
}
|
|
132
|
-
allmodels[docname] = { type: schematype, model: newmodel, codeField: fieldAutoCompleteCode, nameField: fieldAutoCompleteName };
|
|
149
|
+
allmodels[docname] = { type: schematype, model: newmodel, codeField: fieldAutoCompleteCode, nameField: fieldAutoCompleteName, moreAutoComplete: moreAutoComplete };
|
|
133
150
|
return newmodel;
|
|
134
151
|
};
|
|
135
152
|
const getField = (fieldname, obj, isrequired) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonschemabuilder.js","sourceRoot":"","sources":["../../src/processors/jsonschemabuilder.ts"],"names":[],"mappings":";;;;;;AAGA,kCAAgD;AAEhD,iCAAwC;AACxC,iGAA6D;AAC7D,wCAAsC;AACtC,sDAAsD;AACtD,kCAOiB;AAEjB,MAAM,GAAG,GAAoB,IAAI,cAAM,EAAE,CAAC;AAC1C,MAAM,aAAa,GAAC,eAAe,CAAA;AACnC,MAAM,eAAe,GAAC,iBAAiB,CAAA;AACvC,MAAM,mBAAmB,GAAC,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"jsonschemabuilder.js","sourceRoot":"","sources":["../../src/processors/jsonschemabuilder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/framework.ts
CHANGED
|
@@ -61,7 +61,7 @@ export const prepareNest = (callback:Function)=>{
|
|
|
61
61
|
if(!fs.existsSync(`${targetfolder}/.env`)){
|
|
62
62
|
|
|
63
63
|
|
|
64
|
-
exec(`cd ${targetfolder};pnpm install --save nest-keycloak-connect keycloak-connect @nestjs/serve-static jsonwebtoken axios @darkwolf/base64url json-schema @wearenova/mongoose-tenant @nestjs/swagger @nestjs/mongoose mongoose ajv ajv-formats @nestjs/config`,async (error, stdout, stderr)=>{
|
|
64
|
+
exec(`cd ${targetfolder};pnpm install --save nest-keycloak-connect keycloak-connect @nestjs/serve-static jsonwebtoken axios @darkwolf/base64url json-schema @wearenova/mongoose-tenant @nestjs/swagger @nestjs/mongoose mongoose ajv ajv-formats ajv-errors @nestjs/config`,async (error, stdout, stderr)=>{
|
|
65
65
|
// log.info(`dependency installed`)
|
|
66
66
|
if(!error){
|
|
67
67
|
fs.mkdirSync(`${targetfolder}/public_html`,{recursive:true})
|
|
@@ -101,7 +101,7 @@ export const prepareNuxt = (callback:Function)=>{
|
|
|
101
101
|
exec(`cd ${targetfolder};pnpm install;pnpm install -D @sidebase/nuxt-auth @nuxt/ui @types/node @vueuse/nuxt @sidebase/nuxt-auth @vueuse/core nuxt-security prettier `, (error, stdout, stderr)=>{
|
|
102
102
|
//;pnpm install
|
|
103
103
|
console.log(error, stdout, stderr)
|
|
104
|
-
exec(`cd ${targetfolder};pnpm install --save next-auth@4.21.1 @darkwolf/base64url @nuxt/ui ajv dotenv @fullcalendar/core @fullcalendar/vue3 quill uuid
|
|
104
|
+
exec(`cd ${targetfolder};pnpm install --save next-auth@4.21.1 @darkwolf/base64url @nuxt/ui ajv ajv-formats ajv-errors dotenv @fullcalendar/core @fullcalendar/vue3 quill uuid primeflex primeicons prettier primevue axios json-schema mitt @simitgroup/simpleapp-vue-component@latest`, (error, stdout, stderr)=>{
|
|
105
105
|
console.log(error, stdout, stderr)
|
|
106
106
|
|
|
107
107
|
fs.mkdirSync(`${targetfolder}/assets/css/`,{recursive:true})
|
|
@@ -159,7 +159,7 @@ export const prettyNuxt = ()=>{
|
|
|
159
159
|
|
|
160
160
|
}
|
|
161
161
|
export const prettyNest = ()=>{
|
|
162
|
-
exec(`cd ${config.backendFolder};npm run format`)
|
|
162
|
+
exec(`cd ${config.backendFolder};npm run format;npx prettier --write src/dicts/foreignkeys.json`)
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
export const prepareOpenApiClient = () => {
|
package/src/generate.ts
CHANGED
|
@@ -26,20 +26,21 @@ export const initialize = async (defFolder:string,backendfolder:string,frontend
|
|
|
26
26
|
let activatemodules:ModuleObject[]=[]
|
|
27
27
|
//
|
|
28
28
|
const files = readdirSync(defFolder)
|
|
29
|
+
// log.warn("all schemas:",files)
|
|
29
30
|
// readdir(defFolder, (err, files) => {
|
|
30
31
|
// files.forEach((file) => {
|
|
31
32
|
for(let j = 0; j< files.length;j++){
|
|
32
33
|
const file = files[j]
|
|
34
|
+
log.info(`Load `+clc.green(file))
|
|
33
35
|
const filearr = file.split('.');
|
|
34
36
|
let rendertype = 'basic';
|
|
35
37
|
const docname = filearr[0].toLowerCase();
|
|
36
38
|
const doctype = filearr[1].toLowerCase();
|
|
37
|
-
const jsonstring = readFileSync(defFolder +path.sep+ file, 'utf-8');
|
|
38
|
-
const jsondata = JSON.parse(jsonstring);
|
|
39
|
+
const jsonstring = readFileSync(defFolder +path.sep+ file, 'utf-8');
|
|
39
40
|
let allmodels: ChildModels = {} as ChildModels;
|
|
40
41
|
|
|
41
|
-
if (file.endsWith(extjsonschema)) {
|
|
42
|
-
|
|
42
|
+
if (file.endsWith(extjsonschema)) {
|
|
43
|
+
const jsondata = JSON.parse(jsonstring);
|
|
43
44
|
rendertype = 'basic';
|
|
44
45
|
jsonschemas[docname] = jsondata;
|
|
45
46
|
// foreignkeys:
|
|
@@ -96,6 +97,7 @@ const generate = (
|
|
|
96
97
|
models: allmodels,
|
|
97
98
|
autocompletecode:allmodels[capitalizeFirstLetter(docname)].codeField,
|
|
98
99
|
autocompletename:allmodels[capitalizeFirstLetter(docname)].nameField,
|
|
100
|
+
moreAutoComplete:allmodels[capitalizeFirstLetter(docname)].moreAutoComplete,
|
|
99
101
|
schema: allmodels[capitalizeFirstLetter(docname)].model,
|
|
100
102
|
apiSchemaName: capitalizeFirstLetter(docname), //capitalizeFirstLetter(doctype) + 'ApiSchema',
|
|
101
103
|
typename: capitalizeFirstLetter(docname),
|
|
@@ -19,12 +19,15 @@ import { json } from 'stream/consumers';
|
|
|
19
19
|
const log: Logger<ILogObj> = new Logger();
|
|
20
20
|
const X_DOCUMENT_NO='x-document-no'
|
|
21
21
|
const X_DOCUMENT_NAME='x-document-name'
|
|
22
|
+
const X_AUTOCOMPLETE_FIELD='x-autocomplete-field'
|
|
22
23
|
const FOREIGNKEY_PROPERTY='x-foreignkey'
|
|
24
|
+
|
|
25
|
+
const X_TEL_NO='x-tel'
|
|
23
26
|
let allmodels: ChildModels = {};
|
|
24
27
|
let fullschema={}
|
|
25
28
|
let fieldAutoCompleteCode=''
|
|
26
29
|
let fieldAutoCompleteName=''
|
|
27
|
-
|
|
30
|
+
let moreAutoComplete:string[]=[]
|
|
28
31
|
export const readJsonSchemaBuilder = async (
|
|
29
32
|
doctype: string,
|
|
30
33
|
docname: string,
|
|
@@ -34,6 +37,7 @@ export const readJsonSchemaBuilder = async (
|
|
|
34
37
|
|
|
35
38
|
fieldAutoCompleteCode=''
|
|
36
39
|
fieldAutoCompleteName=''
|
|
40
|
+
moreAutoComplete=[]
|
|
37
41
|
allmodels = {};
|
|
38
42
|
const validateddata: JSONSchema7 = { ...orijsondata };
|
|
39
43
|
let schema: SchemaModel | SchemaModel[];
|
|
@@ -113,10 +117,21 @@ const genSchema = (
|
|
|
113
117
|
const newName: string = docname + capitalizeFirstLetter(key);
|
|
114
118
|
if(obj.format && obj.format==X_DOCUMENT_NO){
|
|
115
119
|
fieldAutoCompleteCode=key
|
|
120
|
+
obj.minLength=obj.minLength??1
|
|
121
|
+
jsondata[key]['minLength']=obj.minLength
|
|
116
122
|
}
|
|
117
123
|
if(obj.format && obj.format==X_DOCUMENT_NAME){
|
|
118
124
|
fieldAutoCompleteName=key
|
|
125
|
+
obj.minLength=obj.minLength??1
|
|
126
|
+
jsondata[key]['minLength']=obj.minLength
|
|
127
|
+
}
|
|
128
|
+
if(obj[X_AUTOCOMPLETE_FIELD]){
|
|
129
|
+
moreAutoComplete.push(key)
|
|
119
130
|
}
|
|
131
|
+
|
|
132
|
+
// if(obj.format && obj.format==X_TEL_NO){
|
|
133
|
+
// obj.pattern=obj.pattern ?? '/^\d{7,15}$/gm'
|
|
134
|
+
// }
|
|
120
135
|
// if (obj.type == 'object' && obj.items ){
|
|
121
136
|
// console.log("Refer to another object",docname,': ',key,obj,obj.items)
|
|
122
137
|
|
|
@@ -132,11 +147,14 @@ const genSchema = (
|
|
|
132
147
|
// console.warn("FOREIGNKEY_PROPERTY exists",FOREIGNKEY_PROPERTY,obj[FOREIGNKEY_PROPERTY])
|
|
133
148
|
const masterdatacollection = obj[FOREIGNKEY_PROPERTY]
|
|
134
149
|
const clientdatacollection = docname.toLowerCase()
|
|
135
|
-
const foreignkeyidentity= key
|
|
150
|
+
const foreignkeyidentity= key
|
|
136
151
|
if(!foreignkeys[masterdatacollection]){
|
|
137
152
|
let tmp:TypeForeignKey = {} as TypeForeignKey
|
|
138
153
|
tmp[clientdatacollection]=[foreignkeyidentity]
|
|
139
154
|
foreignkeys[masterdatacollection] = tmp
|
|
155
|
+
}
|
|
156
|
+
else if(!foreignkeys[masterdatacollection][clientdatacollection]){
|
|
157
|
+
foreignkeys[masterdatacollection][clientdatacollection]=[foreignkeyidentity]
|
|
140
158
|
}else{
|
|
141
159
|
foreignkeys[masterdatacollection][clientdatacollection].push(foreignkeyidentity)
|
|
142
160
|
}
|
|
@@ -159,7 +177,7 @@ const genSchema = (
|
|
|
159
177
|
// console.log(key,'--------newmodel',obj, newmodel[key]);
|
|
160
178
|
}
|
|
161
179
|
}
|
|
162
|
-
allmodels[docname] = { type: schematype, model: newmodel,codeField: fieldAutoCompleteCode ,nameField: fieldAutoCompleteName };
|
|
180
|
+
allmodels[docname] = { type: schematype, model: newmodel,codeField: fieldAutoCompleteCode ,nameField: fieldAutoCompleteName,moreAutoComplete:moreAutoComplete };
|
|
163
181
|
return newmodel;
|
|
164
182
|
};
|
|
165
183
|
|
package/src/type.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { JSONSchema7, JSONSchema7Definition } from 'json-schema';
|
|
2
2
|
export type ChildModels = {
|
|
3
|
-
[key: string]: { type: string; model: SchemaModel,codeField:string,nameField:string };
|
|
3
|
+
[key: string]: { type: string; model: SchemaModel,codeField:string,nameField:string,moreAutoComplete:string[] };
|
|
4
4
|
};
|
|
5
5
|
export enum Fieldtypes {
|
|
6
6
|
'string' = 'string',
|
|
@@ -51,6 +51,7 @@ doctype: string
|
|
|
51
51
|
models: ChildModels
|
|
52
52
|
autocompletecode:string
|
|
53
53
|
autocompletename:string
|
|
54
|
+
moreAutoComplete:string[]
|
|
54
55
|
schema: SchemaModel
|
|
55
56
|
apiSchemaName: string
|
|
56
57
|
typename: string
|
|
@@ -29,4 +29,6 @@ const schemasetting = {
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
export const <%= it.doctype %>MongoSchema = new Schema(schemasetting,{collection: '<%= it.name %>'})
|
|
32
|
-
.index({<%=it.autocompletecode%>:1,orgId:1},{unique:true})
|
|
32
|
+
.index({<%=it.autocompletecode%>:1,orgId:1},{unique:true})
|
|
33
|
+
.index({<%=it.autocompletename%>:1,orgId:1});
|
|
34
|
+
|
|
@@ -9,9 +9,11 @@
|
|
|
9
9
|
<% let skipcolumns = ['_id','createdby','created','updatedby','updated','orgId','branchId','tenantId','doctype'] %>
|
|
10
10
|
|
|
11
11
|
import { <%= it.typename %>Doc } from "../../../simpleapp/simpleappdocs/<%= it.typename %>Doc";
|
|
12
|
+
import SimpleAppDatatable from "@simitgroup/simpleapp-vue-component/src/components/SimpleAppDatatable.vue";
|
|
13
|
+
import {InputTableColumnType,InputTableColumn} from "@simitgroup/simpleapp-vue-component/src/type";
|
|
12
14
|
const { $event, $listen } = useNuxtApp();
|
|
13
15
|
const route = useRoute()
|
|
14
|
-
const doc = new <%= it.typename %>Doc(route.params.xorg,$event, $listen);
|
|
16
|
+
const doc = new <%= it.typename %>Doc(route.params.xorg.toString(),$event, $listen);
|
|
15
17
|
const documentpath = `/${route.params.xorg}/<%= it.name %>`;
|
|
16
18
|
const data = doc.getReactiveData();
|
|
17
19
|
const columns = [
|
|
@@ -21,6 +23,20 @@
|
|
|
21
23
|
<%} else if(['string','number','integer'].indexOf(obj.type)>=0){%>'<%=key%>',<%}%>
|
|
22
24
|
<%})%>
|
|
23
25
|
]
|
|
26
|
+
//prepare subtable if exists
|
|
27
|
+
<%Object.keys(it.jsonschema.properties).forEach(function(key) { %>
|
|
28
|
+
<% let obj=it.jsonschema.properties[key] %>
|
|
29
|
+
|
|
30
|
+
<% if(obj.type=='array' && obj.items.type=='object' && obj.items['properties']){ %>
|
|
31
|
+
<%let tablefields = Object.keys(obj.items.properties) %>
|
|
32
|
+
const <%=it.name%>_<%=key%> :InputTableColumn[] = [
|
|
33
|
+
<% for(let a=0;a<tablefields.length;a++){%>
|
|
34
|
+
{type:InputTableColumnType.field, field:'<%= tablefields[a] %>',style:'width:10%'},
|
|
35
|
+
<%}%>
|
|
36
|
+
]
|
|
37
|
+
<%}%>
|
|
38
|
+
<%})%>
|
|
39
|
+
|
|
24
40
|
</script>
|
|
25
41
|
<template>
|
|
26
42
|
<div>
|
|
@@ -39,7 +55,7 @@
|
|
|
39
55
|
<% } else if(obj.type=='array' && obj.items && obj.items.type =='string' ){ %>
|
|
40
56
|
<SimpleAppChip autofocus :setting="o.getField('#/properties/<%= key %>')" v-model="data.<%= key %>"/>
|
|
41
57
|
<% } else if(obj.type=='object' && typeof obj['x-foreignkey']!='undefined'){ %>
|
|
42
|
-
<SimpleAppAutocomplete
|
|
58
|
+
<SimpleAppAutocomplete :getAutocomplete="getAutocomplete" :setting="o.getField('#/properties/<%= key %>')"
|
|
43
59
|
v-model="data.<%= key %>" optionLabel="label" :remote-src="getAutocomplete('<%=obj['x-foreignkey']%>')"/>
|
|
44
60
|
<% } else if(obj.type=='string'){ %>
|
|
45
61
|
<% if(obj.format=='date'){ %>
|
|
@@ -55,9 +71,48 @@
|
|
|
55
71
|
<% } else {%>
|
|
56
72
|
<SimpleAppText autofocus :setting="o.getField('#/properties/<%= key %>')" v-model="data.<%= key %>"/>
|
|
57
73
|
<% }%>
|
|
58
|
-
<% } else { %>
|
|
59
|
-
<
|
|
60
|
-
|
|
74
|
+
<% } else if(obj.type=='object' && obj.properties){ %>
|
|
75
|
+
<SimpleAppValue :setting="o.getField('#/properties/<%= key %>')">
|
|
76
|
+
<%Object.keys(obj.properties).forEach(function(skey) { %>
|
|
77
|
+
<% let sobj=obj.properties[skey] %>
|
|
78
|
+
<% let fieldpath=`o.getField('#/properties/${key}/properties/${skey}')` %>
|
|
79
|
+
<% let vmodel=`data.${key}.${skey}` %>
|
|
80
|
+
<% let instancePath=`#/${key}/${skey}` %>
|
|
81
|
+
|
|
82
|
+
<% if(sobj.type=='boolean'){ %>
|
|
83
|
+
<SimpleAppCheckbox autofocus :setting="<%~fieldpath%>" instancePath="<%=instancePath%>" v-model="<%= vmodel %>"/>
|
|
84
|
+
<% } else if(sobj.type=='number' || sobj.type=='integer'){ %>
|
|
85
|
+
<SimpleAppNumber autofocus :setting="<%~fieldpath%>" instancePath="<%=instancePath%>" v-model="<%= vmodel %>"/>
|
|
86
|
+
<% } else if(sobj.type=='array' && sobj.items && sobj.items.type =='string' ){ %>
|
|
87
|
+
<SimpleAppChip autofocus :setting="<%~fieldpath%>" instancePath="<%=instancePath%>" v-model="<%= vmodel %>"/>
|
|
88
|
+
<% } else if(sobj.type=='object' && typeof sobj['x-foreignkey']!='undefined'){ %>
|
|
89
|
+
<SimpleAppAutocomplete autofocus :setting="<%~fieldpath%>" instancePath="<%=instancePath%>"
|
|
90
|
+
v-model="<%= vmodel %>" optionLabel="label" :remote-src="getAutocomplete('<%=sobj['x-foreignkey']%>')"/>
|
|
91
|
+
<% } else if(sobj.type=='string'){ %>
|
|
92
|
+
<% if(sobj.format=='date'){ %>
|
|
93
|
+
<SimpleAppText type="<%=sobj.format%>" instancePath="<%=instancePath%>" autofocus :setting="<%~fieldpath%>" v-model="<%= vmodel %>"/>
|
|
94
|
+
<% } else if(sobj.format=='x-text'){ %>
|
|
95
|
+
<SimpleAppTextarea :setting="<%~fieldpath%>'" instancePath="<%=instancePath%>" v-model="<%= vmodel %>"/>
|
|
96
|
+
<% } else if(sobj.format=='x-html'){ %>
|
|
97
|
+
<SimpleAppEditor editorStyle="height: 320px" instancePath="<%=instancePath%>" :setting="<%=fieldpath%>" v-model="<%= vmodel %>"/>
|
|
98
|
+
<% } else if(sobj.format=='email'){ %>
|
|
99
|
+
<SimpleAppText autofocus type="<%=~obj.type%>" instancePath="<%=instancePath%>" :setting="<%=fieldpath%>" v-model="<%= vmodel %>"/>
|
|
100
|
+
<% } else if(sobj.enum){ %>
|
|
101
|
+
<SimpleAppRadio autofocus :setting="<%~fieldpath%>" instancePath="<%=instancePath%>" v-model="<%= vmodel %>"/>
|
|
102
|
+
<% } else {%>
|
|
103
|
+
<SimpleAppText autofocus :setting="<%~fieldpath%>" instancePath="<%=instancePath%>" v-model="<%= vmodel %>"/>
|
|
104
|
+
<% }%>
|
|
105
|
+
<% } %>
|
|
106
|
+
<%})%>
|
|
107
|
+
</SimpleAppValue>
|
|
108
|
+
<% } else if(obj.type=='array' && obj.items.type=='object'){%>
|
|
109
|
+
<button @click="doc.add<%=key%>()" type="button">+</button>
|
|
110
|
+
<SimpleAppInputTable :getAutocomplete="getAutocomplete" :getField="o.getField"
|
|
111
|
+
:setting="o.getField('#/properties/<%=key%>')" #default="row" v-model="data.<%=key%>" :columns="<%=it.name%>_<%=key%>"></SimpleAppInputTable>
|
|
112
|
+
<% } else{%>
|
|
113
|
+
<!-- Can auto generate <%=obj.key %> -->
|
|
114
|
+
<!-- <%~ JSON.stringify(obj) %>-->
|
|
115
|
+
<%}%>
|
|
61
116
|
<%})%>
|
|
62
117
|
|
|
63
118
|
</CrudSimple>
|
|
@@ -10,7 +10,7 @@ import { Injectable } from '@nestjs/common';
|
|
|
10
10
|
import { InjectModel } from '@nestjs/mongoose';
|
|
11
11
|
import { Model } from 'mongoose';
|
|
12
12
|
import {<%= it.typename%>JsonSchema } from './<%= it.doctype %>.jsonschema'
|
|
13
|
-
import { SimpleAppService,IsolationType } from '../../class/SimpleAppService';
|
|
13
|
+
import { SimpleAppService,IsolationType,HookType } from '../../class/SimpleAppService';
|
|
14
14
|
import { <%Object.keys(it.models).forEach(function(key) { %> <%=key %>, <%})%> } from './<%= it.doctype %>.type';
|
|
15
15
|
|
|
16
16
|
|
|
@@ -20,8 +20,18 @@ export class <%= it.typename %>Service extends SimpleAppService<<%= it.typename
|
|
|
20
20
|
protected documentIdentityName='<%~ it.autocompletename %>'
|
|
21
21
|
constructor(@InjectModel('<%= it.name %>') mydoc: Model<<%= it.typename %>>,
|
|
22
22
|
) {
|
|
23
|
-
super(mydoc,IsolationType.org);
|
|
23
|
+
super('<%= it.doctype %>','<%= it.name %>',mydoc,IsolationType.org);
|
|
24
24
|
this.setSchema(<%= it.typename%>JsonSchema)
|
|
25
|
+
|
|
26
|
+
<%if(it.moreAutoComplete.length>0){%>
|
|
27
|
+
this.addAutoCompleteField({
|
|
28
|
+
<%Object.keys(it.moreAutoComplete).forEach(function(key) { %>
|
|
29
|
+
<% let f=it.moreAutoComplete[key] %>
|
|
30
|
+
<%~ `${f}: '${f}'`, %>
|
|
31
|
+
<%})%>
|
|
32
|
+
})
|
|
33
|
+
<%}%>
|
|
34
|
+
|
|
25
35
|
}
|
|
26
36
|
|
|
27
37
|
|
|
@@ -12,7 +12,9 @@ import { Configuration,
|
|
|
12
12
|
<%= it.doctype.toUpperCase()%>Api,
|
|
13
13
|
<%= it.typename%> ,
|
|
14
14
|
<%Object.keys(it.schema).forEach(function(key){%>
|
|
15
|
-
<% if(typeof it.schema[key]=='string')
|
|
15
|
+
<% if(typeof it.schema[key]=='string' || (Array.isArray(it.schema[key]) && typeof it.schema[key][0]=='string')){%>
|
|
16
|
+
<%= it.schema[key] %>,
|
|
17
|
+
<%}%>
|
|
16
18
|
<%})%>
|
|
17
19
|
|
|
18
20
|
} from '../openapi';
|
|
@@ -57,6 +59,38 @@ export class <%= it.typename%>Doc extends SimpleAppClient<<%= it.typename%>,<%=
|
|
|
57
59
|
this.setData(newdata)
|
|
58
60
|
}
|
|
59
61
|
|
|
62
|
+
<%Object.keys(it.jsonschema.properties).forEach(function(key) { %>
|
|
63
|
+
<% let obj=it.jsonschema.properties[key] %>
|
|
64
|
+
|
|
65
|
+
<% if(obj.type=='array' && obj.items.type=='object' && obj.items['properties']){ %>
|
|
66
|
+
<%let tablefields = Object.keys(obj.items.properties) %>
|
|
67
|
+
add<%=key%> = () => {
|
|
68
|
+
const tmp:<%=it.typename%><%=capitalizeFirstLetter(key)%> = {
|
|
69
|
+
<% for(let a=0;a<tablefields.length;a++){%>
|
|
70
|
+
<% const skey = tablefields[a] %>
|
|
71
|
+
<% const sobj = obj.items.properties[skey] %>
|
|
72
|
+
<%if(sobj.type=='object' && typeof sobj['x-foreignkey']!='undefined'){%>
|
|
73
|
+
<%=skey%>: <%~ sobj.default?JSON.stringify(sobj.default): '{_id:"",label:""}'%>,
|
|
74
|
+
<%}else if(sobj.type=='boolean'){%>
|
|
75
|
+
<%=skey%>: <%=sobj.default??false%>,
|
|
76
|
+
<%}else if(sobj.type=='number'){%>
|
|
77
|
+
<%=skey%>: <%=sobj.default??0.00%>,
|
|
78
|
+
<%}else if(sobj.type=='integer'){%>
|
|
79
|
+
<%=skey%>: <%=sobj.default??0%>,
|
|
80
|
+
<%}else if(sobj.type=='string'){%>
|
|
81
|
+
<%=skey%>: '<%=sobj.default??""%>',
|
|
82
|
+
<%}%>
|
|
83
|
+
|
|
84
|
+
<%}%>
|
|
85
|
+
}
|
|
86
|
+
this.getReactiveData().value.<%= key %>.push(tmp)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
<%}%>
|
|
91
|
+
<%})%>
|
|
92
|
+
|
|
93
|
+
|
|
60
94
|
/*****************************customized frontend + backend code*****************************************/
|
|
61
95
|
|
|
62
96
|
<%~ it.bothEndCode %>
|
|
@@ -3,6 +3,7 @@ import { InjectModel } from '@nestjs/mongoose';
|
|
|
3
3
|
import { Model } from 'mongoose';
|
|
4
4
|
import Ajv from 'ajv';
|
|
5
5
|
import addFormats from 'ajv-formats';
|
|
6
|
+
import addErrors from 'ajv-errors';
|
|
6
7
|
import foreignkeys from '../dicts/foreignkeys.json';
|
|
7
8
|
|
|
8
9
|
import {
|
|
@@ -16,26 +17,51 @@ export enum IsolationType {
|
|
|
16
17
|
'tenant' = 'tenant',
|
|
17
18
|
'branch' = 'branch',
|
|
18
19
|
}
|
|
20
|
+
export enum HookType {
|
|
21
|
+
'init'='init',
|
|
22
|
+
'beforeSearch'='beforeSearch',
|
|
23
|
+
'afterSearch'='afterSearch',
|
|
24
|
+
'beforeValidation'='beforeValidation',
|
|
25
|
+
'afterValidation'='afterValidation',
|
|
26
|
+
'beforeCreate'='beforeCreate',
|
|
27
|
+
'afterCreate'='afterCreate',
|
|
28
|
+
'beforeUpdate'='beforeUpdate',
|
|
29
|
+
'afterUpdate'='afterUpdate',
|
|
30
|
+
'beforeDelete'='beforeDelete',
|
|
31
|
+
'afterDelete'='afterDelete',
|
|
32
|
+
'beforeFetchRecord'='beforeFetchRecord',
|
|
33
|
+
'afterFetchRecord'='afterFetchRecord',
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
export type MoreProjectionType = {
|
|
38
|
+
[key:string]:string
|
|
39
|
+
}
|
|
19
40
|
@Injectable()
|
|
20
41
|
export class SimpleAppService<T extends { _id?: string }> {
|
|
21
42
|
protected jsonschema = { type: 'object', properties: {}, required: [] };
|
|
22
43
|
protected documentIdentityCode = 'code';
|
|
23
44
|
protected documentIdentityName = 'label';
|
|
24
|
-
protected documentName = '
|
|
25
|
-
protected documentType = '
|
|
45
|
+
protected documentName = '-unknowndocname-';
|
|
46
|
+
protected documentType = '-unknowndoctype-';
|
|
26
47
|
protected LIMITPERPAGE = 20;
|
|
48
|
+
protected moreAutoCompleteField:MoreProjectionType={}
|
|
27
49
|
protected isolationtype: IsolationType = IsolationType.org;
|
|
28
50
|
protected isolationFilter: any = {};
|
|
29
51
|
protected data: T = { _id: '' } as T;
|
|
30
52
|
private doc: Model<T>; //set private to prevent developer break data isolation control
|
|
31
53
|
protected errorlist = [];
|
|
32
54
|
constructor(
|
|
55
|
+
doctype:string,
|
|
56
|
+
docname:string,
|
|
33
57
|
newdoc: Model<T>,
|
|
34
58
|
isolationtype: IsolationType = IsolationType.org,
|
|
35
59
|
) {
|
|
60
|
+
this.documentType=doctype
|
|
61
|
+
this.documentName=docname
|
|
36
62
|
this.doc = newdoc;
|
|
37
63
|
this.isolationtype = isolationtype;
|
|
38
|
-
|
|
64
|
+
this.hook(HookType.init,this.documentName)
|
|
39
65
|
// this.tenantdoc = tenantdoc
|
|
40
66
|
}
|
|
41
67
|
getRecordId = (): string => this.data._id;
|
|
@@ -80,20 +106,32 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
80
106
|
throw new InternalServerErrorException(err.message);
|
|
81
107
|
}
|
|
82
108
|
}
|
|
109
|
+
addAutoCompleteField = (morefield:MoreProjectionType)=>{
|
|
110
|
+
const props = Object.getOwnPropertyNames(morefield)
|
|
111
|
+
console.log('addAutoCompleteField',props)
|
|
112
|
+
for(let i=0;i<props.length;i++){
|
|
113
|
+
const key = props[i]
|
|
114
|
+
this.moreAutoCompleteField[key] = '$'+morefield[key]
|
|
115
|
+
}
|
|
116
|
+
console.log(this.moreAutoCompleteField)
|
|
117
|
+
}
|
|
83
118
|
async getAutoComplete(keyword: string) {
|
|
84
119
|
try {
|
|
85
120
|
const filter1 = {};
|
|
86
121
|
const filter2 = {};
|
|
87
|
-
filter1[this.documentIdentityCode] = { $regex: keyword };
|
|
88
|
-
filter2[this.documentIdentityName] = { $regex: keyword };
|
|
122
|
+
filter1[this.documentIdentityCode] = { $regex: keyword,$options:'i' };
|
|
123
|
+
filter2[this.documentIdentityName] = { $regex: keyword,$options:'i' };
|
|
89
124
|
const filterobj = { $or: [filter1, filter2] };
|
|
90
125
|
|
|
91
126
|
Object.assign(filterobj, this.getIsolationFilter());
|
|
92
|
-
|
|
127
|
+
let projections = {
|
|
93
128
|
id: `\$_id`,
|
|
94
129
|
label: `\$${this.documentIdentityCode}`,
|
|
95
130
|
name: `\$${this.documentIdentityName}`,
|
|
96
131
|
};
|
|
132
|
+
if(this.moreAutoCompleteField){
|
|
133
|
+
Object.assign(projections,this.moreAutoCompleteField)
|
|
134
|
+
}
|
|
97
135
|
const products = await this.doc.find(filterobj, projections, {
|
|
98
136
|
limit: this.LIMITPERPAGE,
|
|
99
137
|
});
|
|
@@ -107,11 +145,14 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
107
145
|
}
|
|
108
146
|
async search(filters: Object) {
|
|
109
147
|
try {
|
|
148
|
+
|
|
110
149
|
Object.assign(filters, this.getIsolationFilter());
|
|
150
|
+
await this.hook(HookType.beforeSearch,filters)
|
|
111
151
|
const products = await this.doc.find(filters);
|
|
112
152
|
const productlist = products.map((p: T) => {
|
|
113
153
|
return p;
|
|
114
154
|
});
|
|
155
|
+
await this.hook(HookType.afterSearch,productlist)
|
|
115
156
|
// console.log(products);
|
|
116
157
|
return productlist;
|
|
117
158
|
} catch (err) {
|
|
@@ -120,7 +161,9 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
120
161
|
// return this;
|
|
121
162
|
}
|
|
122
163
|
async findById(id: string) {
|
|
164
|
+
await this.hook(HookType.beforeFetchRecord,id)
|
|
123
165
|
const data = await this.search({ _id: id });
|
|
166
|
+
await this.hook(HookType.afterFetchRecord,data)
|
|
124
167
|
if (data.length == 1) {
|
|
125
168
|
// console.log('data0', data[0]);
|
|
126
169
|
return data[0];
|
|
@@ -133,11 +176,13 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
133
176
|
let result;
|
|
134
177
|
|
|
135
178
|
try {
|
|
179
|
+
await this.hook(HookType.beforeCreate,this.data)
|
|
136
180
|
Object.assign(this.data, User.getInstance().getCreateFilter());
|
|
137
181
|
delete this.data._id;
|
|
138
|
-
this.validateData(this.data);
|
|
182
|
+
await this.validateData(this.data);
|
|
139
183
|
const newdoc = new this.doc(this.data);
|
|
140
184
|
result = await newdoc.save();
|
|
185
|
+
await this.hook(HookType.afterCreate,result)
|
|
141
186
|
} catch (err) {
|
|
142
187
|
throw new InternalServerErrorException(err.message);
|
|
143
188
|
}
|
|
@@ -146,7 +191,7 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
146
191
|
async update() {
|
|
147
192
|
const id: string = this.getRecordId();
|
|
148
193
|
Object.assign(this.data, User.getInstance().getUpdateFilter());
|
|
149
|
-
this.findIdThenUpdate(id, this.data);
|
|
194
|
+
await this.findIdThenUpdate(id, this.data);
|
|
150
195
|
}
|
|
151
196
|
async delete() {
|
|
152
197
|
const id: string = this.getRecordId();
|
|
@@ -157,27 +202,32 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
157
202
|
return dependency;
|
|
158
203
|
}
|
|
159
204
|
}
|
|
160
|
-
hook(type: string, data
|
|
205
|
+
hook = async (type: string, data?: any) =>{
|
|
206
|
+
console.log("Default hook",data)
|
|
161
207
|
return true;
|
|
162
208
|
}
|
|
163
|
-
validateData(data: T) {
|
|
209
|
+
async validateData(data: T) {
|
|
164
210
|
const ajv = new Ajv({ allErrors: true });
|
|
165
211
|
addFormats(ajv);
|
|
212
|
+
addErrors(ajv);
|
|
213
|
+
|
|
166
214
|
ajv.addFormat('x-document-no', /.*$/);
|
|
167
215
|
ajv.addFormat('x-document-name', /.*$/);
|
|
168
216
|
ajv.addFormat('x-text', /.*$/);
|
|
217
|
+
ajv.addFormat('tel', /^$|^\d{7,15}$/gm);
|
|
169
218
|
ajv.addFormat('x-html', /.*$/);
|
|
170
219
|
ajv.addKeyword({
|
|
171
220
|
keyword: 'x-foreignkey',
|
|
172
221
|
type: 'string',
|
|
173
222
|
});
|
|
174
223
|
|
|
175
|
-
|
|
224
|
+
const issuccess = await this.hook(HookType.beforeValidation, data)
|
|
225
|
+
if (!issuccess) {
|
|
176
226
|
const erromsg: string[] = [];
|
|
177
227
|
for (let i = 0; i < this.errorlist.length; i++) {
|
|
178
228
|
erromsg.push(this.errorlist[i].message);
|
|
179
229
|
}
|
|
180
|
-
|
|
230
|
+
|
|
181
231
|
throw new InternalServerErrorException(erromsg.join('\n'));
|
|
182
232
|
}
|
|
183
233
|
const validate = ajv.compile(this.jsonschema);
|
|
@@ -186,18 +236,19 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
186
236
|
if (!valid) {
|
|
187
237
|
// console.log(validate.errors);
|
|
188
238
|
const erromsg: string[] = [];
|
|
189
|
-
for (let i = 0; i <
|
|
190
|
-
erromsg.push(
|
|
239
|
+
for (let i = 0; i < ajv.errors.length; i++) {
|
|
240
|
+
erromsg.push(ajv.errors[i].message);
|
|
191
241
|
}
|
|
192
|
-
console.log(
|
|
242
|
+
console.log('ajv erromsg: ', erromsg);
|
|
193
243
|
throw new InternalServerErrorException(erromsg.join('\n'));
|
|
194
244
|
}
|
|
195
|
-
this.hook(
|
|
245
|
+
await this.hook(HookType.afterValidation, data);
|
|
196
246
|
}
|
|
197
247
|
|
|
198
248
|
async findIdThenDelete(id: string): Promise<any> {
|
|
199
249
|
// const data = await this.findById(id);
|
|
200
250
|
try {
|
|
251
|
+
await this.hook(HookType.beforeDelete,id)
|
|
201
252
|
//console.log('deletedeletedeletedelete');
|
|
202
253
|
const dependency = await this.getRelatedRecords(id);
|
|
203
254
|
if (!dependency) {
|
|
@@ -205,7 +256,7 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
205
256
|
filter['_id'] = id;
|
|
206
257
|
const deleteresult = await this.doc.deleteOne(filter);
|
|
207
258
|
// this.doc.findByIdAndDelete(id)
|
|
208
|
-
|
|
259
|
+
await this.hook(HookType.afterDelete,deleteresult)
|
|
209
260
|
//this.doc.findByIdAndDelete(id);
|
|
210
261
|
return deleteresult;
|
|
211
262
|
} else {
|
|
@@ -222,15 +273,15 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
222
273
|
|
|
223
274
|
findIdThenUpdate = async (id: string, data: T) => {
|
|
224
275
|
const existingdata = await this.findById(id);
|
|
225
|
-
|
|
276
|
+
await this.hook(HookType.beforeUpdate,data)
|
|
226
277
|
try {
|
|
227
278
|
Object.assign(data, User.getInstance().getUpdateFilter());
|
|
228
279
|
Object.assign(existingdata, data);
|
|
229
|
-
this.validateData(data);
|
|
280
|
+
await this.validateData(data);
|
|
230
281
|
let filter = this.getIsolationFilter();
|
|
231
282
|
filter['_id'] = id;
|
|
232
283
|
const result = await this.doc.findOneAndUpdate(filter, data);
|
|
233
|
-
|
|
284
|
+
await this.hook(HookType.afterUpdate,data)
|
|
234
285
|
return result;
|
|
235
286
|
} catch (err) {
|
|
236
287
|
throw new InternalServerErrorException(err.message);
|
|
@@ -252,7 +303,7 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
252
303
|
const collection = this.doc.db.collection(collectionname);
|
|
253
304
|
//single schema may have multiple foreign key link here, loop all
|
|
254
305
|
for (let j = 0; j < fobjs.length; j++) {
|
|
255
|
-
const fkey = fobjs[j];
|
|
306
|
+
const fkey = fobjs[j] + '._id';
|
|
256
307
|
const filter = {};
|
|
257
308
|
filter[fkey] = id;
|
|
258
309
|
//console.log('getRelatedRecords get filter', collectionname, filter);
|
|
@@ -13,10 +13,10 @@ async function bootstrap() {
|
|
|
13
13
|
in: 'header',name: 'x-org',type: 'apiKey',description: 'base 64 url encode. example: MS0xLTE',
|
|
14
14
|
},'x-org',)
|
|
15
15
|
.addOAuth2({
|
|
16
|
-
|
|
16
|
+
type:'oauth2',flows:{
|
|
17
17
|
implicit:{
|
|
18
18
|
authorizationUrl: `${process.env.OAUTH2_CONFIGURL}/protocol/openid-connect/auth`,
|
|
19
|
-
scopes:
|
|
19
|
+
scopes:{},
|
|
20
20
|
}}},'oauth2')
|
|
21
21
|
.addSecurityRequirements('x-org')
|
|
22
22
|
.addSecurityRequirements('oauth2')
|
|
@@ -31,7 +31,7 @@ const router = useRouter()
|
|
|
31
31
|
const route = useRoute()
|
|
32
32
|
const filters = ref()
|
|
33
33
|
defineShortcuts({
|
|
34
|
-
'
|
|
34
|
+
'ctrl_enter': () => newData()
|
|
35
35
|
})
|
|
36
36
|
const refresh = () => {
|
|
37
37
|
obj.list().then((res:any) => {
|
|
@@ -91,7 +91,7 @@ refresh();
|
|
|
91
91
|
|
|
92
92
|
<template>
|
|
93
93
|
<div class="simpleapp-crudsimple">
|
|
94
|
-
<button class="bg-primary" @click="newData" v-tooltip="'Add new(ctrl+
|
|
94
|
+
<button class="bg-primary" @click="newData" v-tooltip="'Add new(ctrl+enter)'" >New</button>
|
|
95
95
|
<SimpleAppDatatable
|
|
96
96
|
@row-dblclick="triggerEdit"
|
|
97
97
|
v-model="recordlist"
|
|
@@ -5,17 +5,23 @@
|
|
|
5
5
|
* last change 2023-09-09
|
|
6
6
|
* author: Ks Tan
|
|
7
7
|
*/
|
|
8
|
+
// import Panel from 'primevue/panel';
|
|
9
|
+
// import ScrollPanel from 'primevue/scrollpanel';
|
|
10
|
+
import Dialog from 'primevue/dialog';
|
|
8
11
|
|
|
12
|
+
import {ref} from 'vue'
|
|
9
13
|
const modelValue = defineModel()
|
|
10
14
|
const isdebug = ref(useRuntimeConfig().public.DEBUGDATA)
|
|
15
|
+
const visible = ref(false)
|
|
11
16
|
</script>
|
|
12
17
|
<template>
|
|
13
18
|
<div class="floatright" v-if="isdebug=='1'">
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
-
{{ modelValue }}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
<button @click="visible=true">Debug</button>
|
|
20
|
+
<Dialog v-model:visible="visible" modal header="Debug data" :style="{ width: '80vw' }">
|
|
21
|
+
<pre>{{ modelValue }}</pre>
|
|
22
|
+
</Dialog>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
19
25
|
</template>
|
|
20
26
|
<style scoped>
|
|
21
27
|
.floatright{
|
|
@@ -17,11 +17,9 @@ const getAutoComplete = (apiname: string): any => {
|
|
|
17
17
|
isJsonMime: () => true,
|
|
18
18
|
};
|
|
19
19
|
const docsOpenapi: any = {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
'product' : new o.PRDApi(config),
|
|
24
|
-
'studentgroup' : new o.STGApi(config),
|
|
20
|
+
<% for(let i=0;i<it.length; i++){ %>
|
|
21
|
+
'<%=it[i].docname.toLowerCase()%>': new o.<%=it[i].doctype.toUpperCase()%>Api(config),
|
|
22
|
+
<%}%>
|
|
25
23
|
};
|
|
26
24
|
if (!docsOpenapi[apiname]) {
|
|
27
25
|
console.error(
|
|
@@ -6,7 +6,13 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
export const getMenus =()=>{
|
|
9
|
-
|
|
9
|
+
const logout = async () => {
|
|
10
|
+
const { signOut } = useAuth();
|
|
11
|
+
const { data } = await <any>useFetch('/api/auth/logout');
|
|
12
|
+
const addPath = encodeURIComponent("/login");
|
|
13
|
+
signOut({ redirect: false });
|
|
14
|
+
window.location.href = data?.value?.path + addPath;
|
|
15
|
+
};
|
|
10
16
|
const route = useRoute();
|
|
11
17
|
const xorg = route.params.xorg
|
|
12
18
|
let data =[];
|
|
@@ -19,9 +25,13 @@ export const getMenus =()=>{
|
|
|
19
25
|
{label: '<%=obj.docname.toLowerCase()%>', to:`/${xorg}/<%=obj.docname.toLowerCase()%>`},
|
|
20
26
|
<%}%>
|
|
21
27
|
]},
|
|
28
|
+
{label: 'Signout',icon: 'pi pi-fw pi-home', command: () => logout()},
|
|
22
29
|
]
|
|
23
30
|
}else{
|
|
24
|
-
data= [
|
|
31
|
+
data= [
|
|
32
|
+
{label: 'Home',icon: 'pi pi-fw pi-home', url:'/'},
|
|
33
|
+
{label: 'Signout',icon: 'pi pi-fw pi-home', command: () => logout()},
|
|
34
|
+
]
|
|
25
35
|
}
|
|
26
36
|
return data
|
|
27
37
|
}
|
|
@@ -30,6 +30,9 @@ import SimpleAppTextarea from '@simitgroup/simpleapp-vue-component/src/component
|
|
|
30
30
|
import SimpleAppValue from '@simitgroup/simpleapp-vue-component/src/components/SimpleAppValue.vue'
|
|
31
31
|
import SimpleFieldContainer from '@simitgroup/simpleapp-vue-component/src/components/SimpleFieldContainer.vue'
|
|
32
32
|
import SimpleAppDatatable from '@simitgroup/simpleapp-vue-component/src/components/SimpleAppDatatable.vue'
|
|
33
|
+
import SimpleAppInputTable from '@simitgroup/simpleapp-vue-component/src/components/SimpleAppInputTable.vue'
|
|
34
|
+
import SimpleAppDynamicInput from '@simitgroup/simpleapp-vue-component/src/components/SimpleAppDynamicInput.vue'
|
|
35
|
+
|
|
33
36
|
import mitt from 'mitt'
|
|
34
37
|
import ToastService from 'primevue/toastservice';
|
|
35
38
|
import ConfirmationService from 'primevue/confirmationservice';
|
|
@@ -66,6 +69,10 @@ export default defineNuxtPlugin((nuxtApp) => {
|
|
|
66
69
|
.component("SimpleAppTextarea",SimpleAppTextarea)
|
|
67
70
|
.component("SimpleAppValue",SimpleAppValue)
|
|
68
71
|
.component("SimpleFieldContainer",SimpleFieldContainer)
|
|
72
|
+
.component("SimpleAppDatatable",SimpleAppDatatable)
|
|
73
|
+
.component("SimpleAppDynamicInput",SimpleAppDynamicInput)
|
|
74
|
+
.component("SimpleAppInputTable",SimpleAppInputTable)
|
|
75
|
+
|
|
69
76
|
//.component("Quill",Quill) // cause problem in ssr mode
|
|
70
77
|
.use(ToastService)
|
|
71
78
|
.use(ConfirmationService)
|
|
@@ -5,10 +5,18 @@
|
|
|
5
5
|
button {
|
|
6
6
|
@apply p-2 border-2
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
.simpleapp-input-container{
|
|
9
|
+
@apply flex flex-col
|
|
10
|
+
}
|
|
11
|
+
.simpleapp-input-container .p-chips ul{
|
|
12
|
+
width: 100%
|
|
13
|
+
}
|
|
9
14
|
.input-error{
|
|
10
15
|
@apply text-red-500
|
|
11
16
|
}
|
|
17
|
+
.input-error input{
|
|
18
|
+
@apply border-red-600
|
|
19
|
+
}
|
|
12
20
|
.simpleapp-tool-bar button{
|
|
13
21
|
margin-right: 1rem;
|
|
14
22
|
}
|