categorize-save.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import {NButton, NForm, NFormItem, NInput, NSpace, useMessage} from 'naive-ui'
  2. import {defineComponent, onMounted, PropType, reactive, ref} from 'vue'
  3. import {subjectCategorySave, subjectCategoryUpdate} from "@views/system-manage/subject-manage/api";
  4. export default defineComponent({
  5. name: 'role-operation',
  6. props: {
  7. type: {
  8. type: String,
  9. default: 'add'
  10. },
  11. applyList: {
  12. type: Array as PropType<any>,
  13. default: () => []
  14. },
  15. data: {
  16. type: Object as PropType<any>,
  17. default: () => {
  18. }
  19. }
  20. },
  21. emits: ['close', 'getList'],
  22. setup(props, {slots, attrs, emit}) {
  23. const forms = reactive({
  24. name: null,
  25. defaultScore: null,
  26. code: null,
  27. img: null,
  28. hz: null,
  29. parentId: 0
  30. })
  31. const btnLoading = ref(false)
  32. const formsRef = ref()
  33. const message = useMessage()
  34. const onSubmit = async () => {
  35. formsRef.value.validate(async (error: any) => {
  36. if (error) return false
  37. try {
  38. btnLoading.value = true
  39. if (props.type === 'add') {
  40. await subjectCategorySave({...forms})
  41. message.success('添加成功')
  42. } else if (props.type === 'edit') {
  43. await subjectCategoryUpdate({
  44. ...forms,
  45. id: props.data.id
  46. })
  47. message.success('修改成功')
  48. }
  49. emit('close')
  50. emit('getList')
  51. } catch {
  52. }
  53. btnLoading.value = false
  54. })
  55. }
  56. onMounted(async () => {
  57. if (props.type === 'edit') {
  58. const data = props.data
  59. forms.img = data.img
  60. forms.name = data.name
  61. forms.code = data.code
  62. }
  63. })
  64. return () => (
  65. <div style="background: #fff; padding-top: 12px">
  66. <NForm model={forms} ref={formsRef} label-placement="left" label-width="auto">
  67. <NFormItem
  68. label="分类名称"
  69. path="name"
  70. rule={[
  71. {
  72. required: true,
  73. message: '请输入分类名称'
  74. }
  75. ]}
  76. >
  77. <NInput
  78. v-model:value={forms.name}
  79. placeholder="请输入声部名称"
  80. clearable
  81. maxlength={10}
  82. showCount
  83. ></NInput>
  84. </NFormItem>
  85. </NForm>
  86. <NSpace justify="end">
  87. <NButton type="default" onClick={() => emit('close')}>
  88. 取消
  89. </NButton>
  90. <NButton type="primary" onClick={() => onSubmit()} loading={btnLoading.value}>
  91. 保存
  92. </NButton>
  93. </NSpace>
  94. </div>
  95. )
  96. }
  97. })