mushencc %!s(int64=3) %!d(string=hai) anos
pai
achega
a18d5ee401

+ 9 - 0
src/routerMap/index.js

@@ -805,6 +805,15 @@ const routerMap = [
       require(["@/views/BidSystem/ProductDeOrder/infoDetail"], resolve),
   },
   {
+    path: "/cms/BidSystem/DeepeningOrder/infodetail",
+    name: "BidSystemDeepeningOrderInfoDetail", // 报价系统→生产拆单->详情/新增
+    meta: {
+      index: 3,
+    },
+    component: (resolve) =>
+      require(["@/views/BidSystem/DeepeningOrder/infoDetail"], resolve),
+  },
+  {
     path: "/cms/BidSystem/ProductDeOrder/detail",
     name: "BidSystemProductDeOrderDetail", // 报价系统→生产拆单→拆单
     meta: {

+ 1142 - 0
src/views/BidSystem/DeepeningOrder/infoDetail.vue

@@ -0,0 +1,1142 @@
+<template>
+  <div class="changeDetail">
+    <Toptitle :title="type == 3 ? '生产拆单详情' : type == 10?'深化单新增':'生产拆单新增'">
+      <slot name="titleButton">
+        <!-- <Button type="primary" style="margin-right: 10px" v-if="type == 6||type ==10"
+          >开启拆单</Button
+        > -->
+        <Button type="primary" style="margin-right: 10px" v-if="type == 3"
+          >批量下生产</Button
+        >
+        <Button
+          @click="goback()"
+          type="primary"
+          ghost
+          style="margin-right: 10px"
+          >返回</Button
+        >
+        <Button
+          type="primary"
+          style="margin-right: 10px"
+          v-if="type == 6||type == 10"
+          @click="save"
+          >保存</Button
+        >
+      </slot>
+    </Toptitle>
+    <div class="content">
+      <div class="form">
+        <Form class="form_content" :label-width="100">
+          <FormItem label="项目编号:">
+            <Input
+              v-if="type == 6||type == 10"
+              v-model="saveData.order_no"
+              placeholder="请输入项目编码"
+            />
+            <span style="width: 120px" v-else>{{ formData.order_no }}</span>
+          </FormItem>
+          <FormItem label="项目名称:">
+            <Input
+              v-if="type == 6||type == 10"
+              v-model="saveData.residential_name"
+              placeholder="请输入项目名称"
+            />
+            <span v-else>{{ formData.residential_name }}</span>
+          </FormItem>
+          <FormItem label="项目简称:">
+            <Input
+              v-if="type == 6||type == 10"
+              v-model="saveData.abbreviation"
+              placeholder="请输入项目简称"
+            />
+            <span v-else>{{ formData.abbreviation }}</span>
+          </FormItem>
+          <FormItem label="客户名称:">
+            <Select
+              filterable
+              clearable
+              v-model="saveData.custom_title"
+              @on-change="handleCustomSelect"
+              v-if="type == 6||type == 10"
+            >
+              <Option
+                v-for="(item, index) in custom_title_list"
+                :key="index"
+                :label="item.title"
+                :value="item.id"
+              ></Option>
+            </Select>
+            <span v-else>{{ formData.custom_title }}</span>
+          </FormItem>
+          <FormItem label="紧急程度:">
+            <Select clearable v-model="saveData.warning_state" v-if="type == 6||type == 10">
+              <Option
+                v-for="(item, index) in warning_state_list"
+                :key="index"
+                :label="item.title"
+                :value="item.id"
+              ></Option>
+            </Select>
+            <span v-else>{{ formData.warning_state }}</span>
+          </FormItem>
+          <FormItem label="项目定金:">
+            <Input
+              v-if="type == 6||type == 10"
+              v-model="saveData.front_money"
+              placeholder="请输入项目定金"
+            />
+            <span v-else>{{ formData.front_money }}</span>
+          </FormItem>
+          <FormItem label="详细地址:">
+            <Select
+              clearable
+              filterable
+              v-if="type == 6||type == 10"
+              class="auto-width"
+              @on-change="handleClientDetailChange"
+              v-model="saveData.custom_detail_id"
+            >
+              <Option
+                v-for="item in clientDetailList_address"
+                :label="item.address"
+                :key="item.id"
+                :value="item.id"
+              ></Option>
+            </Select>
+            <span v-else>{{ formData.address }}</span>
+          </FormItem>
+          <FormItem label="手机号:">
+            <Select
+              clearable
+              filterable
+              v-if="type == 6||type == 10"
+              v-model="saveData.custom_detail_mobile"
+            >
+              <Option
+                v-for="item in clientDetailList_mobile"
+                :label="item.mobile"
+                :key="item.id"
+                :value="item.mobile"
+              ></Option>
+            </Select>
+            <!-- <span v-else>{{ formData.mobile }}</span> -->
+            <span v-else>{{
+              clientDetailList_mobile.filter(
+                (v) => v.mobile == saveData.custom_detail_mobile
+              ).length > 0
+                ? clientDetailList_mobile.filter(
+                    (v) => v.mobile == saveData.custom_detail_mobile
+                  )[0].mobile
+                : formData.mobile
+            }}</span>
+          </FormItem>
+          <FormItem label="开始日期:">
+            <DatePicker
+              type="date"
+              v-model="saveData.start_time"
+              placeholder="年/月/日"
+              style="width: 150px"
+              v-if="type == 6||type == 10"
+            ></DatePicker>
+            <span v-else>{{ formData.start_time }}</span>
+          </FormItem>
+          <FormItem label="交付日期:">
+            <DatePicker
+              type="date"
+              v-model="saveData.end_time"
+              placeholder="年/月/日"
+              style="width: 150px"
+              v-if="type == 6||type == 10"
+            ></DatePicker>
+            <span v-else>{{ formData.end_time }}</span>
+          </FormItem>
+          <FormItem label="业务员:">
+            <Select
+              filterable
+              clearable
+              v-model="saveData.nickname"
+              v-if="type == 6||type == 10"
+            >
+              <Option
+                v-for="(item, index) in nickname_list"
+                :key="index"
+                :label="item.nickname"
+                :value="item.id"
+              ></Option>
+            </Select>
+            <span v-else>{{ formData.nickname }}</span>
+          </FormItem>
+          <FormItem label="备注:">
+            <Input
+              v-if="type == 6||type == 10"
+              v-model="saveData.remark"
+              type="textarea"
+              placeholder="请输入备注"
+            />
+            <span v-else>{{ formData.remark }}</span>
+          </FormItem>
+        </Form>
+      </div>
+      <Card style="width: 100%" class="card">
+        <div class="form_middle">
+          <Form class="form_middle_content" :label-width="100">
+            <FormItem label="区域编码:">
+              <Select
+                filterable
+                multiple
+                v-model="searchData.area_code"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in area_code"
+                  :key="index"
+                  :label="item.area_code"
+                  :value="item.area_code"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="区域名称:">
+              <Select
+                filterable
+                multiple
+                v-model="searchData.area_title"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in area_title"
+                  :key="index"
+                  :label="item.area_title"
+                  :value="item.area_title"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="户型:">
+              <Select
+                filterable
+                multiple
+                v-model="searchData.house_type"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in house_type"
+                  :key="index"
+                  :label="item.house_type"
+                  :value="item.house_type"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="楼栋:">
+              <Select
+                filterable
+                multiple
+                v-model="searchData.house"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in house"
+                  :key="index"
+                  :label="item.house"
+                  :value="item.house"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="单元:">
+              <Select
+                filterable
+                multiple
+                v-model="searchData.unit"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in unit"
+                  :key="index"
+                  :label="item.unit"
+                  :value="item.unit"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="楼层:">
+              <Select
+                filterable
+                multiple
+                v-model="searchData.layer"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in layer"
+                  :key="index"
+                  :label="item.layer"
+                  :value="item.layer"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="房号:">
+              <Select
+                filterable
+                multiple
+                v-model="searchData.number"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in number"
+                  :key="index"
+                  :label="item.number"
+                  :value="item.number"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="位置:">
+              <Select
+                filterable
+                multiple
+                v-model="searchData.position"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in position"
+                  :key="index"
+                  :label="item.position"
+                  :value="item.position"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="产品分类:">
+              <Select
+                filterable
+                multiple
+                v-model="searchData.product_type"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in product_type"
+                  :key="index"
+                  :label="item.product_type"
+                  :value="item.product_type"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="图号:">
+              <Select
+                filterable
+                multiple
+                v-model="searchData.url_number"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in url_number"
+                  :key="index"
+                  :label="item.url_number"
+                  :value="item.url_number"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="产品名称:">
+              <Select
+                filterable
+                multiple
+                v-model="searchData.product_title"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in product_title"
+                  :key="index"
+                  :label="item.product_title"
+                  :value="item.product_title"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="材质:">
+              <Select
+                filterable
+                clearable
+                v-model="searchData.material"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in material"
+                  :key="index"
+                  :label="item"
+                  :value="item"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="颜色:">
+              <Select
+                filterable
+                clearable
+                v-model="searchData.color"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in color"
+                  :key="index"
+                  :label="item"
+                  :value="item"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="工艺:">
+              <Select
+                filterable
+                clearable
+                v-model="searchData.work"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in work"
+                  :key="index"
+                  :label="item"
+                  :value="item"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="左右式:">
+              <Select
+                filterable
+                multiple
+                v-model="searchData.fashion"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in fashion"
+                  :key="index"
+                  :label="
+                    item.fashion === 0
+                      ? '无'
+                      : item.fashion === 1
+                      ? '左式'
+                      : '右式'
+                  "
+                  :value="item.fashion"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem label="拆单状态:">
+              <Select
+                filterable
+                clearable
+                v-model="searchData.state"
+                size="small"
+                style="width: 120px"
+              >
+                <Option
+                  v-for="(item, index) in state"
+                  :key="index"
+                  :label="item.state === 0 ? '未拆单' : '已拆单'"
+                  :value="item.state"
+                ></Option>
+              </Select>
+            </FormItem>
+            <FormItem>
+              <Button
+                @click="search"
+                style="margin-right: 10px"
+                type="primary"
+                ghost
+                >搜索</Button
+              >
+            </FormItem>
+          </Form>
+        </div>
+        <Tabs type="card" @on-click="getData">
+          <TabPane
+            v-for="tab in tabs"
+            :key="tab"
+            :label="tab == 1 ? '汇总' : '明细'"
+            style="margin: 0 auto"
+          >
+            <div v-show="tab === 1">
+              <Table :columns="totalColumns" :data="totalData" border>
+                <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>
+              </Table>
+              <Page
+                :page-size-opts="[10, 20, 30, 40, 100, 1000]"
+                @on-page-size-change="changeTotalSize"
+                @on-change="changeTotalPage"
+                :current="page_index"
+                show-total
+                :total="total"
+                show-sizer
+                :page-size="page_size"
+                style="text-align: center; margin-top: 10px"
+              />
+            </div>
+            <div v-show="tab === 2">
+              <Table :columns="detailColumns" :data="detailData" border>
+                <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>
+              </Table>
+              <Page
+                :page-size-opts="[10, 20, 30, 40, 100, 1000]"
+                @on-page-size-change="changeDetailSize"
+                @on-change="changeDetailPage"
+                :current="page_index"
+                show-total
+                :total="total"
+                show-sizer
+                :page-size="page_size"
+                style="text-align: center; margin-top: 10px"
+              />
+            </div>
+          </TabPane>
+          <div slot="extra" class="upload">
+            <Button
+              @click="handleTabsAdd"
+              size="small"
+              style="margin-right: 10px"
+              type="primary"
+              ghost
+              v-if="false"
+              >新增</Button
+            >
+            <Upload
+              :headers="headers"
+              name="your_file"
+              :data="uploadData"
+              :show-upload-list="false"
+              :on-error="uploadError"
+              :on-success="uploadSuccess"
+              :before-upload="handleBeforeUpload"
+              :action="$route.query.type == 10?$store.state.ip + '/api/deep_import_new':$store.state.ip + '/api/explode_save_import_new'"
+              style="margin-right: 10px"
+            >
+              <Button size="small" type="primary" ghost>导入</Button>
+            </Upload>
+          </div>
+        </Tabs>
+      </Card>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      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 },
+        {
+          title: "产品分类",
+          align: "center",
+          key: "product_type",
+          minWidth: 200,
+        },
+        {
+          title: "产品名称",
+          align: "center",
+          key: "product_title",
+          minWidth: 200,
+        },
+        { title: "图号", align: "center", key: "url_number", minWidth: 200 },
+        { title: "型号", align: "center", key: "model", minWidth: 200 },
+        { title: "数量", align: "center", key: "num", minWidth: 200 },
+        { title: "长", align: "center", key: "long", minWidth: 200 },
+        { title: "宽", align: "center", key: "wide", minWidth: 200 },
+        { title: "高", align: "center", key: "high", minWidth: 200 },
+        { 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: "fashion",
+          minWidth: 200,
+          render: (h, params) => {
+            const { row } = params;
+            return h(
+              "span",
+              {},
+              row.left_right_mode == 1
+                ? "左式"
+                : row.left_right_mode == 2
+                ? "右式"
+                : "无"
+            );
+          },
+        },
+        { title: "备注", align: "center", key: "remark", minWidth: 200 },
+        {
+          title: "拆单状态",
+          align: "center",
+          key: "state",
+          minWidth: 200,
+          render: (h, params) => {
+            const { row } = params;
+            return h("span", {}, row.state == 0 ? "未拆单" : "已拆单");
+          },
+        },
+        { title: "操作", align: "center", minWidth: 200, slot: "setSlot" },
+      ],
+      totalData: [],
+      headers: { Authorization: localStorage.getItem("token") },
+      detailColumns: [
+        { type: "selection", align: "center", width: 60 },
+        { title: "序号", align: "center", type: "index", minWidth: 200 },
+        { title: "区域编码", align: "center", key: "area_code", minWidth: 200 },
+        {
+          title: "区域名称",
+          align: "center",
+          key: "area_title",
+          minWidth: 200,
+        },
+        { title: "户型", align: "center", key: "house_type", minWidth: 200 },
+        { title: "楼栋", align: "center", key: "house", minWidth: 200 },
+        { title: "单元", align: "center", key: "unit", minWidth: 200 },
+        { title: "楼层", align: "center", key: "layer", minWidth: 200 },
+        { title: "房号", align: "center", key: "number", minWidth: 200 },
+        { title: "位置", align: "center", key: "position", minWidth: 200 },
+        {
+          title: "产品分类",
+          align: "center",
+          key: "product_type",
+          minWidth: 200,
+        },
+        {
+          title: "产品名称",
+          align: "center",
+          key: "product_title",
+          minWidth: 200,
+        },
+        {
+          title: "计量单位",
+          align: "center",
+          key: "product_unit",
+          minWidth: 200,
+        },
+        { title: "图号", align: "center", key: "url_number", minWidth: 200 },
+        { title: "型号", align: "center", key: "model", minWidth: 200 },
+        // { title: "数量", align: "center", key: "num", minWidth: 200 },
+        { title: "长", align: "center", key: "long", minWidth: 200 },
+        { title: "宽", align: "center", key: "wide", minWidth: 200 },
+        { title: "高", align: "center", key: "high", minWidth: 200 },
+        { 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: "fashion",
+          minWidth: 200,
+          render: (h, params) => {
+            const { row } = params;
+            return h(
+              "span",
+              {},
+              row.left_right_mode == 1
+                ? "左式"
+                : row.left_right_mode == 2
+                ? "右式"
+                : "无"
+            );
+          },
+        },
+        { title: "备注", align: "center", key: "remark", minWidth: 200 },
+        {
+          title: "拆单状态",
+          align: "center",
+          key: "state",
+          minWidth: 200,
+          render: (h, params) => {
+            const { row } = params;
+            return h("span", {}, row.state == 0 ? "未拆单" : "已拆单");
+          },
+        },
+        { title: "操作", align: "center", minWidth: 200, slot: "setSlot" },
+      ],
+      detailData: [],
+      saveData: {
+        abbreviation: "",
+        address: "",
+        custom_title: "",
+        end_time: "",
+        front_money: "",
+        mobile: "",
+        nickname: "",
+        order_no: "",
+        remark: "",
+        residential_name: "",
+        start_time: "",
+        warning_state: "",
+        custom_detail_mobile: "",
+        custom_detail_id: "",
+      },
+      formData: {},
+      custom_title_list: [],
+      warning_state_list: [],
+      nickname_list: [],
+      searchData: {
+        area_code: [],
+        area_title: [],
+        house_type: [],
+        product_type: [],
+        fashion: [],
+        house: [],
+        unit: [],
+        layer: [],
+        number: [],
+        position: [],
+        url_number: [],
+        product_title: [],
+        material: "",
+        color: "",
+        work: "",
+        state: "",
+      },
+      area_code: [],
+      area_title: [],
+      house_type: [],
+      house: [],
+      unit: [],
+      layer: [],
+      number: [],
+      position: [],
+      url_number: [],
+      product_title: [],
+      product_type: [],
+      fashion: [],
+      material: [],
+      color: [],
+      work: [],
+      state: [],
+      search_state: false,
+      copy_form: [],
+      type: this.$route.query.type,
+      formData: {},
+      tabs: 2,
+      total: 0,
+      page_index: 1,
+      page_size: 10,
+      save_state: false,
+      currency_tag: 0,
+      clientDetailList: [],
+      clientDetailList_respon: [],
+      clientDetailList_mobile: [],
+      clientDetailList_address: [],
+    };
+  },
+  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,
+            oa_id: this.$route.query.oa_id,
+          },
+        })
+        .then((res) => {
+          this.formData = res.data;
+        });
+      this.getData();
+    } else {
+      this.axios.get("/api/custom_list").then((res) => {
+        this.custom_title_list = res.data.data;
+      });
+      this.axios.get("/api/warning_list").then((res) => {
+        this.warning_state_list = res.data.data;
+      });
+      this.axios
+        .get("/api/employee_list", { params: { type: 2 } })
+        .then((res) => {
+          this.nickname_list = res.data;
+        });
+    }
+  },
+  methods: {
+    looks(arr) {
+      // const array = [{ img_url: img }];
+      const array = arr.map((v) => {
+        return { img_url: v };
+      });
+      this.$previewImg({
+        list: array,
+        baseUrl: this.$store.state.ip,
+        baseImgField: "img_url",
+        baseTitleField: "",
+      });
+    },
+    handleBeforeUpload() {console.log(1)},
+    handleClientDetailChange(val) {
+      val && (this.info.custom_detail_id = val);
+    },
+    handleCustomSelect(id) {
+      id &&
+        this.axios({
+          method: "get",
+          url: "/api/custom_detail",
+          params: { id },
+        }).then((res) => {
+          this.clientDetailList = res.data.list;
+          // 去重负责人
+          this.clientDetailList_respon = this.unique(res.data.list);
+          // 赋值默认负责人
+          this.saveData.custom_detail_name = this.clientDetailList_respon[0].service_name;
+          // 取出手机号码是该负责人的
+          this.clientDetailList_mobile = this.clientDetailList.filter(
+            (item) => item.service_name == this.saveData.custom_detail_name
+          );
+          // 赋值默认手机号码
+          this.saveData.custom_detail_mobile = this.clientDetailList_mobile[0].mobile;
+          // 去重手机号码
+          this.clientDetailList_mobile = this.unique(
+            this.clientDetailList_mobile
+          );
+          // 取出地址是该负责人的
+          this.clientDetailList_address = this.clientDetailList.filter(
+            (item) => item.service_name == this.saveData.custom_detail_name
+          );
+          // 赋值默认地址
+          this.saveData.custom_detail_id =
+            this.clientDetailList_respon[0].id || 0;
+          this.saveData.service_id = res.data.detail.service_id;
+          // this.$forceUpdate();
+        });
+    },
+    unique(array) {
+      let arr = JSON.parse(JSON.stringify(array));
+      for (var i = 0; i < arr.length; i++) {
+        for (var j = i + 1; j < arr.length; j++) {
+          if (arr[i].service_name == arr[j].service_name) {
+            //第一个等同于第二个,splice方法删除第二个
+            arr.splice(j, 1);
+            j--;
+          }
+        }
+      }
+      return arr;
+    },
+    handleGoPage(row) {
+      this.$router.push({
+        path: "/cms/BidSystem/ProductDeOrder/deorderdetail",
+        query: {
+          type: 3,
+          order_no: this.$route.query.order_no || this.saveData.order_no,
+          oa_id: row.oa_id,
+          orders_area_product_detail_id: row.id,
+        },
+      });
+    },
+
+    handleTabsChange(name) {
+      this.currency_tag = name;
+      this.getData(name);
+    },
+    changeTotalSize(e) {
+      this.page_size = e;
+      this.getData(0);
+    },
+    changeTotalPage(e) {
+      this.page_index = e;
+      this.getData(0);
+    },
+    changeDetailSize(e) {
+      this.page_size = e;
+      this.getData(1);
+    },
+    changeDetailPage(e) {
+      this.page_index = e;
+      this.getData(1);
+    },
+    getData(type) {
+      if (type === 1) {
+        if (this.search_state) {
+            console.log(2)
+          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,
+              ...this.searchData,
+            })
+            .then((res) => {
+              console.log(res);
+              this.detailData = res.data.data;
+              this.total = res.data.total;
+            });
+        } else {
+        //   this.$route.query.order_no &&
+        console.log(1)
+            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,
+              })
+              .then((res) => {
+                console.log(res);
+                this.detailData = 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.fashion = res.data.fashion;
+                this.house = res.data.house;
+                this.house_type = res.data.house_type;
+                this.layer = res.data.layer;
+                this.material = res.data.material;
+                this.number = res.data.number;
+                this.position = res.data.position;
+                this.product_title = res.data.product_title;
+                this.product_type = res.data.product_type;
+                this.state = res.data.state;
+                this.unit = res.data.unit;
+                this.url_number = res.data.url_number;
+                this.work = res.data.work;
+                this.copy_form = this.searchData;
+              });
+        }
+      } else if (type === 0) {
+        console.log("111 :>> ", 111);
+        this.axios
+          .post("/api/order_area_details", {
+            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,
+          })
+          .then((res) => {
+            console.log(res);
+            this.detailData = res.data.data;
+            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.fashion = res.data.fashion;
+            this.house = res.data.house;
+            this.house_type = res.data.house_type;
+            this.layer = res.data.layer;
+            this.material = res.data.material;
+            this.number = res.data.number;
+            this.position = res.data.position;
+            this.product_title = res.data.product_title;
+            this.product_type = res.data.product_type;
+            this.state = res.data.state;
+            this.unit = res.data.unit;
+            this.url_number = res.data.url_number;
+            this.work = res.data.work;
+            this.copy_form = this.searchData;
+          });
+      } else {
+        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);
+
+            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.fashion = res.data.fashion;
+            this.house = res.data.house;
+            this.house_type = res.data.house_type;
+            this.layer = res.data.layer;
+            this.material = res.data.material;
+            this.number = res.data.number;
+            this.position = res.data.position;
+            this.product_title = res.data.product_title;
+            this.product_type = res.data.product_type;
+            this.state = res.data.state;
+            this.unit = res.data.unit;
+            this.url_number = res.data.url_number;
+            this.work = res.data.work;
+            this.copy_form = this.searchData;
+          });
+      }
+    },
+    uploadError(err) {
+      this.$Message.error(err.msg || "导入失败");
+    },
+    uploadSuccess(res) {
+      if (res.code == 200) {
+        this.$Message.success("导入成功");
+        this.search_state = true;
+        this.getData(this.currency_tag);
+      } else {
+        this.$Message.warning(res.msg || "导入失败");
+      }
+      // this.page_index = 1;
+      //   this.page_size = 10;
+      //   this.axios
+      //     .post("/api/order_area_details", {
+      //       ...this.$route.query,
+      //       ...{ page_index: this.page_index, page_size: this.page_size },
+      //       order_no:this.saveData.order_no
+      //     })
+      //     .then((res) => {
+      //         console.log(res)
+      //       this.totalData = res.msg.data;
+      //       this.total = res.msg.total;
+      //       this.area_code = res.msg.area_code;
+      //       this.area_title = res.msg.area_title;
+      //       this.color = res.msg.color;
+      //       this.fashion = res.msg.fashion;
+      //       this.house = res.msg.house;
+      //       this.house_type = res.msg.house_type;
+      //       this.layer = res.msg.layer;
+      //       this.material = res.msg.material;
+      //       this.number = res.msg.number;
+      //       this.position = res.msg.position;
+      //       this.product_title = res.msg.product_title;
+      //       this.product_type = res.msg.product_type;
+      //       this.state = res.msg.state;
+      //       this.unit = res.msg.unit;
+      //       this.url_number = res.msg.url_number;
+      //       this.work = res.msg.work;
+      //       this.copy_form = this.searchData;
+      //     });
+    },
+    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;
+          });
+      }
+    },
+    goback() {
+      this.$router.go(-1);
+    },
+    handleTabsAdd() {
+      this.tabs++;
+    },
+    search() {
+      this.search_state = true;
+      this.getData(this.currency_tag);
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.changeDetail {
+  .content {
+    overflow: auto;
+    height: 680px;
+    .form_content {
+      display: flex;
+      flex-wrap: wrap;
+    }
+    .card {
+      .form_middle {
+        .form_middle_content {
+          display: flex;
+          flex-wrap: wrap;
+        }
+      }
+    }
+  }
+}
+.ivu-form-item {
+  width: 250px;
+}
+.upload {
+  display: flex;
+  justify-content: space-around;
+}
+.items {
+  width: auto;
+  height: 40px;
+  margin-bottom: 10px;
+  overflow: hidden;
+  border-radius: 5px;
+  position: relative;
+  img {
+    max-width: 40px;
+    max-height: 40px;
+  }
+}
+</style>

+ 1 - 1
src/views/BidSystem/DeepeningOrder/list.vue

@@ -406,7 +406,7 @@ export default {
     },
      gopage() {
       this.$router.push({
-        path: "/cms/BidSystem/ProductDeOrder/infodetail",
+        path: "/cms/BidSystem/DeepeningOrder/infodetail",
         query: {
           type: 10,
         },

+ 64 - 9
src/views/ProductMannage/index.vue

@@ -243,7 +243,7 @@
      :draggable='true'
      @on-ok='edit_part'
     >
-    <Form :model='formData' >
+    <Form>
       <FormItem >
         <span>默认部件:</span>
        <Select v-model="formData.part_id" style="width:140px">
@@ -309,6 +309,7 @@ export default {
   components: { KeyBoard },
   data() {
     return {
+      title:'',
       part_id:null,
       add_showModel:false,
       edit_showModel:false,
@@ -659,7 +660,7 @@ export default {
     add_part(){
       const temp_product = this.tableData.filter((item) => item.isSelect);
       const product_id = temp_product.map((item) => item.id);
-      this.addData.is_null = this.addData.is_null?0:1;
+      this.addData.is_null = this.addData.is_null?1:0;
       this.axios.post('/api/support_product_parts_add',{product_id:product_id,...this.addData}).then(res=>{
         if(res.code == 200){
           this.$Message.success(res.msg);
@@ -688,7 +689,7 @@ export default {
       const product_id = temp_product.map((item) => item.id);
       const temp_part = this.productPartList.filter((item) => item.isSelect);
       const part_id = temp_part.map((item) => item.id);
-      this.formData.is_null = this.formData.is_null?0:1;
+      this.formData.is_null = this.formData.is_null?1:0;
        let parts_id = Number(part_id.toString()) ;
        this.axios.post('/api/support_product_parts_edit',{
         product_id:product_id,
@@ -697,18 +698,42 @@ export default {
        }).then(res=>{
          if(res.code == 200){
            this.$Message.success(res.msg);
+            this.axios
+        .post("/api/support_product_get_part", {
+          type:2,
+          basic_product_id: [this.$route.query.id],
+          product_id,
+          part_id: [],
+        })
+        .then((res) => {
+          console.log(res);
+          this.productPartList = res.data;
+          this.productPartList.map((item) =>{
+            (item.isSelect = false);
+            if(item.id == this.formData.part_id){
+              item.isSelect = true;
+             this.title = item.title
+            }});
+
+        });
           this.axios
         .post("/api/support_product_get_part", {
           type:3,
           basic_product_id: [this.$route.query.id],
           product_id:product_id,
-          part_id:part_id,
+          part_id:[this.formData.part_id],
         })
         .then((res) => {
           console.log(res);
           this.changeableTableData = res.data.list;
+          if(res.data.head instanceof Array){
+            res.data.head.is_null = false;
+          }else{
+            res.data.head.is_null = res.data.head.is_null == 0?false:true;
+          }
           this.defaultPart = res.data.head;
-         
+          console.log(this.defaultPart)
+          this.defaultPart.title =this.title;
         });
       this.$forceUpdate();
          }
@@ -731,6 +756,8 @@ export default {
     del_part(){
      const temp_product = this.tableData.filter((item) => item.isSelect);
       const product_id = temp_product.map((item) => item.id);
+      const temp_part = this.productPartList.filter((item) => item.isSelect);
+      const part_id = temp_part.map((item) => item.id);
      this.axios.post('/api/support_product_parts_del',{product_id:product_id,part_id:this.part_id}).then(res=>{
        if(res.code == 200){
              this.$Message.success(res.msg);
@@ -743,7 +770,12 @@ export default {
         })
         .then((res) => {
           this.productPartList = res.data;
-          this.productPartList.map((item) => (item.isSelect = false));
+          this.productPartList.map((item) => {
+            (item.isSelect = false);
+            if(item.id == part_id){
+              item.isSelect =true;
+            }
+            });
         });
       this.$forceUpdate();
        }
@@ -849,7 +881,7 @@ export default {
           this.changeableTableData = res.data.list;
           this.defaultPart = res.data.head;
           this.formData = res.data.head;
-          this.formData.is_null = res.data.head.is_null == 0?true:false;
+          this.formData.is_null = res.data.head.is_null == 0?false:true;
           this.defaultPart.title = part.title;
           this.formData.part_id = part.id;
         });
@@ -925,8 +957,31 @@ export default {
       this.productPartList.forEach(v=>{
         v.isSelect = false;
       })
-      val.isSelect = !val.isSelect
-      this.handlePartClick(val,type);
+      val.isSelect = !val.isSelect;
+       const temp_product = this.tableData.filter((item) => item.isSelect);
+      const product_id = temp_product.map((item) => item.id);
+     
+       this.axios
+        .post("/api/support_product_get_part", {
+          type,
+          basic_product_id: [this.$route.query.id],
+          product_id,
+          part_id:[val.id],
+        })
+        .then((res) => {
+          this.formData = res.data.head;
+          this.formData.part_id = val.id;
+         this.changeableTableData = res.data.list;
+         this.defaultPart = JSON.parse(JSON.stringify(res.data.head)) ;
+         this.defaultPart.title = val.title;
+         if(res.data.head instanceof Array){
+            this.formData.is_null = false;
+         }else{
+           this.formData.is_null=res.data.head.is_null == 0?false:true;
+         }
+          this.formData.part_id = val.id;
+        });
+      this.$forceUpdate();
      
       this.edit_showModel = true;
     },