diff --git a/CONFIG.md b/CONFIG.md
index 2d8eaad..fc2166a 100755
--- a/CONFIG.md
+++ b/CONFIG.md
@@ -203,6 +203,55 @@ this.$ncformValidate('demoForm').then(data => {
})
```
+- $ncformAddWidget({name, widget})
+
+Add your custom form control
+
+```
+// Demo code:
+this.$ncformAddWidget({name: 'sayHi', widget: {
+ mixins: [ncformCommon.mixins.vue.controlMixin],
+ template: '
-
+
+
@@ -83,10 +88,19 @@ import ncformCommon from '@ncform/ncform-common';
export default {
mixins: [ncformCommon.mixins.vue.controlMixin],
+ i18nData: { // i18n
+ en: {
+ hi: 'Hi <%= name %>'
+ },
+ zh_cn: {
+ hi: '你好 <%= name %>'
+ }
+ },
+
data() {
return {
defaultConfig: { // your config's default value(Note: use mergeConfig when use config value)
- msg: 'hello'
+ name: 'daniel'
}
}
},
@@ -109,6 +123,10 @@ export default {
```
Vue.use(vueNcform, { extComponents: {myCustomComp} });
+
+or
+
+vm.$ncformAddWidget({name: 'myCustomComp', widget: myCustomComp});
```
4.Use it
diff --git a/packages/ncform-common/src/mixins/vue/control-mixin.js b/packages/ncform-common/src/mixins/vue/control-mixin.js
index 1352bd3..de307fd 100755
--- a/packages/ncform-common/src/mixins/vue/control-mixin.js
+++ b/packages/ncform-common/src/mixins/vue/control-mixin.js
@@ -1,10 +1,20 @@
import extend from "extend";
import axios from "axios";
+import _template from "lodash-es/template";
import ncformUtils from "../../ncform-utils";
export default {
+
+ lang: (navigator.browserLanguage || navigator.language).replace(/-/, '_').toLowerCase(),
+ i18nData: {
+ en: {},
+ zh_cn: {}
+ },
+
created() {
+ this.$data.i18n = this.$options.i18nData[this.$options.lang] || this.$options.i18nData.en;
+
if (!this.$http) {
this.$http = this.$axios || this.axios || axios;
}
@@ -24,6 +34,12 @@ export default {
this.config
);
});
+
+ window.__$ncform.eventHub.$on('ncform set lang', this._changeLang)
+ },
+
+ beforeDestroy() {
+ window.__$ncform.eventHub.$off('ncform set lang', this._changeLang)
},
props: {
@@ -61,7 +77,8 @@ export default {
return {
mergeConfig: {},
defaultConfig: {},
- modelVal: this.value
+ modelVal: this.value,
+ i18n: {},
};
},
@@ -108,6 +125,15 @@ export default {
_processModelVal(modelVal) {
return modelVal;
+ },
+
+ _changeLang(lang) {
+ this.$options.lang = lang.replace(/-/, '_').toLowerCase();
+ this.$data.i18n = this.$options.i18nData[this.$options.lang] || this.$options.i18nData.en;
+ },
+
+ $t(key, data) {
+ return Object.prototype.toString.call(data) !== "[object Object]" ? this.$data.i18n[key] : _template(this.$data.i18n[key])(data);
}
}
};
diff --git a/packages/ncform-common/src/mixins/vue/layout-array-mixin.js b/packages/ncform-common/src/mixins/vue/layout-array-mixin.js
index 22583ac..8627202 100755
--- a/packages/ncform-common/src/mixins/vue/layout-array-mixin.js
+++ b/packages/ncform-common/src/mixins/vue/layout-array-mixin.js
@@ -1,9 +1,22 @@
import _cloneDeep from "lodash-es/cloneDeep";
+import _template from "lodash-es/template";
import extend from "extend";
import ncformUtils from "../../ncform-utils";
export default {
+
+ lang: (navigator.browserLanguage || navigator.language).replace(/-/, '_').toLowerCase(),
+ i18nData: {
+ en: {
+ },
+ zh_cn: {
+ }
+ },
+
created() {
+
+ this.$data.i18n = this.$options.i18nData[this.$options.lang] || this.$options.i18nData.en;
+
this.schema.value =
this.schema.value && this.schema.value.length > 0
? this.schema.value
@@ -26,6 +39,12 @@ export default {
this.config
);
});
+
+ window.__$ncform.eventHub.$on('ncform set lang', this._changeLang)
+ },
+
+ beforeDestroy() {
+ window.__$ncform.eventHub.$off('ncform set lang', this._changeLang)
},
props: {
@@ -65,9 +84,10 @@ export default {
disableReorder: false,
disableAdd: false,
disableDel: false,
- addTxt: "Add",
- delAllTxt: "Del All"
- }
+ addTxt: "",
+ delAllTxt: "",
+ },
+ i18n: {},
};
},
@@ -137,6 +157,15 @@ export default {
collapse() {
if (!this.$data.mergeConfig.disableCollapse)
this.$data.mergeConfig.collapsed = !this.$data.mergeConfig.collapsed;
+ },
+
+ _changeLang(lang) {
+ this.$options.lang = lang.replace(/-/, '_').toLowerCase();
+ this.$data.i18n = this.$options.i18nData[this.$options.lang] || this.$options.i18nData.en;
+ },
+
+ $t(key, data) {
+ return Object.prototype.toString.call(data) !== "[object Object]" ? this.$data.i18n[key] : _template(this.$data.i18n[key])(data);
}
}
};
diff --git a/packages/ncform-theme-elementui/examples/control-comps/checkbox.html b/packages/ncform-theme-elementui/examples/control-comps/checkbox.html
index 022a07f..b342c2e 100755
--- a/packages/ncform-theme-elementui/examples/control-comps/checkbox.html
+++ b/packages/ncform-theme-elementui/examples/control-comps/checkbox.html
@@ -282,6 +282,9 @@ resField: Which field of the response data as the data source, as the example re
// Bootstrap the app
new Vue({
el: '#demo',
+ mounted() {
+ this.$ncformSetLang(lang === 'cn' ? 'zh_cn' : 'en');
+ },
data: {
formSchemas: getFormSchemas(),
originFormSchemas: getFormSchemas()
diff --git a/packages/ncform-theme-elementui/examples/control-comps/date-picker.html b/packages/ncform-theme-elementui/examples/control-comps/date-picker.html
index 32472ad..e821d20 100755
--- a/packages/ncform-theme-elementui/examples/control-comps/date-picker.html
+++ b/packages/ncform-theme-elementui/examples/control-comps/date-picker.html
@@ -200,6 +200,9 @@
// Bootstrap the app
new Vue({
el: '#demo',
+ mounted() {
+ this.$ncformSetLang(lang === 'cn' ? 'zh_cn' : 'en');
+ },
data: {
formSchemas: getFormSchemas(),
originFormSchemas: getFormSchemas()
diff --git a/packages/ncform-theme-elementui/examples/control-comps/input.html b/packages/ncform-theme-elementui/examples/control-comps/input.html
index d9c9e33..38a1945 100755
--- a/packages/ncform-theme-elementui/examples/control-comps/input.html
+++ b/packages/ncform-theme-elementui/examples/control-comps/input.html
@@ -572,6 +572,9 @@ The description of each field of upload is as follows:
// Bootstrap the app
new Vue({
el: '#demo',
+ mounted() {
+ this.$ncformSetLang(lang === 'cn' ? 'zh_cn' : 'en');
+ },
data: {
formSchemas: getFormSchemas(),
originFormSchemas: getFormSchemas()
diff --git a/packages/ncform-theme-elementui/examples/control-comps/label.html b/packages/ncform-theme-elementui/examples/control-comps/label.html
index 54c3c99..25afabb 100755
--- a/packages/ncform-theme-elementui/examples/control-comps/label.html
+++ b/packages/ncform-theme-elementui/examples/control-comps/label.html
@@ -60,7 +60,7 @@
properties: {
label: {
type: 'string',
- default: 'some text',
+ default: 'ncform',
ui: {
widget: 'label'
}
@@ -78,7 +78,7 @@
properties: {
label: {
type: 'string',
- value: 'some text',
+ value: 'ncform, a nice form development way that generates form UIs and their interactions with just configuration.',
ui: {
widget: 'label'
}
diff --git a/packages/ncform-theme-elementui/examples/control-comps/select.html b/packages/ncform-theme-elementui/examples/control-comps/select.html
index a6d44f4..8a3706d 100755
--- a/packages/ncform-theme-elementui/examples/control-comps/select.html
+++ b/packages/ncform-theme-elementui/examples/control-comps/select.html
@@ -351,6 +351,9 @@
// Bootstrap the app
new Vue({
el: '#demo',
+ mounted() {
+ this.$ncformSetLang(lang === 'cn' ? 'zh_cn' : 'en');
+ },
data: {
formSchemas: getFormSchemas(),
originFormSchemas: getFormSchemas()
diff --git a/packages/ncform-theme-elementui/examples/control-comps/upload.html b/packages/ncform-theme-elementui/examples/control-comps/upload.html
index dd29d2c..627c416 100755
--- a/packages/ncform-theme-elementui/examples/control-comps/upload.html
+++ b/packages/ncform-theme-elementui/examples/control-comps/upload.html
@@ -469,6 +469,9 @@ url: file url
// Bootstrap the app
new Vue({
el: '#demo',
+ mounted() {
+ this.$ncformSetLang(lang === 'cn' ? 'zh_cn' : 'en');
+ },
data: {
formSchemas: getFormSchemas(),
originFormSchemas: getFormSchemas()
diff --git a/packages/ncform-theme-elementui/examples/demo.css b/packages/ncform-theme-elementui/examples/demo.css
index 53f0ab5..b31a8e8 100755
--- a/packages/ncform-theme-elementui/examples/demo.css
+++ b/packages/ncform-theme-elementui/examples/demo.css
@@ -9,6 +9,7 @@
}
#demo .demo_item-wrapper > div:first-child {
flex: 1;
+ width: 33%;
}
#demo .demo_item-wrapper > div:first-child small {
margin-top: 8px; display: block;
@@ -31,4 +32,4 @@
}
.doc .el-submenu .el-menu-item {
height: 40px;
-}
\ No newline at end of file
+}
diff --git a/packages/ncform-theme-elementui/examples/layout-comps/array-table.html b/packages/ncform-theme-elementui/examples/layout-comps/array-table.html
index fdda5ac..311e112 100755
--- a/packages/ncform-theme-elementui/examples/layout-comps/array-table.html
+++ b/packages/ncform-theme-elementui/examples/layout-comps/array-table.html
@@ -268,6 +268,9 @@
// Bootstrap the app
new Vue({
el: '#demo',
+ mounted() {
+ this.$ncformSetLang(lang === 'cn' ? 'zh_cn' : 'en');
+ },
data: {
formSchemas: getFormSchemas(),
originFormSchemas: getFormSchemas()
diff --git a/packages/ncform-theme-elementui/examples/layout-comps/array.html b/packages/ncform-theme-elementui/examples/layout-comps/array.html
index e69a98a..7ed6c9e 100755
--- a/packages/ncform-theme-elementui/examples/layout-comps/array.html
+++ b/packages/ncform-theme-elementui/examples/layout-comps/array.html
@@ -303,6 +303,9 @@
// Bootstrap the app
new Vue({
el: '#demo',
+ mounted() {
+ this.$ncformSetLang(lang === 'cn' ? 'zh_cn' : 'en');
+ },
data: {
formSchemas: getFormSchemas(),
originFormSchemas: getFormSchemas()
diff --git a/packages/ncform-theme-elementui/src/components/control-comps/checkbox.vue b/packages/ncform-theme-elementui/src/components/control-comps/checkbox.vue
index 099499c..a8eeecc 100755
--- a/packages/ncform-theme-elementui/src/components/control-comps/checkbox.vue
+++ b/packages/ncform-theme-elementui/src/components/control-comps/checkbox.vue
@@ -10,7 +10,7 @@
:indeterminate="mergeConfig.isIndeterminate"
v-model="mergeConfig.checkAll"
@change="handleCheckAllChange"
- >全选
+ >{{$t('all')}}
@@ -44,6 +44,25 @@ const controlMixin = ncformCommon.mixins.vue.controlMixin;
export default {
mixins: [controlMixin],
+ i18nData: {
+ en: {
+ chYear: 'Choose Year',
+ chMonth: 'Choose Month',
+ chDate: 'Choose Date',
+ chWeek: 'Choose Week',
+ chTime: 'Choose Datetime',
+ weekFormat: 'Week WW of yyyy'
+ },
+ zh_cn: {
+ chYear: '选择年份',
+ chMonth: '选择月份',
+ chDate: '选择日期',
+ chWeek: '选择周',
+ chTime: '选择时间',
+ weekFormat: 'yyyy年 第WW周'
+ }
+ },
+
props: {
value: {
type: String,
@@ -70,23 +89,23 @@ export default {
typeOptions: {
year: {
format: '',
- placeholder: '选择年',
+ placeholder: 'chYear',
},
month: {
format: '',
- placeholder: '选择月',
+ placeholder: 'chMonth',
},
date: {
format: '',
- placeholder: '选择日期',
+ placeholder: 'chDate',
},
week: {
- format: 'yyyy年 第WW周',
- placeholder: '选择周',
+ format: 'weekFormat',
+ placeholder: 'chWeek',
},
datetime:{
format: '',
- placeholder: '选择时间',
+ placeholder: 'chTime',
}
},
// 组件特有的配置属性
diff --git a/packages/ncform-theme-elementui/src/components/control-comps/input.vue b/packages/ncform-theme-elementui/src/components/control-comps/input.vue
index 5c7c163..f23f3c3 100755
--- a/packages/ncform-theme-elementui/src/components/control-comps/input.vue
+++ b/packages/ncform-theme-elementui/src/components/control-comps/input.vue
@@ -10,18 +10,18 @@
-
+
-
+
- {{isUploading ? '上传中...' : mergeConfig.upload.uploadText}}
+ {{isUploading ? $t('uploading') : mergeConfig.upload.uploadText || $t('upload')}}
@@ -42,11 +42,11 @@
-
+
-
+
@@ -84,6 +84,19 @@ const controlMixin = ncformCommon.mixins.vue.controlMixin;
export default {
mixins: [controlMixin],
+ i18nData: {
+ en: {
+ selectPls: 'Select Please',
+ uploading: 'Uploading...',
+ upload: 'Upload'
+ },
+ zh_cn: {
+ selectPls: '请选择',
+ uploading: '上传中...',
+ upload: '点击上传'
+ }
+ },
+
props: {
value: {
type: [String, Number, Object]
@@ -260,7 +273,7 @@ export default {
minSize: 0 // 最小图片大小,单位KB,0代表不限
},
resField: "", // 获取返回结果的字段,
- uploadText: "点击上传" // 上传按钮的名称
+ uploadText: "" // 上传按钮的名称
}
}
};
diff --git a/packages/ncform-theme-elementui/src/components/control-comps/label.vue b/packages/ncform-theme-elementui/src/components/control-comps/label.vue
index 62f62d4..840ec76 100755
--- a/packages/ncform-theme-elementui/src/components/control-comps/label.vue
+++ b/packages/ncform-theme-elementui/src/components/control-comps/label.vue
@@ -1,16 +1,8 @@
-
-
-
+