index.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <template>
  2. <div class="flex-column-page-wrap pageWrap">
  3. Home
  4. <div class="common_title" style="background: #f00">todo 选择人员 选择角色</div>
  5. <div class="content">
  6. <el-form ref="formRef" :class="`le-form-config`" :rules="rules" :model="numberValidateForm">
  7. <el-form-item label="age" prop="age">
  8. <el-input v-model.number="numberValidateForm.age" type="text" autocomplete="off" />
  9. </el-form-item>
  10. <el-form-item label="roles" prop="roles">
  11. <SelectRole v-model="numberValidateForm.roles"></SelectRole>
  12. </el-form-item>
  13. <el-form-item label="users" prop="users">
  14. <SelectUser v-model="numberValidateForm.users" :max="55"></SelectUser>
  15. </el-form-item>
  16. </el-form>
  17. <el-form-item>
  18. <el-button type="primary" @click="submitForm">Submit</el-button>
  19. </el-form-item>
  20. </div>
  21. <div class="common_title">多语言 使用</div>
  22. <div class="content">
  23. <el-button size="small" @click="switchLang">
  24. lang: 切换
  25. <LeIcon icon-class="le-frozen" />
  26. <LeIcon icon-class="le-warning" />
  27. {{ $i18n.locale }}
  28. </el-button>
  29. <div>local文字: {{ $t('route.dashboard') }}</div>
  30. <div>src/locale 文字(携带 le前缀做区分): {{ $t('le.btn.add') }}</div>
  31. </div>
  32. <SearchGroup2Popover v-if="false" />
  33. <LeSelectDemo v-if="true" />
  34. <InputNumberDemo v-if="true" />
  35. <LeDraggableNestDemo v-if="true" />
  36. <Watermark v-if="true" />
  37. <div class="common_title">le-iconfont && LeIcon</div>
  38. <div class="content">
  39. <!-- 单色样式类 -->
  40. <!--也可拼接 对应icon文件夹注入的icon 文件-->
  41. <SvgIcon icon-class="logo" />
  42. <LeIcon icon-class="icon-logo" />
  43. <span class="le-iconfont le-review"></span>
  44. <LeIcon icon-class="le-checkbox_checked"></LeIcon>
  45. <span class="le-iconfont le-checkbox_checked"></span>
  46. <LeIcon icon-class="le-checkbox"></LeIcon>
  47. <span class="le-iconfont le-checkbox"></span>
  48. <LeIcon icon-class="le-radio_checked"></LeIcon>
  49. <span class="le-iconfont le-radio_checked"></span>
  50. <LeIcon icon-class="le-radio"></LeIcon>
  51. <span class="le-iconfont le-radio"></span>
  52. <!-- svg -->
  53. <LeIcon icon-class="le-frozen" @click="testHandler"></LeIcon>
  54. <!--Table 操作 用: Icon按钮-->
  55. <el-tooltip placement="top" :content="$t('le.btn.search')">
  56. <el-button class="le-icon-button" @click="testHandler('row')">
  57. <LeIcon icon-class="le-view"></LeIcon>
  58. </el-button>
  59. </el-tooltip>
  60. </div>
  61. <!-- <div class="common_title">下拉Dropdown LeDropdown</div>
  62. <div class="content">
  63. <LeDropdown v-model="dropdownValue" :options="dropdownOptions" clearable modelValue>
  64. &lt;!&ndash; <template #btn="{ selectOption, showClear }">
  65. <span class="le-dropdown-link">
  66. {{$log(showClear, 'showClear')}}
  67. {{selectOption.label}}
  68. <i :class="['action el-icon-arrow-down']" />
  69. </span>
  70. </template>&ndash;&gt;
  71. </LeDropdown>
  72. <LeDropdown v-model="dropdownValue" :options="dropdownOptions" @command="$log($event, 'command 测试')">
  73. <template #btn="testHandler">
  74. <span class="le-dropdown-link">
  75. {{testHandler}}
  76. <i :class="['action el-icon-arrow-down']" />
  77. </span>
  78. </template>
  79. <template slot="options">
  80. <el-dropdown-item
  81. v-for="opt in dropdownOptions"
  82. :key="opt.value"
  83. :command="opt.value"
  84. :disabled="opt.disabled"
  85. >
  86. -&#45;&#45;{{ opt.label }}&#45;&#45;&#45;&#45; label
  87. </el-dropdown-item>
  88. </template>
  89. </LeDropdown>
  90. </div>-->
  91. <div class="common_title">暂无数据 LeNoData</div>
  92. <div class="content">
  93. <LeNoData :message="`<div style='background: var(--el-color-danger);'>test: lang: ${$i18n.locale}</div>`" @click="$log('test....')">
  94. <template #extraContent>no data</template>
  95. </LeNoData>
  96. </div>
  97. <!-- <div class="common_title">ElCard Style</div>
  98. <div class="content">...</div>
  99. <div class="common_title">iconfont && LeIcon</div>
  100. <div class="content">
  101. <el-card shadow="never" class="le-card-bg picking-list" header="Picking List">
  102. <template slot="header">
  103. Picking List&#45;&#45;&#45;&#45;
  104. <el-button type="text">Clear</el-button>
  105. </template>
  106. 123456
  107. </el-card>
  108. </div>-->
  109. </div>
  110. </template>
  111. <script setup name="home" lang="tsx">
  112. import { ref, reactive } from 'vue'
  113. import SearchGroup2Popover from './components/SearchGroup2Popover'
  114. import LeSelectDemo from './components/LeSelectDemo'
  115. import InputNumberDemo from './components/InputNumberDemo'
  116. import LeDraggableNestDemo from './components/LeDraggableNestDemo'
  117. import Watermark from './components/Watermark'
  118. import SelectRole from '@/components/SelectRole.vue'
  119. import SelectUser from '@/components/SelectUser.vue'
  120. import useStore from '@/store/index'
  121. import { useI18n } from 'vue-i18n'
  122. // import i18n from '@/lang'
  123. const dropdownValue = ref()
  124. const dropdownOptions = ref([
  125. {
  126. label: 'in',
  127. value: 0
  128. },
  129. {
  130. label: 'cm',
  131. value: 1
  132. }
  133. ])
  134. const testHandler = () => {
  135. console.error('testHandler...')
  136. }
  137. const { locale } = useI18n()
  138. const switchLang = () => {
  139. // let lang = this.$i18n.locale
  140. // let lang = i18n.global.locale.value
  141. let lang = locale.value
  142. if (lang === 'en') {
  143. lang = 'zh-cn'
  144. } else {
  145. lang = 'en'
  146. }
  147. // console.error(lang, 'lang')
  148. locale.value = lang
  149. const { app } = useStore()
  150. app.setLanguage(lang)
  151. // i18n.global.setLocaleMessage(lang)
  152. // this.$i18n.locale = lang
  153. // this.$i18n.fallbackLocale = lang
  154. }
  155. const formRef = ref()
  156. const numberValidateForm = reactive({
  157. age: '',
  158. roles: undefined,
  159. // roles: [
  160. // {id: "1456247408778260482",
  161. // name: "技术总监"}
  162. // ],
  163. users: undefined
  164. })
  165. const rules = {
  166. age: [
  167. // { required: true, message: '请输入用户名', trigger: 'blur' },
  168. // { min: 3, max: 15, message: '用户名长度应在3到15个字符之间', trigger: 'blur' }
  169. { required: true, message: '角色 is required' /*, trigger: ['blur', 'change']*/ }
  170. ],
  171. roles: [
  172. // { required: true, message: '请输入 roles', trigger: 'blur' },
  173. {
  174. required: true,
  175. validator: (rule, value, callback) => {
  176. if (!value || !value.length) callback(new Error('请选择 roles'))
  177. }
  178. // trigger: ['change', 'blur']
  179. }
  180. ],
  181. users: [
  182. // { required: true, message: '请输入 users' },
  183. {
  184. required: true,
  185. validator: (rule, value, callback) => {
  186. console.error(value, ' xxxxxxxxxxxx')
  187. if (!value || !value.length) callback(new Error('请选择 users'))
  188. }
  189. // trigger: ['change', 'blur']
  190. }
  191. ]
  192. }
  193. const submitForm = () => {
  194. if (!formRef.value) return
  195. formRef.value.validate(valid => {
  196. if (valid) {
  197. console.log('submit!', numberValidateForm)
  198. } else {
  199. console.log('error submit!')
  200. }
  201. })
  202. }
  203. </script>
  204. <style lang="scss" scoped>
  205. .pageWrap {
  206. padding: 10px 12px;
  207. overflow: auto;
  208. }
  209. .le-iconfont {
  210. color: #0d84ff;
  211. }
  212. </style>