save-categroy-dialog.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import {NButton, NCascader, NForm, NFormItem, NInput, NSpace, useMessage} from 'naive-ui'
  2. import {defineComponent, onMounted, reactive, ref} from 'vue'
  3. import {filterPointCategory} from '@/views/teaching-manage/unit-test'
  4. import {musicSheetCategoriesSave, musicSheetCategoriesUpdate} from "@views/music-library/api";
  5. export default defineComponent({
  6. emits: ['close', 'getList'],
  7. props: ['actvieRow', 'saveMode', 'list'],
  8. name: 'save-categroy-dialog',
  9. setup(props, {emit}) {
  10. const message = useMessage()
  11. const formRef = ref()
  12. const parentList = ref([
  13. {name: '顶级分类', id: 0},
  14. ...filterPointCategory(props.list, 'musicSheetCategoriesList')
  15. ] as any)
  16. const state = reactive({
  17. loading: false,
  18. dataList: [] as any,
  19. btnLoading: false
  20. })
  21. const forms = reactive({
  22. id: '',
  23. name: '',
  24. enable: true,
  25. parentId: '0'
  26. } as any)
  27. const onSubmit = async () => {
  28. formRef.value?.validate(async (errors: any) => {
  29. if (errors) {
  30. return;
  31. }
  32. state.btnLoading = true
  33. try {
  34. if(props.saveMode==='add'){
  35. const {data} = await musicSheetCategoriesSave({...forms})
  36. emit('getList')
  37. message.success('添加成功')
  38. }else {
  39. const {data} = await musicSheetCategoriesUpdate({...forms})
  40. emit('getList')
  41. message.success('修改成功')
  42. }
  43. } catch (error) {
  44. }
  45. state.btnLoading = false
  46. })
  47. }
  48. onMounted(() => {
  49. if (props.saveMode === 'add') {
  50. // 添加子分类
  51. if (props.actvieRow && props.actvieRow.id) {
  52. forms.parentId = props?.actvieRow.id + ''
  53. }
  54. } else {
  55. for (let key in props?.actvieRow) {
  56. forms[key] = props?.actvieRow[key]
  57. }
  58. }
  59. })
  60. return () => (
  61. <div>
  62. <NForm ref={formRef} model={forms}>
  63. {props.saveMode === 'add' && props.actvieRow && (
  64. <NFormItem label="父级分类" path="parentId">
  65. <NCascader
  66. placeholder="请选择父级分类"
  67. v-model:value={forms.parentId}
  68. options={parentList.value}
  69. checkStrategy="all"
  70. expandTrigger="hover"
  71. childrenField="musicSheetCategoriesList"
  72. valueField="id"
  73. labelField="name"
  74. disabled={true}
  75. />
  76. </NFormItem>
  77. )}
  78. <NFormItem
  79. label="分类名称"
  80. rule={[
  81. {
  82. required: true,
  83. message: '请输入分类名称',
  84. trigger: ['blur', 'input']
  85. }
  86. ]}
  87. path="name"
  88. >
  89. <NInput
  90. v-model:value={forms.name}
  91. placeholder="请输入分类名称"
  92. maxlength={25}
  93. showCount
  94. clearable
  95. ></NInput>
  96. </NFormItem>
  97. </NForm>
  98. <NSpace justify="end">
  99. <NButton type="default" onClick={() => emit('close')}>
  100. 取消
  101. </NButton>
  102. <NButton
  103. type="primary"
  104. onClick={() => onSubmit()}
  105. loading={state.btnLoading}
  106. disabled={state.btnLoading}
  107. >
  108. 确认
  109. </NButton>
  110. </NSpace>
  111. </div>
  112. )
  113. }
  114. })