You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

0 lines
18 KiB

1 month ago
  1. {"ast":null,"code":"import { ref, reactive, computed, onMounted } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { ElMessage } from 'element-plus';\nimport { InfoFilled } from '@element-plus/icons-vue';\nimport { createOrder, previewTransportFee, getLocations } from '@/api/order';\nexport default {\n __name: 'OrderCreate',\n setup(__props, {\n expose: __expose\n }) {\n __expose();\n const router = useRouter();\n const formRef = ref(null);\n const loading = ref(false);\n const locations = ref([]);\n const previewFee = ref(0);\n const form = reactive({\n goodsName: '',\n // \n goodsQuantity: 1,\n // 1\n startLocationId: '',\n // ID\n endLocationId: '',\n // ID\n transferLocationIds: [],\n // ID\n baseTransportFee: 0,\n // 0\n customerId: '' // ID\n });\n const rules = {\n goodsName: [{\n required: true,\n message: '',\n trigger: 'blur'\n }],\n goodsQuantity: [{\n required: true,\n message: '',\n trigger: 'blur'\n }, {\n type: 'number',\n min: 1,\n message: '0',\n trigger: 'blur'\n }],\n startLocationId: [{\n required: true,\n message: '',\n trigger: 'change'\n }],\n endLocationId: [{\n required: true,\n message: '',\n trigger: 'change'\n }],\n baseTransportFee: [{\n required: true,\n message: '',\n trigger: 'blur'\n }, {\n type: 'number',\n min: 0.01,\n message: '0',\n trigger: 'blur'\n }],\n customerId: [{\n required: true,\n message: 'ID',\n trigger: 'blur'\n }, {\n type: 'number',\n min: 1,\n message: 'ID0',\n trigger: 'blur'\n }]\n };\n\n // \n const availableTransferLocations = computed(() => {\n return locations.value.filter(item => item.id !== form.startLocationId && item.id !== form.endLocationId);\n });\n\n // \n const loadLocations = async () => {\n try {\n const res = await getLocations();\n if (res.code === 200) {\n locations.value = res.data;\n }\n } catch (error) {\n console.error(':', error);\n ElMessage.error('');\n }\n };\n\n // \n const updatePreviewFee = async () => {\n if (!form.baseTransportFee) {\n previewFee.value = 0;\n return;\n }\n try {\n const res = await previewTransportFee({\n baseFee: form.baseTransportFee,\n transferLocationIds: form.transferLocationIds.join(',')\n });\n if (res.code === 200) {\n previewFee.value = res.data;\n }\n } catch (error) {\n console.error(':', error);\n }\n };\n\n // \n const handleLocationChange = () => {\n // \n form.transferLocationIds = form.transferLocationIds.filter(id => id !== form.startLocationId && id !== form.endLocationId);\n updatePreviewFee();\n };\n\n // \n const handleFeeChange = () => {\n updatePreviewFee();\n };\n\n // \n const handleSubmit = async () => {\n if (!formRef.value) return;\n try {\n await formRef.value.validate();\n loading.value = true;\n const res = await createOrder(form);\n if (res.code === 200) {\n ElMessage.success('');\n router.push('/admin/orders');\n