detailsModal.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  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 { getAllList } from '/@/api/rightsEnterprises/list';
  18. import { BasicModal, useModalInner } from '/@/components/Modal';
  19. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  20. import { ListAllCompanyApi } from '/@/api/corporation/list';
  21. import { useI18n } from '/@/hooks/web/useI18n';
  22. import { useMessage } from '/@/hooks/web/useMessage';
  23. import { useUserStore } from '/@/store/modules/user';
  24. const { t } = useI18n();
  25. export default defineComponent({
  26. components: { BasicModal, BasicForm },
  27. props: {
  28. userData: { type: Object },
  29. },
  30. emits: ['register', 'ok'],
  31. setup(_, context) {
  32. const modelRef = ref({});
  33. const userStore = useUserStore();
  34. const { getCheckRole } = userStore;
  35. const userinfo = computed(() => userStore.getUserInfo);
  36. const { companyId } = userinfo.value;
  37. console.log('companyId', companyId);
  38. const permListOptions = computed(() => {
  39. return [
  40. {
  41. label: '带看',
  42. value: '1',
  43. },
  44. {
  45. label: '拍摄',
  46. value: '2',
  47. },
  48. ];
  49. });
  50. const schemas: FormSchema[] = [
  51. {
  52. field: 'phone',
  53. component: 'Input',
  54. label: '手机号',
  55. colProps: {
  56. span: 18,
  57. },
  58. // helpMessage: '手机号需在指房宝APP注册后才可新增',
  59. required: false,
  60. rules: [
  61. {
  62. required: true,
  63. // @ts-ignore
  64. validator: async (rule, value) => {
  65. var reg_tel =
  66. /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
  67. // var reg = /\S+@\S+\.\S+/;
  68. if (!value) {
  69. return Promise.reject(t('common.phone'));
  70. }
  71. if (!reg_tel.test(value)) {
  72. /* eslint-disable-next-line */
  73. return Promise.reject(t('common.phoneError'));
  74. }
  75. try {
  76. if (title.value == '编辑') {
  77. return Promise.resolve();
  78. }
  79. let res = await checkUserApi({ phone: value });
  80. console.log('res', res, 'title', title.value);
  81. if (res == true) {
  82. return Promise.resolve();
  83. } else {
  84. return Promise.reject('手机号未在指房宝APP中进行注册');
  85. }
  86. } catch (err) {
  87. return Promise.reject(err);
  88. }
  89. },
  90. trigger: 'change',
  91. },
  92. ],
  93. },
  94. {
  95. field: 'nickName',
  96. component: 'Input',
  97. label: '员工名称',
  98. colProps: {
  99. span: 22,
  100. },
  101. componentProps: {
  102. maxLength: 15,
  103. },
  104. rules: [
  105. {
  106. required: true,
  107. // @ts-ignore
  108. validator: async (rule, value) => {
  109. var reg_tel = /^[a-zA-Z\u4e00-\u9fa5]+$/;
  110. // var reg = /\S+@\S+\.\S+/;
  111. if (!value) {
  112. return Promise.reject('请输入员工名称');
  113. }
  114. if (!reg_tel.test(value)) {
  115. /* eslint-disable-next-line */
  116. return Promise.reject('请输入正确的员工名称');
  117. }
  118. return Promise.resolve();
  119. },
  120. trigger: 'change',
  121. },
  122. ],
  123. },
  124. {
  125. field: 'companyId',
  126. label: '公司',
  127. component: 'ApiSelect',
  128. itemProps: {
  129. validateTrigger: 'blur',
  130. },
  131. colProps: {
  132. span: 22,
  133. },
  134. required: true,
  135. ifShow: getCheckRole('plat_admin'),
  136. componentProps: {
  137. api: ListAllCompanyApi,
  138. showSearch: true,
  139. resultField: 'list',
  140. labelField: 'name',
  141. valueField: 'id',
  142. immediate: true,
  143. params: {
  144. page: 1,
  145. limit: 1000,
  146. },
  147. required: true,
  148. onChange: companyIdChange,
  149. },
  150. },
  151. {
  152. field: 'roleId',
  153. component: 'ApiSelect',
  154. label: '角色',
  155. required: true,
  156. itemProps: {
  157. validateTrigger: 'blur',
  158. },
  159. colProps: {
  160. span: 22,
  161. },
  162. defaultValue: 8,
  163. componentProps: {
  164. options: [
  165. {
  166. label: '公司员工',
  167. value: 8,
  168. key: 8,
  169. },
  170. ],
  171. },
  172. },
  173. {
  174. field: 'permList',
  175. component: 'ApiSelect',
  176. label: '权益',
  177. colProps: {
  178. span: 22,
  179. },
  180. componentProps: {
  181. api: async function (params) {
  182. const res = await getAllList(params);
  183. console.log('params', params, res);
  184. // const treeData = makeTree(res);
  185. return res.map((i) => {
  186. return {
  187. ...i,
  188. permName: i.permName + ' ' + i.createTime,
  189. };
  190. });
  191. },
  192. labelField: 'permName',
  193. valueField: 'id',
  194. immediate: true,
  195. mode: 'multiple',
  196. params: {
  197. page: 1,
  198. limit: 100,
  199. // companyId:
  200. },
  201. required: true,
  202. },
  203. },
  204. // {
  205. // field: 'status',
  206. // label: '状态',
  207. // component: 'RadioButtonGroup',
  208. // required: true,
  209. // defaultValue: 1,
  210. // itemProps: {
  211. // validateTrigger: 'blur',
  212. // },
  213. // componentProps: {
  214. // options: [
  215. // { label: '是', value: 1 },
  216. // { label: '否', value: 0 },
  217. // ],
  218. // },
  219. // },
  220. // {
  221. // field: 'avatar',
  222. // component: 'Upload',
  223. // label: '员工头像',
  224. // required: true,
  225. // rules: [{ required: true, message: '请选择上传文件' }],
  226. // helpMessage: '推荐大小:400 * 400 像素',
  227. // itemProps: {
  228. // validateTrigger: 'onBlur',
  229. // },
  230. // // componentProps: {
  231. // // api: uploadLogoApi,
  232. // // maxNumber: 1,
  233. // // maxSize: 10,
  234. // // accept: ['jpg', 'jpeg', 'gif', 'png'],
  235. // // afterFetch: function (data) {
  236. // // console.log('data', data);
  237. // // Reflect.set(data, 'url', data.message);
  238. // // return data;
  239. // // },
  240. // // },
  241. // colProps: {
  242. // span: 22,
  243. // },
  244. // },
  245. {
  246. field: 'id',
  247. component: 'Input',
  248. label: 'id',
  249. show: false,
  250. },
  251. ];
  252. const title = ref('新 增');
  253. const { createMessage } = useMessage();
  254. const [registerForm, { setFieldsValue, validate, updateSchema, resetFields }] = useForm({
  255. labelWidth: 120,
  256. schemas,
  257. showActionButtonGroup: false,
  258. actionColOptions: {
  259. span: 24,
  260. },
  261. });
  262. const [register, { closeModal }] = useModalInner((data) => {
  263. data && onDataReceive(data);
  264. });
  265. function onDataReceive(data) {
  266. // 方式1;
  267. console.log('useModalInner', data);
  268. setFieldsValue({
  269. ...data,
  270. roleId: data.roleId != 2 ? data.roleId : '',
  271. });
  272. let setSchema = [
  273. {
  274. field: 'roleId',
  275. component: 'ApiSelect',
  276. componentProps: {
  277. disabled: data.roleId == 2 ? false : data.id ? true : false,
  278. api: getRoleListByParam,
  279. labelField: 'roleName',
  280. valueField: 'roleId',
  281. params: {
  282. type: data.roleId ? 1 : 0,
  283. roleId: data.roleId,
  284. },
  285. },
  286. },
  287. {
  288. field: 'phone',
  289. componentProps: {
  290. disabled: getCheckRole('plat_admin') ? false : data.id ? true : false,
  291. },
  292. },
  293. {
  294. field: 'companyId',
  295. componentProps: {
  296. disabled: data.id ? (data.roleId != 2 ? true : false) : false,
  297. },
  298. },
  299. {
  300. field: 'permList',
  301. componentProps: {
  302. disabled: data.roleId == 2 ? false : data.id ? true : false,
  303. params: {
  304. companyId: data.companyId || companyId,
  305. },
  306. },
  307. },
  308. ];
  309. title.value = data.id ? '编辑' : '新增';
  310. updateSchema(setSchema);
  311. }
  312. function companyIdChange(companyId) {
  313. // resetFields(['permList'])
  314. updateSchema([
  315. {
  316. field: 'permList',
  317. componentProps: {
  318. params: {
  319. companyId: companyId,
  320. },
  321. },
  322. },
  323. ]);
  324. setFieldsValue({
  325. permList: [],
  326. });
  327. }
  328. async function handleOk() {
  329. let data = await validate();
  330. const requestApi = data.id ? updateApi : saveApi;
  331. let res = await requestApi({
  332. ...data,
  333. userName: data.phone,
  334. phone: data.phone,
  335. nickName: data.nickName,
  336. roleId: data.roleId,
  337. id: data.id,
  338. });
  339. console.log('res', res);
  340. context && context.emit('ok', res);
  341. createMessage.success(t('common.optSuccess'));
  342. closeModal();
  343. resetFields();
  344. }
  345. return {
  346. register,
  347. title,
  348. schemas,
  349. registerForm,
  350. modelRef,
  351. handleOk,
  352. resetFields,
  353. permListOptions,
  354. };
  355. },
  356. });
  357. </script>