Oc.vue 3.1 KB

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