@jari-ace/element-plus-component 0.2.2 → 0.3.0

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.
Files changed (171) hide show
  1. package/README.md +1 -1
  2. package/dist/components/autoComplete/JaAutoComplete.vue.d.ts +18 -18
  3. package/dist/components/button/JaButton.vue.d.ts +24 -24
  4. package/dist/components/customGroupTree/src/customGroupTree.vue.d.ts +1 -1
  5. package/dist/components/departmentPicker/src/DepartmentPicker.vue.d.ts +2 -2
  6. package/dist/components/departmentTree/src/departmentTree.vue.d.ts +1 -1
  7. package/dist/components/dropdownButton/JaDropdownButton.vue.d.ts +55 -55
  8. package/dist/components/enumList/EnumListInput.vue.d.ts +2 -2
  9. package/dist/components/enumPicker/src/EnumPicker.vue.d.ts +1 -1
  10. package/dist/components/form/JaForm.vue.d.ts +1 -1
  11. package/dist/components/formItem/JaFormItem.vue.d.ts +12 -12
  12. package/dist/components/input/JaInput.vue.d.ts +18 -18
  13. package/dist/components/inputI18n/I18nBundleEditor.vue.d.ts +1 -1
  14. package/dist/components/inputI18n/InputI18n.vue.d.ts +2 -2
  15. package/dist/components/inputI18n/JaInputI18n.vue.d.ts +70 -70
  16. package/dist/components/inputNumber/JaInputNumber.vue.d.ts +12 -12
  17. package/dist/components/mapItemList/MapItemListInput.vue.d.ts +2 -2
  18. package/dist/components/numberList/NumberListInput.vue.d.ts +2 -2
  19. package/dist/components/rolePicker/RoleEditor.vue.d.ts +1 -1
  20. package/dist/components/rolePicker/baseRolePicker.vue.d.ts +1 -1
  21. package/dist/components/rolePicker/baseRolePicker.vue.d.ts.map +1 -1
  22. package/dist/components/rolePicker/baseRolePicker.vue.js +4 -2
  23. package/dist/components/rolePicker/baseRolePicker.vue.js.map +1 -1
  24. package/dist/components/scrollbar/Scrollbar.vue.d.ts +8 -8
  25. package/dist/components/select/JaSelect.vue.d.ts +70 -70
  26. package/dist/components/stringList/StringListInput.vue.d.ts +2 -2
  27. package/dist/components/tip/index.d.ts +6 -6
  28. package/dist/components/tip/src/AceTip.vue.d.ts +1 -1
  29. package/dist/components/upload/index.d.ts +23 -4
  30. package/dist/components/upload/index.d.ts.map +1 -1
  31. package/dist/components/upload/index.js +1 -3
  32. package/dist/components/upload/index.js.map +1 -1
  33. package/dist/components/upload/pdf-viewer/PdfViewerModal.vue.d.ts +27 -0
  34. package/dist/components/upload/pdf-viewer/PdfViewerModal.vue.d.ts.map +1 -0
  35. package/dist/components/upload/pdf-viewer/PdfViewerModal.vue.js +94 -0
  36. package/dist/components/upload/pdf-viewer/PdfViewerModal.vue.js.map +1 -0
  37. package/dist/components/upload/uploader-locale-zh-cn.d.ts +223 -0
  38. package/dist/components/upload/uploader-locale-zh-cn.d.ts.map +1 -0
  39. package/dist/components/upload/uploader-locale-zh-cn.js +224 -0
  40. package/dist/components/upload/uploader-locale-zh-cn.js.map +1 -0
  41. package/dist/components/upload/uploader.vue.d.ts +42 -0
  42. package/dist/components/upload/uploader.vue.d.ts.map +1 -0
  43. package/dist/components/upload/uploader.vue.js +713 -0
  44. package/dist/components/upload/uploader.vue.js.map +1 -0
  45. package/dist/components/userGroupPicker/src/UserGroupPicker.vue.d.ts +2 -2
  46. package/dist/components/userPicker/src/UserPicker.vue.d.ts +3 -3
  47. package/dist/components/userSelectDialog/src/userSelectDialog.vue.d.ts +1 -1
  48. package/dist/components/userTag/UserInfoTag.vue.d.ts +2 -2
  49. package/lib/index.css +9 -1
  50. package/lib/index.js +37354 -2740
  51. package/lib/index.umd.cjs +407 -2
  52. package/package.json +70 -61
  53. package/packages/components/autoComplete/JaAutoComplete.vue +47 -47
  54. package/packages/components/autoComplete/index.ts +5 -5
  55. package/packages/components/avatar/JaAvatar.vue +126 -126
  56. package/packages/components/avatar/avatarToken.ts +11 -11
  57. package/packages/components/avatar/defaultImg.ts +14 -14
  58. package/packages/components/avatar/index.ts +7 -7
  59. package/packages/components/button/JaButton.vue +51 -51
  60. package/packages/components/button/index.ts +4 -4
  61. package/packages/components/channelPicker/index.ts +7 -7
  62. package/packages/components/channelPicker/src/ChannelPicker.vue +43 -43
  63. package/packages/components/channelPicker/src/JaChannelPicker.vue +42 -42
  64. package/packages/components/checkbox/JaCheckbox.vue +73 -73
  65. package/packages/components/checkbox/index.ts +4 -4
  66. package/packages/components/checkboxGroup/JaCheckboxGroup.vue +45 -45
  67. package/packages/components/checkboxGroup/index.ts +4 -4
  68. package/packages/components/customGroupTree/index.ts +10 -10
  69. package/packages/components/customGroupTree/src/customGroupTree.vue +91 -91
  70. package/packages/components/datePicker/JaDatePicker.vue +52 -52
  71. package/packages/components/datePicker/index.ts +4 -4
  72. package/packages/components/departmentPicker/index.ts +4 -4
  73. package/packages/components/departmentPicker/src/DepartmentPicker.vue +107 -107
  74. package/packages/components/departmentPicker/src/consts.ts +2 -2
  75. package/packages/components/departmentTree/index.ts +10 -10
  76. package/packages/components/departmentTree/src/departmentTree.vue +135 -135
  77. package/packages/components/dropdownButton/JaDropdownButton.vue +59 -59
  78. package/packages/components/dropdownButton/index.ts +4 -4
  79. package/packages/components/enumList/EnumListInput.vue +107 -107
  80. package/packages/components/enumList/JaEnumList.vue +39 -39
  81. package/packages/components/enumList/index.ts +7 -7
  82. package/packages/components/enumPicker/index.ts +5 -5
  83. package/packages/components/enumPicker/src/EnumPicker.vue +103 -103
  84. package/packages/components/form/JaForm.vue +146 -146
  85. package/packages/components/form/index.ts +5 -5
  86. package/packages/components/form/types.ts +4 -4
  87. package/packages/components/formItem/JaFormItem.vue +87 -87
  88. package/packages/components/formItem/index.ts +4 -4
  89. package/packages/components/index.ts +34 -34
  90. package/packages/components/input/JaInput.vue +143 -143
  91. package/packages/components/input/index.ts +4 -4
  92. package/packages/components/inputI18n/I18nBundleEditor.vue +76 -76
  93. package/packages/components/inputI18n/InputI18n.vue +146 -146
  94. package/packages/components/inputI18n/JaInputI18n.vue +50 -50
  95. package/packages/components/inputI18n/index.ts +8 -8
  96. package/packages/components/inputNumber/JaInputNumber.vue +98 -98
  97. package/packages/components/inputNumber/index.ts +4 -4
  98. package/packages/components/mapItemList/JaMapItemList.vue +35 -35
  99. package/packages/components/mapItemList/MapItemListInput.vue +191 -191
  100. package/packages/components/mapItemList/index.ts +7 -7
  101. package/packages/components/numberList/JaNumberList.vue +36 -36
  102. package/packages/components/numberList/NumberListInput.vue +111 -111
  103. package/packages/components/numberList/index.ts +7 -7
  104. package/packages/components/properyPicker/JaPropertyPicker.vue +38 -38
  105. package/packages/components/properyPicker/PropertyPicker.vue +314 -314
  106. package/packages/components/properyPicker/index.ts +7 -7
  107. package/packages/components/radioGroup/JaRadioGroup.vue +50 -50
  108. package/packages/components/radioGroup/index.ts +4 -4
  109. package/packages/components/rolePicker/RoleEditor.vue +129 -129
  110. package/packages/components/rolePicker/RolePicker.vue +44 -44
  111. package/packages/components/rolePicker/RolePickerRaw.vue +56 -56
  112. package/packages/components/rolePicker/baseRolePicker.vue +91 -87
  113. package/packages/components/rolePicker/index.ts +10 -10
  114. package/packages/components/scrollbar/Scrollbar.vue +89 -89
  115. package/packages/components/scrollbar/index.ts +5 -5
  116. package/packages/components/scrollbar/utils.ts +17 -17
  117. package/packages/components/select/JaSelect.vue +48 -48
  118. package/packages/components/select/index.ts +4 -4
  119. package/packages/components/stringList/JaStringList.vue +36 -36
  120. package/packages/components/stringList/StringListInput.vue +96 -96
  121. package/packages/components/stringList/index.ts +7 -7
  122. package/packages/components/switch/JaSwitch.vue +50 -50
  123. package/packages/components/switch/index.ts +4 -4
  124. package/packages/components/timePicker/JaTimePicker.vue +52 -52
  125. package/packages/components/timePicker/index.ts +5 -5
  126. package/packages/components/tip/index.ts +4 -4
  127. package/packages/components/tip/src/AceTip.vue +43 -43
  128. package/packages/components/upload/index.ts +4 -6
  129. package/packages/components/upload/pdf-viewer/PdfViewerModal.vue +32 -0
  130. package/packages/components/upload/uploader-locale-zh-cn.ts +223 -0
  131. package/packages/components/upload/uploader.vue +513 -0
  132. package/packages/components/userGroupPicker/index.ts +4 -4
  133. package/packages/components/userGroupPicker/src/UserGroupPicker.vue +94 -94
  134. package/packages/components/userGroupTree/index.ts +10 -10
  135. package/packages/components/userGroupTree/src/userGroupTree.vue +149 -149
  136. package/packages/components/userPicker/index.ts +10 -10
  137. package/packages/components/userPicker/src/CustomGroupManager.vue +189 -189
  138. package/packages/components/userPicker/src/JaUserList.vue +317 -317
  139. package/packages/components/userPicker/src/JaUserPicker.vue +40 -40
  140. package/packages/components/userPicker/src/UserPicker.vue +472 -472
  141. package/packages/components/userSelectDialog/index.ts +6 -6
  142. package/packages/components/userSelectDialog/src/userSelectDialog.vue +462 -462
  143. package/packages/components/userTag/UserInfoTag.vue +397 -397
  144. package/packages/components/userTag/index.ts +6 -6
  145. package/packages/components/userTag/sharedAxios.ts +8 -8
  146. package/packages/directives/auth/index.ts +41 -41
  147. package/packages/directives/autofocus/index.ts +29 -29
  148. package/packages/directives/index.ts +10 -10
  149. package/packages/directives/shortcut/index.ts +192 -192
  150. package/packages/hooks/useAppInstances.ts +34 -34
  151. package/packages/hooks/useBackendValidations.ts +81 -81
  152. package/packages/hooks/useBridage.ts +157 -157
  153. package/packages/hooks/useClassificationLevels.ts +62 -62
  154. package/packages/hooks/useDateTimeShortCuts.ts +65 -65
  155. package/packages/hooks/useRealms.ts +28 -28
  156. package/packages/hooks/useTreeData.ts +45 -45
  157. package/packages/hooks/useUserRefQuery.ts +232 -232
  158. package/packages/index.ts +24 -24
  159. package/packages/list.json +7 -7
  160. package/packages/types/custom.d.ts +13 -13
  161. package/packages/types/window.d.ts +16 -16
  162. package/packages/utils/install.ts +43 -43
  163. package/packages/utils/objectUtils.ts +31 -31
  164. package/theme-style/fonts/iconfont.json +5196 -5196
  165. package/theme-style/index.scss +10 -10
  166. package/theme-style/styles/element-plus-var.scss +1419 -1419
  167. package/theme-style/styles/iconfont.css +2979 -2979
  168. package/theme-style/styles/theme-var.scss +72 -72
  169. package/theme-style/styles/transition.scss +122 -122
  170. package/packages/components/upload/src/Upload.vue +0 -25
  171. package/packages/components/upload/src/type.ts +0 -3
@@ -1,76 +1,76 @@
1
- <script setup lang="ts">
2
- import {
3
- createAxiosWithoutCache,
4
- type CreateAppMessageBundleCommand, useAppMessageApi, type AppInstance
5
- } from "@jari-ace/app-bolts";
6
- import {ref, watch} from 'vue'
7
- import {useAppInstances} from "../../hooks/useAppInstances";
8
- import {ElDrawer, ElForm, ElFormItem, ElInput, ElButton} from "element-plus";
9
- import {JaButton} from "../button";
10
-
11
- const visible = defineModel<boolean>({
12
- default: false,
13
- required: true
14
- });
15
- const props = defineProps<{
16
- appId: string,
17
- preKey?: string
18
- }>();
19
- const axios = createAxiosWithoutCache();
20
- const api = useAppMessageApi(axios);
21
- const app = ref<AppInstance>();
22
- const key = ref("");
23
- const messages = ref<Record<string, string>>({})
24
- const emits = defineEmits(["success"])
25
- const appInstances = await useAppInstances();
26
-
27
- function onOpen() {
28
- loadApp();
29
- key.value = props.preKey ?? "";
30
- messages.value = {};
31
- }
32
-
33
- async function onSubmit() {
34
- const cmd = {
35
- key: key.value,
36
- messages: messages.value,
37
- appInstance: {
38
- id: props.appId
39
- }
40
- } as CreateAppMessageBundleCommand;
41
- await api.createBundle(cmd);
42
- visible.value = false;
43
- emits('success', key.value);
44
- }
45
-
46
- async function loadApp() {
47
- app.value = await appInstances.getById(props.appId)
48
- }
49
-
50
- watch(() => props.appId, async () => {
51
- await loadApp();
52
- })
53
- </script>
54
-
55
- <template>
56
- <el-drawer destroy-on-close append-to-body v-model="visible"
57
- title="创建国际化文本" @open="onOpen">
58
- <el-form label-position="top" size="default">
59
- <el-form-item label="文本键" required>
60
- <el-input v-model="key" v-focus></el-input>
61
- </el-form-item>
62
- <el-form-item v-for="l in app?.supportedLocales" :key="l" :label="l">
63
- <el-input type="textarea" :rows="4" v-model="messages[l]"></el-input>
64
- </el-form-item>
65
- </el-form>
66
- <template #footer>
67
- <ja-button size="default" shortcut="Alt+Enter" type="primary" @click="onSubmit">确定
68
- </ja-button>
69
- <el-button size="default" plain @click="visible = false">取消</el-button>
70
- </template>
71
- </el-drawer>
72
- </template>
73
-
74
- <style scoped lang="scss">
75
-
76
- </style>
1
+ <script setup lang="ts">
2
+ import {
3
+ createAxiosWithoutCache,
4
+ type CreateAppMessageBundleCommand, useAppMessageApi, type AppInstance
5
+ } from "@jari-ace/app-bolts";
6
+ import {ref, watch} from 'vue'
7
+ import {useAppInstances} from "../../hooks/useAppInstances";
8
+ import {ElDrawer, ElForm, ElFormItem, ElInput, ElButton} from "element-plus";
9
+ import {JaButton} from "../button";
10
+
11
+ const visible = defineModel<boolean>({
12
+ default: false,
13
+ required: true
14
+ });
15
+ const props = defineProps<{
16
+ appId: string,
17
+ preKey?: string
18
+ }>();
19
+ const axios = createAxiosWithoutCache();
20
+ const api = useAppMessageApi(axios);
21
+ const app = ref<AppInstance>();
22
+ const key = ref("");
23
+ const messages = ref<Record<string, string>>({})
24
+ const emits = defineEmits(["success"])
25
+ const appInstances = await useAppInstances();
26
+
27
+ function onOpen() {
28
+ loadApp();
29
+ key.value = props.preKey ?? "";
30
+ messages.value = {};
31
+ }
32
+
33
+ async function onSubmit() {
34
+ const cmd = {
35
+ key: key.value,
36
+ messages: messages.value,
37
+ appInstance: {
38
+ id: props.appId
39
+ }
40
+ } as CreateAppMessageBundleCommand;
41
+ await api.createBundle(cmd);
42
+ visible.value = false;
43
+ emits('success', key.value);
44
+ }
45
+
46
+ async function loadApp() {
47
+ app.value = await appInstances.getById(props.appId)
48
+ }
49
+
50
+ watch(() => props.appId, async () => {
51
+ await loadApp();
52
+ })
53
+ </script>
54
+
55
+ <template>
56
+ <el-drawer destroy-on-close append-to-body v-model="visible"
57
+ title="创建国际化文本" @open="onOpen">
58
+ <el-form label-position="top" size="default">
59
+ <el-form-item label="文本键" required>
60
+ <el-input v-model="key" v-focus></el-input>
61
+ </el-form-item>
62
+ <el-form-item v-for="l in app?.supportedLocales" :key="l" :label="l">
63
+ <el-input type="textarea" :rows="4" v-model="messages[l]"></el-input>
64
+ </el-form-item>
65
+ </el-form>
66
+ <template #footer>
67
+ <ja-button size="default" shortcut="Alt+Enter" type="primary" @click="onSubmit">确定
68
+ </ja-button>
69
+ <el-button size="default" plain @click="visible = false">取消</el-button>
70
+ </template>
71
+ </el-drawer>
72
+ </template>
73
+
74
+ <style scoped lang="scss">
75
+
76
+ </style>
@@ -1,146 +1,146 @@
1
- <script setup lang="ts">
2
- import {ElInput, ElOption, ElSelect} from "element-plus";
3
- import {nextTick, onUnmounted, ref, watch} from "vue"
4
- import {
5
- createAxiosWithoutCache,
6
- useAppMessageApi,
7
- useLoginUser
8
- } from "@jari-ace/app-bolts";
9
- import MessageEditor from "./I18nBundleEditor.vue"
10
- import {trim} from "lodash-es";
11
- import {useAppInstances} from "../../hooks/useAppInstances";
12
- import debounce from "lodash-es/debounce";
13
- import {JaButton} from "../button";
14
-
15
- const props = withDefaults(defineProps<{
16
- appId?: string,
17
- size?: 'default' | 'large' | 'small',
18
- textarea?: boolean,
19
- disabled?: boolean
20
- }>(), {
21
- size: 'default',
22
- textarea: false
23
- })
24
- const model = defineModel<string>({
25
- default: ""
26
- })
27
- const axios = createAxiosWithoutCache()
28
- const api = useAppMessageApi(axios)
29
- const locale = useLoginUser().locale
30
- const messageKeys = ref<string[]>()
31
- const focused = ref(false)
32
- const editorVisible = ref(false)
33
- const select = ref<InstanceType<typeof ElSelect>>()
34
- const appName = ref("");
35
- const appInstances = await useAppInstances();
36
- const filterKey = ref("")
37
- const i18nTxt = ref("")
38
- const selectI18n = ref<InstanceType<typeof ElSelect>>();
39
- const emits = defineEmits(["change", "focus", "blur"])
40
- const debounceLoadMessage = debounce(loadMessage, 500)
41
- let timeoutHandle: number | undefined = undefined;
42
-
43
- async function loadMessage(val?: string) {
44
- if (!val) val = model.value;
45
- if (!props.appId) return
46
- const app = await appInstances.getById(props.appId)
47
- appName.value = app.name
48
- if (!val || !appName.value) {
49
- i18nTxt.value = "";
50
- return;
51
- }
52
- i18nTxt.value = val
53
- let key = val;
54
- if (val && val.length > 0) {
55
- key = trim(key);
56
- if (key.startsWith('{') && key.endsWith('}')) {
57
- key = key.substring(1, key.length - 1);
58
- }
59
- }
60
- const messages = await api.getByKey(appName.value, key, {
61
- cancelDuplicatedRequest: false
62
- });
63
- const message = messages.find(m => m.locale === locale)
64
- if (message) {
65
- i18nTxt.value = message.message
66
- }
67
- }
68
-
69
- async function filterMessages(filterName: string) {
70
- filterKey.value = filterName
71
- messageKeys.value = await api.searchKeys(appName.value, filterName)
72
- }
73
-
74
- async function onFocus() {
75
- focused.value = true;
76
- await nextTick()
77
- emits("focus")
78
- select.value?.focus()
79
- }
80
-
81
- function onBlur() {
82
- timeoutHandle = setTimeout(() => {
83
- focused.value = false
84
- }, 200)
85
- emits("blur")
86
- }
87
-
88
- onUnmounted(() => {
89
- debounceLoadMessage.cancel()
90
- if (timeoutHandle) {
91
- clearTimeout(timeoutHandle)
92
- }
93
- })
94
-
95
- watch(model, () => {
96
- debounceLoadMessage();
97
- }, {
98
- deep: true,
99
- immediate: true
100
- })
101
-
102
- function onChange(value: string) {
103
- emits('change', value)
104
- }
105
-
106
- async function onNewI18nCreated(messageKey: string) {
107
- await filterMessages(filterKey.value);
108
- model.value = "{" + messageKey + "}";
109
- selectI18n.value.focus
110
- }
111
-
112
- defineExpose({
113
- focus() {
114
- selectI18n?.value.focus()
115
- },
116
- blur() {
117
- select?.value.blur()
118
- }
119
- })
120
- </script>
121
-
122
- <template>
123
- <el-input ref="selectI18n" @focus="onFocus" v-show="!focused" v-model="i18nTxt" :size="size"
124
- :disabled="disabled"
125
- :type="textarea ? 'textarea': undefined">
126
- </el-input>
127
- <el-select ref="select" filterable remote :remote-method="filterMessages" v-show="focused"
128
- :disabled="disabled" default-first-option
129
- remote-show-suffix @change="onChange" :size="size" allow-create clearable
130
- @blur="onBlur" v-model="model">
131
- <el-option v-for="k in messageKeys" :key="k" :value="'{' + k +'}'"
132
- :label="'{' + k +'}'"></el-option>
133
- <template #footer>
134
- <ja-button link :style="{width: '100%'}" type="primary" @click="editorVisible=true"
135
- shortcut="Alt+I">
136
- 新建国际化文本(Alt+I)
137
- </ja-button>
138
- </template>
139
- </el-select>
140
- <message-editor :app-id="appId" :pre-key="filterKey" v-model="editorVisible"
141
- @success="onNewI18nCreated"></message-editor>
142
- </template>
143
-
144
- <style scoped lang="scss">
145
-
146
- </style>
1
+ <script setup lang="ts">
2
+ import {ElInput, ElOption, ElSelect} from "element-plus";
3
+ import {nextTick, onUnmounted, ref, watch} from "vue"
4
+ import {
5
+ createAxiosWithoutCache,
6
+ useAppMessageApi,
7
+ useLoginUser
8
+ } from "@jari-ace/app-bolts";
9
+ import MessageEditor from "./I18nBundleEditor.vue"
10
+ import {trim} from "lodash-es";
11
+ import {useAppInstances} from "../../hooks/useAppInstances";
12
+ import debounce from "lodash-es/debounce";
13
+ import {JaButton} from "../button";
14
+
15
+ const props = withDefaults(defineProps<{
16
+ appId?: string,
17
+ size?: 'default' | 'large' | 'small',
18
+ textarea?: boolean,
19
+ disabled?: boolean
20
+ }>(), {
21
+ size: 'default',
22
+ textarea: false
23
+ })
24
+ const model = defineModel<string>({
25
+ default: ""
26
+ })
27
+ const axios = createAxiosWithoutCache()
28
+ const api = useAppMessageApi(axios)
29
+ const locale = useLoginUser().locale
30
+ const messageKeys = ref<string[]>()
31
+ const focused = ref(false)
32
+ const editorVisible = ref(false)
33
+ const select = ref<InstanceType<typeof ElSelect>>()
34
+ const appName = ref("");
35
+ const appInstances = await useAppInstances();
36
+ const filterKey = ref("")
37
+ const i18nTxt = ref("")
38
+ const selectI18n = ref<InstanceType<typeof ElSelect>>();
39
+ const emits = defineEmits(["change", "focus", "blur"])
40
+ const debounceLoadMessage = debounce(loadMessage, 500)
41
+ let timeoutHandle: number | undefined = undefined;
42
+
43
+ async function loadMessage(val?: string) {
44
+ if (!val) val = model.value;
45
+ if (!props.appId) return
46
+ const app = await appInstances.getById(props.appId)
47
+ appName.value = app.name
48
+ if (!val || !appName.value) {
49
+ i18nTxt.value = "";
50
+ return;
51
+ }
52
+ i18nTxt.value = val
53
+ let key = val;
54
+ if (val && val.length > 0) {
55
+ key = trim(key);
56
+ if (key.startsWith('{') && key.endsWith('}')) {
57
+ key = key.substring(1, key.length - 1);
58
+ }
59
+ }
60
+ const messages = await api.getByKey(appName.value, key, {
61
+ cancelDuplicatedRequest: false
62
+ });
63
+ const message = messages.find(m => m.locale === locale)
64
+ if (message) {
65
+ i18nTxt.value = message.message
66
+ }
67
+ }
68
+
69
+ async function filterMessages(filterName: string) {
70
+ filterKey.value = filterName
71
+ messageKeys.value = await api.searchKeys(appName.value, filterName)
72
+ }
73
+
74
+ async function onFocus() {
75
+ focused.value = true;
76
+ await nextTick()
77
+ emits("focus")
78
+ select.value?.focus()
79
+ }
80
+
81
+ function onBlur() {
82
+ timeoutHandle = setTimeout(() => {
83
+ focused.value = false
84
+ }, 200)
85
+ emits("blur")
86
+ }
87
+
88
+ onUnmounted(() => {
89
+ debounceLoadMessage.cancel()
90
+ if (timeoutHandle) {
91
+ clearTimeout(timeoutHandle)
92
+ }
93
+ })
94
+
95
+ watch(model, () => {
96
+ debounceLoadMessage();
97
+ }, {
98
+ deep: true,
99
+ immediate: true
100
+ })
101
+
102
+ function onChange(value: string) {
103
+ emits('change', value)
104
+ }
105
+
106
+ async function onNewI18nCreated(messageKey: string) {
107
+ await filterMessages(filterKey.value);
108
+ model.value = "{" + messageKey + "}";
109
+ selectI18n.value.focus
110
+ }
111
+
112
+ defineExpose({
113
+ focus() {
114
+ selectI18n?.value.focus()
115
+ },
116
+ blur() {
117
+ select?.value.blur()
118
+ }
119
+ })
120
+ </script>
121
+
122
+ <template>
123
+ <el-input ref="selectI18n" @focus="onFocus" v-show="!focused" v-model="i18nTxt" :size="size"
124
+ :disabled="disabled"
125
+ :type="textarea ? 'textarea': undefined">
126
+ </el-input>
127
+ <el-select ref="select" filterable remote :remote-method="filterMessages" v-show="focused"
128
+ :disabled="disabled" default-first-option
129
+ remote-show-suffix @change="onChange" :size="size" allow-create clearable
130
+ @blur="onBlur" v-model="model">
131
+ <el-option v-for="k in messageKeys" :key="k" :value="'{' + k +'}'"
132
+ :label="'{' + k +'}'"></el-option>
133
+ <template #footer>
134
+ <ja-button link :style="{width: '100%'}" type="primary" @click="editorVisible=true"
135
+ shortcut="Alt+I">
136
+ 新建国际化文本(Alt+I)
137
+ </ja-button>
138
+ </template>
139
+ </el-select>
140
+ <message-editor :app-id="appId" :pre-key="filterKey" v-model="editorVisible"
141
+ @success="onNewI18nCreated"></message-editor>
142
+ </template>
143
+
144
+ <style scoped lang="scss">
145
+
146
+ </style>
@@ -1,50 +1,50 @@
1
- <script setup lang="ts">
2
- import type {ValidationInstance} from '../../hooks/useBackendValidations'
3
- import {inject, ref, watch} from "vue";
4
- import {ElSelect} from "element-plus";
5
- import {getValue, setValue} from "../../utils/objectUtils";
6
- import InputI18n from "./InputI18n.vue";
7
-
8
- const input = ref<typeof ElSelect>({} as typeof ElSelect)
9
- const model = inject('aceFormModel') as Record<string, any>
10
- const prop = inject('aceFormItemProp') as string
11
- const validator = inject('aceFormValidator') as ValidationInstance
12
- const emit = defineEmits<{
13
- change: [value: string]
14
- }>()
15
- const props = defineProps<{
16
- appId: string
17
- }>()
18
-
19
- function onChange(value: string) {
20
- validator.removeFieldError(prop)
21
- setValue(model.formData, prop, value);
22
- emit('change', value)
23
- }
24
-
25
- type modelType = string;
26
-
27
- const mv = ref<modelType>();
28
- watch(() => model.formData, () => {
29
- const v = getValue(model.formData, prop) as modelType
30
- mv.value = v;
31
- }, {
32
- immediate: true,
33
- deep: true
34
- })
35
-
36
- defineExpose({
37
- focus: () => input.value.focus(),
38
- blur: () => input.value.blur(),
39
- elSelect: input
40
- })
41
- </script>
42
-
43
- <template>
44
- <input-i18n
45
- ref="input"
46
- v-model="mv"
47
- @change="onChange"
48
- v-bind="$attrs" :app-id="props.appId">
49
- </input-i18n>
50
- </template>
1
+ <script setup lang="ts">
2
+ import type {ValidationInstance} from '../../hooks/useBackendValidations'
3
+ import {inject, ref, watch} from "vue";
4
+ import {ElSelect} from "element-plus";
5
+ import {getValue, setValue} from "../../utils/objectUtils";
6
+ import InputI18n from "./InputI18n.vue";
7
+
8
+ const input = ref<typeof ElSelect>({} as typeof ElSelect)
9
+ const model = inject('aceFormModel') as Record<string, any>
10
+ const prop = inject('aceFormItemProp') as string
11
+ const validator = inject('aceFormValidator') as ValidationInstance
12
+ const emit = defineEmits<{
13
+ change: [value: string]
14
+ }>()
15
+ const props = defineProps<{
16
+ appId: string
17
+ }>()
18
+
19
+ function onChange(value: string) {
20
+ validator.removeFieldError(prop)
21
+ setValue(model.formData, prop, value);
22
+ emit('change', value)
23
+ }
24
+
25
+ type modelType = string;
26
+
27
+ const mv = ref<modelType>();
28
+ watch(() => model.formData, () => {
29
+ const v = getValue(model.formData, prop) as modelType
30
+ mv.value = v;
31
+ }, {
32
+ immediate: true,
33
+ deep: true
34
+ })
35
+
36
+ defineExpose({
37
+ focus: () => input.value.focus(),
38
+ blur: () => input.value.blur(),
39
+ elSelect: input
40
+ })
41
+ </script>
42
+
43
+ <template>
44
+ <input-i18n
45
+ ref="input"
46
+ v-model="mv"
47
+ @change="onChange"
48
+ v-bind="$attrs" :app-id="props.appId">
49
+ </input-i18n>
50
+ </template>
@@ -1,8 +1,8 @@
1
- import {type SFCWithInstall, withInstall} from "../../utils/install";
2
- import InputI18n from "./InputI18n.vue";
3
- import _JaInputI18n from "./JaInputI18n.vue";
4
-
5
- // 存在绑定的model watch不响应的问题,需用点击第二次watch才响应mv变化,这个问题无法解决
6
- // export const JaInputI18n: SFCWithInstall<typeof _JaInputI18n> = withInstall(_JaInputI18n);
7
-
8
- export const JaInputI18nRaw: SFCWithInstall<typeof InputI18n> = withInstall(InputI18n);
1
+ import {type SFCWithInstall, withInstall} from "../../utils/install";
2
+ import InputI18n from "./InputI18n.vue";
3
+ import _JaInputI18n from "./JaInputI18n.vue";
4
+
5
+ // 存在绑定的model watch不响应的问题,需用点击第二次watch才响应mv变化,这个问题无法解决
6
+ // export const JaInputI18n: SFCWithInstall<typeof _JaInputI18n> = withInstall(_JaInputI18n);
7
+
8
+ export const JaInputI18nRaw: SFCWithInstall<typeof InputI18n> = withInstall(InputI18n);