Oc.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <route lang="yaml">
  2. meta:
  3. enabled: false
  4. </route>
  5. <script lang="ts" setup name="Oc">
  6. import { ElMessage } from 'element-plus'
  7. import type { FormInstance, FormRules } from 'element-plus'
  8. import { createOc, getOcById, updateOc } from '@/api/system/ocApi'
  9. import OcCatSelector from '@/views/customer/components/OcCatSelector.vue'
  10. const props = withDefaults(defineProps<{
  11. ocTypeId: number
  12. modelValue: number
  13. }>(), {
  14. ocTypeId: 0,
  15. modelValue: 0,
  16. })
  17. const emit = defineEmits(['success'])
  18. const formRef = ref<FormInstance>()
  19. const formRules = ref<FormRules>({
  20. ocName: [
  21. { required: true, message: '请输入标题', trigger: 'blur' },
  22. ],
  23. ocTypeId: [
  24. { required: true, message: '请输入类型', trigger: 'blur' },
  25. ],
  26. ocCatId: [
  27. { required: true, message: '请输入分类', trigger: 'blur' },
  28. ],
  29. })
  30. const state = reactive({
  31. title: '',
  32. dialogVisible: false,
  33. loading: false,
  34. ocTypeId: props.ocTypeId,
  35. formData: {
  36. ocId: 0,
  37. ocName: '',
  38. ocTypeId: 0,
  39. ocTypeTitle: '',
  40. ocCatId: 0,
  41. ocCatTitle: '',
  42. ocRemark: '',
  43. },
  44. actionType: 1,
  45. })
  46. onMounted(() => {})
  47. const getData = async (ocId: number) => {
  48. state.loading = true
  49. const { data } = await getOcById(ocId)
  50. state.formData = data
  51. state.loading = false
  52. }
  53. function onSubmit() {
  54. formRef.value && formRef.value.validate(async (valid) => {
  55. if (valid) {
  56. if (state.actionType === 1) {
  57. const { msg } = await createOc(state.formData)
  58. ElMessage.success(msg)
  59. state.dialogVisible = false
  60. emit('success')
  61. }
  62. else {
  63. const { msg } = await updateOc(state.formData)
  64. ElMessage.success(msg)
  65. state.dialogVisible = false
  66. emit('success')
  67. }
  68. }
  69. })
  70. }
  71. function onCancel() {
  72. state.dialogVisible = false
  73. }
  74. function resetFormData() {
  75. state.formData = {
  76. ocId: 0,
  77. ocName: '',
  78. ocTypeId: 1,
  79. ocTypeTitle: '',
  80. ocCatId: 0,
  81. ocCatTitle: '',
  82. ocRemark: '',
  83. }
  84. }
  85. defineExpose({
  86. showAddModel() {
  87. resetFormData()
  88. state.title = '新增单位'
  89. state.actionType = 1
  90. state.dialogVisible = true
  91. },
  92. showEditModel(ocId: number) {
  93. resetFormData()
  94. state.title = '编辑单位'
  95. state.actionType = 2
  96. state.dialogVisible = true
  97. getData(ocId)
  98. },
  99. })
  100. </script>
  101. <template>
  102. <el-drawer v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
  103. <el-form ref="formRef" :model="state.formData" :rules="formRules as unknown" label-width="120px" label-suffix=":">
  104. <el-form-item label="单位名称" prop="ocName">
  105. <el-input v-model="state.formData.ocName" placeholder="请输入标题" />
  106. </el-form-item>
  107. <el-form-item label="分类" prop="ocName">
  108. <OcCatSelector v-model="state.formData.ocCatId" :oc-type-id="state.ocTypeId" placeholder="请输入标题" />
  109. </el-form-item>
  110. <el-form-item label="备注" prop="ocRemark">
  111. <el-input v-model="state.formData.ocRemark" type="textarea" rows="10" placeholder="请输入标题" />
  112. </el-form-item>
  113. </el-form>
  114. <template #footer>
  115. <el-button size="large" @click="onCancel">
  116. 取消
  117. </el-button>
  118. <el-button type="primary" size="large" @click="onSubmit">
  119. 保存
  120. </el-button>
  121. </template>
  122. </el-drawer>
  123. </template>