AddProjectModal.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <div ref="addProjectModalRef">
  3. <a-modal
  4. title="新增项目(add project)"
  5. width="800px"
  6. :visible="visible"
  7. :maskClosable="false"
  8. switchFullscreen
  9. @ok = "handleOk"
  10. @cancel="handleCancel"
  11. :getContainer ='()=>$refs.addProjectModalRef'
  12. >
  13. <div>
  14. <a-form ref="form" :model="model" :rules="validatorRules">
  15. <a-row :gutter="24">
  16. <a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  17. <a-form-item prop="customer" label="客户(customer)" :labelCol="labelCol" :wrapperCol="wrapperCol">
  18. <ApiSelect
  19. :api="CustomerOption"
  20. showSearch
  21. v-model:value="model.customer"
  22. :filterOption="false"
  23. resultField="records"
  24. labelField="name"
  25. valueField="id"
  26. />
  27. <!-- <a-input v-model:value="model.customer" placeholder="请输入客户(customer)" ></a-input> -->
  28. </a-form-item>
  29. </a-col>
  30. <a-col >
  31. <a-form-item prop="code" label="编码(code)" :labelCol="labelCol" :wrapperCol="wrapperCol">
  32. <a-input v-model:value="model.code" placeholder="自动生成" disabled></a-input>
  33. </a-form-item>
  34. </a-col>
  35. <a-col >
  36. <a-form-item prop="name" label="名称(name)" :labelCol="labelCol" :wrapperCol="wrapperCol">
  37. <a-input v-model:value="model.name" placeholder="名称(name)" ></a-input>
  38. </a-form-item>
  39. </a-col>
  40. <a-col >
  41. <a-form-item prop="notes" label="备注(notes)" :labelCol="labelCol" :wrapperCol="wrapperCol">
  42. <a-input v-model:value="model.notes" placeholder="请输入备注(notes)" ></a-input>
  43. </a-form-item>
  44. </a-col>
  45. </a-row>
  46. </a-form>
  47. </div>
  48. </a-modal>
  49. </div>
  50. </template>
  51. <script lang="ts" setup>
  52. import {ref, } from 'vue';
  53. import { defHttp } from '/@/utils/http/axios';
  54. import { message } from 'ant-design-vue';
  55. import {ApiSelect} from '/@/components/Form/index';
  56. import{CustomerOption} from '../SaleInquiryForm.api';
  57. import JSelectInput from '/@/components/Form/src/jeecg/components/JSelectInput.vue';
  58. var visible = ref(false);
  59. var form = ref();
  60. var addProjectModalRef = ref()
  61. const emit = defineEmits([ 'success']);
  62. var model = ref({
  63. customer:'',
  64. code:'',
  65. name:'',
  66. notes:'',
  67. });
  68. const labelCol = ref({
  69. xs: { span: 24 },
  70. sm: { span: 5 },
  71. });
  72. const wrapperCol = ref({
  73. xs: { span: 24 },
  74. sm: { span: 19 },
  75. });
  76. const validatorRules = {
  77. customer: [{ required: true, message: '客户(customer)不能为空', trigger: 'blur' }],
  78. name: [{ required: true, message: '名称(name)不能为空', trigger: 'blur' }],
  79. };
  80. function getTable(){
  81. visible.value = true
  82. }
  83. function handleOk(){
  84. form.value.validate().then(async () => {
  85. let url = '/baseCode/baseProjectArchive/add'
  86. let params = model.value
  87. defHttp.post({url,params}, { isTransformResponse: false })
  88. .then((res) => {
  89. if (res.success) {
  90. message.success(res.message);
  91. } else {
  92. message.error(res.message);
  93. }
  94. }).finally(() => {
  95. handleCancel()
  96. });
  97. }).catch(error => {
  98. console.log('error', error);
  99. });
  100. }
  101. function handleCancel(){
  102. emit('success')
  103. visible.value = false
  104. model.value = {
  105. customer:'',
  106. code:'',
  107. name:'',
  108. notes:'',
  109. }
  110. form.value.resetFields()
  111. }
  112. defineExpose({
  113. getTable
  114. });
  115. </script>
  116. <style scoped lang="less">
  117. /deep/.ant-form-item{
  118. margin-bottom: 8px !important;
  119. }
  120. // /deep/.ant-table-wrapper .ant-table-thead > tr > th, .ant-table-wrapper .ant-table-thead > tr > td{
  121. // padding: 8px !important;
  122. // }
  123. /deep/.ant-modal-body{
  124. padding: 24px;
  125. }
  126. </style>