workerWrite.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <script setup lang="tsx">
  2. import { Form, FormSchema } from '@/components/Form'
  3. import { useForm } from '@/hooks/web/useForm'
  4. import { PropType, watch, ref } from 'vue'
  5. import { useValidator } from '@/hooks/web/useValidator'
  6. import { cloneDeep } from 'lodash-es'
  7. import { getCity } from '@/api/system/admin'
  8. import { WorkerButtom } from '@/components/WorkerList'
  9. const { required } = useValidator()
  10. const props = defineProps({
  11. currentRow: {
  12. type: Object as PropType<any>,
  13. default: () => null
  14. }
  15. })
  16. const getCityList = async (node, resolve) => {
  17. const { value } = node
  18. const res = await getCity({ pid: value || 0, type: 2 })
  19. const data = res.data.map((ree) => {
  20. return {
  21. label: ree.label,
  22. value: ree.value,
  23. leaf: !ree.children
  24. }
  25. })
  26. resolve(data)
  27. }
  28. const cityChange = (value) => {
  29. console.log(value, 'value')
  30. setValues({
  31. province: value[0],
  32. city: value[1],
  33. area: value[2]
  34. })
  35. }
  36. const checked = (res) => {
  37. // console.log(res, 'res')
  38. setValues({
  39. group_leader_id: res.id
  40. })
  41. }
  42. const formSchema = ref<FormSchema[]>([
  43. {
  44. field: 'name',
  45. label: '组名',
  46. component: 'Input',
  47. colProps: {
  48. span: 24
  49. },
  50. componentProps: {
  51. placeholder: '请输入组名称'
  52. }
  53. },
  54. {
  55. field: 'group_leader_id',
  56. label: '组长',
  57. component: 'CheckboxGroup',
  58. formItemProps: {
  59. slots: {
  60. default: (data) => {
  61. return (
  62. <>
  63. <WorkerButtom
  64. v-model={data.id}
  65. onChange={(res) => {
  66. checked(res)
  67. }}
  68. ></WorkerButtom>
  69. </>
  70. )
  71. }
  72. }
  73. }
  74. },
  75. {
  76. field: 'address',
  77. label: '地址选择',
  78. component: 'Cascader',
  79. colProps: {
  80. span: 24
  81. },
  82. componentProps: {
  83. on: {
  84. change: cityChange
  85. },
  86. props: {
  87. lazy: true,
  88. lazyLoad: getCityList
  89. },
  90. placeholder: '请输入组名称'
  91. }
  92. },
  93. {
  94. field: 'province',
  95. label: '省份',
  96. component: 'Input',
  97. hidden: true
  98. },
  99. {
  100. field: 'city',
  101. label: '市',
  102. hidden: true,
  103. component: 'Input'
  104. },
  105. {
  106. field: 'area',
  107. label: '区',
  108. hidden: true,
  109. component: 'Input'
  110. },
  111. {
  112. field: 'id',
  113. label: 'id',
  114. hidden: true,
  115. component: 'Input'
  116. }
  117. ])
  118. const rules = ref({
  119. name: [required('请填写组名称')],
  120. group_leader_id: [required('请选择设计师')]
  121. })
  122. const { formRegister, formMethods } = useForm()
  123. const { setValues, getFormData, getElFormExpose } = formMethods
  124. const submit = async () => {
  125. const elForm = await getElFormExpose()
  126. const valid = await elForm?.validate().catch((err) => {
  127. console.log(err)
  128. })
  129. if (valid) {
  130. const formData = await getFormData()
  131. return formData
  132. }
  133. }
  134. watch(
  135. () => props.currentRow,
  136. async (value) => {
  137. if (!value) return
  138. const currentRow = cloneDeep(value)
  139. console.log(currentRow, 'currentRow')
  140. setValues(currentRow)
  141. },
  142. {
  143. deep: true,
  144. immediate: true
  145. }
  146. )
  147. defineExpose({
  148. submit
  149. })
  150. </script>
  151. <template>
  152. <Form :rules="rules" @register="formRegister" :schema="formSchema" />
  153. </template>