trainingExperience.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <!-- -->
  2. <template>
  3. <CtForm ref="CtFormRef" :items="items" style="width: 100%;"></CtForm>
  4. </template>
  5. <script setup>
  6. defineOptions({ name: 'resumeAnalysis-trainingExperience'})
  7. import { ref, watch } from 'vue'
  8. const props = defineProps({
  9. id: {
  10. type: String,
  11. default: ''
  12. },
  13. data: {
  14. type: Object,
  15. default: () => {}
  16. }
  17. })
  18. const CtFormRef = ref()
  19. const items = ref({
  20. options: [
  21. {
  22. type: 'text',
  23. key: 'orgName',
  24. value: '',
  25. col: 6,
  26. label: '培训中心 *',
  27. flexStyle: 'mr-3',
  28. rules: [v => !!v || '请输入培训中心']
  29. },
  30. {
  31. type: 'text',
  32. key: 'course',
  33. value: '',
  34. col: 6,
  35. label: '培训课程 *',
  36. rules: [v => !!v || '请输入培训课程']
  37. },
  38. {
  39. type: 'datePicker',
  40. key: 'startTime',
  41. mode: 'month',
  42. value: '2020-01',
  43. labelWidth: 140,
  44. format: 'YYYY/MM',
  45. defaultValue: new Date(2020, 1),
  46. label: '培训开始时间 *',
  47. disabledFutureDates: true,
  48. col: 6,
  49. flexStyle: 'mr-3',
  50. rules: [v => !!v || '请选择培训开始时间']
  51. },
  52. {
  53. type: 'datePicker',
  54. key: 'endTime',
  55. mode: 'month',
  56. value: '2022-01',
  57. format: 'YYYY/MM',
  58. labelWidth: 140,
  59. defaultValue: new Date(2022, 1),
  60. label: '培训结束时间 *',
  61. disabledFutureDates: true,
  62. col: 6,
  63. rules: [v => !!v || '请选择培训结束时间']
  64. },
  65. {
  66. type: 'textarea',
  67. key: 'content',
  68. value: '',
  69. label: '培训描述',
  70. rows: 5,
  71. flexStyle: 'mt-5',
  72. resize: true,
  73. counter: 2000,
  74. rules: [
  75. value => {
  76. if (value?.length <= 2000) return true
  77. return '请输入2-2000个字符'
  78. }
  79. ]
  80. }
  81. ]
  82. })
  83. watch(
  84. () => props.data,
  85. (newVal) => {
  86. if (newVal && Object.keys(newVal)) {
  87. items.value.options.forEach(e => {
  88. if (newVal[e.key]) e.value = newVal[e.key]
  89. })
  90. }
  91. },
  92. { immediate: true }
  93. )
  94. const submit = async () => {
  95. const { valid } = await CtFormRef.value.formRef.validate()
  96. if (!valid) return { id: props.id, data: null}
  97. const obj = {}
  98. items.value.options.forEach(e => obj[e.key] = e.value)
  99. return { id: props.id, data: obj}
  100. }
  101. defineExpose({
  102. id: props.id,
  103. submit
  104. })
  105. </script>
  106. <style lang="scss" scoped>
  107. </style>