Andy преди 3 години
родител
ревизия
cda3cfd653

+ 18 - 3
src/components/product/add/index.vue

@@ -822,7 +822,7 @@ export default {
         type_name: "产品" + (this.addProductArray.length + 1),
         position: "",
         index,
-        extArray: [{ type: 2 }],
+        extArray: [],
       });
     },
     handleAddProductSelect(row) {
@@ -1012,7 +1012,20 @@ export default {
               }
             });
             if (res.data.bp_id == this.pre_bp_id) {
-              modalData.extArray = this.tempExtArray;
+              modalData.extArray = this.deepClone(this.tempExtArray);
+              if (modalData.extArray.length == 1) {
+                modalData.ext_price =
+                  modalData.extArray[0].num * 1 * modalData.extArray[0].price;
+              } else {
+                modalData.ext_price = modalData.extArray.reduce(
+                  (pre, pur) => pre.total_price * 1 + pur.num * pur.price * 1
+                );
+              }
+              modalData.price =
+                (modalData.unit_price * 1 || 0) * (modalData.num * 1 || 1) +
+                (modalData.over_price * 1 || 0) +
+                (modalData.ext_price * 1 || 0);
+              modalData.price = modalData.price.toFixed(2);
             } else {
               modalData.extArray = [];
             }
@@ -1663,7 +1676,9 @@ export default {
       this.$forceUpdate();
     },
     handleTabsPaneChange(name) {
-      this.tempExtArray = this.addProductArray[this.currentTabIndex].extArray;
+      this.tempExtArray = this.deepClone(
+        this.addProductArray[this.currentTabIndex].extArray
+      );
       this.pre_bp_id = this.addProductArray[this.currentTabIndex].bp_id;
       this.currentTabIndex = this.$refs.tabsRef.activeKey;
       this.currencyProduct = this.addProductArray[this.currentTabIndex];

+ 30 - 27
src/views/BidSystem/ProductDeOrder/deorderdetail.vue

@@ -180,7 +180,7 @@
               <Option
                 v-for="sitem in partsItem.partsNameList"
                 :key="sitem.id"
-                :label="sitem.title"
+                :label="sitem.title + ''"
                 :value="sitem.id"
               >
               </Option>
@@ -258,7 +258,7 @@
           </FormItem>
           <FormItem
             v-for="item of partsItem.ProcessAttrList"
-            :key="item.id"
+            :key="item.id + ''"
             :label="(item.name || item.title) + ':'"
           >
             <Select
@@ -273,19 +273,19 @@
               <OptionGroup
                 v-for="OptionGroup in item.cld"
                 :key="OptionGroup.type_title"
-                :label="OptionGroup.type_title"
+                :label="OptionGroup.type_title + ''"
               >
                 <Option
                   v-for="Option in OptionGroup.list"
                   :value="Option.id"
-                  :key="Option.id"
+                  :key="Option.id + ''"
                   >{{ Option.title }}</Option
                 >
               </OptionGroup>
               <Option
                 v-for="sitem in item.partsNameList"
                 :key="sitem.id"
-                :label="sitem.title"
+                :label="sitem.title + ''"
                 :value="sitem.id"
               >
               </Option>
@@ -411,7 +411,7 @@
                     v-for="item of materialWoodList"
                     :key="item.id"
                     :value="item.id"
-                    :label="item.title"
+                    :label="item.title + ''"
                   ></Option>
                 </Select>
               </div>
@@ -492,7 +492,7 @@
                   v-for="item in processRequireList"
                   :key="item.id"
                   :value="item.id"
-                  :label="item.title"
+                  :label="item.title + ''"
                 ></Option>
               </Select>
             </template>
@@ -1279,7 +1279,7 @@ export default {
       similarProductLoading: false,
       PDTTypeList: [{ id: "", title: "" }], //产品分类列表
       ProcessAttrList: [], //工艺属性列表
-      partsList: [{ id: "", title: "" }], //部件分类名称列表
+      partsList: [], //部件分类名称列表
       similarProductData: {
         type_id: "",
         title: "",
@@ -1844,25 +1844,28 @@ export default {
             item.partsWoodTableData = res.data.detail.filter(
               (v) => v.type_id == 1 || v.type_id == 2
             );
-            item.partsWoodTableData.map((v, k) => {
-              const temp_arr = res.data.detail.filter((w) => w.id == v.id);
-              v.wool_long = "";
-              v.wool_wide = "";
-              if (temp_arr.length > 0) {
-                v.long = temp_arr[temp_arr.length - 1].long;
-                v.wool_long = temp_arr[temp_arr.length - 1].wool_long;
-                v.wide = temp_arr[temp_arr.length - 1].wide;
-                v.wool_wide = temp_arr[temp_arr.length - 1].wool_wide;
-              }
-              if (result) {
-                v.long = result.data.parts[index].detail[k].long;
-                v.wide = result.data.parts[index].detail[k].wide;
-                v.wool_long = result.data.parts[index].detail[k].wool_long;
-                v.wool_wide = result.data.parts[index].detail[k].wool_wide;
-                v.row = result.data.parts[index].detail[k].row;
-                v.sort = result.data.parts[index].detail[k].sort;
-              }
-            });
+            item.partsWoodTableData.length > 0 &&
+              item.partsWoodTableData.map((v, k) => {
+                const temp_arr = res.data.detail.filter((w) => w.id == v.id);
+                v.wool_long = "";
+                v.wool_wide = "";
+                if (temp_arr.length > 0) {
+                  v.long = temp_arr[temp_arr.length - 1].long;
+                  v.wool_long = temp_arr[temp_arr.length - 1].wool_long;
+                  v.wide = temp_arr[temp_arr.length - 1].wide;
+                  v.wool_wide = temp_arr[temp_arr.length - 1].wool_wide;
+                }
+                if (result) {
+                  if (result.data.parts[index].detail) {
+                    v.long = result.data.parts[index].detail[k].long;
+                    v.wide = result.data.parts[index].detail[k].wide;
+                    v.wool_long = result.data.parts[index].detail[k].wool_long;
+                    v.wool_wide = result.data.parts[index].detail[k].wool_wide;
+                    v.row = result.data.parts[index].detail[k].row;
+                    v.sort = result.data.parts[index].detail[k].sort;
+                  }
+                }
+              });
             item.partsMetalseData = res.data.detail.filter(
               (v) => v.type_id == 5
             );

+ 137 - 94
src/views/BidSystem/ProductDeOrder/infoDetail.vue

@@ -28,15 +28,27 @@
       <div class="form">
         <Form class="form_content" :label-width="100">
           <FormItem label="项目编号:">
-            <Input v-if="type == 6" v-model="saveData.order_no" placeholder="请输入项目编码"/>
+            <Input
+              v-if="type == 6"
+              v-model="saveData.order_no"
+              placeholder="请输入项目编码"
+            />
             <span style="width: 120px" v-else>{{ formData.order_no }}</span>
           </FormItem>
           <FormItem label="项目名称:">
-            <Input v-if="type == 6" v-model="saveData.residential_name" placeholder="请输入项目名称"/>
+            <Input
+              v-if="type == 6"
+              v-model="saveData.residential_name"
+              placeholder="请输入项目名称"
+            />
             <span v-else>{{ formData.residential_name }}</span>
           </FormItem>
           <FormItem label="项目简称:">
-            <Input v-if="type == 6" v-model="saveData.abbreviation" placeholder="请输入项目简称"/>
+            <Input
+              v-if="type == 6"
+              v-model="saveData.abbreviation"
+              placeholder="请输入项目简称"
+            />
             <span v-else>{{ formData.abbreviation }}</span>
           </FormItem>
           <FormItem label="客户名称:">
@@ -57,11 +69,7 @@
             <span v-else>{{ formData.custom_title }}</span>
           </FormItem>
           <FormItem label="紧急程度:">
-            <Select
-              clearable
-              v-model="saveData.warning_state"
-              v-if="type == 6"
-            >
+            <Select clearable v-model="saveData.warning_state" v-if="type == 6">
               <Option
                 v-for="(item, index) in warning_state_list"
                 :key="index"
@@ -72,7 +80,11 @@
             <span v-else>{{ formData.warning_state }}</span>
           </FormItem>
           <FormItem label="项目定金:">
-            <Input v-if="type == 6" v-model="saveData.front_money" placeholder="请输入项目定金"/>
+            <Input
+              v-if="type == 6"
+              v-model="saveData.front_money"
+              placeholder="请输入项目定金"
+            />
             <span v-else>{{ formData.front_money }}</span>
           </FormItem>
           <FormItem label="详细地址:">
@@ -155,7 +167,12 @@
             <span v-else>{{ formData.nickname }}</span>
           </FormItem>
           <FormItem label="备注:">
-            <Input v-if="type == 6" v-model="saveData.remark" type="textarea" placeholder="请输入备注"/>
+            <Input
+              v-if="type == 6"
+              v-model="saveData.remark"
+              type="textarea"
+              placeholder="请输入备注"
+            />
             <span v-else>{{ formData.remark }}</span>
           </FormItem>
         </Form>
@@ -448,20 +465,20 @@
                 <template slot="setSlot" slot-scope="{ row }">
                   <a @click="handleGoPage(row)">详情</a>
                 </template>
-           <template slot="urlSet" slot-scope="{ index }">
-              <div
-                class="items"
-                v-show="totalData[index].url.length !== 0 ? true : false"
-              >
-                <img
-                  @click="looks(totalData[index].url)"
-                  v-for="(el, idx) in totalData[index].url"
-                  :key="idx"
-                  :src="$store.state.ip + el"
-                  alt=""
-                />
-              </div>
-        </template>
+                <template slot="urlSet" slot-scope="{ index }">
+                  <div
+                    class="items"
+                    v-show="totalData[index].url.length !== 0 ? true : false"
+                  >
+                    <img
+                      @click="looks(totalData[index].url)"
+                      v-for="(el, idx) in totalData[index].url"
+                      :key="idx"
+                      :src="$store.state.ip + el"
+                      alt=""
+                    />
+                  </div>
+                </template>
               </Table>
               <Page
                 :page-size-opts="[10, 20, 30, 40, 100, 1000]"
@@ -480,20 +497,20 @@
                 <template slot="setSlot" slot-scope="{ row }">
                   <a @click="handleGoPage(row)">详情</a>
                 </template>
-                 <template slot="urlSet" slot-scope="{ index }">
-              <div
-                class="items"
-                v-show="detailData[index].url.length !== 0 ? true : false"
-              >
-                <img
-                  @click="looks(detailData[index].url)"
-                  v-for="(el, idx) in detailData[index].url"
-                  :key="idx"
-                  :src="$store.state.ip + el"
-                  alt=""
-                />
-              </div>
-        </template>
+                <template slot="urlSet" slot-scope="{ index }">
+                  <div
+                    class="items"
+                    v-show="detailData[index].url.length !== 0 ? true : false"
+                  >
+                    <img
+                      @click="looks(detailData[index].url)"
+                      v-for="(el, idx) in detailData[index].url"
+                      :key="idx"
+                      :src="$store.state.ip + el"
+                      alt=""
+                    />
+                  </div>
+                </template>
               </Table>
               <Page
                 :page-size-opts="[10, 20, 30, 40, 100, 1000]"
@@ -541,10 +558,15 @@
 export default {
   data() {
     return {
-        ruleValidate: {
-                    name: [
-                        { required: true, message: 'The name cannot be empty', trigger: 'blur' }
-                    ]},
+      ruleValidate: {
+        name: [
+          {
+            required: true,
+            message: "The name cannot be empty",
+            trigger: "blur",
+          },
+        ],
+      },
       totalColumns: [
         { type: "selection", align: "center", width: 60 },
         { title: "序号", align: "center", type: "index", minWidth: 200 },
@@ -569,7 +591,13 @@ export default {
         { title: "材质", align: "center", key: "material", minWidth: 200 },
         { title: "颜色", align: "center", key: "color", minWidth: 200 },
         { title: "工艺", align: "center", key: "work", minWidth: 200 },
-        { title: "图纸", align: "center", key: "url", minWidth: 200 ,slot:"urlSet"},
+        {
+          title: "图纸",
+          align: "center",
+          key: "url",
+          minWidth: 200,
+          slot: "urlSet",
+        },
         {
           title: "左右式",
           align: "center",
@@ -646,7 +674,13 @@ export default {
         { title: "材质", align: "center", key: "material", minWidth: 200 },
         { title: "颜色", align: "center", key: "color", minWidth: 200 },
         { title: "工艺", align: "center", key: "work", minWidth: 200 },
-        { title: "图纸", align: "center", key: "url", minWidth: 200 ,slot:"urlSet"},
+        {
+          title: "图纸",
+          align: "center",
+          key: "url",
+          minWidth: 200,
+          slot: "urlSet",
+        },
         {
           title: "左右式",
           align: "center",
@@ -695,10 +729,10 @@ export default {
         custom_detail_mobile: "",
         custom_detail_id: "",
       },
-      formData:{},
-      custom_title_list:[],
-      warning_state_list:[],
-      nickname_list:[],
+      formData: {},
+      custom_title_list: [],
+      warning_state_list: [],
+      nickname_list: [],
       searchData: {
         area_code: [],
         area_title: [],
@@ -713,7 +747,7 @@ export default {
         url_number: [],
         product_title: [],
         material: "",
-        color: '',
+        color: "",
         work: "",
         state: "",
       },
@@ -749,16 +783,19 @@ export default {
       clientDetailList_address: [],
     };
   },
-  computed:{
-      uploadData(){
-        return {order_no:this.saveData.order_no||this.$route.query.order_no}
-      }
+  computed: {
+    uploadData() {
+      return { order_no: this.saveData.order_no || this.$route.query.order_no };
+    },
   },
   created() {
     if (this.$route.query.type == 3) {
       this.axios
         .get("/api/order_area_orders", {
-          params: { order_no: this.$route.query.order_no },
+          params: {
+            order_no: this.$route.query.order_no,
+            oa_id: this.$route.query.oa_id,
+          },
         })
         .then((res) => {
           this.formData = res.data;
@@ -779,7 +816,7 @@ export default {
     }
   },
   methods: {
-     looks(arr) {
+    looks(arr) {
       // const array = [{ img_url: img }];
       const array = arr.map((v) => {
         return { img_url: v };
@@ -791,9 +828,7 @@ export default {
         baseTitleField: "",
       });
     },
-    handleBeforeUpload(){
-
-    },
+    handleBeforeUpload() {},
     handleClientDetailChange(val) {
       val && (this.info.custom_detail_id = val);
     },
@@ -876,12 +911,12 @@ export default {
       this.getData(1);
     },
     getData(type) {
-      console.log('type :>> ', type);
       if (type === 1) {
         if (this.search_state) {
           this.axios
             .post("/api/order_area_details", {
               order_no: this.$route.query.order_no,
+              oa_id: this.$route.query.oa_id,
               page_index: this.page_index,
               page_size: this.page_size,
               ...this.searchData,
@@ -896,6 +931,7 @@ export default {
             this.axios
               .post("/api/order_area_details", {
                 order_no: this.$route.query.order_no || this.saveData.order_no,
+                oa_id: this.$route.query.oa_id,
                 page_index: this.page_index,
                 page_size: this.page_size,
               })
@@ -923,12 +959,13 @@ export default {
               });
         }
       } else if (type === 0) {
-        console.log('111 :>> ', 111);
+        console.log("111 :>> ", 111);
         this.axios
           .post("/api/order_area_details", {
-            type:1,
+            type: 1,
             order_no: this.$route.query.order_no || this.saveData.order_no,
             page_index: this.page_index,
+            oa_id: this.$route.query.oa_id,
             page_size: this.page_size,
             ...this.searchData,
           })
@@ -959,21 +996,22 @@ export default {
         this.axios
           .post("/api/order_area_details", {
             type: this.$route.query.type,
+            oa_id: this.$route.query.oa_id,
             order_no: this.$route.query.order_no || this.saveData.order_no,
             ...{ page_index: this.page_index, page_size: this.page_size },
             ...this.searchData,
           })
           .then((res) => {
-              console.log(res.msg.house_type,this.house_type)
-            
+            console.log(res.msg.house_type, this.house_type);
+
             this.totalData = res.data.data;
             this.total = res.data.total;
             this.area_code = res.data.area_code;
             this.area_title = res.data.area_title;
-            this.color = res.data.color ;
+            this.color = res.data.color;
             this.fashion = res.data.fashion;
             this.house = res.data.house;
-            this.house_type = res.data.house_type ;
+            this.house_type = res.data.house_type;
             this.layer = res.data.layer;
             this.material = res.data.material;
             this.number = res.data.number;
@@ -983,7 +1021,7 @@ export default {
             this.state = res.data.state;
             this.unit = res.data.unit;
             this.url_number = res.data.url_number;
-            this.work = res.data.work ;
+            this.work = res.data.work;
             this.copy_form = this.searchData;
           });
       }
@@ -992,7 +1030,6 @@ export default {
       this.$Message.error(err.msg || "导入失败");
     },
     uploadSuccess(res) {
-        
       if (res.code == 200) {
         this.$Message.success("导入成功");
         this.search_state = true;
@@ -1032,16 +1069,22 @@ export default {
       //     });
     },
     save() {
-        if(!this.saveData.order_no&&!this.saveData.residential_name&&!this.saveData.abbreviation&&!this.saveData.custom_title&&!this.saveData.warning_state){
-            this.$message.error('请填写必要信息!');
-        }else{ 
-            this.axios.post('/api/order_area_save',{...this.saveData}).then(res=>{
-           this.$message.success(res.msg)
-           this.save_state = true;
-      })
-
-        }
-     
+      if (
+        !this.saveData.order_no &&
+        !this.saveData.residential_name &&
+        !this.saveData.abbreviation &&
+        !this.saveData.custom_title &&
+        !this.saveData.warning_state
+      ) {
+        this.$message.error("请填写必要信息!");
+      } else {
+        this.axios
+          .post("/api/order_area_save", { ...this.saveData })
+          .then((res) => {
+            this.$message.success(res.msg);
+            this.save_state = true;
+          });
+      }
     },
     goback() {
       this.$router.go(-1);
@@ -1056,7 +1099,7 @@ export default {
   },
 };
 </script>
-<style scoped lang='scss'>
+<style scoped lang="scss">
 .changeDetail {
   .content {
     overflow: auto;
@@ -1075,23 +1118,23 @@ export default {
     }
   }
 }
-.ivu-form-item{
-    width: 250px;
+.ivu-form-item {
+  width: 250px;
 }
-.upload{
-    display: flex;
-    justify-content: space-around;
+.upload {
+  display: flex;
+  justify-content: space-around;
 }
- .items {
-    width: auto;
-    height: 40px;
-    margin-bottom: 10px;
+.items {
+  width: auto;
+  height: 40px;
+  margin-bottom: 10px;
   overflow: hidden;
-    border-radius: 5px;
-    position: relative;
-    img {
-      max-width: 40px;
-      max-height: 40px;
-    }
+  border-radius: 5px;
+  position: relative;
+  img {
+    max-width: 40px;
+    max-height: 40px;
   }
-</style>
+}
+</style>

+ 7 - 7
src/views/BidSystem/ProductDeOrder/list.vue

@@ -299,13 +299,13 @@ export default {
   // 生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {},
   methods: {
-    gopage(){
-          this.$router.push({
-            path: "/cms/BidSystem/ProductDeOrder/infodetail",
-            query: {
-              type:6
-            },
-          });
+    gopage() {
+      this.$router.push({
+        path: "/cms/BidSystem/ProductDeOrder/infodetail",
+        query: {
+          type: 6,
+        },
+      });
     },
     handleProcess() {
       this.process_control = true;

+ 95 - 38
src/views/OrderMannage/BusinessOrderlist/edit.vue

@@ -458,8 +458,17 @@
               v-else
               v-for="(item, index) in tableData"
               :key="item.title + '' + index"
-              v-show="item.is_metal"
-              >{{ item.title }}:{{ item.num }}{{ item.unit }}
+              v-show="item.type == 1"
+              >{{
+                metalList.filter((v) => v.id == item.ext_id).length > 0
+                  ? metalList.filter((v) => v.id == item.ext_id)[0].title
+                  : ""
+              }}:{{ item.num
+              }}{{
+                metalList.filter((v) => v.id == item.ext_id).length > 0
+                  ? metalList.filter((v) => v.id == item.ext_id)[0].unit
+                  : ""
+              }}
               <span v-show="index < parts_title_count.length - 1">;</span>
             </span>
           </div>
@@ -937,6 +946,7 @@
                         }
                       : { padding: '10px 0' }
                   "
+                  v-show="ext_detail.type == 2"
                 >
                   <Select
                     filterable
@@ -967,26 +977,38 @@
               >
                 <span slot="content">
                   <div
-                    v-for="_item in scope.row.extArray"
+                    v-for="_item in scope.row.ext"
                     :key="_item.ext_id + 'ext'"
+                    v-show="_item.type == 2"
                   >
                     <div style="display:flex;justify-content: space-between;">
-                      <div style="width:120px">{{ _item.title }}</div>
+                      <div style="width:120px">
+                        {{
+                          extList.filter((v) => v.id == _item.ext_id).length > 0
+                            ? extList.filter((v) => v.id == _item.ext_id)[0]
+                                .title
+                            : ""
+                        }}
+                      </div>
                       <div style="width:80px">数量:{{ _item.num }}</div>
                       <div style="width:100px">单价:{{ _item.price }}</div>
                       <div style="width:120px">
-                        金额:{{ _item.total_price }}
+                        金额:{{ _item.num * 1 * _item.price }}
                       </div>
                       <div style="width:160px">备注:{{ _item.remark }}</div>
                     </div>
                   </div>
                 </span>
                 {{
-                  scope.row.ext
-                    .map((v) => {
-                      return v.title;
-                    })
-                    .join("/")
+                  scope.row.ext_list
+                    ? scope.row.ext_list
+                        .filter((v) => v.type == 2)
+                        .map((v) => v.title)
+                        .join("/")
+                    : scope.row.ext
+                        .filter((v) => v.type == 2)
+                        .map((v) => v.title)
+                        .join("/")
                 }}
               </Tooltip>
             </template>
@@ -2493,31 +2515,22 @@ export default {
       let sendData = JSON.parse(JSON.stringify(this.info));
       // sendData.custom_detail_id = sendData.custom_id
       let sendList = JSON.parse(JSON.stringify(this.tableData));
-      sendList.map((item) => {
-        delete item.part;
-      });
       this.tableData.map((item, index) => {
         if (!item.is_metal) {
-          console.log("item :>> ", item);
           item.part.map((it, idx) => {
             if (!it.is_metal) {
               if (!sendList[index].part) {
                 sendList[index].part = [];
               }
-              sendList[index].part.push(it);
+              sendList[index].part[idx] = it;
             }
           });
-        } else {
-          item.type = 1;
-          if (!this.sendList[0].part.extArray) {
-            this.sendList[0].part.extArray = [];
-          }
-          this.sendList[0].part.extArray.push(item);
         }
       });
       // sendList= this.tableData.filter(item)
-      console.log("123 :>> ", 123);
-      sendList.map((element) => {
+      let tempMetalArr = [];
+
+      sendList.map((element, index) => {
         if (!element.is_metal) {
           element.part.map((elem) => {
             if (!elem.is_metal) {
@@ -2530,8 +2543,31 @@ export default {
               });
             }
           });
+          if (!element.measurement) {
+            element.measurement = "";
+          }
+          if (!element.measurement_no_letter) {
+            element.measurement_no_letter = "";
+          }
+          let tempStr = "";
+          let tempStr_no_letter = "";
+          element.measure.forEach((elem) => {
+            element[elem.e_title] = elem.value;
+            tempStr += elem.measureCalc + elem.value + "*";
+            tempStr_no_letter += elem.value + "*";
+          });
+          element.measurement = tempStr.substring(0, tempStr.length - 1);
+          element.measurement_no_letter = tempStr_no_letter.substring(
+            0,
+            tempStr_no_letter.length - 1
+          );
+        } else {
+          element.type = 1;
+          tempMetalArr.push(element);
+          sendList.splice(index, 1);
         }
       });
+      sendList[0].ext.push(...tempMetalArr);
       try {
         sendData.start_time = new Date(sendData.start_time)
           .toLocaleDateString()
@@ -2542,7 +2578,6 @@ export default {
       } catch (e) {
         console.log(e);
       }
-      console.log("333 :>> ", 333);
       let params = { ...sendData, product: sendList, renovation_type: 2 };
       this.axios.post("/api/order_save_new", params).then((res) => {
         if (res.code == 200) {
@@ -2567,9 +2602,14 @@ export default {
             //表格编辑用数据
             element.num_temp_save = element.num;
             element.ext.map((v, k) => {
-              v.id = v.ext_id;
-              v = Object.assign(v, element.ext_list[k]);
-              v.total_price = v.num * v.price;
+              if (v.type == 2) {
+                v.id = v.ext_id;
+                v.total_price = v.num * v.price;
+              } else {
+                v.material_id = v.ext_id;
+                v.single_price = v.price;
+                v.price = v.num * v.single_price;
+              }
             });
             element.extArray = element.ext;
             element.type_name = element.title;
@@ -2661,6 +2701,16 @@ export default {
           this.originalData.forEach((element) => {
             element.total_price = (element.num * element.price).toFixed(2);
           });
+          console.log("this.tableData[0].ext :>> ", this.tableData[0].ext);
+          this.tableData[0].ext.map((v) => {
+            if (v.type === 1) {
+              v.is_metal = true;
+              v.material_id = v.ext_id;
+              console.log("v :>> ", v);
+              this.tableData.push(v);
+            }
+          });
+          console.log("this.tableData :>> ", this.tableData);
           this.handleCalcCount();
           //获取客户信息
           this.axios
@@ -3287,12 +3337,14 @@ export default {
         });
       }
       // 拆分五金、附加信息
-      if (!curData.ext) {
-        curData.ext = curData.ext_list;
-      }
-      curData.ext.forEach((element) => {
-        element.type == 2 && modalData.extArray.push(element);
-      });
+      // if (!curData.ext) {
+      //   curData.ext = curData.ext_list;
+      // }
+      curData.ext &&
+        curData.ext.length > 0 &&
+        curData.ext.forEach((element) => {
+          element.type == 2 && modalData.extArray.push(element);
+        });
       modalData.extArray.forEach((element) => {
         element.id = element.ext_id;
         element.total_price = (element.price * element.num).toFixed(2);
@@ -3388,7 +3440,7 @@ export default {
         route_id_at_copy,
         then: (subAddProductData) => {
           console.log("subAddProductData :>> ", subAddProductData);
-          this.support_remark = subAddProductData[0].support_remark
+          this.support_remark = subAddProductData[0].support_remark;
           this.modalArray = subAddProductData;
           this.modalArray.map((element) => {
             // 工艺属性
@@ -3541,6 +3593,7 @@ export default {
     },
     handleMetalAdd() {
       this.tableData.push({
+        type: 1,
         is_metal: true,
         material_id: "",
         title: "",
@@ -3806,6 +3859,7 @@ export default {
         if (!item.is_metal) {
           //赋值默认工艺属性
           item.process = JSON.parse(JSON.stringify(this.bpp_list));
+          item.procedure_properties[obj.id] = row[obj.id];
           item.process.forEach((elem, index) => {
             elem.value = row.process_obj.filter(
               (v) => v.id == elem.id
@@ -3831,6 +3885,7 @@ export default {
       row.isEdit = true;
     },
     changeEditMetal(row, rowIndex, $event, scope) {
+      row.ext_id = $event.value;
       row.title = this.metalList.filter((v) => v.id == $event.value)[0].title;
       row.unit = this.metalList.filter((v) => v.id == $event.value)[0].unit;
     },
@@ -3859,10 +3914,11 @@ export default {
       }
     },
     changeEditPart(row, part_type, part_detail, e) {
-      row.isEdit = true;
-      part_detail.change_id = e.value;
-
-      this.handlePartChange(e, part_detail, row.measure, row.total_num);
+      if (e) {
+        row.isEdit = true;
+        part_detail.change_id = e.value;
+        this.handlePartChange(e, part_detail, row.measure, row.total_num);
+      }
     },
     changeEditTableData(row, rowIndex, $event, scope) {
       if ($event) {
@@ -3878,6 +3934,7 @@ export default {
           this.process_all_list = res.data.process_list;
           this.support_remark = res.data.support_remark;
           this.bpp_list.map((v) => (row[v.id] = ""));
+          this.measure_total.map((v) => (row[v.e_title] = ""));
           row.url = res.data.url;
           row.total_num = res.data.total_num || 1;
           row.ext_price = res.data.ext_price || 0;