Просмотр исходного кода

feat:调整创建订单默认选择物品信息和快递类型

颜琼丽 недель назад: 4
Родитель
Сommit
5bff9008c7
1 измененных файлов с 49 добавлено и 21 удалено
  1. 49 21
      jd-logistics-ui-v3/src/views/logistics/order/createOrder.vue

+ 49 - 21
jd-logistics-ui-v3/src/views/logistics/order/createOrder.vue

@@ -240,7 +240,7 @@
                 label-width="120px"
                 class="delivery-form"
             >
-              <div class="item-info-grid-3">
+              <div class="item-info-grid-2">
                 <el-form-item label="上门时间:" prop="pickupTime" required>
                   <PickupTimeCascader
                       v-model="deliveryForm.pickupTime"
@@ -283,7 +283,7 @@
       </div>
     </div>
 
-    <!-- 物品信息 -->
+    <!-- 物品信息(修改后) -->
     <div class="form-card full-width">
       <div class="card-header with-blue-line">
         <div class="blue-line"></div>
@@ -298,37 +298,40 @@
             label-width="120px"
             class="item-info-form"
         >
-          <div class="item-info-grid-1">
-            <el-form-item label="物品类型:" prop="type" required>
-              <el-input
+          <div class="item-info-grid-2">
+            <!-- 物品类型改为下拉选择框,使用数据字典 jd_goods_type -->
+            <el-form-item label="物品类型:" prop="type" required class="fixed-input">
+              <el-select
                   v-model="itemInfo.type"
-                  placeholder="请输入物品类型"
+                  placeholder="请选择物品类型"
                   size="large"
                   clearable
                   class="fixed-input"
-                  maxlength="50"
-                  show-word-limit
-              />
+              >
+                <el-option
+                    v-for="dict in jd_goods_type"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                />
+              </el-select>
             </el-form-item>
-          </div>
-          <div class="item-info-grid-3">
             <el-form-item label="总重量 (kg):" prop="weight" required>
               <el-input-number
                   v-model="itemInfo.weight"
                   :min="0.1"
-                  :max="1000"
                   :step="0.1"
                   size="large"
                   controls-position="right"
                   class="fixed-input"
               />
             </el-form-item>
-
+          </div>
+          <div class="item-info-grid-2">
             <el-form-item label="总体积 (m³):" prop="volume" required>
               <el-input-number
                   v-model="itemInfo.volume"
                   :min="0.001"
-                  :max="100"
                   :step="0.001"
                   size="large"
                   controls-position="right"
@@ -340,7 +343,6 @@
               <el-input-number
                   v-model="itemInfo.quantity"
                   :min="1"
-                  :max="999"
                   :step="1"
                   size="large"
                   controls-position="right"
@@ -477,7 +479,8 @@ import { addBook } from "@/api/logistics/book"
 import { addOrder } from "@/api/logistics/order"
 
 const { proxy } = getCurrentInstance()
-const { jd_logistics_product_code, sf_logistics_product_code } = proxy.useDict("jd_logistics_product_code", "sf_logistics_product_code")
+const { jd_logistics_product_code, sf_logistics_product_code, jd_goods_type } =
+    proxy.useDict("jd_logistics_product_code", "sf_logistics_product_code","jd_goods_type")
 
 import { useRoute } from 'vue-router';
 import { updateBook, getDefaultAddress, getAddressInfo } from "../../../api/logistics/book.js";
@@ -635,8 +638,7 @@ const receiverRules = {
 
 const itemInfoRules = {
   type: [
-    { required: true, message: '请输入物品类型', trigger: 'blur' },
-    { min: 1, max: 50, message: '物品类型长度在1-50个字符之间', trigger: 'blur' }
+    { required: true, message: '请选择物品类型', trigger: 'change' }, // 触发方式改为 change
   ],
   weight: [
     { required: true, message: '请输入总重量', trigger: 'blur' },
@@ -1025,6 +1027,23 @@ const validateFormData = () => {
   return isValid
 }
 
+// 监听字典数据,当有值且当前未选择时,设置默认选中第一个
+watch(jd_logistics_product_code, (val) => {
+  if (productType.value === '1' && val && val.length > 0 && !deliveryForm.expressType) {
+    deliveryForm.expressType = val[0].value;
+  }
+});
+watch(sf_logistics_product_code, (val) => {
+  if (productType.value === '2' && val && val.length > 0 && !deliveryForm.expressType) {
+    deliveryForm.expressType = val[0].value;
+  }
+});
+watch(jd_goods_type, (val) => {
+  if (val && val.length > 0 && !itemInfo.type) {
+    itemInfo.type = val[0].value;
+  }
+});
+
 function close() {
   const obj = { path: "/waybill/order" }
   proxy.$tab.closeOpenPage(obj)
@@ -1131,7 +1150,7 @@ const submitOrder = async () => {
     receiverCity: receiver.cityName,
     receiverCounty: receiver.countyName,
     receiverAddress: receiver.detailedAddress,
-    goodsName: itemInfo.type,
+    goodsName: itemInfo.type, // 物品类型值
     goodsWeight: itemInfo.weight,
     goodsVolume: itemInfo.volume,
     goodsQty: itemInfo.quantity,
@@ -1228,6 +1247,7 @@ onMounted(() => {
 </script>
 
 <style scoped>
+/* 样式保持不变,与原来一致 */
 .express-order-page {
   width: 100%;
   padding: 20px;
@@ -1347,6 +1367,7 @@ onMounted(() => {
   background: #F5F7FA;
   width: 100%;
   box-sizing: border-box;
+  text-align: left !important;
 }
 
 /* 统一筛选框样式 */
@@ -1469,8 +1490,8 @@ onMounted(() => {
 
 /* 调整el-input-number的特殊样式 */
 :deep(.fixed-input .el-input-number) {
-  display: flex;
-  align-items: center;
+  //display: flex;
+  //align-items: center;
 }
 
 :deep(.fixed-input .el-input-number .el-input-number__decrease),
@@ -1606,6 +1627,13 @@ onMounted(() => {
   gap: 20px;
 }
 
+/* 物品信息网格布局 */
+.item-info-grid-2 {
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  gap: 20px;
+}
+
 /* 增值服务样式调整 */
 .value-services-grid {
   display: grid;