detailsModal.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @cancel="resetFields"
  5. @register="register"
  6. :title="title"
  7. @ok="handleOk"
  8. >
  9. <div class="pt-3px pr-3px">
  10. <BasicForm @register="registerForm" :model="modelRef" />
  11. </div>
  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 { companyId } = userinfo.value;
  34. console.log('companyId', companyId);
  35. const permListOptions = computed(() => {
  36. return [
  37. {
  38. label: '带看',
  39. value: '1',
  40. },
  41. {
  42. label: '拍摄',
  43. value: '2',
  44. },
  45. ];
  46. });
  47. const schemas: FormSchema[] = [
  48. {
  49. field: 'nickName',
  50. component: 'Input',
  51. label: '姓名',
  52. colProps: {
  53. span: 20,
  54. },
  55. componentProps: {
  56. maxLength: 15,
  57. },
  58. rules: [
  59. {
  60. required: true,
  61. // @ts-ignore
  62. validator: async (rule, value) => {
  63. var reg_tel = /^[a-zA-Z\u4e00-\u9fa5]+$/;
  64. // var reg = /\S+@\S+\.\S+/;
  65. if (!value) {
  66. return Promise.reject('请输入姓名');
  67. }
  68. if (!reg_tel.test(value)) {
  69. /* eslint-disable-next-line */
  70. return Promise.reject('请输入正确的姓名');
  71. }
  72. return Promise.resolve();
  73. },
  74. trigger: 'change',
  75. },
  76. ],
  77. },
  78. {
  79. field: 'roleId',
  80. component: 'ApiSelect',
  81. label: '角色',
  82. required: true,
  83. itemProps: {
  84. validateTrigger: 'blur',
  85. },
  86. colProps: {
  87. span: 20,
  88. },
  89. defaultValue: 8,
  90. componentProps: {
  91. options: [
  92. {
  93. label: '公司员工',
  94. value: 8,
  95. key: 8,
  96. },
  97. ],
  98. },
  99. },
  100. {
  101. field: 'userName',
  102. component: 'Input',
  103. label: '账号',
  104. required: true,
  105. colProps: {
  106. span: 20,
  107. },
  108. componentProps:{
  109. placeholder:"请输入字母或数字组合",
  110. autoComplete:'off',
  111. maxLength: 15,
  112. },
  113. rules: [
  114. {
  115. required: true,
  116. // @ts-ignore
  117. validator: async (rule, value) => {
  118. console.log('value',value)
  119. const regPos = /^[\da-z]+$/i; // 非中文
  120. if (!value) {
  121. return Promise.reject('请输入字母或数字组合');
  122. }
  123. if (!regPos.test(value)) {
  124. /* eslint-disable-next-line */
  125. return Promise.reject('请输入字母或数字组合');
  126. }
  127. return Promise.resolve();
  128. },
  129. trigger: 'change',
  130. },
  131. ],
  132. },
  133. {
  134. field: 'password',
  135. component: 'StrengthMeter',
  136. label: '密码',
  137. required: true,
  138. colProps: {
  139. span: 20,
  140. },
  141. rules: [
  142. {
  143. required: true,
  144. // @ts-ignore
  145. validator: async (rule, value) => {
  146. console.log('value',value)
  147. const regPos = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/; // 非中文
  148. if (!value) {
  149. return Promise.reject('请输入8-16位数字、字母大小写组合');
  150. }
  151. if (!regPos.test(value)) {
  152. /* eslint-disable-next-line */
  153. return Promise.reject('请输入8-16位数字、字母大小写组合');
  154. }
  155. return Promise.resolve();
  156. },
  157. trigger: 'change',
  158. },
  159. ],
  160. componentProps:{
  161. placeholder:"请输入8-16位数字、字母大小写组合",
  162. maxLength: 16,
  163. minLength: 8,
  164. autoComplete:'off',
  165. }
  166. },
  167. {
  168. field: 'id',
  169. component: 'Input',
  170. label: 'id',
  171. show: false,
  172. },
  173. ];
  174. const title = ref('新增账号');
  175. const { createMessage } = useMessage();
  176. const [registerForm, { setFieldsValue, validate, updateSchema, resetFields }] = useForm({
  177. labelWidth: 120,
  178. schemas,
  179. showActionButtonGroup: false,
  180. actionColOptions: {
  181. span: 24,
  182. },
  183. });
  184. const [register, { closeModal }] = useModalInner((data) => {
  185. data && onDataReceive(data);
  186. });
  187. function onDataReceive(data) {
  188. // 方式1;
  189. console.log('useModalInner', data);
  190. setFieldsValue({
  191. ...data,
  192. roleId: data.roleId != 2 ? data.roleId : '',
  193. });
  194. let setSchema = [
  195. {
  196. field: 'roleId',
  197. component: 'ApiSelect',
  198. componentProps: {
  199. // disabled: data.roleId == 2 ? false : data.id ? true : false,
  200. api: getRoleListByParam,
  201. labelField: 'roleName',
  202. valueField: 'id',
  203. params: {
  204. type: data.roleId ? 1 : 0,
  205. roleId: data.roleId,
  206. },
  207. },
  208. },
  209. {
  210. field: 'phone',
  211. componentProps: {
  212. // disabled: getCheckRole('plat_admin') ? false : data.id ? true : false,
  213. },
  214. },
  215. {
  216. field: 'userName',
  217. ifShow:data.id ? false:true,
  218. },
  219. {
  220. field: 'password',
  221. ifShow:data.id ? false:true,
  222. },
  223. {
  224. field: 'companyId',
  225. componentProps: {
  226. disabled: data.id ? (data.roleId != 2 ? true : false) : false,
  227. },
  228. },
  229. {
  230. field: 'permList',
  231. componentProps: {
  232. disabled: data.roleId == 2 ? false : data.id ? true : false,
  233. params: {
  234. companyId: data.companyId || companyId,
  235. },
  236. },
  237. },
  238. ];
  239. title.value = data.id ? '编辑账号' : '新增账号';
  240. updateSchema(setSchema);
  241. }
  242. function companyIdChange(companyId) {
  243. // resetFields(['permList'])
  244. updateSchema([
  245. {
  246. field: 'permList',
  247. componentProps: {
  248. params: {
  249. companyId: companyId,
  250. },
  251. },
  252. },
  253. ]);
  254. setFieldsValue({
  255. permList: [],
  256. });
  257. }
  258. async function handleOk() {
  259. let data = await validate();
  260. const requestApi = data.id ? updateApi : saveApi;
  261. let res = await requestApi({
  262. ...data,
  263. // userName: data.phone,
  264. phone: data.phone,
  265. nickName: data.nickName,
  266. roleId: data.roleId,
  267. id: data.id,
  268. });
  269. context && context.emit('ok', res);
  270. createMessage.success(t('common.optSuccess'));
  271. closeModal();
  272. resetFields();
  273. }
  274. return {
  275. register,
  276. title,
  277. schemas,
  278. registerForm,
  279. modelRef,
  280. handleOk,
  281. resetFields,
  282. permListOptions,
  283. };
  284. },
  285. });
  286. </script>