instrument-save.tsx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import {NButton, NForm, NFormItem, NInput, NSelect, NSpace, useMessage} from 'naive-ui'
  2. import {defineComponent, onMounted, PropType, reactive, ref} from 'vue'
  3. import {getSelectDataFromObj} from "@/utils/objectUtil";
  4. import {defaultScore} from "@/utils/constant";
  5. import {musicalInstrumentSave, musicalInstrumentUpdate} from "@views/system-manage/subject-manage/api";
  6. export default defineComponent({
  7. name: 'role-operation',
  8. props: {
  9. type: {
  10. type: String,
  11. default: 'add'
  12. },
  13. data: {
  14. type: Object as PropType<any>,
  15. default: () => {
  16. }
  17. }
  18. },
  19. emits: ['close', 'getList'],
  20. setup(props, {slots, attrs, emit}) {
  21. const forms = reactive({
  22. name: null,
  23. defaultScore: null,
  24. code: null,
  25. hz: null,
  26. transferFlag: true,
  27. })
  28. const btnLoading = ref(false)
  29. const formsRef = ref()
  30. const message = useMessage()
  31. const onSubmit = async () => {
  32. formsRef.value.validate(async (error: any) => {
  33. if (error) return false
  34. try {
  35. btnLoading.value = true
  36. if (props.type === 'add') {
  37. await musicalInstrumentSave({...forms})
  38. message.success('添加成功')
  39. } else if (props.type === 'edit') {
  40. await musicalInstrumentUpdate({
  41. ...forms,
  42. id: props.data.id
  43. })
  44. message.success('修改成功')
  45. }
  46. emit('close')
  47. emit('getList')
  48. } catch {
  49. }
  50. btnLoading.value = false
  51. })
  52. }
  53. onMounted(async () => {
  54. if (props.type === 'edit') {
  55. const data = props.data
  56. forms.name = data.name
  57. forms.defaultScore = data.defaultScore
  58. forms.code = data.code
  59. forms.transferFlag = data.transferFlag
  60. }
  61. })
  62. return () => (
  63. <div style="background: #fff; padding-top: 12px">
  64. <NForm model={forms} ref={formsRef} label-placement="left" label-width="100px">
  65. <NFormItem
  66. label="乐器名称"
  67. path="name"
  68. rule={[
  69. {
  70. required: true,
  71. message: '请输入乐器名称'
  72. }
  73. ]}
  74. >
  75. <NInput
  76. v-model:value={forms.name}
  77. placeholder="请输入乐器名称"
  78. clearable
  79. maxlength={10}
  80. showCount
  81. ></NInput>
  82. </NFormItem>
  83. <NFormItem
  84. label="支持转简谱"
  85. path="transferFlag"
  86. rule={[
  87. {
  88. required: true,
  89. message: '请选择是否支持转简谱'
  90. }
  91. ]}
  92. >
  93. <NSelect
  94. v-model:value={forms.transferFlag}
  95. options={
  96. [
  97. {
  98. label: '是',
  99. value: true
  100. },
  101. {
  102. label: '否',
  103. value: false
  104. }
  105. ] as any
  106. }
  107. placeholder="请选择是否支持转简谱"
  108. clearable
  109. ></NSelect>
  110. </NFormItem>
  111. {(forms.transferFlag && (
  112. <NFormItem
  113. label="默认谱面"
  114. path="defaultScore"
  115. rule={[
  116. {
  117. required: true,
  118. message: '请选择默认谱面'
  119. }
  120. ]}
  121. >
  122. <NSelect
  123. clearable
  124. v-model:value={forms.defaultScore}
  125. placeholder="请选择默认谱面"
  126. options={getSelectDataFromObj(defaultScore)}
  127. />
  128. </NFormItem>
  129. ))}
  130. <NFormItem
  131. label="乐器编码"
  132. path="code"
  133. rule={[
  134. {
  135. required: true,
  136. message: '请输入乐器编码'
  137. }
  138. ]}
  139. >
  140. <NInput v-model:value={forms.code} placeholder="请输入乐器编码" clearable></NInput>
  141. </NFormItem>
  142. </NForm>
  143. <NSpace justify="end">
  144. <NButton type="default" onClick={() => emit('close')}>
  145. 取消
  146. </NButton>
  147. <NButton type="primary" onClick={() => onSubmit()} loading={btnLoading.value}>
  148. 保存
  149. </NButton>
  150. </NSpace>
  151. </div>
  152. )
  153. }
  154. })