index.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <template>
  2. <div class="p-base bulk-add-user-view">
  3. <el-card shadow="never" class="form-card">
  4. <base-form ref="formRef" :label-width="useVW(100)" :groups="groups" :model="model" :items="items" :rules="rules">
  5. <el-form-item class="m-t-base form-footer">
  6. <confirm-button :loading="loading" @confirm="onSubmit" @cancel="cancel"></confirm-button>
  7. </el-form-item>
  8. </base-form>
  9. </el-card>
  10. </div>
  11. </template>
  12. <script setup lang="ts" name="BulkAddUser">
  13. /** 批量新增用户 */
  14. import { reactive, watch, nextTick, unref, computed } from 'vue'
  15. import { useRouter } from 'vue-router'
  16. import { ElCard, ElFormItem, ElMessage } from 'element-plus'
  17. import BaseForm from '@/components/element/BaseForm.vue'
  18. import ConfirmButton from '@/components/common/ConfirmButton.vue'
  19. import useFetch from '@/hooks/useFetch'
  20. import useForm from '@/hooks/useForm'
  21. import useVW from '@/hooks/useVW'
  22. import useOptions, { DataModel } from '@/hooks/useOptions'
  23. import useMainStore from '@/store/main'
  24. import { StatusMap, ROLE_OPTION } from '@/constants/dicts'
  25. import type { ExtractApiParams } from '@/api/api'
  26. import type { EpFormItem, EpFormRules, FormGroup } from 'global-type'
  27. const { back } = useRouter()
  28. const mainStore = useMainStore()
  29. const initModel: ExtractApiParams<'bulkSaveUser'> = {
  30. enable: true,
  31. loginNameLength: 3,
  32. mainNumber: void 0,
  33. markingGroupAccounts: void 0,
  34. markingGroupNumber: void 0,
  35. password: '',
  36. prefix: '',
  37. role: 'MARKER',
  38. start: 1,
  39. subjectCode: '',
  40. }
  41. const model = reactive<ExtractApiParams<'bulkSaveUser'>>(initModel)
  42. const { formRef, elFormRef, defineColumn, _ } = useForm()
  43. const rules: EpFormRules = {
  44. subjectCode: [{ required: true, message: '请选择科目' }],
  45. mainNumber: [{ required: true, message: '请选择大题' }],
  46. markingGroupNumber: [{ required: true, message: '请选择小组' }],
  47. role: [{ required: true, message: '请选择用户角色' }],
  48. loginNameLength: [{ required: true, message: '请填写账号代码位数' }],
  49. password: [{ required: true, message: '请填写用户密码' }],
  50. enable: [{ required: true, message: '请选择用户状态' }],
  51. markingGroupAccounts: [{ required: true, message: '请填写分组账号数量' }],
  52. prefix: [{ required: true, message: '请填写账号前缀' }],
  53. start: [{ required: true, message: '请填写账号起始数' }],
  54. }
  55. const { subjectList, mainQuestionList, groupList, dataModel, changeModelValue } = useOptions([
  56. 'subject',
  57. 'question',
  58. 'group',
  59. ])
  60. watch(dataModel, () => {
  61. model.subjectCode = dataModel.subject || ''
  62. model.mainNumber = dataModel.question
  63. model.markingGroupNumber = dataModel.group
  64. })
  65. const groups: FormGroup[] = [
  66. {
  67. rowKeys: ['row-1', 'row-2', 'row-3', 'row-4', 'row-5'],
  68. },
  69. {
  70. groupTitle: '批量新增设置',
  71. rowKeys: ['row-6', 'row-7', 'row-8', 'row-9'],
  72. },
  73. ]
  74. const span5 = defineColumn(_, '', { span: 5 })
  75. const items = computed<EpFormItem[]>(() => {
  76. return [
  77. {
  78. label: '考试批次',
  79. slotType: 'input',
  80. slot: {
  81. disabled: true,
  82. value: mainStore.myUserInfo?.examName,
  83. },
  84. colProp: {
  85. span: 5,
  86. },
  87. },
  88. span5({
  89. label: '科目',
  90. slotType: 'select',
  91. prop: 'subjectCode',
  92. slot: {
  93. placeholder: '请选择科目',
  94. onChange: changeModelValue('subject'),
  95. options: subjectList.value,
  96. },
  97. }),
  98. span5({
  99. label: '大题',
  100. slotType: 'select',
  101. prop: 'mainNumber',
  102. slot: {
  103. placeholder: '大题号-大题名称',
  104. onChange: changeModelValue('question'),
  105. options: mainQuestionList.value,
  106. },
  107. }),
  108. span5({
  109. label: '小组',
  110. slotType: 'select',
  111. prop: 'markingGroupNumber',
  112. slot: {
  113. placeholder: '用户所在小组',
  114. options: groupList.value,
  115. onChange: changeModelValue('group'),
  116. },
  117. }),
  118. span5({
  119. label: '用户角色',
  120. slotType: 'select',
  121. prop: 'role',
  122. slot: {
  123. options: ROLE_OPTION,
  124. placeholder: '设置用户角色',
  125. },
  126. }),
  127. span5({
  128. rowKey: 'row-6',
  129. label: '自定义前缀',
  130. slotType: 'input',
  131. prop: 'prefix',
  132. slot: {
  133. placeholder: '自定义账号前缀',
  134. },
  135. }),
  136. span5({
  137. rowKey: 'row-6',
  138. label: '账号代码位数',
  139. slotType: 'inputNumber',
  140. prop: 'loginNameLength',
  141. slot: {
  142. placeholder: '账号代码位数',
  143. },
  144. }),
  145. span5({
  146. rowKey: 'row-7',
  147. label: '起始数',
  148. slotType: 'input',
  149. prop: 'start',
  150. slot: {
  151. placeholder: '起始数',
  152. },
  153. }),
  154. span5({
  155. rowKey: 'row-7',
  156. label: '账号数量',
  157. slotType: 'input',
  158. prop: 'markingGroupAccounts',
  159. slot: {
  160. placeholder: '账号数量',
  161. },
  162. }),
  163. span5({
  164. rowKey: 'row-8',
  165. label: '用户密码',
  166. slotType: 'input',
  167. prop: 'password',
  168. slot: {
  169. showPassword: true,
  170. placeholder: '设置用户密码',
  171. },
  172. }),
  173. span5({
  174. rowKey: 'row-9',
  175. label: '状态',
  176. slotType: 'select',
  177. prop: 'enable',
  178. slot: {
  179. options: StatusMap,
  180. placeholder: '设置用户角色',
  181. },
  182. }),
  183. ]
  184. })
  185. const { fetch, loading } = useFetch('bulkSaveUser')
  186. /** 确定提交 */
  187. async function onSubmit() {
  188. try {
  189. await unref(elFormRef)?.validate()
  190. await fetch(model)
  191. unref(elFormRef)?.resetFields()
  192. ElMessage.success({
  193. message: `创建用户成功`,
  194. duration: 1000,
  195. })
  196. back()
  197. } catch (error) {
  198. console.log(error)
  199. }
  200. }
  201. /** 取消 */
  202. function cancel() {
  203. back()
  204. }
  205. </script>
  206. <style scoped lang="scss"></style>