adddetailsModal.vue 6.3 KB

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