EditDrawer.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <script lang="ts" setup>
  2. /**
  3. * @Name: EditDrawer.vue
  4. * @Description: 成本查看-编辑抽屉
  5. * @Author: xinyan
  6. */
  7. import { ElMessage, FormInstance, FormRules } from 'element-plus';
  8. import { Close, Finished } from '@element-plus/icons-vue';
  9. import { useResponse } from '/@/utils/useResponse';
  10. import * as api from '../api';
  11. const stationOptions = <Ref>inject('stationOptions');
  12. const btnLoading = ref(false);
  13. const editOpen = defineModel({ default: false });
  14. const editDrawer = <Ref>useTemplateRef('editDrawer');
  15. const props: any = defineProps({
  16. rowData: Object,
  17. });
  18. const { rowData } = props;
  19. const emit = defineEmits(['refresh']);
  20. interface RuleForm {
  21. description: any;
  22. station: any;
  23. platform: any;
  24. export_tax_rate: any;
  25. import_tax_rate: any;
  26. VAT_rate: any;
  27. first_cost: any;
  28. forwarding_fee: any;
  29. return_or_refurbishment_rates: any;
  30. advertising_budget_rate: any;
  31. storage_charges_rate: any;
  32. brokerage_rate: any;
  33. price_supply_rate: any;
  34. }
  35. const ruleFormRef = ref<FormInstance>();
  36. const ruleForm = reactive<RuleForm>({
  37. description: rowData?.description,
  38. station: rowData?.station,
  39. platform: rowData?.platform,
  40. export_tax_rate: rowData?.export_tax_rate,
  41. import_tax_rate: rowData?.import_tax_rate,
  42. VAT_rate: rowData?.VAT_rate,
  43. first_cost: rowData?.first_cost,
  44. forwarding_fee: rowData?.forwarding_fee,
  45. return_or_refurbishment_rates: rowData?.return_or_refurbishment_rates,
  46. advertising_budget_rate: rowData?.advertising_budget_rate,
  47. storage_charges_rate: rowData?.storage_charges_rate,
  48. brokerage_rate: rowData?.brokerage_rate,
  49. price_supply_rate: rowData?.price_supply_rate,
  50. });
  51. const validateRate = (rule, value, callback) => {
  52. const regex = /^\d{1,2}(\.\d{1,2})?$/; // 小数点前最多2位数字,小数点后最多2位数字
  53. if (!regex.test(value)) {
  54. callback(new Error('格式不正确,小数点前、后不超过2个数字'));
  55. } else {
  56. callback();
  57. }
  58. };
  59. const rules = reactive<FormRules<RuleForm>>({
  60. description: [{ required: true, message: '请输入描述', trigger: 'blur' }],
  61. station: [{ required: true, message: '请输入地区', trigger: 'blur' }],
  62. platform: [{ required: true, message: '请输入平台', trigger: 'blur' }],
  63. export_tax_rate: [{ required: true, message: '请输入出口报关费率', trigger: 'blur' },
  64. { validator: validateRate, trigger: 'blur' }
  65. ],
  66. import_tax_rate: [{ required: true, message: '请输入进口关税率', trigger: 'blur' },
  67. { validator: validateRate, trigger: 'blur' }],
  68. VAT_rate: [{ required: true, message: '请输入VAT', trigger: 'blur' }],
  69. first_cost: [{ required: true, message: '请输入头程运输费率', trigger: 'blur' },
  70. { validator: validateRate, trigger: 'blur' }],
  71. forwarding_fee: [{ required: true, message: '请输入转发费', trigger: 'blur' }],
  72. return_or_refurbishment_rates: [{ required: true, message: '请输入退货与翻新费', trigger: 'blur' }],
  73. advertising_budget_rate: [{ required: true, message: '请输入广告预算费率', trigger: 'blur' },
  74. { validator: validateRate, trigger: 'blur' }],
  75. storage_charges_rate: [{ required: true, message: '请输入仓储费', trigger: 'blur' },
  76. { validator: validateRate, trigger: 'blur' }],
  77. brokerage_rate: [{ required: true, message: '请输入佣金', trigger: 'blur' },
  78. { validator: validateRate, trigger: 'blur' }],
  79. price_supply_rate: [{ required: true, message: '请输入供货价折算率', trigger: 'blur' },
  80. { validator: validateRate, trigger: 'blur' }],
  81. });
  82. const submitForm = async (formEl: FormInstance | undefined) => {
  83. if (!formEl) return;
  84. await formEl.validate(async (valid, fields) => {
  85. if (valid) {
  86. try {
  87. const res = await useResponse(api.updateRow, { id: rowData?.id, ...ruleForm }, btnLoading);
  88. if (res && res.code == 2000) {
  89. editOpen.value = false;
  90. ElMessage.success({ message: '编辑成功', plain: true, icon: 'Operation' });
  91. emit('refresh');
  92. }
  93. } catch (error) {
  94. console.error('Error==>', error);
  95. }
  96. } else {
  97. console.log('error submit!', fields);
  98. }
  99. });
  100. };
  101. function closeDrawer() {
  102. editDrawer.value.handleClose();
  103. }
  104. </script>
  105. <template>
  106. <div class="drawer-container">
  107. <el-drawer
  108. ref="editDrawer"
  109. v-model="editOpen"
  110. :close-on-click-modal="false"
  111. :close-on-press-escape="false"
  112. :title="`成本查看 - 编辑 `"
  113. size="30%"
  114. >
  115. <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" class="mx-2.5 mt-7" label-position="top" label-width="auto" status-icon>
  116. <el-row :gutter="20">
  117. <el-col :span="12">
  118. <el-form-item class="font-medium" label="描 述" prop="description">
  119. <el-input v-model="ruleForm.description" placeholder="请输入描述" />
  120. </el-form-item>
  121. <el-form-item class="font-medium" label="地 区" prop="station">
  122. <!--<el-select v-model="ruleForm.station" placeholder="请选择地区">-->
  123. <!-- <el-option v-for="item in stationOptions" :key="item" :label="item" :value="item" />-->
  124. <!--</el-select>-->
  125. <el-input v-model="ruleForm.station" placeholder="请输入地区"/>
  126. </el-form-item>
  127. <el-form-item class="font-medium" label="进口关税率" prop="import_tax_rate">
  128. <el-input v-model="ruleForm.import_tax_rate" placeholder="请输入进口关税率"></el-input>
  129. </el-form-item>
  130. <el-form-item class="font-medium" label="头程运输费率" prop="first_cost">
  131. <el-input v-model="ruleForm.first_cost" placeholder="请输入头程运输费率"></el-input>
  132. </el-form-item>
  133. <el-form-item class="font-medium" label="退货与翻新费" prop="return_or_refurbishment_rates">
  134. <el-input v-model="ruleForm.return_or_refurbishment_rates" placeholder="请输入退货与翻新费"></el-input>
  135. </el-form-item>
  136. <el-form-item class="font-medium" label="仓储费" prop="storage_charges_rate">
  137. <el-input v-model="ruleForm.storage_charges_rate" placeholder="请输入仓储费"></el-input>
  138. </el-form-item>
  139. <el-form-item class="font-medium" label="供货价折算率" prop="price_supply_rate">
  140. <el-input v-model="ruleForm.price_supply_rate" placeholder="请输入供货价折算率"></el-input>
  141. </el-form-item>
  142. </el-col>
  143. <el-col :span="12">
  144. <el-form-item class="font-medium" label="平 台" prop="platform">
  145. <el-input v-model="ruleForm.platform" placeholder="请输入平台" />
  146. </el-form-item>
  147. <el-form-item class="font-medium" label="出口报关费率" prop="export_tax_rate">
  148. <el-input v-model="ruleForm.export_tax_rate" placeholder="请输入出口报关费率"></el-input>
  149. </el-form-item>
  150. <el-form-item class="font-medium" label="VAT" prop="VAT_rate">
  151. <el-input v-model="ruleForm.VAT_rate" placeholder="请输入VAT"></el-input>
  152. </el-form-item>
  153. <el-form-item class="font-medium" label="转发费" prop="forwarding_fee">
  154. <el-input v-model="ruleForm.forwarding_fee" placeholder="请输入转发费"></el-input>
  155. </el-form-item>
  156. <el-form-item class="font-medium" label="广告预算费率" prop="advertising_budget_rate">
  157. <el-input v-model="ruleForm.advertising_budget_rate" placeholder="请输入广告预算费率"></el-input>
  158. </el-form-item>
  159. <el-form-item class="font-medium" label="佣金" prop="brokerage_rate">
  160. <el-input v-model="ruleForm.brokerage_rate" placeholder="请输入佣金"></el-input>
  161. </el-form-item>
  162. </el-col>
  163. </el-row>
  164. <el-form-item>
  165. <el-divider />
  166. <div class="flex flex-1 justify-end">
  167. <el-button :icon="Close" @click="closeDrawer">取 消</el-button>
  168. <el-button :icon="Finished" :loading="btnLoading" type="primary" @click="submitForm(ruleFormRef)"> 确 定 </el-button>
  169. </div>
  170. </el-form-item>
  171. </el-form>
  172. </el-drawer>
  173. </div>
  174. </template>
  175. <style scoped>
  176. .drawer-container :deep(.el-drawer__header) {
  177. border-bottom: none;
  178. font-weight: 500;
  179. }
  180. .drawer-container :deep(.el-drawer__title) {
  181. font-size: 18px;
  182. }
  183. </style>