addModal.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. title="新增职位"
  6. @visible-change="handleVisibleChange"
  7. @cancel="resetFields"
  8. @ok="handleSubmit"
  9. >
  10. <div class="pt-2px pr-3px">
  11. <BasicForm @register="registerForm" :model="model" >
  12. <template #text="{ model, field }">
  13. {{ model[field] }}
  14. </template>
  15. </BasicForm>
  16. </div>
  17. </BasicModal>
  18. </template>
  19. <script lang="ts">
  20. import { defineComponent, ref, nextTick, onMounted, reactive, h } from 'vue';
  21. import { BasicModal, useModalInner } from '/@/components/Modal';
  22. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  23. import { useMessage } from '/@/hooks/web/useMessage';
  24. import { uploadApi } from '/@/api/product/index';
  25. import { newAddNews, addOrUpdate } from '/@/api/operate'
  26. import { useI18n } from '/@/hooks/web/useI18n';
  27. import { Tinymce } from '/@/components/Tinymce/index';
  28. const { t } = useI18n();
  29. export default defineComponent({
  30. components: { BasicModal, BasicForm },
  31. props: {
  32. userData: { type: Object },
  33. },
  34. emits: ['update', 'register'],
  35. setup(props, { emit }) {
  36. const modelRef = ref({});
  37. const fileFlow = reactive({
  38. coverImageUrl:''
  39. })
  40. const { createMessage } = useMessage();
  41. const schemas: FormSchema[] = [
  42. {
  43. field: 'id',
  44. component: 'Input',
  45. show:false,
  46. label: 'id',
  47. required: false,
  48. },{
  49. field: 'workName',
  50. component: 'Input',
  51. required: true,
  52. label: '职位名称',
  53. colProps: {
  54. span: 22,
  55. },
  56. },{
  57. field: 'workAddress',
  58. component: 'Input',
  59. required: true,
  60. label: '工作地点',
  61. colProps: {
  62. span: 22,
  63. },
  64. },{
  65. field: 'salary',
  66. component: 'Input',
  67. label: '薪资待遇',
  68. required: true,
  69. componentProps: {
  70. maxLength: 5,
  71. placeholder: '请输入薪资待遇',
  72. max: 999,
  73. min: 0,
  74. },
  75. colProps: {
  76. span: 22,
  77. },
  78. },{
  79. field: 'employNum',
  80. component: 'InputNumber',
  81. required: true,
  82. label: '招聘人数',
  83. defaultValue:1,
  84. componentProps: {
  85. maxLength: 5,
  86. placeholder: '请输入招聘人数',
  87. max: 999,
  88. min: 1,
  89. },
  90. colProps: {
  91. span: 22,
  92. },
  93. },{
  94. field: 'workContent',
  95. component: 'InputTextArea',
  96. required: true,
  97. label: '工作职责',
  98. componentProps: {
  99. maxLength: 500,
  100. placeholder: '请输入职位要求',
  101. rows:4,
  102. },
  103. colProps: {
  104. span: 22,
  105. },
  106. },{
  107. field: 'qualification',
  108. component: 'InputTextArea',
  109. required: true,
  110. label: '任职资格',
  111. componentProps: {
  112. maxLength: 500,
  113. placeholder: '请输入任职资格',
  114. rows:4,
  115. },
  116. colProps: {
  117. span: 22,
  118. },
  119. },
  120. ];
  121. const [registerForm, { validate, resetFields, setFieldsValue, updateSchema }] = useForm({
  122. labelWidth: 120,
  123. schemas,
  124. showActionButtonGroup: false,
  125. actionColOptions: {
  126. span: 24,
  127. },
  128. });
  129. onMounted(() => {});
  130. let addListFunc = () => {};
  131. const [register, { closeModal }] = useModalInner((data) => {
  132. data && onDataReceive(data);
  133. });
  134. async function onDataReceive(data) {
  135. modelRef.value = data
  136. resetFields();
  137. setFieldsValue(data);
  138. }
  139. function NewTypeChange(val){
  140. console.log('NewTypeChange',val)
  141. updateSchema([
  142. { field: 'content', ifShow:val == 2,},
  143. { field: 'newsUrl', ifShow:val != 2,},
  144. ])
  145. }
  146. const handleSubmit = async () => {
  147. const params = await validate();
  148. const apiData = {
  149. ...params as any,
  150. coverImageUrl:params.coverImageUrl && params.coverImageUrl[0],
  151. content:params.newType == 1?params.newsUrl:params.content
  152. }
  153. try {
  154. await addOrUpdate(apiData);
  155. closeModal();
  156. resetFields();
  157. createMessage.success(t('common.optSuccess'));
  158. emit('update');
  159. } catch (error) {
  160. console.log('not passing', error);
  161. }
  162. };
  163. function handleVisibleChange(v) {
  164. v && props.userData && nextTick(() => onDataReceive(props.userData));
  165. }
  166. return {
  167. register,
  168. schemas,
  169. registerForm,
  170. model: modelRef,
  171. fileFlow,
  172. NewTypeChange,
  173. handleVisibleChange,
  174. handleSubmit,
  175. addListFunc,
  176. resetFields,
  177. t,
  178. };
  179. },
  180. });
  181. </script>