adddetailsModal.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @cancel="resetFields"
  5. @register="register"
  6. :title="title"
  7. :min-height="350"
  8. height="500"
  9. @ok="handleOk"
  10. >
  11. <BasicForm @register="registerForm" />
  12. </BasicModal>
  13. </template>
  14. <script lang="ts">
  15. import { defineComponent, ref, computed } from 'vue';
  16. import { checkUserApi, saveApi, updateApi, getRoleListByParam } from '/@/api/staff/list'; //roleLIstApi
  17. import { BasicModal, useModalInner } from '/@/components/Modal';
  18. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  19. import { useI18n } from '/@/hooks/web/useI18n';
  20. import { useMessage } from '/@/hooks/web/useMessage';
  21. import { useUserStore } from '/@/store/modules/user';
  22. const { t } = useI18n();
  23. export default defineComponent({
  24. components: { BasicModal, BasicForm },
  25. props: {
  26. userData: { type: Object },
  27. },
  28. emits: ['ok'],
  29. setup(_, context) {
  30. const modelRef = ref({});
  31. const userStore = useUserStore();
  32. const userinfo = computed(() => userStore.getUserInfo);
  33. const preventAutoFill = ref(true);
  34. const { companyId } = userinfo.value;
  35. const schemas: FormSchema[] = [
  36. {
  37. field: 'nickName',
  38. component: 'Input',
  39. label: '姓名',
  40. colProps: {
  41. span: 20,
  42. },
  43. componentProps: {
  44. maxLength: 15,
  45. },
  46. rules: [
  47. {
  48. required: true,
  49. // @ts-ignore
  50. validator: async (rule, value) => {
  51. var reg_tel = /^[a-zA-Z\u4e00-\u9fa5]+$/;
  52. // var reg = /\S+@\S+\.\S+/;
  53. if (!value) {
  54. return Promise.reject('请输入姓名');
  55. }
  56. if (!reg_tel.test(value)) {
  57. /* eslint-disable-next-line */
  58. return Promise.reject('请输入正确的姓名');
  59. }
  60. return Promise.resolve();
  61. },
  62. trigger: 'change',
  63. },
  64. ],
  65. },
  66. {
  67. field: 'roleId',
  68. component: 'ApiSelect',
  69. label: '角色',
  70. required: true,
  71. itemProps: {
  72. validateTrigger: 'blur',
  73. },
  74. colProps: {
  75. span: 20,
  76. },
  77. defaultValue: '',
  78. componentProps: {
  79. api: getRoleListByParam,
  80. labelField: 'roleName',
  81. valueField: 'id',
  82. params: {
  83. type: 1,
  84. },
  85. },
  86. },
  87. {
  88. field: 'userName',
  89. component: 'Input',
  90. label: '账号',
  91. required: true,
  92. colProps: {
  93. span: 20,
  94. },
  95. componentProps:{
  96. placeholder:"请输入字母或数字组合",
  97. autoComplete:'off',
  98. maxLength: 15,
  99. readonly:preventAutoFill.value
  100. },
  101. rules: [
  102. {
  103. required: true,
  104. // @ts-ignore
  105. validator: async (rule, value) => {
  106. console.log('value',value)
  107. const regPos = /^[\da-z]+$/i; // 非中文
  108. if (!value) {
  109. return Promise.reject('请输入字母或数字组合');
  110. }
  111. if (!regPos.test(value)) {
  112. /* eslint-disable-next-line */
  113. return Promise.reject('请输入字母或数字组合');
  114. }
  115. return Promise.resolve();
  116. },
  117. trigger: 'change',
  118. },
  119. ],
  120. },
  121. {
  122. field: 'password',
  123. component: 'StrengthMeter',
  124. label: '密码',
  125. required: true,
  126. colProps: {
  127. span: 20,
  128. },
  129. rules: [
  130. {
  131. required: true,
  132. // @ts-ignore
  133. validator: async (rule, value) => {
  134. console.log('value',value)
  135. const regPos = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/; // 非中文
  136. if (!value) {
  137. return Promise.reject('请输入8-16位数字、字母大小写组合');
  138. }
  139. if (!regPos.test(value)) {
  140. /* eslint-disable-next-line */
  141. return Promise.reject('请输入8-16位数字、字母大小写组合');
  142. }
  143. return Promise.resolve();
  144. },
  145. trigger: 'change',
  146. },
  147. ],
  148. componentProps:{
  149. placeholder:"请输入8-16位数字、字母大小写组合",
  150. maxLength: 16,
  151. readonly:preventAutoFill.value,
  152. minLength: 8,
  153. autoComplete:'off',
  154. }
  155. },
  156. {
  157. field: 'id',
  158. component: 'Input',
  159. label: 'id',
  160. show: false,
  161. },
  162. ];
  163. const title = ref('新增账号');
  164. const { createMessage } = useMessage();
  165. const [registerForm, { setFieldsValue, validate, updateSchema, resetFields }] = useForm({
  166. labelWidth: 120,
  167. schemas,
  168. showActionButtonGroup: false,
  169. actionColOptions: {
  170. span: 24,
  171. },
  172. });
  173. const [register, { closeModal }] = useModalInner((data) => {
  174. data && onDataReceive(data);
  175. });
  176. function onDataReceive(data) {
  177. console.log('onDataReceive',data)
  178. // 方式1;
  179. setTimeout(()=>{
  180. preventAutoFill.value = false
  181. updateSchema([{
  182. field: 'userName',
  183. componentProps:{
  184. readonly:false,
  185. }
  186. },{
  187. field: 'password',
  188. componentProps:{
  189. readonly:false,
  190. }
  191. }])
  192. // updateSchema(schemas);
  193. },500)
  194. }
  195. function companyIdChange(companyId) {
  196. // resetFields(['permList'])
  197. updateSchema([
  198. {
  199. field: 'permList',
  200. componentProps: {
  201. params: {
  202. companyId: companyId,
  203. },
  204. },
  205. },
  206. ]);
  207. setFieldsValue({
  208. permList: [],
  209. });
  210. }
  211. async function handleOk() {
  212. let data = await validate();
  213. const requestApi = data.id ? updateApi : saveApi;
  214. let res = await requestApi({
  215. ...data,
  216. // userName: data.phone,
  217. phone: data.phone,
  218. nickName: data.nickName,
  219. roleId: data.roleId,
  220. id: data.id,
  221. });
  222. context && context.emit('ok', res);
  223. createMessage.success(t('common.optSuccess'));
  224. closeModal();
  225. resetFields();
  226. }
  227. return {
  228. register,
  229. title,
  230. preventAutoFill,
  231. schemas,
  232. registerForm,
  233. modelRef,
  234. handleOk,
  235. resetFields,
  236. };
  237. },
  238. });
  239. </script>