ContractDialog.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <template>
  2. <el-dialog
  3. :model-value="modelValue"
  4. :title="title"
  5. width="900px"
  6. :close-on-click-modal="false"
  7. @update:model-value="(v) => emit('update:modelValue', v)"
  8. >
  9. <el-form
  10. ref="formRef"
  11. :model="model"
  12. :rules="rules"
  13. label-width="140px"
  14. :disabled="readonly"
  15. >
  16. <el-row :gutter="20">
  17. <el-col :span="24">
  18. <el-form-item label="合同名称:" prop="contractName">
  19. <el-input v-model="model.contractName" placeholder="请输入合同名称" />
  20. </el-form-item>
  21. </el-col>
  22. </el-row>
  23. <el-row :gutter="20">
  24. <el-col :span="12">
  25. <el-form-item label="合同类型:" prop="contractType">
  26. <el-select v-model="model.contractType" placeholder="请选择" style="width: 100%;">
  27. <el-option
  28. v-for="item in contractTypeDict"
  29. :key="item.dictValue"
  30. :label="item.dictLabel"
  31. :value="item.dictValue"
  32. />
  33. </el-select>
  34. </el-form-item>
  35. </el-col>
  36. <el-col :span="12">
  37. <el-form-item label="提醒时间:" prop="demandReminderTime">
  38. <el-input-number v-model="model.demandReminderTime" :min="1" :max="365" style="width: 150px;" />
  39. <span style="margin-left: 10px;">天</span>
  40. </el-form-item>
  41. </el-col>
  42. </el-row>
  43. <el-row :gutter="20">
  44. <el-col :span="12">
  45. <el-form-item label="开始时间:" prop="contractStartTime">
  46. <el-date-picker v-model="model.contractStartTime" type="date" placeholder="请选择" style="width: 100%;" />
  47. </el-form-item>
  48. </el-col>
  49. <el-col :span="12">
  50. <el-form-item label="截止时间:" prop="contractEndTime">
  51. <el-date-picker v-model="model.contractEndTime" type="date" placeholder="请选择" style="width: 100%;" />
  52. </el-form-item>
  53. </el-col>
  54. </el-row>
  55. <el-row :gutter="20">
  56. <el-col :span="12">
  57. <el-form-item label="开票类型:" prop="invoiceType">
  58. <el-select v-model="model.invoiceType" placeholder="请选择" style="width: 100%;">
  59. <el-option
  60. v-for="item in invoiceTypeList"
  61. :key="item.id"
  62. :label="item.invoiceTypeName"
  63. :value="item.id"
  64. />
  65. </el-select>
  66. </el-form-item>
  67. </el-col>
  68. <el-col :span="12">
  69. <el-form-item label="合同金额:" prop="contractAmount">
  70. <el-input v-model="model.contractAmount" placeholder="请输入">
  71. <template #append>万元</template>
  72. </el-input>
  73. </el-form-item>
  74. </el-col>
  75. </el-row>
  76. <el-row :gutter="20">
  77. <el-col :span="12">
  78. <el-form-item label="税率:" prop="taxRate">
  79. <el-select v-model="model.taxRate" placeholder="请选择" style="width: 100%;">
  80. <el-option v-for="item in taxRateList" :key="item.id" :label="item.taxrateName" :value="item.id" />
  81. </el-select>
  82. </el-form-item>
  83. </el-col>
  84. <el-col :span="12">
  85. <el-form-item label="结算方式:" prop="settlementMethod">
  86. <el-select v-model="model.settlementMethod" placeholder="请选择" style="width: 100%;">
  87. <el-option
  88. v-for="item in settlementMethodList"
  89. :key="item.id"
  90. :label="item.settlementName"
  91. :value="item.id"
  92. />
  93. </el-select>
  94. </el-form-item>
  95. </el-col>
  96. </el-row>
  97. <el-row :gutter="20">
  98. <el-col :span="24">
  99. <el-form-item label="合同附件:" prop="contractAttachment">
  100. <FileUpload
  101. v-model="model.contractAttachment"
  102. :limit="10"
  103. :file-size="50"
  104. :file-type="['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'pdf']"
  105. :disabled="readonly"
  106. />
  107. </el-form-item>
  108. </el-col>
  109. </el-row>
  110. <el-row :gutter="20">
  111. <el-col :span="24">
  112. <el-form-item label="合同说明:" prop="contractDescription">
  113. <el-input v-model="model.contractDescription" type="textarea" :rows="4" placeholder="请输入合同说明" />
  114. </el-form-item>
  115. </el-col>
  116. </el-row>
  117. </el-form>
  118. <template #footer>
  119. <div class="dialog-footer">
  120. <el-button @click="emit('update:modelValue', false)">取消</el-button>
  121. <el-button v-if="!readonly" type="primary" @click="onSubmit" :loading="submitLoading">确定</el-button>
  122. </div>
  123. </template>
  124. </el-dialog>
  125. </template>
  126. <script setup lang="ts">
  127. import { ref } from 'vue';
  128. import FileUpload from '@/components/FileUpload/index.vue';
  129. type Props = {
  130. modelValue: boolean;
  131. title: string;
  132. readonly: boolean;
  133. submitLoading: boolean;
  134. model: any;
  135. rules: any;
  136. contractTypeDict: any[];
  137. taxRateList: any[];
  138. settlementMethodList: any[];
  139. invoiceTypeList: any[];
  140. onSubmit: () => void;
  141. };
  142. defineProps<Props>();
  143. const emit = defineEmits<{ (e: 'update:modelValue', value: boolean): void }>();
  144. const formRef = ref();
  145. defineExpose({
  146. formRef
  147. });
  148. </script>