diff --git a/io.sc.engine.mv.frontend/nodemon.json b/io.sc.engine.mv.frontend/nodemon.json
new file mode 100644
index 00000000..99590b18
--- /dev/null
+++ b/io.sc.engine.mv.frontend/nodemon.json
@@ -0,0 +1,6 @@
+{
+ "watch": [
+ "./src/routes/routes.json"
+ ],
+ "exec": "pnpm serve"
+}
\ No newline at end of file
diff --git a/io.sc.engine.mv.frontend/package.json b/io.sc.engine.mv.frontend/package.json
new file mode 100644
index 00000000..3c37a240
--- /dev/null
+++ b/io.sc.engine.mv.frontend/package.json
@@ -0,0 +1,103 @@
+{
+ "name": "io.sc.engine.mv.frontend",
+ "version": "8.1.22",
+ "description": "",
+ "private": false,
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "scripts": {
+ "dev": "nodemon",
+ "serve": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack serve --config webpack.env.serve.cjs",
+ "build": "node ./util-components-generator.cjs && cross-env NODE_ENV=development webpack --config webpack.env.build.cjs",
+ "prod": "node ./util-components-generator.cjs && cross-env NODE_ENV=production webpack --config webpack.env.prod.cjs",
+ "sync": "platform sync",
+ "clean": "rm -rf ./node_modules && rm -rf pnpm-lock.yaml"
+ },
+ "engines": {
+ "node": ">=18",
+ "pnpm": ">=7"
+ },
+ "publishConfig": {
+ "registry": "http://nexus.sc.io:8000/repository/npm-releases/",
+ "access": "public"
+ },
+ "devDependencies": {
+ "@babel/core": "7.23.7",
+ "@babel/preset-env": "7.23.7",
+ "@babel/preset-typescript": "7.23.3",
+ "@babel/plugin-transform-class-properties": "7.23.3",
+ "@babel/plugin-transform-object-rest-spread": "7.23.4",
+ "@quasar/app-webpack": "3.12.1",
+ "@quasar/cli": "2.3.0",
+ "@types/mockjs": "1.0.10",
+ "@types/node": "20.10.6",
+ "@typescript-eslint/eslint-plugin": "6.17.0",
+ "@typescript-eslint/parser": "6.17.0",
+ "@vue/compiler-sfc": "3.4.3",
+ "@webpack-cli/serve": "2.0.5",
+ "autoprefixer": "10.4.16",
+ "babel-loader": "9.1.3",
+ "clean-webpack-plugin": "4.0.0",
+ "copy-webpack-plugin": "11.0.0",
+ "cross-env": "7.0.3",
+ "css-loader": "6.8.1",
+ "eslint": "8.56.0",
+ "eslint-config-prettier": "9.1.0",
+ "eslint-plugin-prettier": "5.1.2",
+ "eslint-plugin-vue": "9.19.2",
+ "eslint-webpack-plugin": "4.0.1",
+ "html-webpack-plugin": "5.6.0",
+ "json5": "2.2.3",
+ "mini-css-extract-plugin": "2.7.6",
+ "nodemon": "3.0.2",
+ "postcss": "8.4.32",
+ "postcss-import": "16.0.0",
+ "postcss-loader": "7.3.4",
+ "postcss-preset-env": "9.3.0",
+ "prettier": "3.1.1",
+ "sass": "1.69.7",
+ "sass-loader": "13.3.3",
+ "typescript": "5.3.3",
+ "vue-loader": "17.4.2",
+ "webpack": "5.89.0",
+ "webpack-bundle-analyzer": "4.10.1",
+ "webpack-cli": "5.1.4",
+ "webpack-dev-server": "4.15.1",
+ "webpack-merge": "5.10.0",
+ "@vue/babel-plugin-jsx": "1.1.5"
+ },
+ "dependencies": {
+ "@quasar/extras": "1.16.9",
+ "@vueuse/core": "10.7.1",
+ "axios": "1.6.3",
+ "dayjs": "1.11.10",
+ "echarts": "5.4.3",
+ "exceljs": "4.4.0",
+ "file-saver": "2.0.5",
+ "luckyexcel": "1.0.1",
+ "mockjs": "1.1.0",
+ "pinia": "2.1.7",
+ "platform-core": "8.1.111",
+ "quasar": "2.14.2",
+ "tailwindcss": "3.4.0",
+ "vue": "3.4.3",
+ "vue-dompurify-html": "5.0.1",
+ "vue-i18n": "9.8.0",
+ "vue-router": "4.2.5",
+ "@codemirror/autocomplete": "6.11.1",
+ "@codemirror/commands": "6.3.3",
+ "@codemirror/lang-html": "6.4.7",
+ "@codemirror/lang-java": "6.0.1",
+ "@codemirror/lang-javascript": "6.2.1",
+ "@codemirror/lang-json": "6.0.1",
+ "@codemirror/lang-sql": "6.5.4",
+ "@codemirror/lang-xml": "6.0.2",
+ "@codemirror/language": "6.10.0",
+ "@codemirror/search": "6.5.5",
+ "@codemirror/state": "6.4.0",
+ "@codemirror/view": "6.23.0",
+ "codemirror": "6.0.1",
+ "vue-codemirror6": "1.2.0"
+ }
+}
\ No newline at end of file
diff --git a/io.sc.engine.mv.frontend/public/webjars/luckysheet/2.1.13/assets/iconfont/Pacifico-Regular.ttf b/io.sc.engine.mv.frontend/public/webjars/luckysheet/2.1.13/assets/iconfont/Pacifico-Regular.ttf
new file mode 100644
index 00000000..f85aee04
Binary files /dev/null and b/io.sc.engine.mv.frontend/public/webjars/luckysheet/2.1.13/assets/iconfont/Pacifico-Regular.ttf differ
diff --git a/io.sc.engine.mv.frontend/src/i18n/messages.json b/io.sc.engine.mv.frontend/src/i18n/messages.json
new file mode 100644
index 00000000..144cc411
--- /dev/null
+++ b/io.sc.engine.mv.frontend/src/i18n/messages.json
@@ -0,0 +1,88 @@
+{
+ "menu.engine.mv" : "Model Validator",
+ "menu.engine.mv.config" : "Configuration",
+ "menu.engine.mv.config.cutOffPoint" : "Score Cut Off Point",
+ "menu.engine.mv.config.threshold" : "Threshold",
+ "menu.engine.mv.config.binomial" : "Z of Normal Distribution",
+ "menu.engine.mv.config.chiSquare" : "Const of Chi-square",
+ "menu.engine.mv.config.model" : "Model",
+ "menu.engine.mv.config.distribution" : "Distribution of Modeling",
+ "menu.engine.mv.config.scale" : "Scale",
+ "menu.engine.mv.config.dataExtractor" : "Data Extractor",
+ "menu.engine.mv.config.executor" : "Executor",
+ "menu.engine.mv.sample" : "Sample Manager",
+ "menu.engine.mv.result" : "Validator Result Viewer",
+
+ "io.sc.engine.mv.config.cutOffPoint.grid.title" : "Score Cut Off Point List",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.name" : "Name",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.from" : "From(contain)",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.to" : "To(contain)",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.step" : "Step",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.scale" : "Scale",
+
+ "io.sc.engine.mv.config.threshold.grid.title" : "Threshold Configuration List",
+ "io.sc.engine.mv.config.threshold.grid.entity.name" : "Name",
+ "io.sc.engine.mv.config.threshold.grid.entity.level" : "Level(bigger is better)",
+ "io.sc.engine.mv.config.threshold.grid.entity.color" : "Color",
+ "io.sc.engine.mv.config.threshold.grid.entity.range" : "Range",
+ "io.sc.engine.mv.config.threshold.grid.entity.quantitativeRange" : "Range of Quantitative",
+ "io.sc.engine.mv.config.threshold.grid.entity.qualitativeRange" : "Range of Qualitative",
+
+ "io.sc.engine.mv.config.binomial.grid.title" : "Z Const of Normal Distribution List",
+ "io.sc.engine.mv.config.binomial.grid.entity.significanceLevel" : "Significance Level",
+ "io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel" : "Confidence Level",
+ "io.sc.engine.mv.config.binomial.grid.entity.zUpper" : "Z Upper",
+ "io.sc.engine.mv.config.binomial.grid.entity.zLower" : "Z Lower",
+
+ "io.sc.engine.mv.config.chiSquare.grid.title" : "Const of Chi-square List",
+ "io.sc.engine.mv.config.chiSquare.grid.entity.dof" : "DOF",
+ "io.sc.engine.mv.config.chiSquare.grid.entity.significanceLevel" : "Significance Level",
+ "io.sc.engine.mv.config.chiSquare.grid.entity.criticalValue" : "Critical Value",
+
+ "io.sc.engine.mv.config.model.grid.title" : "Model List",
+ "io.sc.engine.mv.config.model.grid.toolbar.importFromScoreRecordTable" : "Import From Score Record",
+ "io.sc.engine.mv.config.model.grid.entity.type" : "Model Create Type",
+ "io.sc.engine.mv.config.model.grid.entity.modelId" : "Model ID",
+ "io.sc.engine.mv.config.model.grid.entity.modelName" : "Model Name",
+
+ "io.sc.engine.mv.config.distribution.grid.title" : "Distribution of Modeling List",
+ "io.sc.engine.mv.config.distribution.grid.entity.modelId" : "Model ID",
+ "io.sc.engine.mv.config.distribution.grid.entity.modelName" : "Model Name",
+ "io.sc.engine.mv.config.distribution.grid.entity.scoreSegStart" : "Start of Score Segment(include)",
+ "io.sc.engine.mv.config.distribution.grid.entity.scoreSegEnd" : "End of Score Segment(include)",
+ "io.sc.engine.mv.config.distribution.grid.entity.count" : "Sample Count",
+
+
+ "io.sc.engine.mv.config.scale.grid.title" : "Main Scale List",
+ "io.sc.engine.mv.config.scale.grid.entity.modelId" : "Model ID",
+ "io.sc.engine.mv.config.scale.grid.entity.modelName" : "Model Name",
+ "io.sc.engine.mv.config.scale.grid.entity.level" : "Level",
+ "io.sc.engine.mv.config.scale.grid.entity.pd" : "PD",
+ "io.sc.engine.mv.config.scale.grid.entity.order" : "Order",
+
+ "io.sc.engine.mv.config.executor.grid.title" : "Executor List",
+
+ "io.sc.engine.mv.result.grid.title" : "Validate Result List",
+ "io.sc.engine.mv.result.grid.entity.validateDate" : "Validate Date",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters" : "Runtime Parameters",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.rateStartDateFrom" : "Rate Start Date From",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.rateStartDateTo" : "Rate Start Date To",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.performPeriod" : "Perform Period",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.binomialSignificanceLevel" : "Binomial Significance Level",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.chiSquareSignificanceLevel" : "Chi-square Significance Level",
+ "io.sc.engine.mv.result.grid.entity.modelId" : "Model ID",
+ "io.sc.engine.mv.result.grid.entity.modelName" : "Model Name",
+ "io.sc.engine.mv.result.grid.entity.executeMode" : "Execute Mode",
+ "io.sc.engine.mv.result.grid.entity.totalSampleCount" : "Total Sample Count",
+ "io.sc.engine.mv.result.grid.entity.defaultSampleCount" : "Default Sample Count",
+ "io.sc.engine.mv.result.grid.entity.discrimination" : "Discrimination",
+
+ "io.sc.engine.mv.result.grid.entity.discrimination.total" : "Total",
+ "io.sc.engine.mv.result.grid.entity.auc" : "AUC",
+ "io.sc.engine.mv.result.grid.entity.ar" : "AR",
+ "io.sc.engine.mv.result.grid.entity.ks" : "KS",
+ "io.sc.engine.mv.result.grid.entity.svd" : "SVD",
+ "io.sc.engine.mv.result.grid.entity.psi" : "PSI",
+ "io.sc.engine.mv.result.grid.entity.chiSquare" : "Chi-Square",
+ "io.sc.engine.mv.result.grid.entity.binomial" : "Binomial"
+}
\ No newline at end of file
diff --git a/io.sc.engine.mv.frontend/src/i18n/messages_tw_CN.json b/io.sc.engine.mv.frontend/src/i18n/messages_tw_CN.json
new file mode 100644
index 00000000..cde1fdcf
--- /dev/null
+++ b/io.sc.engine.mv.frontend/src/i18n/messages_tw_CN.json
@@ -0,0 +1,84 @@
+{
+ "menu.engine.mv" : "模型驗證",
+ "menu.engine.mv.config" : "配置",
+ "menu.engine.mv.config.cutOffPoint" : "評分截斷點",
+ "menu.engine.mv.config.threshold" : "預警閾值",
+ "menu.engine.mv.config.binomial" : "二項檢驗Z值常量",
+ "menu.engine.mv.config.chiSquare" : "卡方檢驗臨界值常量",
+ "menu.engine.mv.config.model" : "模型",
+ "menu.engine.mv.config.distribution" : "建模時客戶評分分佈",
+ "menu.engine.mv.config.scale" : "標尺",
+ "menu.engine.mv.config.dataExtractor" : "數據抽取接口",
+ "menu.engine.mv.config.executor" : "執行器",
+ "menu.engine.mv.sample" : "樣本管理",
+ "menu.engine.mv.result" : "驗證結果查看",
+
+ "io.sc.engine.mv.config.cutOffPoint.grid.title" : "評分截斷點配置列表",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.name" : "名称",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.from" : "起始值(含)",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.to" : "结束值(含)",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.step" : "增量值",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.scale" : "精度",
+
+ "io.sc.engine.mv.config.threshold.grid.title" : "預警閾值配置列表",
+ "io.sc.engine.mv.config.threshold.grid.entity.name" : "名稱",
+ "io.sc.engine.mv.config.threshold.grid.entity.level" : "等級(越大越好)",
+ "io.sc.engine.mv.config.threshold.grid.entity.color" : "顏色",
+ "io.sc.engine.mv.config.threshold.grid.entity.range" : "預警閾值范围",
+ "io.sc.engine.mv.config.threshold.grid.entity.quantitativeRange" : "預警閾值范围(定量)",
+ "io.sc.engine.mv.config.threshold.grid.entity.qualitativeRange" : "預警閾值范围(定性)",
+
+ "io.sc.engine.mv.config.binomial.grid.title" : "二項檢驗標準正態分佈顯著水平下的Z值常量列表",
+ "io.sc.engine.mv.config.binomial.grid.entity.significanceLevel" : "顯著水平",
+ "io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel" : "置信水平",
+ "io.sc.engine.mv.config.binomial.grid.entity.zUpper" : "Z值上界",
+ "io.sc.engine.mv.config.binomial.grid.entity.zLower" : "Z值下界",
+
+ "io.sc.engine.mv.config.chiSquare.grid.title" : "卡方檢驗臨界值常量列表",
+ "io.sc.engine.mv.config.chiSquare.grid.entity.dof" : "自由度",
+ "io.sc.engine.mv.config.chiSquare.grid.entity.significanceLevel" : "顯著水平",
+ "io.sc.engine.mv.config.chiSquare.grid.entity.criticalValue" : "臨界值",
+
+ "io.sc.engine.mv.config.model.grid.title" : "模型列表",
+ "io.sc.engine.mv.config.model.grid.toolbar.importFromScoreRecordTable" : "從評分記錄表中導入",
+ "io.sc.engine.mv.config.model.grid.entity.type" : "模型創建類型",
+ "io.sc.engine.mv.config.model.grid.entity.modelId" : "模型標識",
+ "io.sc.engine.mv.config.model.grid.entity.modelName" : "模型名稱",
+
+ "io.sc.engine.mv.config.distribution.grid.title" : "咨詢建模時樣本分佈情況配置列表",
+ "io.sc.engine.mv.config.distribution.grid.entity.modelId" : "模型標示",
+ "io.sc.engine.mv.config.distribution.grid.entity.modelName" : "模型名稱",
+ "io.sc.engine.mv.config.distribution.grid.entity.scoreSegStart" : "分數段開始值(含該值)",
+ "io.sc.engine.mv.config.distribution.grid.entity.scoreSegEnd" : "分數段結束值(含該值)",
+ "io.sc.engine.mv.config.distribution.grid.entity.count" : "評分段內樣本個數",
+
+ "io.sc.engine.mv.config.scale.grid.title" : "標尺列表",
+ "io.sc.engine.mv.config.scale.grid.entity.modelId" : "模型標識",
+ "io.sc.engine.mv.config.scale.grid.entity.modelName" : "模型名稱",
+ "io.sc.engine.mv.config.scale.grid.entity.level" : "等級",
+ "io.sc.engine.mv.config.scale.grid.entity.pd" : "違約概率",
+ "io.sc.engine.mv.config.scale.grid.entity.order" : "排序",
+
+ "io.sc.engine.mv.config.executor.grid.title" : "執行器列表",
+
+ "io.sc.engine.mv.result.grid.title" : "驗證結果列表验证结果列表",
+ "io.sc.engine.mv.result.grid.entity.validateDate" : "驗證日期",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters" : "運行時參數",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.rateStartDateFrom" : "評級開始日期從",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.rateStartDateTo" : "評級開始日期到",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.performPeriod" : "表現期",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.binomialSignificanceLevel" : "二項檢驗顯著水平",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.chiSquareSignificanceLevel" : "卡方檢驗顯著水平",
+ "io.sc.engine.mv.result.grid.entity.modelId" : "模型標識",
+ "io.sc.engine.mv.result.grid.entity.modelName" : "模型名稱",
+ "io.sc.engine.mv.result.grid.entity.executeMode" : "執行模式",
+ "io.sc.engine.mv.result.grid.entity.totalSampleCount" : "總樣本數",
+ "io.sc.engine.mv.result.grid.entity.defaultSampleCount" : "違約樣本數",
+ "io.sc.engine.mv.result.grid.entity.auc" : "AUC",
+ "io.sc.engine.mv.result.grid.entity.ar" : "AR",
+ "io.sc.engine.mv.result.grid.entity.ks" : "KS",
+ "io.sc.engine.mv.result.grid.entity.svd" : "SVD",
+ "io.sc.engine.mv.result.grid.entity.psi" : "PSI",
+ "io.sc.engine.mv.result.grid.entity.chiSquare" : "卡方檢驗",
+ "io.sc.engine.mv.result.grid.entity.binomial" : "二項檢驗"
+}
\ No newline at end of file
diff --git a/io.sc.engine.mv.frontend/src/i18n/messages_zh_CN.json b/io.sc.engine.mv.frontend/src/i18n/messages_zh_CN.json
new file mode 100644
index 00000000..de30b4fe
--- /dev/null
+++ b/io.sc.engine.mv.frontend/src/i18n/messages_zh_CN.json
@@ -0,0 +1,96 @@
+{
+ "menu.engine.mv" : "模型验证",
+ "menu.engine.mv.config" : "配置",
+ "menu.engine.mv.config.cutOffPoint" : "评分截断点",
+ "menu.engine.mv.config.threshold" : "预警阈值",
+ "menu.engine.mv.config.binomial" : "二项检验Z值常量",
+ "menu.engine.mv.config.chiSquare" : "卡方检验临界值常量",
+ "menu.engine.mv.config.model" : "模型",
+ "menu.engine.mv.config.distribution" : "建模时评分分布",
+ "menu.engine.mv.config.scale" : "标尺",
+ "menu.engine.mv.config.dataExtractor" : "数据抽取器接口",
+ "menu.engine.mv.config.executor" : "执行器",
+ "menu.engine.mv.sample" : "样本管理",
+ "menu.engine.mv.result" : "验证结果查看",
+
+ "io.sc.engine.mv.config.cutOffPoint.grid.title" : "评分截断点配置列表",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.name" : "名称",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.from" : "起始值(含)",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.to" : "结束值(含)",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.step" : "增量值",
+ "io.sc.engine.mv.config.cutOffPoint.grid.entity.scale" : "精度",
+
+ "io.sc.engine.mv.config.threshold.grid.title" : "预警阈值配置列表",
+ "io.sc.engine.mv.config.threshold.grid.entity.name" : "名称",
+ "io.sc.engine.mv.config.threshold.grid.entity.level" : "等级(越大越好)",
+ "io.sc.engine.mv.config.threshold.grid.entity.color" : "颜色",
+ "io.sc.engine.mv.config.threshold.grid.entity.range" : "预警阈值范围",
+ "io.sc.engine.mv.config.threshold.grid.entity.quantitativeRange" : "预警阈值范围(定量)",
+ "io.sc.engine.mv.config.threshold.grid.entity.qualitativeRange" : "预警阈值范围(定性)",
+
+ "io.sc.engine.mv.config.binomial.grid.title" : "二项检验标准正态分布显著水平下的Z值常量列表",
+ "io.sc.engine.mv.config.binomial.grid.entity.significanceLevel" : "显著水平",
+ "io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel" : "置信水平",
+ "io.sc.engine.mv.config.binomial.grid.entity.zUpper" : "Z值上界",
+ "io.sc.engine.mv.config.binomial.grid.entity.zLower" : "Z值下界",
+
+ "io.sc.engine.mv.config.chiSquare.grid.title" : "卡方分布临界值常量",
+ "io.sc.engine.mv.config.chiSquare.grid.entity.dof" : "自由度",
+ "io.sc.engine.mv.config.chiSquare.grid.entity.significanceLevel" : "显著水平",
+ "io.sc.engine.mv.config.chiSquare.grid.entity.criticalValue" : "临界值",
+
+ "io.sc.engine.mv.config.model.grid.title" : "模型列表",
+ "io.sc.engine.mv.config.model.grid.toolbar.importFromScoreRecordTable" : "从评分记录表中导入",
+ "io.sc.engine.mv.config.model.grid.entity.type" : "模型创建类型",
+ "io.sc.engine.mv.config.model.grid.entity.modelId" : "模型标识",
+ "io.sc.engine.mv.config.model.grid.entity.modelName" : "模型名称",
+
+ "io.sc.engine.mv.config.distribution.grid.title" : "咨询建模时样本分布情况配置列表",
+ "io.sc.engine.mv.config.distribution.grid.entity.modelId" : "模型标识",
+ "io.sc.engine.mv.config.distribution.grid.entity.modelName" : "模型名称",
+ "io.sc.engine.mv.config.distribution.grid.entity.scoreSegStart" : "分数段开始值(含该值)",
+ "io.sc.engine.mv.config.distribution.grid.entity.scoreSegEnd" : "分数段结束值(含该值)",
+ "io.sc.engine.mv.config.distribution.grid.entity.count" : "评分段内样本个数",
+
+ "io.sc.engine.mv.config.scale.grid.title" : "标尺列表",
+ "io.sc.engine.mv.config.scale.grid.entity.modelId" : "模型标识",
+ "io.sc.engine.mv.config.scale.grid.entity.modelName" : "模型名称",
+ "io.sc.engine.mv.config.scale.grid.entity.level" : "等级",
+ "io.sc.engine.mv.config.scale.grid.entity.pd" : "违约概率",
+ "io.sc.engine.mv.config.scale.grid.entity.order" : "排序",
+
+ "io.sc.engine.mv.config.dataExtractor.grid.title" : "数据抽取器列表",
+ "io.sc.engine.mv.config.dataExtractor.grid.entity.name" : "名称",
+ "io.sc.engine.mv.config.dataExtractor.grid.entity.enable" : "是否可用",
+ "io.sc.engine.mv.config.dataExtractor.grid.entity.datasourceName" : "外部数据源名称",
+ "io.sc.engine.mv.config.dataExtractor.grid.entity.order" : "执行顺序",
+ "io.sc.engine.mv.config.dataExtractor.grid.entity.executeTimeWeight" : "预计执行时间权重",
+ "io.sc.engine.mv.config.dataExtractor.grid.entity.groovyScript" : "Groovy 脚本",
+
+ "io.sc.engine.mv.config.executor.grid.title" : "执行器列表",
+
+ "io.sc.engine.mv.result.grid.title" : "验证结果列表",
+ "io.sc.engine.mv.result.grid.entity.validateDate" : "验证日期",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters" : "运行时参数",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.rateStartDateFrom" : "评级开始日期从",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.rateStartDateTo" : "评级开始日期到",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.performPeriod" : "表现期",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.binomialSignificanceLevel" : "二项检验显著水平",
+ "io.sc.engine.mv.result.grid.entity.runtimeParameters.chiSquareSignificanceLevel" : "卡方检验显著水平",
+ "io.sc.engine.mv.result.grid.entity.modelId" : "模型标识",
+ "io.sc.engine.mv.result.grid.entity.modelName" : "模型名称",
+ "io.sc.engine.mv.result.grid.entity.executeMode" : "执行模式",
+ "io.sc.engine.mv.result.grid.entity.totalSampleCount" : "总样本数",
+ "io.sc.engine.mv.result.grid.entity.defaultSampleCount" : "违约样本数",
+ "io.sc.engine.mv.result.grid.entity.discrimination" : "区分能力",
+ "io.sc.engine.mv.result.grid.entity.total" : "总体",
+ "io.sc.engine.mv.result.grid.entity.auc" : "AUC",
+ "io.sc.engine.mv.result.grid.entity.ar" : "AR",
+ "io.sc.engine.mv.result.grid.entity.ks" : "KS",
+ "io.sc.engine.mv.result.grid.entity.stability" : "稳定性",
+ "io.sc.engine.mv.result.grid.entity.svd" : "SVD",
+ "io.sc.engine.mv.result.grid.entity.psi" : "PSI",
+ "io.sc.engine.mv.result.grid.entity.scaleValidate" : "标尺检验",
+ "io.sc.engine.mv.result.grid.entity.chiSquare" : "卡方检验",
+ "io.sc.engine.mv.result.grid.entity.binomial" : "二项检验"
+}
\ No newline at end of file
diff --git a/io.sc.engine.mv.frontend/src/views/config/model.vue b/io.sc.engine.mv.frontend/src/views/config/model.vue
new file mode 100644
index 00000000..0bcd7f26
--- /dev/null
+++ b/io.sc.engine.mv.frontend/src/views/config/model.vue
@@ -0,0 +1,69 @@
+
+
+
+
diff --git a/io.sc.engine.mv/src/main/resources/META-INF/platform/plugins/messages.json b/io.sc.engine.mv/src/main/resources/META-INF/platform/plugins/messages.json
new file mode 100644
index 00000000..4fa7ae0e
--- /dev/null
+++ b/io.sc.engine.mv/src/main/resources/META-INF/platform/plugins/messages.json
@@ -0,0 +1,17 @@
+/*
+ * 国际化消息源插件配置
+ * 功能: 该插件配置为框架提供国际化消息资源
+ * 使用说明:
+ * includes: 包含国际化消息资源列表
+ * excludes: 排除国际化消息资源列表
+ * 注意: 当一个包名同时存在于 includes 和 excludes 中, excludes 优先, 即该包不会被自动扫描
+ */
+
+
+{
+ "includes":[
+ "io/sc/engine/mv/i18n/messages",
+ "io/sc/engine/mv/i18n/enums"
+ ],
+ "excludes":[]
+}
diff --git a/io.sc.engine.mv/src/main/resources/META-INF/platform/plugins/p6spy.json b/io.sc.engine.mv/src/main/resources/META-INF/platform/plugins/p6spy.json
new file mode 100644
index 00000000..f8b9dfd7
--- /dev/null
+++ b/io.sc.engine.mv/src/main/resources/META-INF/platform/plugins/p6spy.json
@@ -0,0 +1,15 @@
+/*
+ * p6spy 插件配置
+ * 功能: 该插件配置为框架提供 p6spy 配置
+ * 使用说明:
+ * ignoredPatterns: 忽略显示 jdbc 输出信息正则表达式列表
+ */
+
+/* 以下示例将不显示 p6spy 输出的 commit */
+/*
+{
+ "ignoredPatterns":[
+ "commit"
+ ]
+}
+*/
diff --git a/io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/messages.properties b/io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/messages.properties
new file mode 100644
index 00000000..064a6ec0
--- /dev/null
+++ b/io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/messages.properties
@@ -0,0 +1,51 @@
+# executor
+io.sc.engine.mv.executor.DatabaseInitExecutor.name=Database Initializer
+io.sc.engine.mv.executor.DatabaseInitExecutor.description=initialize the database
+
+io.sc.engine.mv.executor.ResultExecutor.name=Result Handler
+io.sc.engine.mv.executor.ResultExecutor.description=save the result and runtime parameters
+
+io.sc.engine.mv.executor.ResultInitExecutor.name=Result Initializer
+io.sc.engine.mv.executor.ResultInitExecutor.description=clear previous result
+
+io.sc.engine.mv.executor.SampleCountExecutor.name=Good Sample Counter
+io.sc.engine.mv.executor.SampleCountExecutor.description=count the score records and default records
+
+io.sc.engine.mv.executor.SampleExecutor.name=Good Sample Handler
+io.sc.engine.mv.executor.SampleExecutor.description=generate good sample
+
+io.sc.engine.mv.executor.ScCapExecutor.name=Discrimination, CAP
+io.sc.engine.mv.executor.ScCapExecutor.description=generate CAP curve and calculate AR
+
+io.sc.engine.mv.executor.ScCapQualitativeExecutor.name=Discrimination, CAP(qualitative)
+io.sc.engine.mv.executor.ScCapQualitativeExecutor.description=generate CAP curve for qualitative and calculate AR for qualitative
+
+io.sc.engine.mv.executor.ScCapQuantitativeExecutor.name=Discrimination, CAP(quantitative)
+io.sc.engine.mv.executor.ScCapQuantitativeExecutor.description=generate CAP curve for quantitative and calculate AR for quantitative
+
+io.sc.engine.mv.executor.ScKsExecutor.name=Discrimination, KS
+io.sc.engine.mv.executor.ScKsExecutor.description=generate KS curve and calculate KS
+
+io.sc.engine.mv.executor.ScKsQualitativeExecutor.name=Discrimination, KS(qualitative)
+io.sc.engine.mv.executor.ScKsQualitativeExecutor.description=generate KS curve for qualitative and calculate KS for qualitative
+
+io.sc.engine.mv.executor.ScKsQuantitativeExecutor.name=Discrimination, KS(quantitative)
+io.sc.engine.mv.executor.ScKsQuantitativeExecutor.description=generate KS curve for quantitative and calculate KS for quantitative
+
+io.sc.engine.mv.executor.ScRocExecutor.name=Discrimination, ROC
+io.sc.engine.mv.executor.ScRocExecutor.description=generate ROC curve and calculate AUC
+
+io.sc.engine.mv.executor.ScRocQualitativeExecutor.name=Discrimination, ROC(qualitative)
+io.sc.engine.mv.executor.ScRocQualitativeExecutor.description=generate ROC curve for qualitative and calculate AUC for qualitative
+
+io.sc.engine.mv.executor.ScRocQuantitativeExecutor.name=Discrimination, ROC(quantitative)
+io.sc.engine.mv.executor.ScRocQuantitativeExecutor.description=generate ROC curve for quantitative and calculate AUC for quantitative
+
+io.sc.engine.mv.executor.StPsiExecutor.name=Stability, PSI
+io.sc.engine.mv.executor.StPsiExecutor.description=generate ROC chart and calculate PSI
+
+io.sc.engine.mv.executor.CoeChiSquareExecutor.name=Chi-square
+io.sc.engine.mv.executor.CoeChiSquareExecutor.description=chi-square validater
+
+io.sc.engine.mv.executor.CoeBinomialExecutor.name=Binomial
+io.sc.engine.mv.executor.CoeBinomialExecutor.description=binomial validater
diff --git a/io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/messages_zh_CN.properties b/io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/messages_zh_CN.properties
new file mode 100644
index 00000000..1c850775
--- /dev/null
+++ b/io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/messages_zh_CN.properties
@@ -0,0 +1,51 @@
+# executor
+io.sc.engine.mv.executor.DatabaseInitExecutor.name=\u6570\u636E\u5E93\u521D\u59CB\u5316\u6267\u884C\u5668
+io.sc.engine.mv.executor.DatabaseInitExecutor.description=\u5728\u6A21\u578B\u9A8C\u8BC1\u6267\u884C\u524D\u5BF9\u6570\u636E\u5E93\u8FDB\u884C\u5FC5\u8981\u7684\u521D\u59CB\u5316\u64CD\u4F5C
+
+io.sc.engine.mv.executor.ResultExecutor.name=\u6A21\u578B\u9A8C\u8BC1\u7ED3\u679C\u6267\u884C\u5668
+io.sc.engine.mv.executor.ResultExecutor.description=\u5C06\u6A21\u578B\u9A8C\u8BC1\u7ED3\u679C\u5B58\u5165\u9A8C\u8BC1\u7ED3\u679C\u5386\u53F2\u8868\u4E2D,\u5E76\u5C06\u6267\u884C\u73AF\u5883\u548C\u53C2\u6570\u4FDD\u5B58
+
+io.sc.engine.mv.executor.ResultInitExecutor.name=\u6A21\u578B\u9A8C\u8BC1\u7ED3\u679C\u521D\u59CB\u5316\u6267\u884C\u5668
+io.sc.engine.mv.executor.ResultInitExecutor.description=\u6E05\u7A7A\u4E0A\u4E00\u6B21\u8FD0\u884C\u7684\u6A21\u578B\u9A8C\u8BC1\u7ED3\u679C,\u4E3A\u672C\u6B21\u6A21\u578B\u9A8C\u8BC1\u7ED3\u679C\u51C6\u5907\u521D\u59CB\u5316\u73AF\u5883
+
+io.sc.engine.mv.executor.SampleCountExecutor.name=\u5408\u683C\u6837\u672C\u6570\u91CF\u7EDF\u8BA1\u6267\u884C\u5668
+io.sc.engine.mv.executor.SampleCountExecutor.description=\u7EDF\u8BA1\u5408\u683C\u6837\u672C\u7684\u603B\u4E2A\u6570\u548C\u4E8B\u5B9E\u8FDD\u7EA6\u4E2A\u6570
+
+io.sc.engine.mv.executor.SampleExecutor.name=\u5408\u683C\u6837\u672C\u5904\u7406\u6267\u884C\u5668
+io.sc.engine.mv.executor.SampleExecutor.description=\u751F\u6210\u5408\u683C\u6837\u672C\u96C6
+
+io.sc.engine.mv.executor.ScCapExecutor.name=\u6A21\u578B\u533A\u5206\u80FD\u529B\u9A8C\u8BC1,CAP \u66F2\u7EBF\u6267\u884C\u5668(\u603B\u4F53)
+io.sc.engine.mv.executor.ScCapExecutor.description=\u9A8C\u8BC1\u6A21\u578B\u533A\u5206\u80FD\u529B,\u751F\u6210 CAP \u66F2\u7EBF(\u603B\u4F53),\u540C\u65F6\u8BA1\u7B97 AR \u503C(\u603B\u4F53)
+
+io.sc.engine.mv.executor.ScCapQualitativeExecutor.name=\u6A21\u578B\u533A\u5206\u80FD\u529B\u9A8C\u8BC1,CAP \u66F2\u7EBF\u6267\u884C\u5668(\u5B9A\u6027)
+io.sc.engine.mv.executor.ScCapQualitativeExecutor.description=\u9A8C\u8BC1\u6A21\u578B\u533A\u5206\u80FD\u529B,\u751F\u6210 CAP \u66F2\u7EBF(\u5B9A\u6027),\u540C\u65F6\u8BA1\u7B97 AR \u503C(\u5B9A\u6027)
+
+io.sc.engine.mv.executor.ScCapQuantitativeExecutor.name=\u6A21\u578B\u533A\u5206\u80FD\u529B\u9A8C\u8BC1,CAP \u66F2\u7EBF\u6267\u884C\u5668(\u5B9A\u91CF)
+io.sc.engine.mv.executor.ScCapQuantitativeExecutor.description=\u9A8C\u8BC1\u6A21\u578B\u533A\u5206\u80FD\u529B,\u751F\u6210 CAP \u66F2\u7EBF(\u5B9A\u91CF),\u540C\u65F6\u8BA1\u7B97 AR \u503C(\u5B9A\u91CF)
+
+io.sc.engine.mv.executor.ScKsExecutor.name=\u6A21\u578B\u533A\u5206\u80FD\u529B\u9A8C\u8BC1,KS \u66F2\u7EBF\u6267\u884C\u5668(\u603B\u4F53)
+io.sc.engine.mv.executor.ScKsExecutor.description=\u9A8C\u8BC1\u6A21\u578B\u533A\u5206\u80FD\u529B,\u751F\u6210 KS \u66F2\u7EBF(\u603B\u4F53),\u540C\u65F6\u8BA1\u7B97 KS \u503C(\u603B\u4F53)
+
+io.sc.engine.mv.executor.ScKsQualitativeExecutor.name=\u6A21\u578B\u533A\u5206\u80FD\u529B\u9A8C\u8BC1,KS \u66F2\u7EBF\u6267\u884C\u5668(\u5B9A\u6027)
+io.sc.engine.mv.executor.ScKsQualitativeExecutor.description=\u9A8C\u8BC1\u6A21\u578B\u533A\u5206\u80FD\u529B,\u751F\u6210 KS \u66F2\u7EBF(\u5B9A\u6027),\u540C\u65F6\u8BA1\u7B97 KS \u503C(\u5B9A\u6027)
+
+io.sc.engine.mv.executor.ScKsQuantitativeExecutor.name=\u6A21\u578B\u533A\u5206\u80FD\u529B\u9A8C\u8BC1,KS \u66F2\u7EBF\u6267\u884C\u5668(\u5B9A\u91CF)
+io.sc.engine.mv.executor.ScKsQuantitativeExecutor.description=\u9A8C\u8BC1\u6A21\u578B\u533A\u5206\u80FD\u529B,\u751F\u6210 KS \u66F2\u7EBF(\u5B9A\u91CF),\u540C\u65F6\u8BA1\u7B97 KS \u503C(\u5B9A\u91CF)
+
+io.sc.engine.mv.executor.ScRocExecutor.name=\u6A21\u578B\u533A\u5206\u80FD\u529B\u9A8C\u8BC1,ROC \u66F2\u7EBF\u6267\u884C\u5668(\u603B\u4F53)
+io.sc.engine.mv.executor.ScRocExecutor.description=\u9A8C\u8BC1\u6A21\u578B\u533A\u5206\u80FD\u529B,\u751F\u6210 ROC \u66F2\u7EBF(\u603B\u4F53),\u540C\u65F6\u8BA1\u7B97 AUC \u503C(\u603B\u4F53)
+
+io.sc.engine.mv.executor.ScRocQualitativeExecutor.name=\u6A21\u578B\u533A\u5206\u80FD\u529B\u9A8C\u8BC1,ROC \u66F2\u7EBF\u6267\u884C\u5668(\u5B9A\u6027)
+io.sc.engine.mv.executor.ScRocQualitativeExecutor.description=\u9A8C\u8BC1\u6A21\u578B\u533A\u5206\u80FD\u529B,\u751F\u6210 ROC \u66F2\u7EBF(\u5B9A\u6027),\u540C\u65F6\u8BA1\u7B97 AUC \u503C(\u5B9A\u6027)
+
+io.sc.engine.mv.executor.ScRocQuantitativeExecutor.name=\u6A21\u578B\u533A\u5206\u80FD\u529B\u9A8C\u8BC1,ROC \u66F2\u7EBF\u6267\u884C\u5668(\u5B9A\u91CF)
+io.sc.engine.mv.executor.ScRocQuantitativeExecutor.description=\u9A8C\u8BC1\u6A21\u578B\u533A\u5206\u80FD\u529B,\u751F\u6210 ROC \u66F2\u7EBF(\u5B9A\u91CF),\u540C\u65F6\u8BA1\u7B97 AUC \u503C(\u5B9A\u91CF)
+
+io.sc.engine.mv.executor.StPsiExecutor.name=\u6A21\u578B\u7A33\u5B9A\u6027\u9A8C\u8BC1,\u5BA2\u6237\u7FA4\u4F53\u7A33\u5B9A\u6027\u62A5\u544A\u6267\u884C\u5668
+io.sc.engine.mv.executor.StPsiExecutor.description=\u751F\u6210\u5BA2\u6237\u7FA4\u4F53\u7A33\u5B9A\u6027\u62A5\u544A,\u540C\u65F6\u8BA1\u7B97 PSI \u503C
+
+io.sc.engine.mv.executor.CoeChiSquareExecutor.name=\u6A21\u578B\u4F30\u503C\u51C6\u786E\u6027\u9A8C\u8BC1(\u5361\u65B9\u68C0\u9A8C)
+io.sc.engine.mv.executor.CoeChiSquareExecutor.description=\u8BA1\u7B97\u5361\u65B9\u68C0\u9A8C\u503C
+
+io.sc.engine.mv.executor.CoeBinomialExecutor.name=\u6A21\u578B\u4F30\u503C\u51C6\u786E\u6027\u9A8C\u8BC1(\u4E8C\u9879\u68C0\u9A8C)
+io.sc.engine.mv.executor.CoeBinomialExecutor.description=\u4E8C\u9879\u68C0\u9A8C\u503C
diff --git a/io.sc.platform.core.frontend/package.json b/io.sc.platform.core.frontend/package.json
index 6dab7555..293e9ec1 100644
--- a/io.sc.platform.core.frontend/package.json
+++ b/io.sc.platform.core.frontend/package.json
@@ -1,6 +1,6 @@
{
"name": "platform-core",
- "version": "8.1.110",
+ "version": "8.1.111",
"description": "前端核心包,用于快速构建前端的脚手架",
"//main": "库的主文件",
"main": "dist/platform-core.js",
diff --git a/io.sc.platform.core.frontend/template-project/package.json b/io.sc.platform.core.frontend/template-project/package.json
index 36769a7b..8cff933a 100644
--- a/io.sc.platform.core.frontend/template-project/package.json
+++ b/io.sc.platform.core.frontend/template-project/package.json
@@ -1,6 +1,6 @@
{
"name": "platform-core",
- "version": "8.1.110",
+ "version": "8.1.111",
"description": "前端核心包,用于快速构建前端的脚手架",
"private": false,
"keywords": [],
@@ -92,7 +92,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
- "platform-core": "8.1.110",
+ "platform-core": "8.1.111",
"quasar": "2.14.2",
"tailwindcss": "3.4.0",
"vue": "3.4.3",
diff --git a/io.sc.platform.developer.frontend/package.json b/io.sc.platform.developer.frontend/package.json
index dadd519d..8855f75a 100644
--- a/io.sc.platform.developer.frontend/package.json
+++ b/io.sc.platform.developer.frontend/package.json
@@ -78,7 +78,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
- "platform-core": "8.1.100",
+ "platform-core": "8.1.111",
"quasar": "2.14.2",
"tailwindcss": "3.4.0",
"vue": "3.4.3",
diff --git a/io.sc.platform.lcdp.frontend/package.json b/io.sc.platform.lcdp.frontend/package.json
index ff8e8935..0970d2f9 100644
--- a/io.sc.platform.lcdp.frontend/package.json
+++ b/io.sc.platform.lcdp.frontend/package.json
@@ -91,7 +91,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
- "platform-core": "8.1.100",
+ "platform-core": "8.1.111",
"quasar": "2.14.2",
"tailwindcss": "3.4.0",
"vue": "3.4.3",