add.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <template>
  2. <div class="form">
  3. <van-nav-bar
  4. :title="$t('common.addUser')"
  5. :left-text="$t('common.back')"
  6. left-arrow
  7. @click-left="onClickLeft"
  8. >
  9. </van-nav-bar>
  10. <testForm
  11. v-model="formData.data"
  12. :formOption="formOption"
  13. :formConfig="formConfig"
  14. :rules="rules"
  15. @onSubmit="onSubmit"
  16. ref="formDom"
  17. ></testForm>
  18. </div>
  19. </template>
  20. <script setup>
  21. import { ref, getCurrentInstance, onMounted, reactive } from "vue";
  22. import { showSuccessToast, showToast } from "vant";
  23. import { useRoute } from "vue-router";
  24. import { getUserInfo } from "@/utils/auth";
  25. import testForm from "@/components/testForm/index.vue";
  26. import { handleTree } from "@/utils/ruoyi";
  27. const proxy = getCurrentInstance().proxy;
  28. const route = useRoute();
  29. const show = ref(false);
  30. const typeModal = ref(false);
  31. const unitModal = ref(false);
  32. const classification = ref([]);
  33. const formData = reactive({
  34. data: {
  35. tenantId: getUserInfo().tenantId
  36. },
  37. });
  38. const formDom = ref(null);
  39. const formOption = reactive({
  40. readonly: false, //用于控制整个表单是否只读
  41. disabled: false,
  42. labelAlign: "top",
  43. scroll: true,
  44. labelWidth: "62pk",
  45. // hiddenSubmitBtn: true,
  46. });
  47. const formConfig = ref([
  48. {
  49. type: "cascader",
  50. label: proxy.t('user.deptName'),
  51. prop: "deptId",
  52. itemType: "common",
  53. showPicker: false,
  54. data: [],
  55. fieldNames: {
  56. text: "deptName",
  57. value: "deptId",
  58. children: "children",
  59. },
  60. },
  61. {
  62. type: "input",
  63. itemType: "text",
  64. label: proxy.t('user.nickName'),
  65. prop: "nickName",
  66. clearable: true,
  67. },
  68. {
  69. type: "input",
  70. itemType: "text",
  71. label: proxy.t('user.userName'),
  72. prop: "userName",
  73. clearable: true,
  74. },
  75. {
  76. type: "input",
  77. itemType: "text",
  78. label: proxy.t('user.password'),
  79. prop: "password",
  80. clearable: true,
  81. },
  82. {
  83. type: "radio",
  84. label: proxy.t('user.userType'),
  85. prop: "userType",
  86. itemType: "onePicker",
  87. showPicker: false,
  88. fieldNames: {
  89. text: "label",
  90. value: "id",
  91. },
  92. data: [
  93. {
  94. label: proxy.t('user.yes'),
  95. id: 1,
  96. },
  97. {
  98. label: proxy.t('user.no'),
  99. id: 0,
  100. },
  101. ],
  102. },
  103. {
  104. type: "checkbox",
  105. label: proxy.t('user.role'),
  106. prop: "roleIds",
  107. itemType: "onePicker",
  108. showPicker: false,
  109. fieldNames: {
  110. text: "roleName",
  111. value: "roleId",
  112. },
  113. data: [],
  114. },
  115. {
  116. type: "input",
  117. itemType: "text",
  118. label: proxy.t('user.phone'),
  119. prop: "phonenumber",
  120. clearable: true,
  121. },
  122. {
  123. type: "input",
  124. itemType: "number",
  125. label: proxy.t('user.jobNumber'),
  126. prop: "jobNumber",
  127. clearable: true,
  128. },
  129. ]);
  130. const rules = {
  131. deptId: [{ required: true, message: proxy.t('user.deptNameCanNotBeEmpty'), }],
  132. nickName: [{ required: true, message: proxy.t('user.nameCanNotBeEmpty'), }],
  133. userName: [{ required: true, message: proxy.t('user.userNameCanNotBeEmpty'), }],
  134. password: [{ required: true, message: proxy.t('user.passwordCanNotBeEmpty'), }],
  135. roleIds: [{ required: true, message: proxy.t('user.roleCanNotBeEmpty'),}],
  136. phonenumber: [{ required: true, message: proxy.t('user.phoneCanNotBeEmpty'), }],
  137. };
  138. const unitList = ref([]);
  139. const getUserList = () => {
  140. proxy
  141. .get("/tenantRole/list", {
  142. pageNum: 1,
  143. pageSize: 10000,
  144. tenantId: getUserInfo().tenantId,
  145. })
  146. .then((message) => {
  147. formConfig.value[5].data = message.rows.map((item) => {
  148. return {
  149. text: item.roleName,
  150. value: item.roleId,
  151. };
  152. });
  153. });
  154. };
  155. getUserList();
  156. const fileList = ref([]);
  157. const onOversize = () => {
  158. showToast("文件大小不能超过 5MB");
  159. };
  160. const onClickLeft = () => history.back();
  161. const onSubmit = () => {
  162. formData.data.tenantId = getUserInfo().tenantId
  163. proxy
  164. .post("/tenantUser", formData.data, route.query.id ? "PUT" : "post")
  165. .then(() => {
  166. showSuccessToast(route.query.id ? proxy.t('common.modifySuccess') : proxy.t('common.addSuccess'))
  167. setTimeout(() => {
  168. history.back();
  169. }, 500);
  170. });
  171. };
  172. const treeToList = (arr) => {
  173. let res = []; // 用于存储递归结果(扁平数据)
  174. // 递归函数
  175. let fn = (source) => {
  176. source.forEach((el) => {
  177. res.push(el);
  178. el.children && el.children.length > 0 ? fn(el.children) : ""; // 子级递归
  179. });
  180. };
  181. fn(arr);
  182. return res;
  183. };
  184. const getTree = () => {
  185. proxy
  186. .get("/tenantDept/list", { tenantId: getUserInfo().tenantId })
  187. .then((res) => {
  188. formConfig.value[0].data = handleTree(res.data, "deptId");
  189. })
  190. .catch((err) => {});
  191. };
  192. getTree();
  193. onMounted(() => {
  194. if (route.query.userId) {
  195. console.log(route.query);
  196. proxy.get(`/tenantUser/${route.query.userId}`).then((res) => {
  197. res.data.password = ""
  198. formData.data = {
  199. ...res.data,
  200. roleIds:res.roleIds
  201. }
  202. });
  203. } else {
  204. }
  205. });
  206. </script>