popup.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <template>
  2. <BasicModal v-bind="$attrs" @register="register" @ok="confirm" :title="title">
  3. <BasicForm @register="registerForm" :model="model" />
  4. <!-- <MenuTree /> -->
  5. <div style="display: flex;">
  6. <p class="tree-label">权限</p>
  7. <a-tree
  8. checkable
  9. :tree-data="fakeTree"
  10. v-model:expandedKeys="expandedKeys"
  11. v-model:selectedKeys="selectedKeys"
  12. v-model:checkedKeys="checkedKeys"
  13. >
  14. <!-- <template #title0010><span style="color: #1890ff;">sss</span></template> -->
  15. </a-tree>
  16. </div>
  17. </BasicModal>
  18. </template>
  19. <script lang="ts">
  20. import { Tree } from 'ant-design-vue';
  21. import { defineComponent, PropType, reactive, ref, toRefs, watch } from 'vue';
  22. import { BasicModal, useModalInner } from '/@/components/Modal';
  23. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  24. import { adapt } from '/@/utils/adapt'
  25. import { fakeTree } from './data'
  26. interface ModelData {
  27. title: string,
  28. treeData: object[],
  29. checkedKeys: string[],
  30. selectedKeys: string[],
  31. expandedKeys: string[]
  32. }
  33. interface Role {
  34. id: string|number
  35. }
  36. export default defineComponent({
  37. components: { BasicModal, BasicForm, [Tree.name]: Tree },
  38. props: {
  39. modelData: {
  40. type: Object as PropType<ModelData>,
  41. default: {},
  42. },
  43. },
  44. setup(props, { emit }) {
  45. const role = reactive<Role>({
  46. id:0
  47. })
  48. const modelData:ModelData = props.modelData
  49. console.log(modelData)
  50. const modelRef = ref({});
  51. const adaptWidth = adapt()
  52. watch(modelData, () => {
  53. console.log('expandedKeys', modelData.expandedKeys);
  54. console.log('selectedKeys', modelData.selectedKeys);
  55. console.log('checkedKeys', modelData.checkedKeys);
  56. });
  57. const schemas: FormSchema[] = [
  58. {
  59. field: 'parent',
  60. label: '父级',
  61. component: 'TreeSelect',
  62. componentProps: {
  63. replaceFields: {
  64. title: 'title',
  65. key: 'id',
  66. value: 'id',
  67. },
  68. getPopupContainer: () => document.body,
  69. },
  70. labelWidth: adaptWidth.labelWidth,
  71. colProps: {
  72. span: adaptWidth.elContainer,
  73. }
  74. },
  75. {
  76. field: 'uname',
  77. component: 'Input',
  78. label: '名称',
  79. labelWidth: adaptWidth.labelWidth,
  80. colProps: {
  81. span: adaptWidth.elContainer,
  82. }
  83. },
  84. {
  85. field: 'status',
  86. label: '状态',
  87. component: 'RadioButtonGroup',
  88. defaultValue: 1,
  89. componentProps: {
  90. options: [
  91. { label: '启用', value: 1 },
  92. { label: '停用', value: 0 },
  93. ],
  94. },
  95. labelWidth: adaptWidth.labelWidth,
  96. colProps: {
  97. span: adaptWidth.elContainer,
  98. },
  99. },
  100. ];
  101. const [registerForm, { getFieldsValue, updateSchema, setFieldsValue, resetFields/* validate*/ }] = useForm({
  102. labelWidth: 100,
  103. schemas,
  104. showActionButtonGroup: false,
  105. actionColOptions: { span: 24 },
  106. });
  107. const [register, { closeModal } ] = useModalInner(data => {
  108. console.log('-------------------data---------------')
  109. console.log(data)
  110. resetFields()
  111. // if (unref(isUpdate)) {
  112. // setFieldsValue(data);
  113. // }
  114. setFieldsValue(data);
  115. updateSchema({
  116. field: 'parent',
  117. componentProps: { treeData: fakeTree },
  118. });
  119. });
  120. function confirm() {
  121. console.log('确定')
  122. const data = getFieldsValue()
  123. if(role.id) {
  124. data.id = role.id
  125. }
  126. // const data = {
  127. // info,
  128. // }
  129. // console.log(data)
  130. // console.log(getFieldsValue()) // 表单数据
  131. // console.log('------ 菜单key ------')
  132. // console.log(modelData.checkedKeys)
  133. emit('saveData', data)
  134. closeModal() // 关闭弹窗
  135. }
  136. return {
  137. register,
  138. schemas,
  139. fakeTree,
  140. registerForm,
  141. model: modelRef,
  142. confirm,
  143. adaptWidth,
  144. ...toRefs(modelData)
  145. };
  146. },
  147. });
  148. </script>
  149. <style lang='less'>
  150. .ant-form-item-label {
  151. text-align: center !important;
  152. }
  153. .tree-label {
  154. width: 20.6%;
  155. margin-top: 8px;
  156. margin-bottom: 1em;
  157. text-align: center;
  158. }
  159. @media (max-width: 639px) {
  160. .ant-form-item-label {
  161. line-height: 2.5715 !important;
  162. text-align: center !important;
  163. }
  164. .tree-label {
  165. width: 33%;
  166. margin-top: 8px;
  167. margin-bottom: 1em;
  168. text-align: center;
  169. }
  170. }
  171. </style>